xiaso-flnxi-website/DATABASE_SETUP_GUIDE.md
Your Name b1eab32c75 初始提交: FLNXI电商素材系统官方网站
- Next.js 项目框架
- 完整的认证系统集成
- 数据库配置和部署脚本
- 产品价格体系和文档
- Docker 部署配置
2025-12-13 21:38:32 +08:00

398 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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)
🎉 **祝您配置顺利!**