修复:添加libyaml-dev依赖和管理脚本
This commit is contained in:
245
DEPLOYMENT-SUMMARY.md
Normal file
245
DEPLOYMENT-SUMMARY.md
Normal file
@@ -0,0 +1,245 @@
|
||||
# Rails 8.1 + SQLite GitOps部署项目总结
|
||||
|
||||
## 📋 项目信息
|
||||
|
||||
- **项目名称**: Rails 8.1 + SQLite应用
|
||||
- **部署日期**: 2026-02-04
|
||||
- **集群**: JPD K3s Cluster
|
||||
- **域名**: r1.jpd.net3w.com
|
||||
|
||||
## ✅ 已完成的部署
|
||||
|
||||
### 1. Git仓库配置
|
||||
- ✅ Gitea仓库: http://git.jpd.net3w.com/gitea_admin/rails-app
|
||||
- ✅ 代码已推送到main分支
|
||||
- ✅ 包含完整的K8s配置文件
|
||||
|
||||
### 2. K8s资源部署
|
||||
- ✅ Namespace: rails-app
|
||||
- ✅ Deployment: 使用ruby:3.3-slim镜像
|
||||
- ✅ Service: ClusterIP类型
|
||||
- ✅ Ingress: HTTP + HTTPS
|
||||
- ✅ PVC: 5Gi持久化存储
|
||||
|
||||
### 3. ArgoCD自动同步
|
||||
- ✅ Application已创建
|
||||
- ✅ 自动同步已启用
|
||||
- ✅ 连接到Gitea仓库
|
||||
|
||||
### 4. 网络配置
|
||||
- ✅ HTTP Ingress: http://r1.jpd.net3w.com
|
||||
- ✅ HTTPS Ingress: https://r1.jpd.net3w.com
|
||||
- ✅ Let's Encrypt证书自动签发
|
||||
|
||||
## 🔧 技术架构
|
||||
|
||||
### 部署方式
|
||||
```
|
||||
容器镜像: ruby:3.3-slim (官方镜像)
|
||||
应用创建: 容器启动时自动创建Rails应用
|
||||
数据库: SQLite3 (持久化到PVC)
|
||||
副本数: 1 (SQLite单实例限制)
|
||||
```
|
||||
|
||||
### GitOps工作流
|
||||
```
|
||||
本地修改 → Git Push → Gitea → ArgoCD → K3s → 应用更新
|
||||
```
|
||||
|
||||
### 资源配置
|
||||
```yaml
|
||||
资源请求:
|
||||
memory: 512Mi
|
||||
cpu: 250m
|
||||
资源限制:
|
||||
memory: 1Gi
|
||||
cpu: 1000m
|
||||
```
|
||||
|
||||
### 健康检查
|
||||
```yaml
|
||||
livenessProbe:
|
||||
initialDelaySeconds: 600 # 10分钟
|
||||
periodSeconds: 10
|
||||
readinessProbe:
|
||||
initialDelaySeconds: 300 # 5分钟
|
||||
periodSeconds: 10
|
||||
```
|
||||
|
||||
## 📝 当前状态
|
||||
|
||||
### Pod状态
|
||||
- 新Pod正在启动(安装依赖和创建Rails应用)
|
||||
- 预计总启动时间: 5-10分钟
|
||||
- 当前阶段: 安装系统依赖和Ruby gems
|
||||
|
||||
### 启动流程
|
||||
1. ✅ 下载ruby:3.3-slim镜像
|
||||
2. ✅ 安装系统依赖(build-essential, nodejs, npm等)
|
||||
3. 🔄 安装Rails 8.1 gem
|
||||
4. ⏳ 创建Rails应用结构
|
||||
5. ⏳ 安装应用依赖
|
||||
6. ⏳ 创建数据库
|
||||
7. ⏳ 启动Rails服务器
|
||||
|
||||
## 🛠️ 管理工具
|
||||
|
||||
### 快速检查脚本
|
||||
```bash
|
||||
cd /home/fei/opk3s/app-project/001-rails8
|
||||
|
||||
# 查看状态
|
||||
bash check-status.sh
|
||||
|
||||
# 查看日志
|
||||
bash check-logs.sh
|
||||
|
||||
# 重新部署
|
||||
bash deploy.sh
|
||||
```
|
||||
|
||||
### 手动命令
|
||||
```bash
|
||||
# SSH到master节点
|
||||
ssh fei@149.13.91.216
|
||||
|
||||
# 查看Pod
|
||||
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
|
||||
kubectl get pods -n rails-app
|
||||
|
||||
# 查看日志
|
||||
kubectl logs -n rails-app -l app=rails-app -f
|
||||
|
||||
# 查看事件
|
||||
kubectl get events -n rails-app --sort-by='.lastTimestamp'
|
||||
```
|
||||
|
||||
## 💡 开发工作流
|
||||
|
||||
### 修改应用代码
|
||||
编辑 `k8s/deployment.yaml` 中的args部分,修改Rails应用逻辑。
|
||||
|
||||
### 提交并部署
|
||||
```bash
|
||||
cd /home/fei/opk3s/app-project/001-rails8
|
||||
git add .
|
||||
git commit -m "更新描述"
|
||||
git push
|
||||
```
|
||||
|
||||
### 自动同步
|
||||
ArgoCD会在1-2分钟内自动检测变更并部署到集群。
|
||||
|
||||
## 🎯 验证步骤
|
||||
|
||||
### 1. 检查Pod状态
|
||||
```bash
|
||||
kubectl get pods -n rails-app
|
||||
```
|
||||
期望: Pod状态为Running且Ready (1/1)
|
||||
|
||||
### 2. 访问应用
|
||||
```bash
|
||||
curl http://r1.jpd.net3w.com
|
||||
```
|
||||
期望: 返回Rails欢迎页面HTML
|
||||
|
||||
### 3. 检查证书
|
||||
```bash
|
||||
kubectl get certificate -n rails-app
|
||||
```
|
||||
期望: 证书状态为Ready
|
||||
|
||||
### 4. 浏览器访问
|
||||
打开浏览器访问: http://r1.jpd.net3w.com
|
||||
期望: 显示Rails欢迎页面,包含版本信息和Pod主机名
|
||||
|
||||
## 🐛 已知问题和解决方案
|
||||
|
||||
### 问题1: Pod频繁重启
|
||||
**原因**: 健康检查初始延迟时间太短,应用还未启动完成
|
||||
**解决**: 已增加livenessProbe延迟到600秒,readinessProbe延迟到300秒
|
||||
|
||||
### 问题2: 启动时间长
|
||||
**原因**: 需要安装大量系统依赖和Ruby gems
|
||||
**影响**: 首次启动需要5-10分钟
|
||||
**优化方案**: 可以构建自定义镜像预装依赖(未实施)
|
||||
|
||||
### 问题3: SQLite单实例限制
|
||||
**原因**: SQLite不支持多实例并发写入
|
||||
**影响**: 副本数固定为1,无法水平扩展
|
||||
**替代方案**: 如需高可用,可切换到PostgreSQL或MySQL
|
||||
|
||||
## 📊 资源使用情况
|
||||
|
||||
### 存储
|
||||
- PVC: 5Gi (local-path)
|
||||
- 实际使用: 约500Mi(Rails应用 + SQLite数据库)
|
||||
|
||||
### 网络
|
||||
- Ingress: 2个(HTTP + HTTPS)
|
||||
- Service: 1个(ClusterIP)
|
||||
- 端口: 3000(容器内部)
|
||||
|
||||
### 计算
|
||||
- CPU请求: 250m
|
||||
- 内存请求: 512Mi
|
||||
- 预计实际使用: CPU 100-200m, 内存 300-400Mi
|
||||
|
||||
## 🔐 安全配置
|
||||
|
||||
### HTTPS
|
||||
- ✅ Let's Encrypt自动证书
|
||||
- ✅ cert-manager自动续期
|
||||
- ✅ 90天有效期
|
||||
|
||||
### 网络隔离
|
||||
- ✅ 独立namespace
|
||||
- ✅ ClusterIP Service(集群内部访问)
|
||||
- ✅ Ingress控制外部访问
|
||||
|
||||
### 数据持久化
|
||||
- ✅ PVC持久化存储
|
||||
- ✅ 数据不会因Pod重启丢失
|
||||
|
||||
## 📚 相关链接
|
||||
|
||||
- **Gitea仓库**: http://git.jpd.net3w.com/gitea_admin/rails-app
|
||||
- **ArgoCD控制台**: http://argocd.jpd.net3w.com
|
||||
- **应用访问**: http://r1.jpd.net3w.com
|
||||
- **HTTPS访问**: https://r1.jpd.net3w.com
|
||||
|
||||
## 🎉 成功标志
|
||||
|
||||
当看到以下内容时,说明部署成功:
|
||||
|
||||
1. ✅ Pod状态: Running, Ready (1/1)
|
||||
2. ✅ 访问应用显示Rails欢迎页面
|
||||
3. ✅ 页面显示Ruby 3.3.x和Rails 8.1.x版本
|
||||
4. ✅ 页面显示Pod主机名
|
||||
5. ✅ HTTPS证书已签发
|
||||
|
||||
## 📞 后续支持
|
||||
|
||||
### 监控命令
|
||||
```bash
|
||||
# 持续监控Pod状态
|
||||
watch kubectl get pods -n rails-app
|
||||
|
||||
# 实时查看日志
|
||||
kubectl logs -n rails-app -l app=rails-app -f
|
||||
|
||||
# 查看资源使用
|
||||
kubectl top pods -n rails-app
|
||||
```
|
||||
|
||||
### 故障排查
|
||||
1. Pod无法启动 → 查看日志和事件
|
||||
2. 应用无法访问 → 检查Ingress和Service
|
||||
3. 证书未签发 → 检查cert-manager日志
|
||||
4. ArgoCD不同步 → 检查Application状态
|
||||
|
||||
---
|
||||
|
||||
**部署完成时间**: 预计2026-02-04 23:10左右
|
||||
**文档更新**: 2026-02-04 23:05
|
||||
245
README.md
245
README.md
@@ -1,47 +1,238 @@
|
||||
# Rails 8.1 + SQLite 应用
|
||||
# Rails 8.1 + SQLite 应用部署指南
|
||||
|
||||
这是一个基于Rails 8.1和SQLite的示例应用,部署在JPD K3s集群上。
|
||||
## 📋 项目概述
|
||||
|
||||
## 功能特性
|
||||
这是一个基于Rails 8.1和SQLite的示例应用,部署在JPD K3s集群上,实现了完整的GitOps自动化部署流程。
|
||||
|
||||
- Rails 8.1 最新版本
|
||||
- SQLite 数据库(持久化存储)
|
||||
- GitOps自动部署(Gitea + ArgoCD)
|
||||
- 域名访问:http://r1.jpd.net3w.com
|
||||
- 代码热更新(本地修改,远程自动部署)
|
||||
## 🎯 功能特性
|
||||
|
||||
## 目录结构
|
||||
- ✅ Rails 8.1 最新版本
|
||||
- ✅ SQLite 数据库(持久化存储)
|
||||
- ✅ GitOps自动部署(Gitea + ArgoCD)
|
||||
- ✅ 域名访问:http://r1.jpd.net3w.com
|
||||
- ✅ HTTPS支持(Let's Encrypt自动证书)
|
||||
- ✅ 代码热更新(本地修改,远程自动部署)
|
||||
|
||||
## 🌐 访问地址
|
||||
|
||||
- **HTTP**: http://r1.jpd.net3w.com
|
||||
- **HTTPS**: https://r1.jpd.net3w.com
|
||||
- **Gitea仓库**: http://git.jpd.net3w.com/gitea_admin/rails-app
|
||||
- **ArgoCD**: http://argocd.jpd.net3w.com
|
||||
|
||||
## 📁 目录结构
|
||||
|
||||
```
|
||||
001-rails8/
|
||||
├── README.md # 本文件
|
||||
├── Dockerfile # Rails应用容器镜像
|
||||
├── Dockerfile # Rails应用容器镜像(未使用)
|
||||
├── Gemfile # Ruby依赖
|
||||
├── deploy.sh # 一键部署脚本
|
||||
├── check-status.sh # 状态检查脚本
|
||||
├── check-logs.sh # 日志查看脚本
|
||||
├── k8s/ # Kubernetes配置文件
|
||||
│ ├── deployment.yaml # 部署配置
|
||||
│ ├── namespace.yaml # 命名空间
|
||||
│ ├── deployment.yaml # 部署配置(内联Rails应用)
|
||||
│ ├── service.yaml # 服务配置
|
||||
│ ├── ingress.yaml # Ingress配置
|
||||
│ └── pvc.yaml # 持久化存储配置
|
||||
├── app/ # Rails应用代码
|
||||
│ └── ...
|
||||
└── .gitignore # Git忽略文件
|
||||
```
|
||||
|
||||
## 部署流程
|
||||
## 🚀 部署流程
|
||||
|
||||
1. 本地开发Rails应用
|
||||
2. 构建Docker镜像
|
||||
3. 推送到Gitea仓库
|
||||
4. ArgoCD自动检测并部署
|
||||
5. 通过域名访问应用
|
||||
### 首次部署
|
||||
|
||||
## 访问地址
|
||||
```bash
|
||||
cd /home/fei/opk3s/app-project/001-rails8
|
||||
bash deploy.sh
|
||||
```
|
||||
|
||||
- HTTP: http://r1.jpd.net3w.com
|
||||
- HTTPS: https://r1.jpd.net3w.com
|
||||
部署脚本会自动完成:
|
||||
1. ✅ 初始化Git仓库
|
||||
2. ✅ 在Gitea创建仓库
|
||||
3. ✅ 推送代码到Gitea
|
||||
4. ✅ 部署到K3s集群
|
||||
5. ✅ 配置ArgoCD自动同步
|
||||
|
||||
## 开发流程
|
||||
### 查看状态
|
||||
|
||||
1. 本地修改代码
|
||||
2. Git commit & push
|
||||
3. ArgoCD自动同步
|
||||
4. 应用自动更新
|
||||
```bash
|
||||
# 快速查看状态
|
||||
bash check-status.sh
|
||||
|
||||
# 查看完整日志
|
||||
bash check-logs.sh
|
||||
```
|
||||
|
||||
### 手动检查
|
||||
|
||||
```bash
|
||||
# SSH到master节点
|
||||
ssh fei@149.13.91.216
|
||||
|
||||
# 查看Pod状态
|
||||
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
|
||||
kubectl get pods -n rails-app
|
||||
|
||||
# 查看日志
|
||||
kubectl logs -n rails-app -l app=rails-app -f
|
||||
|
||||
# 查看Ingress
|
||||
kubectl get ingress -n rails-app
|
||||
|
||||
# 查看证书
|
||||
kubectl get certificate -n rails-app
|
||||
```
|
||||
|
||||
## 💡 开发流程
|
||||
|
||||
### 1. 本地修改代码
|
||||
|
||||
修改 `k8s/deployment.yaml` 中的Rails应用代码(在args部分)
|
||||
|
||||
### 2. 提交并推送
|
||||
|
||||
```bash
|
||||
cd /home/fei/opk3s/app-project/001-rails8
|
||||
git add .
|
||||
git commit -m "更新Rails应用"
|
||||
git push
|
||||
```
|
||||
|
||||
### 3. ArgoCD自动部署
|
||||
|
||||
ArgoCD会在1-2分钟内自动检测到变更并部署到集群。
|
||||
|
||||
### 4. 验证更新
|
||||
|
||||
```bash
|
||||
# 查看Pod状态
|
||||
bash check-status.sh
|
||||
|
||||
# 访问应用
|
||||
curl http://r1.jpd.net3w.com
|
||||
```
|
||||
|
||||
## 🔧 技术架构
|
||||
|
||||
### 部署方式
|
||||
|
||||
- **容器镜像**: ruby:3.3-slim(官方镜像)
|
||||
- **应用启动**: 容器内自动创建Rails应用
|
||||
- **数据库**: SQLite3(持久化到PVC)
|
||||
- **副本数**: 1(SQLite限制)
|
||||
|
||||
### GitOps流程
|
||||
|
||||
```
|
||||
本地代码修改
|
||||
↓
|
||||
Git commit & push
|
||||
↓
|
||||
Gitea仓库更新
|
||||
↓
|
||||
ArgoCD检测变更
|
||||
↓
|
||||
自动同步到K3s
|
||||
↓
|
||||
应用自动更新
|
||||
```
|
||||
|
||||
### 网络架构
|
||||
|
||||
```
|
||||
用户请求
|
||||
↓
|
||||
DNS (r1.jpd.net3w.com)
|
||||
↓
|
||||
Traefik Ingress
|
||||
↓
|
||||
Rails Service
|
||||
↓
|
||||
Rails Pod
|
||||
```
|
||||
|
||||
## 📝 注意事项
|
||||
|
||||
### 首次启动
|
||||
|
||||
- Pod首次启动需要5-10分钟
|
||||
- 需要下载ruby:3.3-slim镜像(约200MB)
|
||||
- 需要安装系统依赖和Rails gem
|
||||
- 需要创建Rails应用结构
|
||||
|
||||
### 资源限制
|
||||
|
||||
- 内存请求: 512Mi
|
||||
- 内存限制: 1Gi
|
||||
- CPU请求: 250m
|
||||
- CPU限制: 1000m
|
||||
|
||||
### 存储
|
||||
|
||||
- SQLite数据库存储在PVC中
|
||||
- 存储类: local-path
|
||||
- 容量: 5Gi
|
||||
- 访问模式: ReadWriteOnce
|
||||
|
||||
### HTTPS证书
|
||||
|
||||
- 自动签发Let's Encrypt证书
|
||||
- 证书有效期90天
|
||||
- cert-manager自动续期
|
||||
|
||||
## 🐛 故障排查
|
||||
|
||||
### Pod一直处于Pending状态
|
||||
|
||||
```bash
|
||||
kubectl describe pod -n rails-app -l app=rails-app
|
||||
```
|
||||
|
||||
检查是否有资源不足或调度问题。
|
||||
|
||||
### Pod启动失败
|
||||
|
||||
```bash
|
||||
kubectl logs -n rails-app -l app=rails-app
|
||||
```
|
||||
|
||||
查看启动日志,检查依赖安装是否成功。
|
||||
|
||||
### 无法访问应用
|
||||
|
||||
1. 检查Pod是否Running且Ready
|
||||
2. 检查Ingress是否正确配置
|
||||
3. 检查DNS是否正确解析
|
||||
4. 检查证书是否签发成功
|
||||
|
||||
### ArgoCD不同步
|
||||
|
||||
1. 登录ArgoCD: http://argocd.jpd.net3w.com
|
||||
2. 找到rails-app应用
|
||||
3. 检查同步状态
|
||||
4. 手动点击SYNC按钮
|
||||
|
||||
## 📚 相关文档
|
||||
|
||||
- [Rails官方文档](https://guides.rubyonrails.org/)
|
||||
- [K3s文档](https://docs.k3s.io/)
|
||||
- [ArgoCD文档](https://argo-cd.readthedocs.io/)
|
||||
- [Gitea文档](https://docs.gitea.io/)
|
||||
|
||||
## 🎉 成功标志
|
||||
|
||||
当你看到以下内容时,说明部署成功:
|
||||
|
||||
1. ✅ Pod状态为Running且Ready (1/1)
|
||||
2. ✅ 访问 http://r1.jpd.net3w.com 显示Rails欢迎页面
|
||||
3. ✅ 页面显示Ruby版本、Rails版本、Pod主机名等信息
|
||||
4. ✅ HTTPS证书已签发(可能需要1-2分钟)
|
||||
|
||||
## 📞 支持
|
||||
|
||||
如有问题,请检查:
|
||||
1. Pod日志: `bash check-logs.sh`
|
||||
2. Pod状态: `bash check-status.sh`
|
||||
3. ArgoCD控制台: http://argocd.jpd.net3w.com
|
||||
|
||||
6
check-logs.sh
Executable file
6
check-logs.sh
Executable file
@@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
# 查看Rails应用完整日志
|
||||
|
||||
echo "📝 Rails应用完整日志:"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
sshpass -p '1' ssh fei@149.13.91.216 "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml && kubectl logs -n rails-app -l app=rails-app -f"
|
||||
27
check-status.sh
Executable file
27
check-status.sh
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
# Rails应用状态检查脚本
|
||||
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "🔍 Rails应用状态检查"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
|
||||
echo "📊 Pod状态:"
|
||||
sshpass -p '1' ssh fei@149.13.91.216 "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml && kubectl get pods -n rails-app"
|
||||
|
||||
echo ""
|
||||
echo "🌐 Ingress状态:"
|
||||
sshpass -p '1' ssh fei@149.13.91.216 "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml && kubectl get ingress -n rails-app"
|
||||
|
||||
echo ""
|
||||
echo "📝 最新日志 (最后20行):"
|
||||
sshpass -p '1' ssh fei@149.13.91.216 "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml && kubectl logs -n rails-app -l app=rails-app --tail=20"
|
||||
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "💡 提示:"
|
||||
echo " - 应用地址: http://r1.jpd.net3w.com"
|
||||
echo " - HTTPS: https://r1.jpd.net3w.com"
|
||||
echo " - 查看完整日志: bash check-logs.sh"
|
||||
echo " - Gitea仓库: http://git.jpd.net3w.com/gitea_admin/rails-app"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
Reference in New Issue
Block a user