#!/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 ""