412 lines
8.2 KiB
Markdown
412 lines
8.2 KiB
Markdown
# Paper Burner X 部署指南
|
||
|
||
本指南介绍如何部署 Paper Burner X 的 Docker 版本(包含后端和数据库)。
|
||
|
||
---
|
||
|
||
## 📋 目录
|
||
|
||
1. [快速开始](#快速开始)
|
||
2. [环境变量配置](#环境变量配置)
|
||
3. [部署方式](#部署方式)
|
||
4. [常见问题](#常见问题)
|
||
|
||
---
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 前置要求
|
||
|
||
- Docker 和 Docker Compose 已安装
|
||
- Git 已安装(用于克隆仓库)
|
||
|
||
### 快速部署步骤
|
||
|
||
```bash
|
||
# 1. 克隆仓库
|
||
git clone https://github.com/Feather-2/paper-burner-x.git
|
||
cd paper-burner-x
|
||
|
||
# 2. 复制环境变量模板
|
||
cp .env.example .env
|
||
|
||
# 3. 编辑环境变量(重要!)
|
||
nano .env # 或使用其他编辑器
|
||
|
||
# 4. 启动服务
|
||
docker-compose up -d
|
||
|
||
# 5. 查看日志
|
||
docker-compose logs -f
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 环境变量配置
|
||
|
||
### 第一步:复制模板文件
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
```
|
||
|
||
### 第二步:编辑 `.env` 文件
|
||
|
||
打开 `.env` 文件并修改以下**必须配置**的项目:
|
||
|
||
#### ⚠️ 必须修改的配置
|
||
|
||
```bash
|
||
# 1. 数据库密码(强烈建议修改)
|
||
DB_PASSWORD=你的超强密码123!@#
|
||
|
||
# 2. JWT 密钥(必须修改,至少 32 个字符)
|
||
JWT_SECRET=你的超级安全密钥-至少32个字符-请使用随机字符串
|
||
|
||
# 3. 管理员账户(首次启动时创建)
|
||
ADMIN_EMAIL=admin@yourdomain.com
|
||
ADMIN_PASSWORD=你的管理员密码
|
||
ADMIN_NAME=管理员
|
||
```
|
||
|
||
#### 🔑 生成安全密钥的方法
|
||
|
||
**方法 1:使用 OpenSSL(推荐)**
|
||
```bash
|
||
# 生成 JWT 密钥
|
||
openssl rand -base64 32
|
||
|
||
# 生成数据库密码
|
||
openssl rand -base64 24
|
||
```
|
||
|
||
**方法 2:使用 Node.js**
|
||
```bash
|
||
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
|
||
```
|
||
|
||
**方法 3:在线生成器**
|
||
访问 https://randomkeygen.com/ 生成强密码
|
||
|
||
#### 📝 可选配置
|
||
|
||
```bash
|
||
# OCR 服务(如果需要 OCR 功能)
|
||
MINERU_API_TOKEN=your_mineru_token
|
||
DOC2X_API_TOKEN=your_doc2x_token
|
||
|
||
# AI 翻译模型(如果需要后端提供 API keys)
|
||
DEEPSEEK_API_KEY=your_deepseek_key
|
||
GEMINI_API_KEY=your_gemini_key
|
||
CLAUDE_API_KEY=your_claude_key
|
||
TONGYI_API_KEY=your_tongyi_key
|
||
VOLCANO_API_KEY=your_volcano_key
|
||
|
||
# CORS 配置(如果需要限制访问域名)
|
||
CORS_ORIGIN=https://yourdomain.com,https://app.yourdomain.com
|
||
|
||
# 其他配置
|
||
MAX_UPLOAD_SIZE=100 # 文件上传大小限制(MB)
|
||
LOG_LEVEL=info # 日志级别
|
||
```
|
||
|
||
### 第三步:验证配置
|
||
|
||
检查你的 `.env` 文件是否包含所有必要的配置:
|
||
|
||
```bash
|
||
# 检查关键配置是否存在
|
||
grep -E "DB_PASSWORD|JWT_SECRET|ADMIN_EMAIL|ADMIN_PASSWORD" .env
|
||
```
|
||
|
||
---
|
||
|
||
## 🐳 部署方式
|
||
|
||
### 方式 1:使用 Docker Compose(推荐)
|
||
|
||
**启动服务:**
|
||
```bash
|
||
docker-compose up -d
|
||
```
|
||
|
||
**查看日志:**
|
||
```bash
|
||
docker-compose logs -f
|
||
```
|
||
|
||
**停止服务:**
|
||
```bash
|
||
docker-compose down
|
||
```
|
||
|
||
**重启服务:**
|
||
```bash
|
||
docker-compose restart
|
||
```
|
||
|
||
**查看运行状态:**
|
||
```bash
|
||
docker-compose ps
|
||
```
|
||
|
||
### 方式 2:使用一键部署脚本
|
||
|
||
**Linux/Mac:**
|
||
```bash
|
||
chmod +x scripts/deploy.sh
|
||
./scripts/deploy.sh
|
||
```
|
||
|
||
**Windows (PowerShell):**
|
||
```powershell
|
||
.\scripts\deploy.ps1
|
||
```
|
||
|
||
### 方式 3:从 Docker Hub 拉取镜像
|
||
|
||
```bash
|
||
# 拉取最新镜像
|
||
docker pull feather2dev/paper-burner-x:latest
|
||
|
||
# 手动运行(需要先启动 PostgreSQL)
|
||
docker run -d \
|
||
--name paper-burner-x \
|
||
-p 3000:3000 \
|
||
-e DATABASE_URL="postgresql://user:pass@host:5432/dbname" \
|
||
-e JWT_SECRET="your-secret-key" \
|
||
-e ADMIN_EMAIL="admin@example.com" \
|
||
-e ADMIN_PASSWORD="admin-password" \
|
||
feather2dev/paper-burner-x:latest
|
||
```
|
||
|
||
---
|
||
|
||
## 🔍 验证部署
|
||
|
||
### 1. 检查服务状态
|
||
|
||
```bash
|
||
# 检查容器是否运行
|
||
docker-compose ps
|
||
|
||
# 应该看到两个服务都是 "Up" 状态:
|
||
# - paper-burner-x_app
|
||
# - paper-burner-x_postgres
|
||
```
|
||
|
||
### 2. 访问服务
|
||
|
||
- **前端界面**: http://localhost:3000
|
||
- **管理面板**: http://localhost:3000/admin
|
||
- **API 健康检查**: http://localhost:3000/api/health
|
||
|
||
### 3. 测试管理员登录
|
||
|
||
1. 访问 http://localhost:3000/admin
|
||
2. 使用 `.env` 中配置的管理员邮箱和密码登录
|
||
3. 如果登录成功,说明后端和数据库都正常工作
|
||
|
||
---
|
||
|
||
## 🔄 更新部署
|
||
|
||
### 从 Git 仓库更新
|
||
|
||
```bash
|
||
# 1. 停止服务
|
||
docker-compose down
|
||
|
||
# 2. 拉取最新代码
|
||
git pull origin main
|
||
|
||
# 3. 重新构建镜像
|
||
docker-compose build --no-cache
|
||
|
||
# 4. 启动服务
|
||
docker-compose up -d
|
||
```
|
||
|
||
### 从 Docker Hub 更新
|
||
|
||
```bash
|
||
# 1. 停止服务
|
||
docker-compose down
|
||
|
||
# 2. 拉取最新镜像
|
||
docker-compose pull
|
||
|
||
# 3. 启动服务
|
||
docker-compose up -d
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 数据管理
|
||
|
||
### 数据库备份
|
||
|
||
```bash
|
||
# 备份数据库
|
||
docker-compose exec postgres pg_dump -U paperburner paperburner > backup_$(date +%Y%m%d).sql
|
||
|
||
# 或使用 Docker 卷备份
|
||
docker run --rm \
|
||
-v paper-burner-x_postgres_data:/data \
|
||
-v $(pwd):/backup \
|
||
alpine tar czf /backup/postgres_data_backup.tar.gz /data
|
||
```
|
||
|
||
### 数据库恢复
|
||
|
||
```bash
|
||
# 从 SQL 文件恢复
|
||
docker-compose exec -T postgres psql -U paperburner paperburner < backup_20250115.sql
|
||
```
|
||
|
||
### 查看数据库
|
||
|
||
```bash
|
||
# 进入数据库容器
|
||
docker-compose exec postgres psql -U paperburner -d paperburner
|
||
|
||
# 常用 SQL 命令
|
||
\dt # 列出所有表
|
||
\d User # 查看 User 表结构
|
||
SELECT * FROM "User" LIMIT 5; # 查看用户数据
|
||
```
|
||
|
||
---
|
||
|
||
## 🐛 常见问题
|
||
|
||
### 1. 数据库连接失败
|
||
|
||
**错误信息:**
|
||
```
|
||
Error: Environment variable not found: DATABASE_URL
|
||
```
|
||
|
||
**解决方法:**
|
||
- 检查 `.env` 文件是否存在
|
||
- 检查 `docker-compose.yml` 是否正确引用了 `.env`
|
||
- 确保 PostgreSQL 容器已启动:`docker-compose ps`
|
||
|
||
### 2. 管理员账户无法登录
|
||
|
||
**可能原因:**
|
||
- 首次启动时 `.env` 中的管理员配置不正确
|
||
- 数据库中管理员账户未创建
|
||
|
||
**解决方法:**
|
||
```bash
|
||
# 查看容器日志,确认管理员是否创建成功
|
||
docker-compose logs app | grep -i admin
|
||
|
||
# 重新创建管理员账户
|
||
docker-compose exec app node server/src/utils/initAdmin.js
|
||
```
|
||
|
||
### 3. 端口冲突
|
||
|
||
**错误信息:**
|
||
```
|
||
Error: port is already allocated
|
||
```
|
||
|
||
**解决方法:**
|
||
修改 `docker-compose.yml` 中的端口映射:
|
||
```yaml
|
||
ports:
|
||
- "3001:3000" # 改为 3001 或其他可用端口
|
||
```
|
||
|
||
### 4. 容器启动后立即退出
|
||
|
||
**排查步骤:**
|
||
```bash
|
||
# 1. 查看详细日志
|
||
docker-compose logs
|
||
|
||
# 2. 检查环境变量
|
||
docker-compose config
|
||
|
||
# 3. 重新构建
|
||
docker-compose build --no-cache
|
||
docker-compose up
|
||
```
|
||
|
||
### 5. OpenSSL 兼容性问题(已修复)
|
||
|
||
如果你使用旧版本的代码遇到以下错误:
|
||
```
|
||
Error loading shared library libssl.so.1.1
|
||
```
|
||
|
||
**解决方法:**
|
||
拉取最新代码,已修复此问题(使用 OpenSSL 3.x)
|
||
|
||
---
|
||
|
||
## 🔒 生产环境安全建议
|
||
|
||
### 1. 使用 HTTPS
|
||
|
||
使用 Nginx 或 Traefik 作为反向代理,配置 SSL 证书:
|
||
|
||
```bash
|
||
# 在 docker-compose.yml 中启用 Nginx 服务
|
||
# 取消注释 nginx 服务部分
|
||
```
|
||
|
||
### 2. 修改默认密码
|
||
|
||
- ✅ 修改 `DB_PASSWORD`
|
||
- ✅ 修改 `JWT_SECRET`(至少 32 个字符)
|
||
- ✅ 修改 `ADMIN_PASSWORD`
|
||
|
||
### 3. 限制 CORS
|
||
|
||
```bash
|
||
# 在 .env 中设置允许的域名
|
||
CORS_ORIGIN=https://yourdomain.com
|
||
```
|
||
|
||
### 4. 启用防火墙
|
||
|
||
```bash
|
||
# 只允许特定端口访问
|
||
ufw allow 80/tcp
|
||
ufw allow 443/tcp
|
||
ufw deny 3000/tcp # 禁止直接访问应用端口
|
||
```
|
||
|
||
### 5. 定期备份
|
||
|
||
设置定时任务自动备份数据库:
|
||
```bash
|
||
# 添加到 crontab
|
||
0 2 * * * /path/to/backup-script.sh
|
||
```
|
||
|
||
---
|
||
|
||
## 📚 相关文档
|
||
|
||
- [README.md](./README.md) - 项目介绍
|
||
- [LOCAL_TESTING.md](./LOCAL_TESTING.md) - 本地测试指南
|
||
- [docker-compose.yml](./docker-compose.yml) - Docker Compose 配置
|
||
- [Dockerfile](./Dockerfile) - Docker 镜像构建配置
|
||
|
||
---
|
||
|
||
## 💡 需要帮助?
|
||
|
||
- 📖 查看文档:[GitHub Wiki](https://github.com/Feather-2/paper-burner-x/wiki)
|
||
- 🐛 报告问题:[GitHub Issues](https://github.com/Feather-2/paper-burner-x/issues)
|
||
- 💬 讨论交流:[GitHub Discussions](https://github.com/Feather-2/paper-burner-x/discussions)
|
||
|
||
---
|
||
|
||
**祝部署顺利!🎉**
|