6.4 KiB
6.4 KiB
Pager Application - 部署指南
目录
一键部署
快速开始
使用提供的部署脚本一键部署到 Kubernetes:
cd /Users/brunogao/work/codes/pingan/pager
./deploy.sh
部署脚本功能
脚本将自动完成以下步骤:
-
✅ 构建 Docker 镜像
- Backend:
pager-backend:latest - Frontend:
pager-frontend:latest
- Backend:
-
✅ 创建 Kubernetes 资源
- Namespace:
learn - PostgreSQL 数据库
- Backend 和 Frontend 部署
- Namespace:
-
✅ 等待部署完成
- 自动等待所有 Pod 就绪
-
✅ 显示部署状态
- Pods、Services、Ingress 状态
访问应用
部署成功后,访问:
- URL: https://learn.omniverseai.net
- API: https://learn.omniverseai.net/api
- WebSocket: https://learn.omniverseai.net/ws
手动部署
步骤 1: 构建镜像
# 构建 Backend
cd backend
docker build -t pager-backend:latest .
# 构建 Frontend
cd ../frontend
docker build -t pager-frontend:latest .
步骤 2: 部署到 Kubernetes
# 创建 namespace
kubectl create namespace learn
# 部署应用
kubectl apply -f k8s/learn-deployment.yaml
步骤 3: 验证部署
# 查看 Pods
kubectl get pods -n learn
# 查看 Services
kubectl get svc -n learn
# 查看 Ingress
kubectl get ingress -n learn
CI/CD 自动部署
配置 Gitea Secrets
在 Gitea 仓库设置中添加以下 Secrets:
- KUBECONFIG
将输出的 base64 字符串作为 Secret 值
cat ~/.kube/config | base64 | tr -d '\n'
触发部署
推送代码到 main 或 master 分支会自动触发 CI/CD 流程:
git add .
git commit -m "Update application"
git push origin main
CI/CD 流程
- Build - 构建 Docker 镜像
- Test - 运行单元测试
- Deploy - 部署到 Kubernetes
- Verify - 健康检查验证
查看 CI/CD 状态
访问 Gitea Actions 页面查看部署进度:
- Gitea URL:
http://<gitea-url>/pager/actions
常用命令
查看日志
# Backend 日志
kubectl logs -n learn -l app=pager-backend -f
# Frontend 日志
kubectl logs -n learn -l app=pager-frontend -f
# PostgreSQL 日志
kubectl logs -n learn -l app=pager-postgres -f
重启服务
# 重启 Backend
kubectl rollout restart deployment/pager-backend -n learn
# 重启 Frontend
kubectl rollout restart deployment/pager-frontend -n learn
扩缩容
# 扩容 Backend 到 3 个副本
kubectl scale deployment/pager-backend -n learn --replicas=3
# 扩容 Frontend 到 3 个副本
kubectl scale deployment/pager-frontend -n learn --replicas=3
访问数据库
# 进入 PostgreSQL Pod
kubectl exec -it -n learn <postgres-pod-name> -- psql -U pager_user -d pager_db
# 直接执行 SQL
kubectl exec -it -n learn <postgres-pod-name> -- psql -U pager_user -d pager_db -c "SELECT * FROM users LIMIT 10;"
故障排查
Pod 无法启动
# 查看 Pod 事件
kubectl describe pod -n learn <pod-name>
# 查看 Pod 日志
kubectl logs -n learn <pod-name>
# 查看上一次的日志(如果 Pod 重启)
kubectl logs -n learn <pod-name> --previous
镜像拉取失败
确认镜像已构建:
docker images | grep pager
如果镜像不存在,重新构建:
./deploy.sh
数据库连接失败
检查 PostgreSQL 状态:
kubectl get pods -n learn -l app=pager-postgres
kubectl logs -n learn -l app=pager-postgres
验证数据库连接:
kubectl exec -it -n learn <postgres-pod> -- psql -U pager_user -d pager_db -c "SELECT 1;"
Ingress 无法访问
检查 Ingress 配置:
kubectl describe ingress -n learn
检查 Ingress Controller:
kubectl get pods -n infra -l app.kubernetes.io/name=ingress-nginx
kubectl logs -n infra -l app.kubernetes.io/name=ingress-nginx
测试本地访问:
curl -H "Host: learn.omniverseai.net" http://localhost:31080/
配置说明
环境变量
Backend 环境变量在 K8s ConfigMap 和 Secret 中配置:
- DATABASE_URL: PostgreSQL 连接字符串
- REDIS_URL: Redis 连接字符串(如果使用)
- API_PORT: API 服务端口(默认 8888)
- ENVIRONMENT: 运行环境(production/development)
资源限制
默认资源配置:
Backend:
- Requests: 512Mi memory, 500m CPU
- Limits: 2Gi memory, 2000m CPU
Frontend:
- Requests: 128Mi memory, 100m CPU
- Limits: 512Mi memory, 500m CPU
PostgreSQL:
- Requests: 256Mi memory, 200m CPU
- Limits: 1Gi memory, 1000m CPU
健康检查
Backend 健康检查端点:
- Liveness:
/health(每 10 秒检查一次) - Readiness:
/health(每 5 秒检查一次)
更新应用
方式 1: 使用部署脚本
./deploy.sh
方式 2: 手动更新
# 构建新镜像
docker build -t pager-backend:latest backend/
docker build -t pager-frontend:latest frontend/
# 重启部署触发更新
kubectl rollout restart deployment/pager-backend -n learn
kubectl rollout restart deployment/pager-frontend -n learn
方式 3: Git Push 触发 CI/CD
git push origin main
回滚部署
# 查看部署历史
kubectl rollout history deployment/pager-backend -n learn
# 回滚到上一个版本
kubectl rollout undo deployment/pager-backend -n learn
# 回滚到特定版本
kubectl rollout undo deployment/pager-backend -n learn --to-revision=2
监控和日志
实时监控
# 监控 Pod 状态
watch kubectl get pods -n learn
# 监控资源使用
kubectl top pods -n learn
kubectl top nodes
日志聚合
# 查看所有 Backend Pods 的日志
kubectl logs -n learn -l app=pager-backend --tail=100 -f
# 查看特定时间范围的日志
kubectl logs -n learn <pod-name> --since=1h
清理资源
删除应用
# 删除应用但保留 namespace
kubectl delete -f k8s/learn-deployment.yaml
# 删除整个 namespace(包括所有资源)
kubectl delete namespace learn
清理 Docker 镜像
docker rmi pager-backend:latest
docker rmi pager-frontend:latest
支持
如有问题,请查看:
- Kubernetes 日志
- 应用日志
- Ingress Controller 日志
或联系开发团队。