318612c7a7705b3c6b9054df0c13944766727549
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忽略文件
🚀 部署流程
首次部署
cd /home/fei/opk3s/app-project/001-rails8
bash deploy.sh
部署脚本会自动完成:
- ✅ 初始化Git仓库
- ✅ 在Gitea创建仓库
- ✅ 推送代码到Gitea
- ✅ 部署到K3s集群
- ✅ 配置ArgoCD自动同步
查看状态
# 快速查看状态
bash check-status.sh
# 查看完整日志
bash check-logs.sh
手动检查
# 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. 提交并推送
cd /home/fei/opk3s/app-project/001-rails8
git add .
git commit -m "更新Rails应用"
git push
3. ArgoCD自动部署
ArgoCD会在1-2分钟内自动检测到变更并部署到集群。
4. 验证更新
# 查看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状态
kubectl describe pod -n rails-app -l app=rails-app
检查是否有资源不足或调度问题。
Pod启动失败
kubectl logs -n rails-app -l app=rails-app
查看启动日志,检查依赖安装是否成功。
无法访问应用
- 检查Pod是否Running且Ready
- 检查Ingress是否正确配置
- 检查DNS是否正确解析
- 检查证书是否签发成功
ArgoCD不同步
- 登录ArgoCD: http://argocd.jpd.net3w.com
- 找到rails-app应用
- 检查同步状态
- 手动点击SYNC按钮
📚 相关文档
🎉 成功标志
当你看到以下内容时,说明部署成功:
- ✅ Pod状态为Running且Ready (1/1)
- ✅ 访问 http://r1.jpd.net3w.com 显示Rails欢迎页面
- ✅ 页面显示Ruby版本、Rails版本、Pod主机名等信息
- ✅ HTTPS证书已签发(可能需要1-2分钟)
📞 支持
如有问题,请检查:
- Pod日志:
bash check-logs.sh - Pod状态:
bash check-status.sh - ArgoCD控制台: http://argocd.jpd.net3w.com
Description
Languages
Shell
88.6%
Ruby
6%
Dockerfile
5.4%