From 2bda66bd64cbd4fe0646fff0a20f72c7d3547ee6 Mon Sep 17 00:00:00 2001 From: aiyimickey <39365912+aiyimickey@users.noreply.github.com> Date: Fri, 3 Jul 2026 12:12:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20deploy-ai.sh=20=E6=96=B0=E5=A2=9E=20mon?= =?UTF-8?q?itor=20=E9=83=A8=E7=BD=B2=E6=94=AF=E6=8C=81=20+=20.env.prod=20?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增菜单选项 10) monitor.tlyq.ai - monitor 使用 build_on_server + nginx 部署 - OIDC 环境变量注入支持 monitor - 部署时从 .env.prod 模板补充缺失变量 - SSO 部署改用 configuration.prod.yml --- deploy-ai.sh | 53 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/deploy-ai.sh b/deploy-ai.sh index 8187ed6..6675168 100755 --- a/deploy-ai.sh +++ b/deploy-ai.sh @@ -69,8 +69,9 @@ echo " 6) oa.tlyq.ai (OA 统一门户 — 含 nginx 配置)" echo " 7) ldap.tlyq.ai (LLDAP 用户目录服务)" echo " 8) git.tlyq.ai (Gitea 代码托管)" echo " 9) sso.tlyq.ai (Authelia SSO — 统一认证中心)" +echo " 10) monitor.tlyq.ai (告警监控中心)" echo "" -printf "请输入编号 (1/2/3/4/5/6/7/8/9): " +printf "请输入编号 (1/2/3/4/5/6/7/8/9/10): " read choice SITE=""; LOCAL_DIR=""; REMOTE_DIR=""; CONTAINER="" @@ -84,6 +85,7 @@ case "$choice" in 7) SITE="ldap"; LOCAL_DIR="/Users/niuniu/programs/docker/ldap-ai"; REMOTE_DIR="/root/docker/ldap-ai"; CONTAINER="lldap" ;; 8) SITE="gitea"; LOCAL_DIR="/Users/niuniu/programs/docker/gitea-ai"; REMOTE_DIR="/root/docker/gitea-ai"; CONTAINER="gitea-ai" ;; 9) SITE="sso"; LOCAL_DIR="/Users/niuniu/programs/docker/sso-ai"; REMOTE_DIR="/root/docker/sso-ai"; CONTAINER="authelia" ;; + 10) SITE="monitor"; LOCAL_DIR="/Users/niuniu/programs/docker/monitor-ai"; REMOTE_DIR="/root/docker/monitor-ai"; CONTAINER="monitor-ai" ;; *) echo "无效选择"; exit 1 ;; esac @@ -174,7 +176,10 @@ deploy_sso() { # 1. 上传 docker-compose.yml 和 config/ log "上传配置文件..." scp /Users/niuniu/programs/docker/sso-ai/docker-compose.yml txjp:/root/docker/sso-ai/docker-compose.yml - scp -r /Users/niuniu/programs/docker/sso-ai/config txjp:/root/docker/sso-ai/config + # 使用生产配置(configuration.prod.yml → configuration.yml) + scp /Users/niuniu/programs/docker/sso-ai/config/authelia/configuration.prod.yml txjp:/root/docker/sso-ai/config/authelia/configuration.yml + # 上传其他 config 文件(如 notifications.yml) + scp /Users/niuniu/programs/docker/sso-ai/config/authelia/notifications.yml txjp:/root/docker/sso-ai/config/authelia/notifications.yml 2>/dev/null || true # 2. 首次部署:生成密钥 ssh txjp "if [ ! -f /root/docker/sso-ai/.env ]; then @@ -196,11 +201,11 @@ ENVEOF echo '已存在 .env,跳过密钥生成' fi" - # 3. 注入 LDAP 密码到 configuration.yml + # 3. 注入 LDAP 密码到 configuration.yml(占位符 → 真实密码) log "注入 LDAP 密码..." ssh txjp "cd /root/docker/sso-ai && \ LLDAP_PASSWORD=\$(docker exec lldap printenv LLDAP_ADMIN_PASSWORD) && \ - sed -i \"s/password: 'placeholder'/password: '\$LLDAP_PASSWORD'/\" config/authelia/configuration.yml 2>/dev/null || true" + sed -i \"s/PRODUCTION_LDAP_PASSWORD/\$LLDAP_PASSWORD/\" config/authelia/configuration.yml 2>/dev/null || true" # 4. 部署 nginx sso-ai.conf log "部署 nginx 配置..." @@ -407,13 +412,14 @@ build_on_server() { && sed -i 's|AUTHELIA_URL=.*|AUTHELIA_URL=https://sso.tlyq.ai|' $REMOTE_DIR/.env 2>/dev/null \ || echo 'AUTHELIA_URL=https://sso.tlyq.ai' >> $REMOTE_DIR/.env" - # OIDC 环境变量配置(oa/assets/issue 站点) - if [[ "$SITE" == "oa" || "$SITE" == "assets" || "$SITE" == "issue" ]]; then + # OIDC 环境变量配置(oa/assets/issue/monitor 站点) + if [[ "$SITE" == "oa" || "$SITE" == "assets" || "$SITE" == "issue" || "$SITE" == "monitor" ]]; then # 根据站点设置 OIDC 变量 case "$SITE" in - oa) OIDC_ID="oa-oidc"; OIDC_URI="https://oa.tlyq.ai/api/auth/callback" ;; - assets) OIDC_ID="assets-oidc"; OIDC_URI="https://assets.tlyq.ai/api/auth/callback" ;; - issue) OIDC_ID="issue-oidc"; OIDC_URI="https://issue.tlyq.ai/api/auth/callback" ;; + oa) OIDC_ID="oa-oidc"; OIDC_URI="https://oa.tlyq.ai/api/auth/callback" ;; + assets) OIDC_ID="assets-oidc"; OIDC_URI="https://assets.tlyq.ai/api/auth/callback" ;; + issue) OIDC_ID="issue-oidc"; OIDC_URI="https://issue.tlyq.ai/api/auth/callback" ;; + monitor) OIDC_ID="monitor-oidc"; OIDC_URI="https://monitor.tlyq.ai/api/auth/callback" ;; esac # 确保 OIDC_CLIENT_ID 已设置 @@ -432,6 +438,29 @@ build_on_server() { fi fi + # 使用 .env.prod 模板补充缺失的环境变量 + ENV_PROD="$LOCAL_DIR/config/.env.prod" + if [[ -f "$ENV_PROD" ]]; then + info "使用 .env.prod 模板补充缺失变量..." + # 上传模板到服务器临时目录 + scp "$ENV_PROD" txjp:/tmp/.env.prod.template + # 逐行检查:模板中有但 .env 中没有的变量,追加到 .env + ssh txjp "while IFS= read -r line; do + # 跳过注释和空行 + [[ \"\$line\" =~ ^#.*$ ]] && continue + [[ -z \"\$line\" ]] && continue + # 提取变量名 + varname=\"\$(echo \"\$line\" | cut -d= -f1)\" + # 如果 .env 中没有此变量,追加(跳过占位符值) + if ! grep -q \"^\${varname}=\" $REMOTE_DIR/.env 2>/dev/null; then + # 跳过 __PLACEHOLDER__ 格式的值(需要真实密钥) + if [[ ! \"\$line\" =~ __.*__ ]]; then + echo \"\$line\" >> $REMOTE_DIR/.env + fi + fi + done < /tmp/.env.prod.template && rm -f /tmp/.env.prod.template" + fi + # 清理可能被上传的本地环境变量文件(.env.local 等会覆盖 .env 中的生产配置) ssh txjp "rm -f $REMOTE_DIR/.env.local $REMOTE_DIR/.env.development $REMOTE_DIR/.env.production 2>/dev/null; echo '已清理本地环境文件'" @@ -625,6 +654,11 @@ CHECKEOF log "Gitea 已部署" ;; sso) deploy_sso ;; + monitor) + build_on_server || exit 1 + info "部署 nginx 配置..." + ssh txjp "cp $REMOTE_DIR/../nginx-proxy-ai/conf.d/monitor-ai.conf /root/docker/nginx-proxy-ai/conf.d/ 2>/dev/null || true + docker exec nginx-ai nginx -s reload 2>/dev/null || true" ;; esac # ============================================================ @@ -646,6 +680,7 @@ case "$SITE" in ldap) URL="http://localhost:6178" ;; gitea) URL="https://git.tlyq.ai" ;; sso) URL="https://sso.tlyq.ai" ;; + monitor) URL="https://monitor.tlyq.ai" ;; esac if [[ "$SITE" == "ldap" ]]; then