Files
rails-app/deploy.sh

139 lines
4.8 KiB
Bash
Executable File
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.
#!/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 ""