# 🎉 PostgreSQL 数据库部署方案总结 ## 📦 已创建的文件 | 文件 | 说明 | |------|------| | `DATABASE_SETUP_GUIDE.md` | 详细的数据库配置指南(手动操作) | | `one-click-database-setup.sh` | 一键自动化部署脚本(推荐) | | `deploy-database.sh` | Docker完整部署脚本 | | `setup-existing-postgres.sh` | 使用现有PostgreSQL配置脚本 | | `DATABASE_CONFIG.md` | 数据库连接信息(运行后生成) | --- ## 🚀 推荐:一键部署(最简单) ### 运行命令 ```bash cd /Users/lanmu/Desktop/xiaso bash one-click-database-setup.sh ``` ### 这个脚本会自动完成: 1. ✅ 检查并安装 sshpass 2. ✅ 连接服务器 3. ✅ 创建 Docker Compose 配置 4. ✅ 启动 PostgreSQL 容器(端口5433) 5. ✅ 创建 `flnxi_db` 数据库 6. ✅ 创建 `users` 表 7. ✅ 配置环境变量 8. ✅ 验证连接 **预计时间**: 3-5分钟 --- ## 📊 数据库配置信息 部署完成后,数据库信息如下: ``` 容器名称: flnxi-postgres 数据库名: flnxi_db 用户名: flnxi_user 密码: Flnxi@2025!SecurePassword 端口: 5433 (避免与系统PostgreSQL的5432冲突) ``` **连接字符串**: ``` postgresql://flnxi_user:Flnxi@2025!SecurePassword@localhost:5433/flnxi_db?schema=public ``` --- ## 🗄️ 数据库表结构 ### users 表 | 字段 | 类型 | 说明 | |------|------|------| | id | SERIAL | 主键,自增 | | name | VARCHAR(255) | 用户名 | | email | VARCHAR(255) | 邮箱(唯一) | | password | VARCHAR(255) | 密码(将使用bcrypt加密) | | email_verified | BOOLEAN | 邮箱是否验证,默认false | | created_at | TIMESTAMP | 创建时间 | | updated_at | TIMESTAMP | 更新时间 | **索引**: - `idx_users_email` - 邮箱索引(加速查询) - `idx_users_created_at` - 创建时间索引 --- ## 🔍 验证数据库 部署完成后,验证数据库是否正常: ### 方式1:在服务器上 ```bash ssh root@45.249.208.118 # 查看容器状态 docker ps | grep flnxi-postgres # 连接数据库 docker exec -it flnxi-postgres psql -U flnxi_user -d flnxi_db # 在psql中执行 \dt -- 查看表 \d users -- 查看表结构 SELECT * FROM users; -- 查看数据(目前为空) \q -- 退出 ``` ### 方式2:从本地 ```bash sshpass -p "lxvhNYFZ4160" ssh root@45.249.208.118 \ "docker exec flnxi-postgres psql -U flnxi_user -d flnxi_db -c 'SELECT current_database();'" ``` --- ## 📝 下一步操作 数据库配置完成后,需要更新代码来使用数据库: ### 1. 安装依赖 在本地项目中: ```bash cd /Users/lanmu/Desktop/xiaso # 安装 Prisma ORM (可选,简化数据库操作) npm install @prisma/client npm install -D prisma # 安装 bcrypt (必需,用于密码加密) npm install bcrypt npm install --save-dev @types/bcrypt # 安装 PostgreSQL 客户端 (如果不用Prisma) npm install pg npm install --save-dev @types/pg ``` ### 2. 更新注册 API 文件:`app/api/auth/register/route.ts` 需要: - 连接数据库 - 使用 bcrypt 加密密码 - 将用户数据存入数据库 ### 3. 更新登录 API 文件:`app/api/auth/[...nextauth]/route.ts` 需要: - 从数据库查询用户 - 使用 bcrypt 验证密码 ### 4. 重新部署 ```bash # 上传更新的代码 # 重新构建 Docker # 测试注册和登录功能 ``` --- ## 🛠️ 数据库管理 ### 常用命令 ```bash # 连接服务器 ssh root@45.249.208.118 # 查看数据库状态 docker ps | grep flnxi-postgres # 查看日志 docker logs flnxi-postgres # 重启数据库 cd /opt/flnxi-website docker-compose -f docker-compose-db.yml restart # 停止数据库 docker-compose -f docker-compose-db.yml stop # 启动数据库 docker-compose -f docker-compose-db.yml start ``` ### 备份数据 ```bash # 在服务器上执行 docker exec flnxi-postgres pg_dump -U flnxi_user flnxi_db > backup_$(date +%Y%m%d).sql # 或从本地执行 ssh root@45.249.208.118 \ "docker exec flnxi-postgres pg_dump -U flnxi_user flnxi_db" > backup_$(date +%Y%m%d).sql ``` ### 恢复数据 ```bash # 在服务器上 cat backup_20250101.sql | docker exec -i flnxi-postgres psql -U flnxi_user -d flnxi_db ``` --- ## ⚠️ 注意事项 1. **密码安全** - 数据库密码已在脚本中设置 - 请勿将密码提交到 Git - 生产环境建议更改密码 2. **数据备份** - 建议每天备份数据库 - 保留至少7天的备份 3. **端口选择** - 使用5433避免与系统PostgreSQL冲突 - 仅监听 localhost,外部无法访问 4. **容器管理** - 设置了自动重启(unless-stopped) - 服务器重启后自动恢复 --- ## 🐛 故障排查 ### 问题1:容器启动失败 ```bash # 查看日志 docker logs flnxi-postgres # 常见原因: # - 端口被占用:改用其他端口 # - 权限问题:检查Docker权限 # - 镜像拉取失败:重试或换镜像源 ``` ### 问题2:无法连接数据库 ```bash # 检查容器状态 docker ps | grep flnxi-postgres # 测试连接 docker exec flnxi-postgres pg_isready -U flnxi_user # 查看端口 netstat -tulpn | grep 5433 ``` ### 问题3:环境变量未生效 ```bash # 检查环境变量 cat /opt/flnxi-website/.env.local # 确保包含 DATABASE_URL # 重新部署应用使环境变量生效 ``` --- ## 📚 相关文档 - `DATABASE_SETUP_GUIDE.md` - 详细配置指南 - `AUTH_INTEGRATION_GUIDE.md` - 认证系统指南 - `SIGNUP_INTEGRATION_COMPLETE.md` - 注册功能文档 --- ## ✅ 部署检查清单 运行 `one-click-database-setup.sh` 后,确认: - [ ] PostgreSQL 容器正在运行 - [ ] users 表已创建 - [ ] 索引已创建 - [ ] 环境变量已配置(DATABASE_URL) - [ ] 可以成功连接数据库 - [ ] 可以查询表结构 --- ## 🎯 完整流程总结 ``` 1. 部署数据库 ↓ bash one-click-database-setup.sh ↓ 2. 验证数据库 ↓ docker exec flnxi-postgres psql -U flnxi_user -d flnxi_db -c '\dt' ↓ 3. 安装依赖 ↓ npm install bcrypt @prisma/client ↓ 4. 更新API代码 ↓ 修改 register/route.ts 和 [...nextauth]/route.ts ↓ 5. 部署到服务器 ↓ 上传文件 → 重新构建 → 测试 ↓ 6. 测试功能 ↓ 注册新用户 → 登录 → 验证 ``` --- **部署时间**: 2025-10-27 **预计耗时**: 10-15分钟 **难度**: 简单 🎉 **准备好了!现在运行 `bash one-click-database-setup.sh` 开始部署!**