Files
qihuo/deploy.sh
T

89 lines
2.5 KiB
Bash

#!/usr/bin/env bash
# 国内期货监控系统 - Ubuntu 一键部署脚本
# 安装路径: /opt/qihuo 端口: 6600 进程守护: PM2
set -euo pipefail
APP_DIR="/opt/qihuo"
REPO_URL="https://git.bz121.com/dekun/qihuo.git"
SERVICE_NAME="qihuo"
echo "==> 检查系统依赖..."
install_pkg() {
if ! command -v "$1" &>/dev/null; then
echo "安装 $1..."
sudo apt-get install -y "$2"
fi
}
sudo apt-get update -qq
install_pkg python3 python3
install_pkg python3-venv python3-venv
install_pkg git git
if ! command -v pm2 &>/dev/null; then
echo "==> 安装 PM2..."
if command -v npm &>/dev/null; then
sudo npm install -g pm2
else
install_pkg nodejs nodejs
install_pkg npm npm
sudo npm install -g pm2
fi
fi
echo "==> 准备应用目录 ${APP_DIR}..."
sudo mkdir -p "$(dirname "$APP_DIR")"
if [ -d "$APP_DIR/.git" ]; then
echo "==> 更新已有仓库..."
cd "$APP_DIR"
git pull origin main || git pull origin master || true
else
if [ -d "$APP_DIR" ] && [ "$(ls -A "$APP_DIR" 2>/dev/null)" ]; then
echo "目录 ${APP_DIR} 已存在且非 git 仓库,请手动处理后重试"
exit 1
fi
echo "==> 克隆仓库..."
sudo git clone "$REPO_URL" "$APP_DIR"
cd "$APP_DIR"
fi
# 确保当前用户可写(若以 root 克隆则 chown)
if [ "$(id -u)" -ne 0 ]; then
sudo chown -R "$(whoami):$(whoami)" "$APP_DIR"
fi
echo "==> 创建 Python 虚拟环境..."
python3 -m venv "$APP_DIR/venv"
source "$APP_DIR/venv/bin/activate"
pip install --upgrade pip -q
pip install -r "$APP_DIR/requirements.txt" -q
if [ ! -f "$APP_DIR/.env" ]; then
echo "==> 生成 .env(请稍后编辑 SECRET_KEY 和密码)..."
cp "$APP_DIR/.env.example" "$APP_DIR/.env"
# 生成随机 SECRET_KEY
RAND_KEY=$(python3 -c "import secrets; print(secrets.token_hex(32))")
sed -i "s/change-this-to-a-random-secret-key/${RAND_KEY}/" "$APP_DIR/.env"
echo "已创建 $APP_DIR/.env ,请编辑 ADMIN_PASSWORD 后重启服务"
fi
echo "==> PM2 启动/重启服务..."
cd "$APP_DIR"
mkdir -p "$APP_DIR/logs"
pm2 delete "$SERVICE_NAME" 2>/dev/null || true
pm2 start ecosystem.config.cjs
pm2 save
echo ""
echo "=========================================="
echo " 部署完成"
echo " 目录: ${APP_DIR}"
echo " 端口: 6600"
echo " 访问: http://<服务器IP>:6600"
echo " 日志: pm2 logs ${SERVICE_NAME}"
echo " 开机自启: pm2 startup && pm2 save"
echo "=========================================="