fix: server.py 支持环境变量配置DB连接 + deploy_remote.sh 适配远程PG15端口5432 + deploy.sh 设置DB环境变量
This commit is contained in:
+30
-17
@@ -18,33 +18,46 @@ if [ -z "$PSQL" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 查找 PG socket 目录
|
||||
SOCKET_DIR=""
|
||||
for d in /var/lib/pgsql/data /opt/wxsales/demo/db/socket /tmp; do
|
||||
if [ -S "$d/.s.PGSQL.5434" ]; then SOCKET_DIR="$d"; break; fi
|
||||
done
|
||||
# 远程环境:PG 15 端口 5432,用 postgres 用户连接
|
||||
PSQL_CMD="$PSQL -h 127.0.0.1 -p 5432 -U postgres -d wxchat_sales"
|
||||
|
||||
# 构建连接参数
|
||||
if [ -n "$SOCKET_DIR" ]; then
|
||||
PSQL_CMD="$PSQL -h $SOCKET_DIR -p 5434 -d wxchat_sales"
|
||||
else
|
||||
# 尝试默认连接
|
||||
PSQL_CMD="$PSQL -p 5434 -d wxchat_sales"
|
||||
# 检查连接方式:优先 su postgres,其次直连
|
||||
PG_CONN_OK=0
|
||||
su - postgres -c "$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales -c 'SELECT 1'" >/dev/null 2>&1 && PG_CONN_OK=1
|
||||
|
||||
if [ "$PG_CONN_OK" -eq 0 ]; then
|
||||
echo "[WARN] postgres 用户连接失败,尝试 root 直连..."
|
||||
PSQL_CMD="$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales"
|
||||
fi
|
||||
|
||||
echo "[INFO] 使用 psql: $PSQL"
|
||||
echo "[INFO] 执行 schema.sql..."
|
||||
|
||||
# 执行 schema.sql(幂等,包含迁移语句)
|
||||
$PSQL_CMD -f "$DEMO_DIR/db/schema.sql" 2>&1 || {
|
||||
echo "[WARN] schema.sql 执行有警告,尝试继续..."
|
||||
}
|
||||
if [ "$PG_CONN_OK" -eq 1 ]; then
|
||||
su - postgres -c "$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales -f $DEMO_DIR/db/schema.sql" 2>&1 || {
|
||||
echo "[WARN] schema.sql 执行有警告,尝试继续..."
|
||||
}
|
||||
else
|
||||
$PSQL_CMD -f "$DEMO_DIR/db/schema.sql" 2>&1 || {
|
||||
echo "[WARN] schema.sql 执行有警告,尝试继续..."
|
||||
}
|
||||
fi
|
||||
|
||||
# 重置序列
|
||||
$PSQL_CMD -c "SELECT setval('product_id_seq', COALESCE((SELECT max(id) FROM product), 1), true);" 2>/dev/null || true
|
||||
$PSQL_CMD -c "SELECT setval('salesperson_id_seq', COALESCE((SELECT max(id) FROM salesperson), 1), true);" 2>/dev/null || true
|
||||
if [ "$PG_CONN_OK" -eq 1 ]; then
|
||||
su - postgres -c "$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales -c \"SELECT setval('product_id_seq', COALESCE((SELECT max(id) FROM product), 1), true);\"" 2>/dev/null || true
|
||||
su - postgres -c "$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales -c \"SELECT setval('salesperson_id_seq', COALESCE((SELECT max(id) FROM salesperson), 1), true);\"" 2>/dev/null || true
|
||||
else
|
||||
$PSQL_CMD -c "SELECT setval('product_id_seq', COALESCE((SELECT max(id) FROM product), 1), true);" 2>/dev/null || true
|
||||
$PSQL_CMD -c "SELECT setval('salesperson_id_seq', COALESCE((SELECT max(id) FROM salesperson), 1), true);" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 验证
|
||||
PRODUCT_COUNT=$($PSQL_CMD -t -c "SELECT count(*) FROM product;" 2>/dev/null | xargs || echo "0")
|
||||
if [ "$PG_CONN_OK" -eq 1 ]; then
|
||||
PRODUCT_COUNT=$(su - postgres -c "$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales -t -c 'SELECT count(*) FROM product;'" 2>/dev/null | xargs || echo "0")
|
||||
else
|
||||
PRODUCT_COUNT=$($PSQL_CMD -t -c "SELECT count(*) FROM product;" 2>/dev/null | xargs || echo "0")
|
||||
fi
|
||||
echo "[OK] 产品数量: $PRODUCT_COUNT"
|
||||
echo "[OK] 数据库迁移完成"
|
||||
|
||||
+9
-1
@@ -8,6 +8,7 @@ from __future__ import annotations
|
||||
|
||||
import datetime as dt
|
||||
import json
|
||||
import os
|
||||
import pathlib
|
||||
import re
|
||||
import subprocess
|
||||
@@ -27,7 +28,14 @@ from pydantic import BaseModel
|
||||
ROOT = pathlib.Path(__file__).resolve().parent
|
||||
STATIC_DIR = ROOT / "static"
|
||||
SOCKET_DIR = ROOT.parent / "db" / "socket"
|
||||
DSN = f"host={SOCKET_DIR} port=5434 dbname=wxchat_sales"
|
||||
|
||||
# DSN:优先环境变量 DATABASE_URL,其次 DB_HOST/DB_PORT,最后默认本地 socket
|
||||
if os.environ.get("DATABASE_URL"):
|
||||
DSN = os.environ["DATABASE_URL"]
|
||||
elif os.environ.get("DB_HOST"):
|
||||
DSN = f"host={os.environ['DB_HOST']} port={os.environ.get('DB_PORT', '5432')} dbname={os.environ.get('DB_NAME', 'wxchat_sales')} user={os.environ.get('DB_USER', 'postgres')} password={os.environ.get('DB_PASSWORD', '')}"
|
||||
else:
|
||||
DSN = f"host={SOCKET_DIR} port=5434 dbname=wxchat_sales"
|
||||
|
||||
app = FastAPI(title="微信营销管理系统 MVP")
|
||||
|
||||
|
||||
@@ -56,6 +56,7 @@ ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "
|
||||
fi
|
||||
# 启动新进程
|
||||
cd ${REMOTE_DEMO}
|
||||
DB_HOST=127.0.0.1 DB_PORT=5432 DB_USER=postgres DB_NAME=wxchat_sales \
|
||||
nohup /usr/bin/python3 -m uvicorn web.server:app --host 127.0.0.1 --port 8770 \
|
||||
> ${REMOTE_DEMO}/web.log 2>&1 &
|
||||
sleep 2
|
||||
|
||||
Reference in New Issue
Block a user