#!/bin/bash # MIP广告自动点击系统 - 生产环境启动脚本 # 适用于 Ubuntu/Debian 系统 set -e # 遇到错误立即退出 echo "============================================================" echo "MIP广告自动点击系统 - 生产环境启动" echo "============================================================" # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 项目目录(脚本所在目录) PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$PROJECT_DIR" echo -e "${GREEN}项目目录: $PROJECT_DIR${NC}" # 检查Python版本 echo "" echo "============================================================" echo "检查Python环境" echo "============================================================" if ! command -v python3 &> /dev/null; then echo -e "${RED}错误: 未找到 python3${NC}" echo "请安装Python 3.8+: sudo apt-get install python3 python3-pip python3-venv" exit 1 fi PYTHON_VERSION=$(python3 --version | awk '{print $2}') echo -e "${GREEN}Python版本: $PYTHON_VERSION${NC}" # 检查Python版本是否 >= 3.8 PYTHON_MAJOR=$(echo $PYTHON_VERSION | cut -d. -f1) PYTHON_MINOR=$(echo $PYTHON_VERSION | cut -d. -f2) if [ "$PYTHON_MAJOR" -lt 3 ] || ([ "$PYTHON_MAJOR" -eq 3 ] && [ "$PYTHON_MINOR" -lt 8 ]); then echo -e "${RED}错误: Python版本过低,需要 3.8+${NC}" echo "当前版本: $PYTHON_VERSION" exit 1 fi # 虚拟环境目录 VENV_DIR="$PROJECT_DIR/venv" # 创建虚拟环境(如果不存在) if [ ! -d "$VENV_DIR" ]; then echo "" echo "============================================================" echo "创建Python虚拟环境" echo "============================================================" # 检查是否安装了 venv 模块 if ! python3 -m venv --help &> /dev/null; then echo -e "${YELLOW}警告: python3-venv 未安装,正在尝试安装...${NC}" # 尝试安装(需要sudo权限) if command -v apt-get &> /dev/null; then sudo apt-get update sudo apt-get install -y python3-venv else echo -e "${RED}错误: 无法自动安装 python3-venv${NC}" echo "请手动执行: sudo apt-get install python3-venv" exit 1 fi fi echo -e "${GREEN}正在创建虚拟环境...${NC}" python3 -m venv "$VENV_DIR" echo -e "${GREEN}✓ 虚拟环境创建成功${NC}" else echo "" echo -e "${GREEN}✓ 虚拟环境已存在: $VENV_DIR${NC}" fi # 激活虚拟环境 echo "" echo "============================================================" echo "激活虚拟环境" echo "============================================================" source "$VENV_DIR/bin/activate" if [ "$VIRTUAL_ENV" != "" ]; then echo -e "${GREEN}✓ 虚拟环境已激活: $VIRTUAL_ENV${NC}" echo -e "${GREEN}Python路径: $(which python)${NC}" else echo -e "${RED}错误: 虚拟环境激活失败${NC}" exit 1 fi # 升级pip echo "" echo "============================================================" echo "升级pip" echo "============================================================" python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple # 安装依赖 echo "" echo "============================================================" echo "安装项目依赖" echo "============================================================" if [ -f "requirements.txt" ]; then echo -e "${GREEN}从 requirements.txt 安装依赖...${NC}" pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple else echo -e "${YELLOW}警告: requirements.txt 不存在${NC}" echo "手动安装核心依赖..." pip install flask playwright requests loguru apscheduler python-dotenv -i https://pypi.tuna.tsinghua.edu.cn/simple # 安装Playwright浏览器 echo "安装Playwright浏览器驱动..." playwright install chromium fi # 检查配置文件 echo "" echo "============================================================" echo "检查配置文件" echo "============================================================" if [ ! -f ".env.production" ]; then echo -e "${YELLOW}警告: .env.production 不存在${NC}" if [ -f ".env.example" ]; then echo "从 .env.example 创建配置文件..." cp .env.example .env.production echo -e "${GREEN}✓ 已创建 .env.production${NC}" echo -e "${RED}请编辑 .env.production 配置文件后重新启动${NC}" exit 1 else echo -e "${RED}错误: 缺少配置文件模板${NC}" exit 1 fi else echo -e "${GREEN}✓ 配置文件存在: .env.production${NC}" fi # 初始化数据库 echo "" echo "============================================================" echo "初始化数据库" echo "============================================================" if [ ! -f "db/ai_mip_prod.db" ]; then echo -e "${YELLOW}数据库不存在,正在初始化...${NC}" if [ -f "db/init_databases.py" ]; then # 自动创建生产数据库(跳过交互) python << EOF from pathlib import Path import sqlite3 db_dir = Path('db') db_path = db_dir / 'ai_mip_prod.db' if not db_path.exists(): print(f"创建数据库: {db_path}") # 读取并执行SQL脚本 init_sql = db_dir / 'init_sqlite.sql' if init_sql.exists(): with open(init_sql, 'r', encoding='utf-8') as f: sql_script = f.read() conn = sqlite3.connect(str(db_path)) conn.executescript(sql_script) conn.commit() conn.close() print("✓ 数据库初始化完成") else: print("错误: 找不到 init_sqlite.sql") exit(1) EOF echo -e "${GREEN}✓ 数据库初始化成功${NC}" else echo -e "${RED}错误: 找不到数据库初始化脚本${NC}" exit 1 fi else echo -e "${GREEN}✓ 数据库已存在: db/ai_mip_prod.db${NC}" fi # 创建必要的目录 echo "" echo "============================================================" echo "创建必要目录" echo "============================================================" mkdir -p logs data echo -e "${GREEN}✓ 目录创建完成${NC}" # 检查AdsPower连接 echo "" echo "============================================================" echo "检查AdsPower连接" echo "============================================================" python << EOF import os os.environ['ENV'] = 'production' try: from adspower_client import AdsPowerClient client = AdsPowerClient() profiles = client.list_profiles() if profiles: print("\033[0;32m✓ AdsPower连接正常\033[0m") profile_count = len(profiles.get('data', {}).get('list', [])) print(f"\033[0;32m Profile数量: {profile_count}\033[0m") else: print("\033[1;33m警告: AdsPower连接失败,请检查配置\033[0m") except Exception as e: print(f"\033[1;33m警告: AdsPower连接异常: {str(e)}\033[0m") print("\033[1;33m 请确保AdsPower客户端已启动\033[0m") EOF # 启动服务 echo "" echo "============================================================" echo "启动Flask服务" echo "============================================================" export ENV=production # 检查端口是否被占用 PORT=5000 if command -v netstat &> /dev/null; then if netstat -tuln | grep ":$PORT " > /dev/null; then echo -e "${YELLOW}警告: 端口 $PORT 已被占用${NC}" echo "尝试查找占用进程..." lsof -i :$PORT || true fi fi echo "" echo -e "${GREEN}启动服务中...${NC}" echo "访问地址: http://127.0.0.1:5000" echo "按 Ctrl+C 停止服务" echo "" # 使用nohup在后台运行(可选) # nohup python app.py > logs/app.log 2>&1 & # echo $! > app.pid # echo -e "${GREEN}✓ 服务已启动(后台运行)${NC}" # echo "PID: $(cat app.pid)" # echo "日志: logs/app.log" # 前台运行(便于调试) python app.py