Rails 8.1 + SQLite app - 2026-02-04 22:51:42

This commit is contained in:
2026-02-04 22:51:42 +08:00
commit 70f4740359
12 changed files with 699 additions and 0 deletions

138
deploy.sh Executable file
View File

@@ -0,0 +1,138 @@
#!/bin/bash
# Rails 8.1 应用部署脚本使用containerd
set -e
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🚀 Rails 8.1 应用GitOps部署"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# 配置
GITEA_URL="http://git.jpd.net3w.com"
GITEA_USER="gitea_admin"
GITEA_PASSWORD="GitAdmin@2026"
REPO_NAME="rails-app"
APP_DIR="/home/fei/opk3s/app-project/001-rails8"
SSH_PASS="1"
cd "$APP_DIR"
echo "📝 步骤 1/5: 初始化Git仓库"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
if [ ! -d .git ]; then
git init
git config user.name "Admin"
git config user.email "admin@jpd.net3w.com"
echo "✅ Git仓库初始化完成"
else
echo "✅ Git仓库已存在"
fi
echo ""
echo "📝 步骤 2/5: 在Gitea创建仓库"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
curl -X POST "${GITEA_URL}/api/v1/user/repos" \
-u "${GITEA_USER}:${GITEA_PASSWORD}" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"${REPO_NAME}\",
\"description\": \"Rails 8.1 + SQLite Application\",
\"private\": false,
\"auto_init\": false
}" 2>/dev/null && echo "✅ Gitea仓库创建成功" || echo "✅ 仓库已存在"
echo ""
echo "📝 步骤 3/5: 推送代码到Gitea"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
git remote remove origin 2>/dev/null || true
git remote add origin "http://${GITEA_USER}:${GITEA_PASSWORD}@git.jpd.net3w.com/${GITEA_USER}/${REPO_NAME}.git"
git add .
git commit -m "Rails 8.1 + SQLite app - $(date '+%Y-%m-%d %H:%M:%S')" || echo "没有新的更改"
git branch -M main
git push -u origin main --force
echo "✅ 代码已推送到Gitea"
echo ""
echo "📝 步骤 4/5: 部署到K3s集群"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# 上传K8s配置文件
sshpass -p "$SSH_PASS" ssh fei@149.13.91.216 "mkdir -p /tmp/rails-app-k8s"
sshpass -p "$SSH_PASS" scp -r k8s/* fei@149.13.91.216:/tmp/rails-app-k8s/
# 部署到K3s
sshpass -p "$SSH_PASS" ssh fei@149.13.91.216 "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml && \
kubectl create namespace rails-app --dry-run=client -o yaml | kubectl apply -f - && \
kubectl apply -f /tmp/rails-app-k8s/"
echo "✅ 应用已部署到K3s"
echo ""
echo "📝 步骤 5/5: 配置ArgoCD自动同步"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
sshpass -p "$SSH_PASS" ssh fei@149.13.91.216 "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml && \
kubectl apply -f - <<'EOF'
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: rails-app
namespace: argocd
spec:
project: default
source:
repoURL: http://gitea-http.gitea.svc.cluster.local:3000/${GITEA_USER}/${REPO_NAME}.git
targetRevision: main
path: k8s
destination:
server: https://kubernetes.default.svc
namespace: rails-app
syncPolicy:
automated:
prune: true
selfHeal: true
allowEmpty: false
syncOptions:
- CreateNamespace=true
EOF
"
echo "✅ ArgoCD自动同步已配置"
echo ""
# 检查Pod状态
echo "🔍 检查Pod状态..."
sshpass -p "$SSH_PASS" ssh fei@149.13.91.216 "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml && \
kubectl get pods -n rails-app"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🎉 部署完成!"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "📊 访问信息:"
echo " 应用地址: http://r1.jpd.net3w.com"
echo " HTTPS: https://r1.jpd.net3w.com"
echo " Gitea仓库: ${GITEA_URL}/${GITEA_USER}/${REPO_NAME}"
echo " ArgoCD: http://argocd.jpd.net3w.com"
echo ""
echo "💡 开发流程:"
echo " 1. 本地修改代码"
echo " 2. git add . && git commit -m 'your message'"
echo " 3. git push"
echo " 4. ArgoCD会自动检测并部署约1-2分钟"
echo ""
echo "🔍 查看状态:"
echo " sshpass -p '1' ssh fei@149.13.91.216 'export KUBECONFIG=/etc/rancher/k3s/k3s.yaml && kubectl get pods -n rails-app'"
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'"
echo ""
echo "📝 注意:"
echo " 由于使用公共镜像ruby:3.3-slim首次启动可能需要5-10分钟下载镜像"
echo " Pod会自动创建Rails应用并启动"
echo ""