deploy: 本地预构建发布(push-build),对齐 1Panel 与 backend_v2 目录
- 新增 Dockerfile.prebuilt / scripts/push-build.sh:本机构建、只上传产物,服务器零编译 - deploy.sh 增加 --prebuilt(自动 --no-pull + 产物校验),并保留 --no-cache - compose 支持 BACKEND_DOCKERFILE / WEB_DOCKERFILE 切换;预构建时用 prebuilt 变体 - init-db.sh / scripts/backup-db.sh 改为 docker exec 1Panel 的 Postgres 容器 - WEB_DIR 默认改为 ../frontend_v2;nginx 切换文件改到 .deploy/ 避免弄脏工作区 - 新增 .gitattributes 固定脚本与配置为 LF
This commit is contained in:
52
init-db.sh
52
init-db.sh
@ -1,16 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
# 首次建库:把导出的 SQL 灌进空的 PostgreSQL 容器
|
||||
# 首次建库:把导出的 SQL 灌进 PostgreSQL
|
||||
#
|
||||
# ./init-db.sh /path/to/dump.sql
|
||||
#
|
||||
# 前置:在开发机导出最新结构与数据(含 pgvector 扩展):
|
||||
# go run ./cmd/dbtool dump -with-extension -out db/backups/db_dump.sql
|
||||
# 数据库由 1Panel 管理(独立的 postgres 容器,端口不对外发布),所以直接
|
||||
# docker exec 进那个容器跑 psql —— 服务器上不需要装 psql,也不依赖宿主端口。
|
||||
#
|
||||
# ⚠️ 仓库里 db/backups/db_dump.sql 是 2026-09-21 导出的,比当前代码少了之后两个月
|
||||
# 的新增迁移(向量表 / 近邻对表 / 品牌重编号 / published_at / image_size 等),
|
||||
# 直接拿它建库会导致后端启动后字段缺失——所以这里必须显式传入文件路径。
|
||||
# 容器名在 .env 的 PG_CONTAINER 里;不确定就看:
|
||||
# docker ps --format '{{.Names}}' | grep -i postgres
|
||||
#
|
||||
# 注意:只在库为空时执行一次;生产库已有数据时重跑会与现有行冲突。
|
||||
# 注意:只在库为空时执行一次;已有数据时重跑会与现有行冲突。
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
@ -22,24 +21,39 @@ if [ -z "$DUMP" ]; then
|
||||
echo "用法:./init-db.sh <dump.sql>"
|
||||
echo ""
|
||||
echo " 请传入一份与当前代码匹配的 SQL(含全部新增迁移)。"
|
||||
echo " 导出命令:go run ./cmd/dbtool dump -with-extension -out db/backups/db_dump.sql"
|
||||
echo " 导出命令(开发机):go run ./cmd/dbtool dump -with-extension -out db/backups/db_dump.sql"
|
||||
exit 1
|
||||
fi
|
||||
[ -f "$DUMP" ] || { echo "!! 找不到 dump 文件:$DUMP"; exit 1; }
|
||||
|
||||
echo "==> 启动数据库"
|
||||
docker compose up -d db
|
||||
PG_CONTAINER="${PG_CONTAINER:?PG_CONTAINER 未设置:填 .env 里那个 postgres 容器名}"
|
||||
if ! docker inspect "$PG_CONTAINER" >/dev/null 2>&1; then
|
||||
echo "!! 容器不存在:$PG_CONTAINER"
|
||||
echo " docker ps --format '{{.Names}}' | grep -i postgres"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "==> 等待数据库就绪"
|
||||
for i in $(seq 1 30); do
|
||||
if docker compose exec -T db pg_isready -U "${DB_USER:-fashion}" -d "${DB_NAME:-fashion}" >/dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
[ "$i" -eq 30 ] && { echo "!! 数据库 60 秒未就绪"; docker compose logs --tail 30 db; exit 1; }
|
||||
sleep 2
|
||||
done
|
||||
run_psql() {
|
||||
docker exec -i -e PGPASSWORD="${DB_PASSWORD:?DB_PASSWORD 未设置}" "$PG_CONTAINER" \
|
||||
psql -U "${DB_USER:-fashion}" -d "${DB_NAME:-fashion}" "$@"
|
||||
}
|
||||
|
||||
echo "==> 检查连接(容器 $PG_CONTAINER)"
|
||||
if ! run_psql -c 'select 1' >/dev/null 2>&1; then
|
||||
echo "!! 连不上。检查 DB_USER / DB_NAME / DB_PASSWORD 是否与该容器一致"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "==> 检查 pgvector"
|
||||
if run_psql -tAc "select 1 from pg_available_extensions where name = 'vector'" 2>/dev/null | grep -q 1; then
|
||||
echo " pgvector 可用"
|
||||
else
|
||||
echo " !! 该 Postgres 没有 pgvector:dump 里的 vector 类型会导入失败"
|
||||
echo " 换用带 pgvector 的镜像,或先安装扩展后重试"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "==> 导入 $DUMP"
|
||||
docker compose exec -T db psql -U "${DB_USER:-fashion}" -d "${DB_NAME:-fashion}" -v ON_ERROR_STOP=1 < "$DUMP"
|
||||
run_psql -v ON_ERROR_STOP=1 < "$DUMP"
|
||||
|
||||
echo "==> 完成。可以执行 ./deploy.sh all 启动全部服务"
|
||||
|
||||
Reference in New Issue
Block a user