Files
weibo_signin/setup_linux.sh

222 lines
6.0 KiB
Bash
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
set -e
# ============================================================
# Weibo-HotSign Linux 安装运行脚本
# 使用方式: chmod +x setup_linux.sh && ./setup_linux.sh
# ============================================================
# ===================== 请在此处填写配置 =====================
MYSQL_HOST="127.0.0.1"
MYSQL_PORT="3306"
MYSQL_USER="weibo"
MYSQL_PASSWORD="123456" # ← 填写你的 MySQL 密码
REDIS_HOST="127.0.0.1"
REDIS_PORT="6379"
REDIS_PASSWORD="123456" # ← 填写你的 Redis 密码(没有密码留空)
# JWT 密钥(生产环境请改成随机长字符串)
JWT_SECRET="change-me-to-a-random-string-in-production"
# Cookie 加密密钥32 字节)
COOKIE_KEY="change-me-to-a-32byte-key-prod!"
# 微信小程序(可选,暂时留空)
WX_APPID=""
WX_SECRET=""
# 服务端口
AUTH_PORT=8001
API_PORT=8000
FRONTEND_PORT=5000
# ===================== 配置结束 =====================
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
DB_NAME="weibo_hotsign"
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
info() { echo -e "${GREEN}[✓]${NC} $1"; }
warn() { echo -e "${YELLOW}[!]${NC} $1"; }
error() { echo -e "${RED}[✗]${NC} $1"; exit 1; }
echo ""
echo "========================================"
echo " Weibo-HotSign Linux 安装脚本"
echo "========================================"
echo ""
# ------ 1. 检查系统依赖 ------
echo "--- 检查系统依赖 ---"
command -v python3 >/dev/null 2>&1 || error "未找到 python3请先安装 Python 3.8+"
PYTHON_VER=$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')
info "Python $PYTHON_VER"
command -v pip3 >/dev/null 2>&1 || command -v pip >/dev/null 2>&1 || error "未找到 pip请先安装 pip"
PIP_CMD=$(command -v pip3 || command -v pip)
info "pip: $PIP_CMD"
# ------ 2. 检查 MySQL ------
echo ""
echo "--- 检查 MySQL ---"
command -v mysql >/dev/null 2>&1 || error "未找到 mysql 客户端,请先安装 mysql-client"
MYSQL_CMD="mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER}"
if [ -n "$MYSQL_PASSWORD" ]; then
MYSQL_CMD="$MYSQL_CMD -p${MYSQL_PASSWORD}"
fi
# 测试连接
if $MYSQL_CMD -e "SELECT 1" >/dev/null 2>&1; then
info "MySQL 连接成功 (${MYSQL_HOST}:${MYSQL_PORT})"
else
error "MySQL 连接失败,请检查地址、端口和密码"
fi
# ------ 3. 检查 Redis ------
echo ""
echo "--- 检查 Redis ---"
command -v redis-cli >/dev/null 2>&1 || error "未找到 redis-cli请先安装: yum install -y redis 或 apt install -y redis-tools"
REDIS_CLI="redis-cli -h ${REDIS_HOST} -p ${REDIS_PORT}"
if [ -n "$REDIS_PASSWORD" ]; then
REDIS_CLI="$REDIS_CLI -a ${REDIS_PASSWORD}"
fi
REDIS_PING=$($REDIS_CLI --no-auth-warning PING 2>/dev/null || true)
if [ "$REDIS_PING" = "PONG" ]; then
info "Redis 连接成功 (${REDIS_HOST}:${REDIS_PORT})"
else
error "Redis 连接失败,请检查地址、端口和密码"
fi
# ------ 4. 验证 MySQL 数据库 ------
echo ""
echo "--- 验证 MySQL 数据库 ---"
if ! $MYSQL_CMD -e "USE ${DB_NAME}" >/dev/null 2>&1; then
error "数据库 ${DB_NAME} 不存在,请先运行: ./init_mysql.sh"
fi
TABLE_COUNT=$($MYSQL_CMD -N -e "SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DB_NAME}'" 2>/dev/null)
if [ "$TABLE_COUNT" -lt 1 ] 2>/dev/null; then
error "数据库 ${DB_NAME} 中没有表,请先运行: ./init_mysql.sh"
fi
info "数据库 ${DB_NAME} 验证通过(${TABLE_COUNT} 张表)"
# ------ 5. 构建 Redis URL ------
if [ -n "$REDIS_PASSWORD" ]; then
REDIS_URL="redis://:${REDIS_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}/0"
else
REDIS_URL="redis://${REDIS_HOST}:${REDIS_PORT}/0"
fi
# ------ 6. 构建 MySQL URL ------
if [ -n "$MYSQL_PASSWORD" ]; then
MYSQL_URL="mysql+aiomysql://${MYSQL_USER}:${MYSQL_PASSWORD}@${MYSQL_HOST}:${MYSQL_PORT}/${DB_NAME}?charset=utf8mb4"
else
MYSQL_URL="mysql+aiomysql://${MYSQL_USER}@${MYSQL_HOST}:${MYSQL_PORT}/${DB_NAME}?charset=utf8mb4"
fi
# ------ 7. 生成 .env 文件 ------
echo ""
echo "--- 生成配置文件 ---"
cat > "${PROJECT_DIR}/backend/.env" << EOF
# ===== 由 setup_linux.sh 自动生成 =====
# MySQL
DATABASE_URL=${MYSQL_URL}
# Redis
USE_REDIS=true
REDIS_URL=${REDIS_URL}
# JWT
JWT_SECRET_KEY=${JWT_SECRET}
JWT_ALGORITHM=HS256
JWT_EXPIRATION_HOURS=24
# Cookie 加密
COOKIE_ENCRYPTION_KEY=${COOKIE_KEY}
# 微信小程序
WX_APPID=${WX_APPID}
WX_SECRET=${WX_SECRET}
# 环境
ENVIRONMENT=production
EOF
info "backend/.env 已生成"
cat > "${PROJECT_DIR}/frontend/.env" << EOF
# ===== 由 setup_linux.sh 自动生成 =====
FLASK_ENV=production
FLASK_DEBUG=False
SECRET_KEY=$(python3 -c "import secrets; print(secrets.token_hex(32))")
API_BASE_URL=http://127.0.0.1:${API_PORT}
AUTH_BASE_URL=http://127.0.0.1:${AUTH_PORT}
SESSION_TYPE=filesystem
EOF
info "frontend/.env 已生成"
# ------ 8. 创建虚拟环境并安装依赖 ------
echo ""
echo "--- 安装 Python 依赖 ---"
# 后端
if [ ! -d "${PROJECT_DIR}/backend/venv" ]; then
info "创建后端虚拟环境..."
python3 -m venv "${PROJECT_DIR}/backend/venv"
fi
source "${PROJECT_DIR}/backend/venv/bin/activate"
pip install -q --upgrade pip
pip install -q -r "${PROJECT_DIR}/backend/requirements.txt"
deactivate
info "后端依赖安装完成"
# 前端
if [ ! -d "${PROJECT_DIR}/frontend/venv" ]; then
info "创建前端虚拟环境..."
python3 -m venv "${PROJECT_DIR}/frontend/venv"
fi
source "${PROJECT_DIR}/frontend/venv/bin/activate"
pip install -q --upgrade pip
pip install -q -r "${PROJECT_DIR}/frontend/requirements.txt"
deactivate
info "前端依赖安装完成"
echo ""
echo "========================================"
echo " 安装完成!"
echo "========================================"
echo ""
echo " MySQL: ${MYSQL_HOST}:${MYSQL_PORT} / ${DB_NAME} (用户: ${MYSQL_USER})"
echo " Redis: ${REDIS_HOST}:${REDIS_PORT}"
echo ""
echo " 首次部署请先运行: ./init_mysql.sh (root 建库建表)"
echo " 启动服务: ./start_linux.sh"
echo " 停止服务: ./stop_linux.sh"
echo ""