diff --git a/deploy.sh b/deploy.sh index b10c0d4..d5dffdc 100755 --- a/deploy.sh +++ b/deploy.sh @@ -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: 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 # 执行数据库迁移 diff --git a/docker-compose.yml b/docker-compose.yml index a21352b..5ad6a65 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -21,7 +21,7 @@ services: #============================================================================= postgres: - image: postgres:15-alpine + image: pgvector/pgvector:pg15 container_name: iconsulting-postgres restart: unless-stopped environment: