#!/bin/bash ######################################### # AI小红书 Go 后端 - 生产环境启动脚本 # 专用于生产环境快速部署 ######################################### PORT=8070 ENV="prod" LOG_FILE="ai_xhs_prod.log" echo "=== 停止端口 $PORT 上的 Go 服务 ===" # 方法1: 查找 go run 进程 GO_PID=$(ps aux | grep "go run main.go" | grep -v grep | awk '{print $2}') if [ -n "$GO_PID" ]; then echo "找到 Go 服务进程: $GO_PID" kill -9 $GO_PID 2>/dev/null echo "Go 服务进程已终止" sleep 2 fi # 方法2: 强制清理端口 echo "强制清理端口 $PORT..." PORT_PID=$(lsof -ti:$PORT 2>/dev/null) if [ -n "$PORT_PID" ]; then echo "端口被进程 $PORT_PID 占用,正在终止..." kill -9 $PORT_PID 2>/dev/null fi sudo fuser -k $PORT/tcp 2>/dev/null || true sudo pkill -f ":$PORT" 2>/dev/null || true # 等待端口释放 sleep 3 echo "" echo "=== 环境检查 ===" # 检查 Go 环境 if ! command -v go &> /dev/null; then echo "❌ 错误: 未检测到 Go 环境" exit 1 fi echo "✅ Go 环境: $(go version)" # 检查配置文件 if [ ! -f "config/config.prod.yaml" ]; then echo "❌ 错误: 未找到生产环境配置文件" exit 1 fi echo "✅ 配置文件: config/config.prod.yaml" echo "" echo "=== 下载依赖 ===" go mod tidy echo "" echo "=== 启动生产环境服务 ===" # 设置环境变量 export APP_ENV=prod # 清空旧日志 > $LOG_FILE # 启动服务 nohup go run main.go > $LOG_FILE 2>&1 & NEW_PID=$! echo "✅ 服务已启动 (PID: $NEW_PID)" # 验证启动 echo "" echo "=== 启动验证 (等待 5 秒) ===" sleep 5 if ps -p $NEW_PID > /dev/null 2>&1; then echo "✅ Go 服务启动成功" echo "📋 日志文件: $LOG_FILE" echo "👀 查看日志: tail -f $LOG_FILE" echo "🌐 服务地址: http://localhost:$PORT" echo "🔍 进程PID: $NEW_PID" # 检查端口监听 if lsof -ti:$PORT > /dev/null 2>&1; then echo "✅ 端口 $PORT 监听正常" else echo "⚠️ 端口 $PORT 未监听,请检查日志" fi # 显示最近日志 echo "" echo "=== 最近日志 ===" tail -n 10 $LOG_FILE else echo "❌ Go 服务启动失败,请检查日志" echo "" tail -n 20 $LOG_FILE exit 1 fi