Files
rails-app/DEPLOYMENT-SUMMARY.md

246 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)
- 实际使用: 约500MiRails应用 + 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