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:
parent
f1ababe5be
commit
2bda66bd64
47
deploy-ai.sh
47
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" ;;
|
||||
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
|
||||
|
|
|
|||
Loading…
Reference in New Issue