Files
vtuber/deploy/apply-nginx-110-live-fallback.sh

80 lines
2.9 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ENV_FILE="${SCRIPT_DIR}/.env.prod"
if [ ! -f "${ENV_FILE}" ]; then
echo "❌ 找不到 deploy/.env.prod請先建立後再執行。"
exit 1
fi
source "${ENV_FILE}"
DEPLOY_HOST="${DEPLOY_HOST:-}"
DEPLOY_USER="${DEPLOY_USER:-}"
DEPLOY_PORT="${DEPLOY_PORT:-22}"
APP_DOMAIN="${APP_DOMAIN:-vtuber.wooo.work}"
NGINX_SERVER_CONFIG="${NGINX_SERVER_CONFIG:-}"
SNIPPET_SRC="${SCRIPT_DIR}/vtuber-nginx-110-live-fallback.conf"
SNIPPET_REMOTE="/etc/nginx/snippets/vtuber-nginx-110-live-fallback.conf"
if [ -z "${DEPLOY_HOST}" ] || [ -z "${DEPLOY_USER}" ]; then
echo "❌ deploy/.env.prod 缺少 DEPLOY_HOST / DEPLOY_USER"
exit 1
fi
REMOTE="${DEPLOY_USER}@${DEPLOY_HOST}"
SSH_OPTS=(-p "${DEPLOY_PORT}")
SCP_OPTS=(-P "${DEPLOY_PORT}")
NGINX_SNIPPET_TAG="vtuber-nginx-110-live-fallback.conf"
TMP_SNIPPET="/tmp/vtuber-nginx-110-live-fallback.conf"
if [ -z "${NGINX_SERVER_CONFIG}" ]; then
echo "未指定 NGINX_SERVER_CONFIG開始自動偵測..."
NGINX_SERVER_CONFIG="$(
ssh "${SSH_OPTS[@]}" "${REMOTE}" "
if [ -f '/etc/nginx/conf.d/vtuber.wooo.conf' ]; then
echo '/etc/nginx/conf.d/vtuber.wooo.conf'
elif [ -f \"/etc/nginx/sites-available/${APP_DOMAIN}\" ]; then
echo '/etc/nginx/sites-available/${APP_DOMAIN}'
elif [ -f '/etc/nginx/sites-enabled/vtuber.wooo.work' ]; then
echo '/etc/nginx/sites-enabled/vtuber.wooo.work'
else
grep -R -l \"server_name[[:space:]]\\+.*${APP_DOMAIN}\" /etc/nginx/sites-enabled /etc/nginx/sites-available /etc/nginx/conf.d 2>/dev/null | head -n 1
fi
"
)"
fi
if [ -z "${NGINX_SERVER_CONFIG}" ]; then
echo "❌ 無法自動找出 vtuber 的 nginx 設定檔,請手動指定 NGINX_SERVER_CONFIG 環境變數"
exit 1
fi
echo "目標主機:${REMOTE}"
echo "目標網域:${APP_DOMAIN}"
echo "目標 Nginx 設定:${NGINX_SERVER_CONFIG}"
ssh "${SSH_OPTS[@]}" "${REMOTE}" "test -f '${SNIPPET_REMOTE}' && sudo chmod 644 '${SNIPPET_REMOTE}' || true"
ssh "${SSH_OPTS[@]}" "${REMOTE}" "test -f '${NGINX_SERVER_CONFIG}' || { echo 'Nginx 設定檔不存在:${NGINX_SERVER_CONFIG}' >&2; exit 1; }"
scp "${SCP_OPTS[@]}" "${SNIPPET_SRC}" "${REMOTE}:${TMP_SNIPPET}"
ssh "${SSH_OPTS[@]}" "${REMOTE}" "sudo cp '${TMP_SNIPPET}' '${SNIPPET_REMOTE}' && sudo chmod 644 '${SNIPPET_REMOTE}'"
ssh "${SSH_OPTS[@]}" "${REMOTE}" "
set -euo pipefail
sudo cp '${NGINX_SERVER_CONFIG}' '${NGINX_SERVER_CONFIG}.bak.\$(date +%F_%H%M%S)'
if ! sudo grep -q '${NGINX_SNIPPET_TAG}' '${NGINX_SERVER_CONFIG}'; then
sudo sed -i '/^[[:space:]]*server_name[[:space:]]\\+[^;]*;/ a\\
include /etc/nginx/snippets/vtuber-nginx-110-live-fallback.conf;\\
' '${NGINX_SERVER_CONFIG}'
fi
sudo nginx -t
if command -v systemctl >/dev/null 2>&1; then
sudo systemctl reload nginx
else
sudo service nginx reload
fi
"
echo "✅ 110 Nginx 404 fallback 已提交。"