feat: deploy-ai.sh 新增 monitor 部署支持 + .env.prod 模板处理

- 新增菜单选项 10) monitor.tlyq.ai
- monitor 使用 build_on_server + nginx 部署
- OIDC 环境变量注入支持 monitor
- 部署时从 .env.prod 模板补充缺失变量
- SSO 部署改用 configuration.prod.yml
This commit is contained in:
aiyimickey 2026-07-03 12:12:31 +08:00
parent f1ababe5be
commit 2bda66bd64
1 changed files with 44 additions and 9 deletions

View File

@ -69,8 +69,9 @@ echo " 6) oa.tlyq.ai (OA 统一门户 — 含 nginx 配置)"
echo " 7) ldap.tlyq.ai (LLDAP 用户目录服务)" echo " 7) ldap.tlyq.ai (LLDAP 用户目录服务)"
echo " 8) git.tlyq.ai (Gitea 代码托管)" echo " 8) git.tlyq.ai (Gitea 代码托管)"
echo " 9) sso.tlyq.ai (Authelia SSO — 统一认证中心)" echo " 9) sso.tlyq.ai (Authelia SSO — 统一认证中心)"
echo " 10) monitor.tlyq.ai (告警监控中心)"
echo "" echo ""
printf "请输入编号 (1/2/3/4/5/6/7/8/9): " printf "请输入编号 (1/2/3/4/5/6/7/8/9/10): "
read choice read choice
SITE=""; LOCAL_DIR=""; REMOTE_DIR=""; CONTAINER="" 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" ;; 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" ;; 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" ;; 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 ;; *) echo "无效选择"; exit 1 ;;
esac esac
@ -174,7 +176,10 @@ deploy_sso() {
# 1. 上传 docker-compose.yml 和 config/ # 1. 上传 docker-compose.yml 和 config/
log "上传配置文件..." log "上传配置文件..."
scp /Users/niuniu/programs/docker/sso-ai/docker-compose.yml txjp:/root/docker/sso-ai/docker-compose.yml 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. 首次部署:生成密钥 # 2. 首次部署:生成密钥
ssh txjp "if [ ! -f /root/docker/sso-ai/.env ]; then ssh txjp "if [ ! -f /root/docker/sso-ai/.env ]; then
@ -196,11 +201,11 @@ ENVEOF
echo '已存在 .env跳过密钥生成' echo '已存在 .env跳过密钥生成'
fi" fi"
# 3. 注入 LDAP 密码到 configuration.yml # 3. 注入 LDAP 密码到 configuration.yml(占位符 → 真实密码)
log "注入 LDAP 密码..." log "注入 LDAP 密码..."
ssh txjp "cd /root/docker/sso-ai && \ ssh txjp "cd /root/docker/sso-ai && \
LLDAP_PASSWORD=\$(docker exec lldap printenv LLDAP_ADMIN_PASSWORD) && \ 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 # 4. 部署 nginx sso-ai.conf
log "部署 nginx 配置..." 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 \ && 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" || echo 'AUTHELIA_URL=https://sso.tlyq.ai' >> $REMOTE_DIR/.env"
# OIDC 环境变量配置oa/assets/issue 站点) # OIDC 环境变量配置oa/assets/issue/monitor 站点)
if [[ "$SITE" == "oa" || "$SITE" == "assets" || "$SITE" == "issue" ]]; then if [[ "$SITE" == "oa" || "$SITE" == "assets" || "$SITE" == "issue" || "$SITE" == "monitor" ]]; then
# 根据站点设置 OIDC 变量 # 根据站点设置 OIDC 变量
case "$SITE" in case "$SITE" in
oa) OIDC_ID="oa-oidc"; OIDC_URI="https://oa.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" ;; 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" ;; 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 esac
# 确保 OIDC_CLIENT_ID 已设置 # 确保 OIDC_CLIENT_ID 已设置
@ -432,6 +438,29 @@ build_on_server() {
fi fi
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 中的生产配置) # 清理可能被上传的本地环境变量文件(.env.local 等会覆盖 .env 中的生产配置)
ssh txjp "rm -f $REMOTE_DIR/.env.local $REMOTE_DIR/.env.development $REMOTE_DIR/.env.production 2>/dev/null; echo '已清理本地环境文件'" 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 已部署" ;; log "Gitea 已部署" ;;
sso) sso)
deploy_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 esac
# ============================================================ # ============================================================
@ -646,6 +680,7 @@ case "$SITE" in
ldap) URL="http://localhost:6178" ;; ldap) URL="http://localhost:6178" ;;
gitea) URL="https://git.tlyq.ai" ;; gitea) URL="https://git.tlyq.ai" ;;
sso) URL="https://sso.tlyq.ai" ;; sso) URL="https://sso.tlyq.ai" ;;
monitor) URL="https://monitor.tlyq.ai" ;;
esac esac
if [[ "$SITE" == "ldap" ]]; then if [[ "$SITE" == "ldap" ]]; then