Files
weibo_signin/setup_linux.sh

222 lines
6.0 KiB
Bash
Raw Normal View History

2026-03-17 09:41:37 +08:00
#!/bin/bash
set -e
# ============================================================
# Weibo-HotSign Linux 安装运行脚本
# 使用方式: chmod +x setup_linux.sh && ./setup_linux.sh
# ============================================================
# ===================== 请在此处填写配置 =====================
MYSQL_HOST="127.0.0.1"
MYSQL_PORT="3306"
2026-03-17 09:48:02 +08:00
MYSQL_USER="weibo"
MYSQL_PASSWORD="123456" # ← 填写你的 MySQL 密码
2026-03-17 09:41:37 +08:00
REDIS_HOST="127.0.0.1"
REDIS_PORT="6379"
2026-03-17 09:48:02 +08:00
REDIS_PASSWORD="123456" # ← 填写你的 Redis 密码(没有密码留空)
2026-03-17 09:41:37 +08:00
# 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 ---"
2026-03-17 09:48:02 +08:00
command -v redis-cli >/dev/null 2>&1 || error "未找到 redis-cli请先安装: yum install -y redis 或 apt install -y redis-tools"
2026-03-17 09:41:37 +08:00
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 数据库 ------
2026-03-17 09:41:37 +08:00
echo ""
echo "--- 验证 MySQL 数据库 ---"
if ! $MYSQL_CMD -e "USE ${DB_NAME}" >/dev/null 2>&1; then
error "数据库 ${DB_NAME} 不存在,请先运行: ./init_mysql.sh"
2026-03-17 09:41:37 +08:00
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"
2026-03-17 09:41:37 +08:00
fi
info "数据库 ${DB_NAME} 验证通过(${TABLE_COUNT} 张表)"
2026-03-17 09:41:37 +08:00
# ------ 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})"
2026-03-17 09:41:37 +08:00
echo " Redis: ${REDIS_HOST}:${REDIS_PORT}"
echo ""
echo " 首次部署请先运行: ./init_mysql.sh (root 建库建表)"
2026-03-17 09:41:37 +08:00
echo " 启动服务: ./start_linux.sh"
echo " 停止服务: ./stop_linux.sh"
echo ""