Files

64 lines
1.6 KiB
Bash

#!/usr/bin/env bash
# 部署辅助脚本:在服务器上解压后执行 ./deploy.sh
set -euo pipefail
cd "$(dirname "$0")"
echo "==> 声转文 部署"
# 1. Node 版本检查
if ! command -v node >/dev/null 2>&1; then
echo "错误:未找到 node。请先安装 Node.js 20+"
echo " Ubuntu/Debian: curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && apt install -y nodejs"
exit 1
fi
NODE_MAJOR=$(node -p "process.versions.node.split('.')[0]")
if [ "$NODE_MAJOR" -lt 20 ]; then
echo "错误:需要 Node.js 20+,当前 $(node -v)"
exit 1
fi
echo " Node $(node -v)"
# 2. 装依赖(用 lock 文件保证可复现)
echo "==> 安装依赖"
if [ -f package-lock.json ]; then
npm ci --omit=dev
else
npm install --omit=dev
fi
# 3. 配置文件
if [ ! -f .env ]; then
cp .env.example .env
echo "==> 已生成 .env(使用默认护栏值)"
echo " 建议按机器规格调整后再启动"
else
echo "==> 复用现有 .env"
fi
# 4. 临时目录
mkdir -p tmp
# 5. 自测(确认 ffmpeg 可用、能力开关正确)
echo "==> 自测"
if npm test; then
echo " 自测通过"
else
echo "警告:自测未全部通过,请检查上面的输出"
fi
# 6. 打印启动方式
echo ""
echo "============================================"
echo "就绪。启动方式二选一:"
echo ""
echo " A) 直接运行(前台,适合 systemd 托管)"
echo " set -a; . ./.env; set +a; node server/index.js"
echo ""
echo " B) Docker"
echo " docker compose up -d --build"
echo ""
echo " 访问 http://<服务器IP>:3000"
echo " 健康检查 http://<服务器IP>:3000/api/health"
echo "============================================"