FA3-Datafetch/deploy.sh
2026-01-13 18:01:18 +08:00

97 lines
2.7 KiB
Bash
Executable File
Raw 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.

#!/bin/bash
# 颜色定义
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # No Color
INFO="${GREEN}[INFO]${NC}"
ERROR="${RED}[ERROR]${NC}"
# 错误处理
set -e
trap 'echo -e "${ERROR} 部署失败,请检查上方错误日志。"' ERR
echo -e "${INFO} 开始自动化部署脚本..."
# 0. 拉取最新代码
echo -e "${INFO} 0/6 拉取最新代码..."
if git pull; then
echo -e "${INFO} 代码拉取成功。"
else
echo -e "${ERROR} git pull 失败,请手动检查。"
exit 1
fi
# 1. 检查并安装系统级依赖
echo -e "${INFO} 1/6 检查并安装系统依赖..."
if command -v apt-get &> /dev/null; then
sudo apt-get update
# 基础构建工具
sudo apt-get install -y build-essential python3-dev pkg-config
# WeasyPrint 依赖
sudo apt-get install -y libpango-1.0-0 libpangoft2-1.0-0 libgdk-pixbuf-2.0-0 shared-mime-info
# Python 虚拟环境支持
sudo apt-get install -y python3-venv python3-pip
else
echo -e "${ERROR} 仅支持 Debian/Ubuntu 系统,请手动安装相关依赖。"
exit 1
fi
# 2. 安装 Node.js 依赖 (PM2)
echo -e "${INFO} 2/6 检查并安装全局 Node.js 工具..."
if ! command -v pm2 &> /dev/null; then
echo "安装 PM2..."
sudo npm install -g pm2
fi
# 3. 创建并激活 Python 虚拟环境
echo -e "${INFO} 3/6 设置 Python 虚拟环境..."
if [ ! -d ".venv" ]; then
python3 -m venv .venv
fi
source .venv/bin/activate
# 4. 安装 Python 项目依赖
echo -e "${INFO} 4/6 安装 Python 依赖..."
pip install --upgrade pip
pip install -r requirements.txt
# 5. 初始化数据库
echo -e "${INFO} 5/6 初始化数据库..."
if [ -f "create_db.py" ]; then
python create_db.py
else
echo -e "${ERROR} 找不到 create_db.py跳过数据库初始化。"
fi
# 6. 启动服务
echo -e "${INFO} 6/6 启动服务..."
# 如果是生产环境部署前端
if [ "$1" == "prod" ]; then
echo "构建前端..."
cd frontend
npm install
npm run build
cd ..
# 修改 ecosystem.config.js 指向 build (如果是临时修改建议手动操作,这里演示默认 dev 模式)
echo -e "${INFO} 请确保 ecosystem.config.js 已配置为生产模式启动 (npm start)"
else
# 开发模式
cd frontend
npm install
cd ..
fi
# 重启 PM2
pm2 delete all 2>/dev/null || true
pm2 start ecosystem.config.js
echo -e "${INFO} =================================================="
echo -e "${INFO} 部署成功!"
echo -e "${INFO} 后端 API: http://localhost:8000"
echo -e "${INFO} 前端 页面: http://localhost:3000"
echo -e "${INFO} 使用 'pm2 list' 查看服务状态"
echo -e "${INFO} 使用 'pm2 logs' 查看日志"
echo -e "${INFO} =================================================="