huanbao commited on
Commit
5459210
·
verified ·
1 Parent(s): 5c0c7d7

Create start.sh

Browse files
Files changed (1) hide show
  1. start.sh +190 -0
start.sh ADDED
@@ -0,0 +1,190 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/sh
2
+ set -e
3
+
4
+ # 防止重复执行(增强锁机制)
5
+ LOCK_FILE=/tmp/pansou_start.lock
6
+ if [ -f "$LOCK_FILE" ]; then
7
+ LOCK_PID=$(cat "$LOCK_FILE")
8
+ if ps | grep -q "[${LOCK_PID}]"; then
9
+ echo "错误: start.sh已在运行(锁文件 $LOCK_FILE,PID $LOCK_PID)"
10
+ exit 1
11
+ else
12
+ echo "警告: 发现旧锁文件 $LOCK_FILE,已移除"
13
+ rm -f "$LOCK_FILE"
14
+ fi
15
+ fi
16
+ echo $$ > "$LOCK_FILE"
17
+ trap 'rm -f $LOCK_FILE' EXIT
18
+
19
+ # 默认值
20
+ export PANSOU_PORT=${PANSOU_PORT:-8888}
21
+ export PANSOU_HOST=${PANSOU_HOST:-127.0.0.1}
22
+ export DOMAIN=${DOMAIN:-localhost}
23
+
24
+ echo "正在启动PanSou服务,配置信息如下:"
25
+ echo "- 后端地址: ${PANSOU_HOST}:${PANSOU_PORT}"
26
+ echo "- 域名: ${DOMAIN}"
27
+ echo "- 前端目录: /app/frontend/dist"
28
+
29
+ # 创建必要目录
30
+ mkdir -p /data/pansou_data /data/pansou_logs /tmp/nginx_logs /tmp/nginx-config /tmp/nginx-run \
31
+ /tmp/nginx-tmp/client_temp /tmp/nginx-tmp/proxy_temp /tmp/nginx-tmp/fastcgi_temp \
32
+ /tmp/nginx-tmp/uwsgi_temp /tmp/nginx-tmp/scgi_temp || {
33
+ echo "错误: 无法创建必要目录"
34
+ exit 1
35
+ }
36
+
37
+ # 日志轮转
38
+ LOG_FILE=/data/pansou_logs/pansou.log
39
+ MAX_SIZE=$((10 * 1024 * 1024)) # 10MB
40
+ if [ -f "$LOG_FILE" ]; then
41
+ SIZE=$(stat -f %z "$LOG_FILE" 2>/dev/null || stat -c %s "$LOG_FILE")
42
+ if [ "$SIZE" -gt "$MAX_SIZE" ]; then
43
+ echo "日志文件大小 ($SIZE bytes) 超过限制 ($MAX_SIZE bytes),执行轮转"
44
+ mv "$LOG_FILE" "${LOG_FILE}.$(date +%F-%H%M%S)"
45
+ find /data/pansou_logs -name "pansou.log.*" -mtime +7 -delete
46
+ fi
47
+ fi
48
+
49
+ # 生成Nginx配置
50
+ cat > /tmp/nginx-config/nginx.conf << EOF
51
+ worker_processes auto;
52
+ error_log /dev/stderr error;
53
+ pid /tmp/nginx-run/nginx.pid;
54
+ events { worker_connections 1024; }
55
+ http {
56
+ client_body_temp_path /tmp/nginx-tmp/client_temp;
57
+ proxy_temp_path /tmp/nginx-tmp/proxy_temp;
58
+ fastcgi_temp_path /tmp/nginx-tmp/fastcgi_temp;
59
+ uwsgi_temp_path /tmp/nginx-tmp/uwsgi_temp;
60
+ scgi_temp_path /tmp/nginx-tmp/scgi_temp;
61
+ include /etc/nginx/mime.types;
62
+ default_type application/octet-stream;
63
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" '
64
+ '$status $body_bytes_sent "$http_referer" '
65
+ '"$http_user_agent" "$http_x_forwarded_for"';
66
+ access_log /dev/stdout main;
67
+ sendfile on;
68
+ tcp_nopush on;
69
+ tcp_nodelay on;
70
+ keepalive_timeout 65;
71
+ types_hash_max_size 2048;
72
+ client_max_body_size 20M;
73
+ server {
74
+ listen 7860;
75
+ server_name ${DOMAIN};
76
+ location = /api/health {
77
+ proxy_pass http://${PANSOU_HOST}:${PANSOU_PORT}/api/health;
78
+ proxy_set_header Host \$host;
79
+ proxy_set_header X-Real-IP \$remote_addr;
80
+ proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
81
+ proxy_set_header X-Forwarded-Proto \$scheme;
82
+ proxy_connect_timeout 5s;
83
+ proxy_read_timeout 10s;
84
+ proxy_send_timeout 5s;
85
+ proxy_buffering off;
86
+ }
87
+ location = /api/search {
88
+ proxy_pass http://${PANSOU_HOST}:${PANSOU_PORT}/api/search;
89
+ proxy_set_header Host \$host;
90
+ proxy_set_header X-Real-IP \$remote_addr;
91
+ proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
92
+ proxy_set_header X-Forwarded-Proto \$scheme;
93
+ proxy_set_header Referer \$http_referer;
94
+ proxy_connect_timeout 15s;
95
+ proxy_read_timeout 60s;
96
+ proxy_send_timeout 15s;
97
+ proxy_buffering off;
98
+ }
99
+ location /api/ {
100
+ proxy_pass http://${PANSOU_HOST}:${PANSOU_PORT}/api/;
101
+ proxy_set_header Host \$host;
102
+ proxy_set_header X-Real-IP \$remote_addr;
103
+ proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
104
+ proxy_set_header X-Forwarded-Proto \$scheme;
105
+ proxy_set_header Referer \$http_referer;
106
+ proxy_buffering off;
107
+ }
108
+ location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
109
+ root /app/frontend/dist;
110
+ expires 30d;
111
+ add_header Cache-Control "public, max-age=2592000";
112
+ add_header X-Content-Type-Options nosniff;
113
+ }
114
+ location / {
115
+ root /app/frontend/dist;
116
+ index index.html;
117
+ try_files \$uri \$uri/ /index.html;
118
+ location ~* \.html$ {
119
+ add_header Cache-Control "no-cache, no-store, must-revalidate";
120
+ add_header Pragma "no-cache";
121
+ add_header Expires "0";
122
+ }
123
+ }
124
+ }
125
+ }
126
+ EOF
127
+ echo "Nginx配置已生成"
128
+
129
+ # 启动pansou并过滤空日志
130
+ cd /app
131
+ echo "启动pansou..."
132
+ /app/pansou 2>&1 | grep -v '\[\] "" *"" *"" *""' > "$LOG_FILE" &
133
+ PANSOU_PID=$!
134
+ echo "pansou进程ID: $PANSOU_PID"
135
+ if ps | grep -q "[${PANSOU_PID}]"; then
136
+ echo "pansou进程正在运行"
137
+ else
138
+ echo "错误: pansou进程未能启动"
139
+ sleep 2
140
+ if [ -f "$LOG_FILE" ]; then
141
+ echo "pansou日志内容(前9行):"
142
+ head -n 9 "$LOG_FILE"
143
+ else
144
+ echo "错误: 日志文件未生成"
145
+ fi
146
+ exit 1
147
+ fi
148
+
149
+ # 等待pansou日志初始化
150
+ sleep 5
151
+ if [ -f "$LOG_FILE" ]; then
152
+ echo "日志文件已生成,内容如下(前9行):"
153
+ head -n 9 "$LOG_FILE"
154
+ fi
155
+
156
+ # 等待pansou服务启动
157
+ echo "等待后端服务启动..."
158
+ for i in $(seq 1 30); do
159
+ if curl -f http://${PANSOU_HOST}:${PANSOU_PORT}/api/health >/dev/null 2>&1; then
160
+ echo "后端服务启动成功"
161
+ break
162
+ fi
163
+ echo "等待后端服务... ($i/30)"
164
+ sleep 1
165
+ done
166
+
167
+ # 检查后端服务
168
+ if ! curl -f http://${PANSOU_HOST}:${PANSOU_PORT}/api/health >/dev/null 2>&1; then
169
+ echo "错误: 后端服务启动失败"
170
+ if [ -f "$LOG_FILE" ]; then
171
+ echo "pansou日志内容(前20行):"
172
+ head -n 20 "$LOG_FILE"
173
+ fi
174
+ exit 1
175
+ fi
176
+
177
+ # 启动Nginx
178
+ echo "启动Nginx服务..."
179
+ nginx -t -c /tmp/nginx-config/nginx.conf || {
180
+ echo "错误: Nginx配置测试失败"
181
+ exit 1
182
+ }
183
+ nginx -c /tmp/nginx-config/nginx.conf -g "daemon off;" &
184
+
185
+ # 显示日志(过滤/health)
186
+ echo "所有服务已启动,开始实时显示日志..."
187
+ tail -f "$LOG_FILE" | grep -v '[GIN].*/api/health' &
188
+
189
+ # 等待后台进程
190
+ wait