clouddreamai-cicd-setup 1.5.29 → 1.5.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/templates/scripts/deploy.sh +63 -6
package/package.json
CHANGED
|
@@ -25,6 +25,35 @@ fi
|
|
|
25
25
|
|
|
26
26
|
echo "开始部署 $APP_NAME 到 $ENV_TYPE 环境 (端口: $APP_PORT)..."
|
|
27
27
|
|
|
28
|
+
# 检查端口是否被占用(排除当前应用的容器)
|
|
29
|
+
check_port() {
|
|
30
|
+
local PORT=$1
|
|
31
|
+
# 获取占用端口的进程,排除当前应用的 docker-proxy
|
|
32
|
+
local OCCUPIED=$(lsof -i :$PORT -t 2>/dev/null | while read PID; do
|
|
33
|
+
PROC_NAME=$(ps -p $PID -o comm= 2>/dev/null)
|
|
34
|
+
PROC_CMD=$(ps -p $PID -o args= 2>/dev/null)
|
|
35
|
+
# 如果是 docker-proxy 且属于当前应用,跳过
|
|
36
|
+
if [[ "$PROC_NAME" == "docker-proxy" ]] && docker ps --format '{{.Names}}' | grep -q "^${APP_NAME}"; then
|
|
37
|
+
continue
|
|
38
|
+
fi
|
|
39
|
+
echo "$PID"
|
|
40
|
+
done)
|
|
41
|
+
|
|
42
|
+
if [ -n "$OCCUPIED" ]; then
|
|
43
|
+
echo "❌ 端口 $PORT 已被占用:"
|
|
44
|
+
lsof -i :$PORT 2>/dev/null | head -5
|
|
45
|
+
echo ""
|
|
46
|
+
echo "请检查端口配置或停止占用端口的进程"
|
|
47
|
+
exit 1
|
|
48
|
+
fi
|
|
49
|
+
echo "✓ 端口 $PORT 可用"
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
# 检查端口(仅在非更新部署时检查)
|
|
53
|
+
if ! docker ps --format '{{.Names}}' | grep -q "^${APP_NAME}"; then
|
|
54
|
+
check_port $APP_PORT
|
|
55
|
+
fi
|
|
56
|
+
|
|
28
57
|
# Nginx 反向代理配置函数
|
|
29
58
|
configure_nginx_proxy() {
|
|
30
59
|
local DOMAIN=$1
|
|
@@ -299,6 +328,26 @@ EOF
|
|
|
299
328
|
DB_ENABLED="{{DB_ENABLED}}" # 是否启用数据库自动创建: true/false
|
|
300
329
|
DB_TYPE="{{DB_TYPE}}" # 数据库类型: pgsql/mysql
|
|
301
330
|
|
|
331
|
+
# 自动检测数据库客户端路径
|
|
332
|
+
find_db_client() {
|
|
333
|
+
local CLIENT=$1
|
|
334
|
+
# 常见路径:宝塔、系统默认、Docker 等
|
|
335
|
+
local PATHS=(
|
|
336
|
+
"/www/server/pgsql/bin/$CLIENT"
|
|
337
|
+
"/www/server/mysql/bin/$CLIENT"
|
|
338
|
+
"/usr/bin/$CLIENT"
|
|
339
|
+
"/usr/local/bin/$CLIENT"
|
|
340
|
+
)
|
|
341
|
+
for P in "${PATHS[@]}"; do
|
|
342
|
+
if [ -x "$P" ]; then
|
|
343
|
+
echo "$P"
|
|
344
|
+
return
|
|
345
|
+
fi
|
|
346
|
+
done
|
|
347
|
+
# 最后尝试 PATH 中查找
|
|
348
|
+
command -v "$CLIENT" 2>/dev/null
|
|
349
|
+
}
|
|
350
|
+
|
|
302
351
|
# 创建数据库函数
|
|
303
352
|
create_database() {
|
|
304
353
|
local DB_HOST=$1
|
|
@@ -314,23 +363,31 @@ create_database() {
|
|
|
314
363
|
echo "检查并创建数据库: $DB_NAME"
|
|
315
364
|
|
|
316
365
|
if [ "$DB_TYPE" = "pgsql" ]; then
|
|
317
|
-
|
|
366
|
+
local PSQL_CMD=$(find_db_client "psql")
|
|
367
|
+
if [ -z "$PSQL_CMD" ]; then
|
|
368
|
+
echo "❌ 未找到 psql 客户端,跳过数据库创建"
|
|
369
|
+
return
|
|
370
|
+
fi
|
|
318
371
|
export PGPASSWORD="$DB_PASS"
|
|
319
|
-
if
|
|
372
|
+
if $PSQL_CMD -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -lqt | cut -d \| -f 1 | grep -qw "$DB_NAME"; then
|
|
320
373
|
echo "✓ 数据库 $DB_NAME 已存在"
|
|
321
374
|
else
|
|
322
375
|
echo "创建数据库 $DB_NAME..."
|
|
323
|
-
|
|
376
|
+
$PSQL_CMD -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -c "CREATE DATABASE \"$DB_NAME\";"
|
|
324
377
|
echo "✓ 数据库 $DB_NAME 创建成功"
|
|
325
378
|
fi
|
|
326
379
|
unset PGPASSWORD
|
|
327
380
|
elif [ "$DB_TYPE" = "mysql" ]; then
|
|
328
|
-
|
|
329
|
-
if
|
|
381
|
+
local MYSQL_CMD=$(find_db_client "mysql")
|
|
382
|
+
if [ -z "$MYSQL_CMD" ]; then
|
|
383
|
+
echo "❌ 未找到 mysql 客户端,跳过数据库创建"
|
|
384
|
+
return
|
|
385
|
+
fi
|
|
386
|
+
if $MYSQL_CMD -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" -e "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='$DB_NAME'" | grep -q "$DB_NAME"; then
|
|
330
387
|
echo "✓ 数据库 $DB_NAME 已存在"
|
|
331
388
|
else
|
|
332
389
|
echo "创建数据库 $DB_NAME..."
|
|
333
|
-
|
|
390
|
+
$MYSQL_CMD -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" -e "CREATE DATABASE \`$DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
|
334
391
|
echo "✓ 数据库 $DB_NAME 创建成功"
|
|
335
392
|
fi
|
|
336
393
|
fi
|