97 lines
2.7 KiB
Bash
Executable File
97 lines
2.7 KiB
Bash
Executable File
#!/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} =================================================="
|