103 lines
2.2 KiB
Bash
103 lines
2.2 KiB
Bash
#!/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
|