feat(deploy): auto-init database with pgvector support

- Change PostgreSQL image from postgres:15-alpine to pgvector/pgvector:pg15
- Add init_database() function to auto-detect and initialize database
- Add 'db init' command for manual database initialization
- Database init runs automatically on first 'start all' deployment
- Includes admin account creation and pgvector extension verification

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-01-23 04:28:51 -08:00
parent 632e27213a
commit 8b99021e0e
2 changed files with 49 additions and 2 deletions

View File

@ -387,6 +387,47 @@ start_infrastructure() {
log_success "基础设施启动完成"
}
# 初始化数据库 (自动检测并执行)
init_database() {
log_step "检查数据库初始化状态..."
# 等待 PostgreSQL 完全就绪
sleep 3
# 检查 admins 表是否存在 (作为初始化完成的标志)
local table_exists
table_exists=$($DOCKER_COMPOSE exec -T postgres psql -U postgres -d iconsulting -tAc "SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_name = 'admins');" 2>/dev/null)
if [ "$table_exists" = "t" ]; then
log_success "数据库已初始化,跳过"
return 0
fi
log_info "首次部署,开始初始化数据库..."
# 执行初始化脚本
if $DOCKER_COMPOSE exec -T postgres psql -U postgres -d iconsulting -f /docker-entrypoint-initdb.d/init.sql > /dev/null 2>&1; then
log_success "数据库初始化完成"
# 验证关键表
local admin_count
admin_count=$($DOCKER_COMPOSE exec -T postgres psql -U postgres -d iconsulting -tAc "SELECT COUNT(*) FROM admins;" 2>/dev/null)
log_info "默认管理员账户已创建 (用户名: admin, 密码: admin123)"
# 验证 vector 扩展
local vector_exists
vector_exists=$($DOCKER_COMPOSE exec -T postgres psql -U postgres -d iconsulting -tAc "SELECT EXISTS (SELECT FROM pg_extension WHERE extname = 'vector');" 2>/dev/null)
if [ "$vector_exists" = "t" ]; then
log_success "pgvector 扩展已启用"
else
log_warning "pgvector 扩展未能启用,向量搜索功能可能受限"
fi
else
log_error "数据库初始化失败,请检查 init-db.sql"
return 1
fi
}
# 启动 Kong 网关 (DB-less 模式)
start_kong() {
log_step "启动 Kong API 网关 (DB-less 模式)..."
@ -547,6 +588,7 @@ start_all() {
mkdir -p "$PROJECT_ROOT/pids"
start_infrastructure
init_database
start_kong
start_all_backend "$mode"
start_nginx
@ -1187,6 +1229,10 @@ do_db() {
done
log_success "数据库迁移完成"
;;
init)
log_step "初始化数据库 (执行 init-db.sql)..."
init_database
;;
seed)
log_step "初始化种子数据..."
# 添加种子数据脚本
@ -1296,7 +1342,7 @@ show_help() {
plugins - 查看插件列表
db <action> 数据库操作
action: migrate, seed, backup, restore, reset, status
action: init, migrate, seed, backup, restore, reset, status
help 显示此帮助信息
@ -1310,6 +1356,7 @@ show_help() {
./deploy.sh restart user docker # 重启用户服务 (Docker)
./deploy.sh logs conversation 200 # 查看对话服务最近200行日志
./deploy.sh clean all # 清理所有构建产物和依赖
./deploy.sh db init # 初始化数据库 (首次部署)
./deploy.sh db backup # 备份数据库
./deploy.sh db migrate # 执行数据库迁移

View File

@ -21,7 +21,7 @@ services:
#=============================================================================
postgres:
image: postgres:15-alpine
image: pgvector/pgvector:pg15
container_name: iconsulting-postgres
restart: unless-stopped
environment: