## 🚀 CI/CD 流程 ### Gitea Actions Workflow - 自动构建 Backend 和 Frontend Docker 镜像 - 推送镜像到 Harbor (192.168.1.83:8080) - 自动部署到 Kubernetes learn namespace - 支持滚动更新和健康检查 ### Docker 镜像 - **Backend**: Python 3.11 + FastAPI - 多阶段构建优化 - 健康检查探针 - 生产环境优化 - **Frontend**: Node 18 + Vue 3 + Nginx - 多阶段构建 - Gzip 压缩 - 静态资源缓存优化 ## ☸️ Kubernetes 部署 ### 基础设施 - Namespace: learn - PostgreSQL 15 (持久化存储) - ConfigMap 和 Secret 管理 - Service 和 Ingress 配置 ### 应用部署 - Backend: 2 副本,资源限制 - Frontend: 2 副本,Nginx 服务 - 健康检查:Liveness + Readiness Probes - 滚动更新策略 ### 访问配置 - Ingress: pager.learn.local - Frontend: http://pager.learn.local - API: http://pager.learn.local/api - API Docs: http://pager.learn.local/api/docs ## 📊 Grafana 监控 ### ServiceMonitor - Prometheus 自动服务发现 - Backend、Frontend、PostgreSQL 指标采集 - 30s 采集间隔 ### Dashboard 面板 - HTTP 请求速率和响应时间 - Pod CPU 和内存使用 - 数据库连接数 - 错误率 (4xx/5xx) - Pod 重启次数 - 磁盘使用率 ## 📦 新增文件 ### Docker - `backend/Dockerfile` - 后端镜像构建 - `frontend/Dockerfile` - 前端镜像构建 - `frontend/nginx.conf` - Nginx 配置 - `.dockerignore` - 构建优化 ### CI/CD - `.gitea/workflows/ci-cd.yaml` - Gitea Actions 配置 ### Kubernetes - `k8s/namespace.yaml` - Namespace 定义 - `k8s/configmap.yaml` - 应用配置 - `k8s/secret.yaml` - 敏感信息 - `k8s/postgres.yaml` - PostgreSQL 部署 - `k8s/deployment.yaml` - 应用部署 - `k8s/service.yaml` - Service 配置 - `k8s/ingress.yaml` - Ingress 路由 ### 监控 - `k8s/monitoring/servicemonitor.yaml` - Prometheus 采集 - `k8s/monitoring/grafana-dashboard.json` - Dashboard 定义 - `k8s/monitoring/install-dashboard.sh` - 安装脚本 ### 文档和脚本 - `CICD_DEPLOY.md` - 完整部署文档 - `deploy.sh` - 快速部署脚本 ## 🔧 配置要求 ### Gitea Secrets - `HARBOR_PASSWORD`: Harbor 密码 - `KUBECONFIG`: K8s 配置 (base64 编码) ### Harbor - 项目: pager - 认证: admin/admin123 ### Kubernetes - 版本: 1.24+ - Namespace: learn - Ingress Controller: nginx ## 📝 使用说明 ### 自动部署 ```bash git push origin master # 自动触发 CI/CD 流程 ``` ### 手动部署 ```bash ./deploy.sh ``` ### 查看状态 ```bash kubectl get pods -n learn kubectl logs -f -l app=pager-backend -n learn ``` ### 监控 1. 部署 ServiceMonitor: `kubectl apply -f k8s/monitoring/` 2. 安装 Grafana Dashboard: `cd k8s/monitoring && ./install-dashboard.sh` ## 🎯 特性 - ✅ 自动化 CI/CD 流程 - ✅ Docker 多阶段构建优化 - ✅ Kubernetes 高可用部署 - ✅ 滚动更新零停机 - ✅ 健康检查和自动恢复 - ✅ Prometheus + Grafana 监控 - ✅ 完整的故障排查文档 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
49 lines
1.4 KiB
Bash
Executable File
49 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# Install Grafana Dashboard for Pager Application
|
|
|
|
set -e
|
|
|
|
# Configuration
|
|
GRAFANA_URL="${GRAFANA_URL:-http://localhost:3000}"
|
|
GRAFANA_USER="${GRAFANA_USER:-admin}"
|
|
GRAFANA_PASSWORD="${GRAFANA_PASSWORD:-admin}"
|
|
DASHBOARD_FILE="grafana-dashboard.json"
|
|
|
|
echo "📊 Installing Grafana Dashboard..."
|
|
echo "Grafana URL: $GRAFANA_URL"
|
|
|
|
# Check if Grafana is accessible
|
|
if ! curl -sf "$GRAFANA_URL/api/health" > /dev/null; then
|
|
echo "❌ Error: Cannot connect to Grafana at $GRAFANA_URL"
|
|
echo "Please check if Grafana is running and accessible"
|
|
exit 1
|
|
fi
|
|
|
|
# Create or update dashboard
|
|
echo "📤 Uploading dashboard..."
|
|
RESPONSE=$(curl -s -X POST \
|
|
-H "Content-Type: application/json" \
|
|
-u "$GRAFANA_USER:$GRAFANA_PASSWORD" \
|
|
-d @"$DASHBOARD_FILE" \
|
|
"$GRAFANA_URL/api/dashboards/db")
|
|
|
|
# Check response
|
|
if echo "$RESPONSE" | grep -q '"status":"success"'; then
|
|
DASHBOARD_URL=$(echo "$RESPONSE" | grep -o '"url":"[^"]*' | cut -d'"' -f4)
|
|
echo "✅ Dashboard installed successfully!"
|
|
echo "📍 Dashboard URL: $GRAFANA_URL$DASHBOARD_URL"
|
|
else
|
|
echo "❌ Failed to install dashboard"
|
|
echo "Response: $RESPONSE"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "🎉 Grafana Dashboard setup complete!"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo "1. Open Grafana: $GRAFANA_URL"
|
|
echo "2. Login with: $GRAFANA_USER / $GRAFANA_PASSWORD"
|
|
echo "3. Navigate to the 'Pager Application Metrics' dashboard"
|
|
echo "4. Ensure Prometheus data source is configured"
|