# PostgreSQL 数据库部署指南 ## 🎯 概述 本指南提供了为 FLNXI 认证系统配置 PostgreSQL 数据库的完整方案。 --- ## 📋 方案选择 ### 方案A:使用 Docker 部署 PostgreSQL(推荐) - ✅ 最简单,一键部署 - ✅ 隔离性好,不影响系统 - ✅ 易于备份和迁移 ### 方案B:使用系统现有 PostgreSQL - ✅ 节省资源 - ⚠️ 需要手动配置 --- ## 🚀 方案A:Docker 部署(推荐) ### 步骤1:SSH连接服务器 ```bash ssh root@45.249.208.118 # 密码:lxvhNYFZ4160 ``` ### 步骤2:创建 Docker Compose 配置 ```bash cd /opt/flnxi-website cat > docker-compose-db.yml << 'EOF' version: '3.8' services: postgres: image: postgres:15-alpine container_name: flnxi-postgres environment: POSTGRES_DB: flnxi_db POSTGRES_USER: flnxi_user POSTGRES_PASSWORD: Flnxi@2025!SecurePassword volumes: - postgres_data:/var/lib/postgresql/data ports: - '127.0.0.1:5433:5432' # 使用5433避免与系统PostgreSQL冲突 restart: unless-stopped healthcheck: test: ['CMD-SHELL', 'pg_isready -U flnxi_user'] interval: 10s timeout: 5s retries: 5 volumes: postgres_data: driver: local EOF ``` ### 步骤3:启动PostgreSQL ```bash docker-compose -f docker-compose-db.yml up -d ``` ### 步骤4:等待数据库启动 ```bash # 等待15秒 sleep 15 # 检查状态 docker ps | grep flnxi-postgres # 应该看到 "Up" 状态 ``` ### 步骤5:创建用户表 ```bash docker exec -i flnxi-postgres psql -U flnxi_user -d flnxi_db << 'EOFSQL' -- 创建用户表 CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, password VARCHAR(255) NOT NULL, email_verified BOOLEAN DEFAULT FALSE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 创建索引 CREATE INDEX IF NOT EXISTS idx_users_email ON users(email); CREATE INDEX IF NOT EXISTS idx_users_created_at ON users(created_at); -- 查看表结构 \d users -- 测试 SELECT 'Database setup complete!' as status; EOFSQL ``` ### 步骤6:配置环境变量 ```bash cd /opt/flnxi-website # 添加数据库连接字符串到环境变量 cat >> .env.local << 'EOF' # PostgreSQL 数据库配置 DATABASE_URL="postgresql://flnxi_user:Flnxi@2025!SecurePassword@localhost:5433/flnxi_db?schema=public" EOF # 查看配置 cat .env.local ``` ### 步骤7:验证连接 ```bash # 测试数据库连接 docker exec flnxi-postgres psql -U flnxi_user -d flnxi_db -c "SELECT current_database(), current_user;" # 应该看到: # current_database | current_user # ------------------+------------- # flnxi_db | flnxi_user ``` --- ## 🔧 方案B:使用系统PostgreSQL 服务器上已经有PostgreSQL运行(端口5432),可以直接使用。 ### 步骤1:找到PostgreSQL路径 ```bash ssh root@45.249.208.118 # 查找PostgreSQL安装路径 ps aux | grep postgres | head -1 # 通常在: # /usr/local/pgsql/bin/ # /usr/bin/ # /usr/pgsql-*/bin/ ``` ### 步骤2:配置数据库(需要根据实际PostgreSQL安装调整命令) ```bash # 假设使用 postgres 用户 sudo su - postgres # 创建用户 createuser -P flnxi_user # 输入密码:Flnxi@2025!SecurePassword # 创建数据库 createdb -O flnxi_user flnxi_db # 连接数据库 psql -d flnxi_db ``` ### 步骤3:创建表(在 psql 中执行) ```sql CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, password VARCHAR(255) NOT NULL, email_verified BOOLEAN DEFAULT FALSE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX idx_users_email ON users(email); CREATE INDEX idx_users_created_at ON users(created_at); -- 授权 GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO flnxi_user; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO flnxi_user; \q -- 退出 ``` ### 步骤4:配置环境变量 ```bash cd /opt/flnxi-website cat >> .env.local << 'EOF' # PostgreSQL 数据库配置(使用系统PostgreSQL,端口5432) DATABASE_URL="postgresql://flnxi_user:Flnxi@2025!SecurePassword@localhost:5432/flnxi_db?schema=public" EOF ``` --- ## 📊 数据库信息 配置完成后,记录以下信息: | 项目 | 方案A(Docker) | 方案B(系统PG) | |------|-----------------|-----------------| | 容器名 | flnxi-postgres | N/A | | 数据库名 | flnxi_db | flnxi_db | | 用户名 | flnxi_user | flnxi_user | | 密码 | Flnxi@2025!SecurePassword | Flnxi@2025!SecurePassword | | 端口 | 5433 | 5432 | | 连接字符串 | postgresql://flnxi_user:...@localhost:5433/flnxi_db | postgresql://flnxi_user:...@localhost:5432/flnxi_db | --- ## 🧪 测试数据库 ### 方案A(Docker) ```bash # 连接数据库 docker exec -it flnxi-postgres psql -U flnxi_user -d flnxi_db # 查看表 \dt # 查看表结构 \d users # 插入测试数据 INSERT INTO users (name, email, password, email_verified) VALUES ('测试用户', 'test@example.com', 'temp_password', false); # 查询数据 SELECT * FROM users; # 退出 \q ``` ### 方案B(系统) ```bash # 需要使用系统的psql路径 psql -h localhost -U flnxi_user -d flnxi_db -W # 输入密码 # 后续命令同上... ``` --- ## 📦 管理命令 ### 查看容器状态 ```bash docker ps | grep flnxi-postgres ``` ### 查看日志 ```bash docker logs flnxi-postgres ``` ### 停止数据库 ```bash docker-compose -f docker-compose-db.yml stop ``` ### 启动数据库 ```bash docker-compose -f docker-compose-db.yml start ``` ### 重启数据库 ```bash docker-compose -f docker-compose-db.yml restart ``` ### 备份数据库 ```bash # 方案A docker exec flnxi-postgres pg_dump -U flnxi_user flnxi_db > backup_$(date +%Y%m%d).sql # 方案B pg_dump -h localhost -U flnxi_user flnxi_db > backup_$(date +%Y%m%d).sql ``` ### 恢复数据库 ```bash # 方案A cat backup_20250101.sql | docker exec -i flnxi-postgres psql -U flnxi_user -d flnxi_db # 方案B psql -h localhost -U flnxi_user -d flnxi_db < backup_20250101.sql ``` --- ## 🔐 安全建议 1. ✅ 数据库仅监听 localhost,外部无法直接访问 2. ✅ 使用强密码 3. ⚠️ 定期备份数据(建议每天) 4. ⚠️ 定期更新密码 5. ⚠️ 监控数据库日志 6. ⚠️ 限制数据库用户权限 --- ## 🐛 故障排查 ### 问题1:端口已被占用 ``` Error: port 5432 already in use ``` **解决方案**: - 方案A:使用不同端口(如5433) - 或者:停止现有PostgreSQL ```bash docker stop $(docker ps -q --filter name=postgres) ``` ### 问题2:无法连接数据库 ``` Connection refused ``` **检查**: ```bash # 检查数据库是否运行 docker ps | grep postgres # 检查日志 docker logs flnxi-postgres # 测试端口 telnet localhost 5433 ``` ### 问题3:权限问题 ``` permission denied for table users ``` **解决方案**: ```sql GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO flnxi_user; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO flnxi_user; ``` --- ## ✅ 验证清单 配置完成后,验证以下项目: - [ ] PostgreSQL 容器/服务正在运行 - [ ] 可以连接到数据库 - [ ] users 表已创建 - [ ] 索引已创建 - [ ] 环境变量已配置 - [ ] 可以插入测试数据 - [ ] 可以查询数据 - [ ] 备份脚本可用 --- ## 📝 下一步 数据库配置完成后: 1. ✅ 安装项目依赖(Prisma、bcrypt) 2. ✅ 更新注册 API 使用数据库 3. ✅ 更新登录 API 使用数据库和密码验证 4. ✅ 重新部署应用 5. ✅ 测试注册和登录功能 --- **配置时间**: 约 10-15 分钟 **难度**: 简单 **推荐方案**: 方案A(Docker) 🎉 **祝您配置顺利!**