Files
rails-app/README.md

239 lines
4.9 KiB
Markdown
Raw 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 应用部署指南
## 📋 项目概述
这是一个基于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
- **副本数**: 1SQLite限制
### 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