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