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自动证书
  • 代码热更新(本地修改,远程自动部署)

🌐 访问地址

📁 目录结构

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

部署脚本会自动完成:

  1. 初始化Git仓库
  2. 在Gitea创建仓库
  3. 推送代码到Gitea
  4. 部署到K3s集群
  5. 配置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
  • 副本数: 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状态

kubectl describe pod -n rails-app -l app=rails-app

检查是否有资源不足或调度问题。

Pod启动失败

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按钮

📚 相关文档

🎉 成功标志

当你看到以下内容时,说明部署成功:

  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
Description
Rails 8.1 + SQLite Application
Readme 47 KiB
Languages
Shell 88.6%
Ruby 6%
Dockerfile 5.4%