#!/usr/bin/env bash # 部署佛经诵读站到 fj.all8ai.top(154.8.162.18:/opt/fj/) # # 用法: # ./deploy.sh # 已配置 SSH key 时直接用 # FJ_PASS=xxx ./deploy.sh # 密码登录(需本机装 sshpass) # # 注意:不要在脚本里写死密码;密码走 FJ_PASS 环境变量。 set -euo pipefail cd "$(dirname "$0")" HOST=154.8.162.18 USER=root DEST=/opt/fj # 注意:不同步 .env —— 服务器端 PORT=8018 与本地开发配置不同,避免覆盖。 FILES=(index.html style.css app.js server.py sw.js manifest.json icon.svg icon-180.png icon-192.png icon-512.png README.md run.md) SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=15" SSH_CMD="ssh $SSH_OPTS" if [ -n "${FJ_PASS:-}" ]; then command -v sshpass >/dev/null || { echo "缺少 sshpass:brew install sshpass 或改用 SSH key"; exit 1; } SSH_CMD="sshpass -p $FJ_PASS ssh $SSH_OPTS" fi echo "==> 同步文件到 $USER@$HOST:$DEST/" rsync -az --timeout=30 -e "$SSH_CMD" "${FILES[@]}" "$USER@$HOST:$DEST/" # 经文数据目录整目录同步(删除远端多余文件,加新经只需往 sutras/ 丢 json) rsync -az --timeout=30 --delete -e "$SSH_CMD" sutras/ "$USER@$HOST:$DEST/sutras/" rsync -az --timeout=30 --delete -e "$SSH_CMD" bgm/ "$USER@$HOST:$DEST/bgm/" echo "==> 重启 fj.service" $SSH_CMD "$USER@$HOST" 'systemctl restart fj.service && sleep 1 && systemctl is-active fj.service' echo "==> 健康检查" code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 15 https://fj.all8ai.top/) echo "https://fj.all8ai.top/ -> $code" [ "$code" = "200" ] || { echo "健康检查未通过"; exit 1; } echo "部署完成"