# Rails 8.1 + SQLite 应用部署指南 ## 📋 项目概述 这是一个基于Rails 8.1和SQLite的示例应用,部署在JPD K3s集群上,实现了完整的GitOps自动化部署流程。 ## 🎯 功能特性 - ✅ 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应用容器镜像(未使用) ├── Gemfile # Ruby依赖 ├── deploy.sh # 一键部署脚本 ├── check-status.sh # 状态检查脚本 ├── check-logs.sh # 日志查看脚本 ├── k8s/ # Kubernetes配置文件 │ ├── namespace.yaml # 命名空间 │ ├── deployment.yaml # 部署配置(内联Rails应用) │ ├── service.yaml # 服务配置 │ ├── ingress.yaml # Ingress配置 │ └── pvc.yaml # 持久化存储配置 └── .gitignore # Git忽略文件 ``` ## 🚀 部署流程 ### 首次部署 ```bash cd /home/fei/opk3s/app-project/001-rails8 bash deploy.sh ``` 部署脚本会自动完成: 1. ✅ 初始化Git仓库 2. ✅ 在Gitea创建仓库 3. ✅ 推送代码到Gitea 4. ✅ 部署到K3s集群 5. ✅ 配置ArgoCD自动同步 ### 查看状态 ```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