joytou commited on
Commit
d3c0495
·
verified ·
1 Parent(s): 8fd9f35

Create deploy.sh

Browse files
Files changed (1) hide show
  1. deploy.sh +119 -0
deploy.sh ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ # 部署脚本 - 在生产服务器上部署应用
4
+ # 使用方法: ./deploy.sh [port]
5
+
6
+ # 设置错误时退出
7
+ set -e
8
+
9
+ # 定义日志函数
10
+ log_info() {
11
+ echo "$(date +"%Y-%m-%d %H:%M:%S") [INFO] $1"
12
+ }
13
+
14
+ log_warn() {
15
+ echo "$(date +"%Y-%m-%d %H:%M:%S") [WARN] $1"
16
+ }
17
+
18
+ log_error() {
19
+ echo "$(date +"%Y-%m-%d %H:%M:%S") [ERROR] $1"
20
+ }
21
+
22
+ # 获取脚本所在目录的绝对路径
23
+ SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
24
+ cd "$SCRIPT_DIR"
25
+
26
+ # 获取上一层目录的路径
27
+ PARENT_DIR=$(dirname "$SCRIPT_DIR")
28
+
29
+ # 复制配置文件
30
+ if [ -f "$PARENT_DIR/config.ini" ]; then
31
+ log_info "Found config.ini in parent directory, copying to project directory..."
32
+ cp "$PARENT_DIR/config.ini" "$SCRIPT_DIR/config.ini"
33
+ else
34
+ log_warn "No config.ini found in parent directory: $PARENT_DIR/config.ini"
35
+ if [ -f "$SCRIPT_DIR/config.template.ini" ]; then
36
+ cp "$SCRIPT_DIR/config.template.ini" "$SCRIPT_DIR/config.ini"
37
+ log_warn "Created config.ini from template. Please update it with your settings."
38
+ exit 1
39
+ else
40
+ log_error "Neither config.ini nor config.template.ini found!"
41
+ exit 1
42
+ fi
43
+ fi
44
+
45
+ # 默认端口
46
+ PORT=${1:-8000}
47
+ HOST=${2:-0.0.0.0}
48
+
49
+ # 确保日志目录存在
50
+ mkdir -p logs
51
+
52
+ # 显示版本信息
53
+ echo "===== 部署数据分析 API 服务 ====="
54
+ python --version
55
+ echo "当前目录: $(pwd)"
56
+
57
+ # 如果存在虚拟环境,则激活
58
+ if [ -d ".venv" ]; then
59
+ echo "激活虚拟环境..."
60
+ source .venv/bin/activate
61
+ fi
62
+ # 不存在的话创建一个
63
+ if [ ! -d ".venv" ]; then
64
+ echo "创建虚拟环境..."
65
+ python -m venv .venv
66
+ source .venv/bin/activate
67
+ fi
68
+
69
+ # 拉取最新代码
70
+ echo "拉取最新代码..."
71
+ #git pull
72
+
73
+ # 安装/更新依赖
74
+ echo "安装/更新依赖..."
75
+ pip install -r requirements.txt
76
+
77
+ # 检查是否有旧的进程在运行
78
+ if [ -f "logs/server.pid" ]; then
79
+ OLD_PID=$(cat logs/server.pid)
80
+ if ps -p $OLD_PID > /dev/null; then
81
+ echo "停止旧进程 (PID: $OLD_PID)..."
82
+ kill $OLD_PID || true
83
+ sleep 2
84
+ fi
85
+ fi
86
+
87
+ # 获取当前日期和时间
88
+ DATE=$(date +"%Y-%m-%d_%H-%M-%S")
89
+
90
+ # 设置环境变量
91
+ export APP_ENV="production"
92
+ export PORT="$PORT"
93
+ export HOST="$HOST"
94
+
95
+ echo "以生产模式启动服务,主机: $HOST,端口: $PORT..."
96
+ # 启动服务
97
+ nohup python start_server.py --env production --port $PORT --host $HOST > "logs/deploy_${DATE}.log" 2>&1 &
98
+
99
+ # 保存进程 ID
100
+ PID=$!
101
+ echo $PID > logs/server.pid
102
+ echo "服务已启动,PID: $PID"
103
+ echo "日志保存在 logs 目录下"
104
+
105
+ # 等待服务启动
106
+ echo "等待服务启动..."
107
+ sleep 3
108
+
109
+ # 检查服务是否正常运行
110
+ if ps -p $PID > /dev/null; then
111
+ echo "服务启动成功!"
112
+ echo "API 可访问于: http://$HOST:$PORT"
113
+ echo "API 文档可访问于: http://$HOST:$PORT/docs"
114
+ else
115
+ echo "服务启动失败,请检查日志"
116
+ exit 1
117
+ fi
118
+
119
+ echo "部署完成!"