From 4cd82543e3c63216aaf6d029ce242da0fcfd06a4 Mon Sep 17 00:00:00 2001 From: Admin Date: Wed, 4 Feb 2026 23:22:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E6=B7=BB=E5=8A=A0li?= =?UTF-8?q?byaml-dev=E4=BE=9D=E8=B5=96=E5=92=8C=E7=AE=A1=E7=90=86=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DEPLOYMENT-SUMMARY.md | 245 ++++++++++++++++++++++++++++++++++++++++++ README.md | 245 +++++++++++++++++++++++++++++++++++++----- check-logs.sh | 6 ++ check-status.sh | 27 +++++ 4 files changed, 496 insertions(+), 27 deletions(-) create mode 100644 DEPLOYMENT-SUMMARY.md create mode 100755 check-logs.sh create mode 100755 check-status.sh diff --git a/DEPLOYMENT-SUMMARY.md b/DEPLOYMENT-SUMMARY.md new file mode 100644 index 0000000..ccb6485 --- /dev/null +++ b/DEPLOYMENT-SUMMARY.md @@ -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 diff --git a/README.md b/README.md index 4d47e12..8af2d9e 100644 --- a/README.md +++ b/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 diff --git a/check-logs.sh b/check-logs.sh new file mode 100755 index 0000000..4a71dec --- /dev/null +++ b/check-logs.sh @@ -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" diff --git a/check-status.sh b/check-status.sh new file mode 100755 index 0000000..f46908d --- /dev/null +++ b/check-status.sh @@ -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 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"