适用架构:Docker (后端运行) + 宝塔面板 (反向代理/SSL) 核心逻辑:Docker 占用内部端口 (6066),宝塔 Nginx 监听外部端口 (80/443) 并转发流量。
1. 准备工作
在购买新服务器和域名后,需完成以下基础设置:
-
服务器系统:推荐 Ubuntu 22.04 LTS 或 Debian 11/12。
-
域名解析:在域名服务商处,将
A记录解析到新服务器 IP。 -
开放端口 (云厂商防火墙/安全组):
-
登录云服务器控制台(阿里云/腾讯云等)。
-
必开端口:
-
80(HTTP) -
443(HTTPS) -
8888(宝塔默认面板端口) -
22(SSH)
-
-
2. 环境安装
2.1 安装 Docker
在终端执行以下命令(官方一键脚本):
Bash
curl -fsSL https://get.docker.com | bash
systemctl enable --now docker
2.2 安装宝塔面板 (aaPanel)
以 Ubuntu 为例(其他系统请去宝塔官网复制):
Bash
wget -O install.sh https://download.bt.cn/install/install_lts.sh && sudo bash install.sh ed8484bec
安装完成后,记录下终端显示的 外网面板地址、用户名 和 密码。
3. 部署 PaperGrid 容器
3.1 创建项目目录
Bash
mkdir -p /root/papergrid
cd /root/papergrid
3.2 创建配置文件
新建 docker-compose.yml 文件:
Bash
nano docker-compose.yml
复制以下内容(注意端口和域名):
YAML
services:
app:
image: ghcr.io/xywml/papergrid:latest
container_name: papergrid
ports:
- "6066:3000"
environment:
# 建议持久化到数据卷,避免容器重建丢数据
DATABASE_URL: "file:/data/db.sqlite"
# 反向代理后必须改成你的公网地址(https://your-domain),否则登录会报 UntrustedHost
NEXTAUTH_URL: "http://localhost:6066"
# 仅本地开发可开启(生产环境不要设置)
AUTH_TRUST_HOST: "1"
# 可选:启用 /api/init(一次性),必须设置且仅通过请求头 x-init-token 传入
# INIT_ADMIN_TOKEN: "请替换为随机字符串"
# 可选:自定义 /api/init 创建的管理员初始密码(不设置则为 admin123)
# ADMIN_INIT_PASSWORD: "请替换为强密码"
NEXT_CACHE_DIR: "/data/.next-cache"
volumes:
- papergrid_data:/data
logging:
driver: "local"
options:
max-size: "10m"
max-file: "5"
restart: unless-stopped
volumes:
papergrid_data:
(按 Ctrl+O 保存,Ctrl+X 退出)
3.3 启动容器
Bash
docker compose up -d
检查状态:输入 docker ps,确保 STATUS 为 Up,且端口显示 0.0.0.0:6066->3000/tcp。
4. 宝塔面板配置 (关键步骤)
4.1 安装 Nginx
-
登录宝塔面板。
-
进入「软件商店」,安装 Nginx (推荐 1.22 或更高版本)。
-
检查:安装后确保 Nginx 状态为“运行中”(绿色三角形)。
4.2 添加网站
-
进入「网站」 -> 「添加站点」。
-
域名:填写你的域名。
-
PHP版本:选择“纯静态”即可。
-
提交。
4.3 配置 SSL (HTTPS)
-
点击网站名右侧的「设置」。
-
选择「SSL」 -> 「Let's Encrypt」。
-
勾选域名,点击「申请」。
-
成功后开启「强制 HTTPS」。
4.4 配置反向代理 (连接 Docker)
-
在网站设置窗口,选择「反向代理」。
-
点击「添加反向代理」:
-
代理名称:PaperGrid
-
目标URL:
http://127.0.0.1:6066 -
发送域名:
$host
-
-
提交。
5. 数据迁移 (旧服务器 -> 新服务器)
当你要换服务器时,只需要迁移 docker-compose.yml 和 数据卷。
5.1 备份旧数据 (在旧服务器操作)
PaperGrid 的数据主要在 Docker 的 Volume 中。我们需要找到它并打包。
-
查看数据卷位置:
Bash
codedocker volume inspect papergrid_papergrid_data #通常位于 /var/lib/docker/volumes/papergrid_papergrid_data/_data -
进入项目目录打包数据:
Bash
code# 1. 停止容器 cd /root/papergrid docker compose down # 2. 打包数据库文件 (假设你用了默认的 volume) # 建议直接把 /var/lib/docker/volumes/papergrid_papergrid_data/_data 下的 db.sqlite 复制出来 cp /var/lib/docker/volumes/papergrid_papergrid_data/_data/db.sqlite /root/papergrid/backup_db.sqlite # 3. 如果有上传的图片,也一并打包 -
下载:通过 SFTP 将
/root/papergrid整个文件夹(包含docker-compose.yml和backup_db.sqlite)下载到本地。
5.2 恢复数据 (在新服务器操作)
-
完成本文 第 1~2 步 (环境安装)。
-
将备份的文件夹上传到新服务器
/root/papergrid。 -
启动一次容器以自动创建路径:
Bash
codedocker compose up -d docker compose down # 生成路径后立刻停止 -
覆盖数据库文件: 将备份的
backup_db.sqlite覆盖到新服务器的 Docker 数据卷目录中:Bash
codecp /root/papergrid/backup_db.sqlite /var/lib/docker/volumes/papergrid_papergrid_data/_data/db.sqlite -
重启服务:
Bash
codedocker compose up -d
6. 常见故障排查
-
502 Bad Gateway:
-
检查 Docker 是否运行:
docker ps -
检查反向代理端口是否填错(应为 6066)。
-
-
无法访问 / 连接超时:
-
检查云服务器厂商的 安全组 是否开放了 80/443。
-
检查宝塔面板左侧「安全」菜单,是否放行了 80/443。
-
-
Nginx 启动失败:
- 如果在宝塔里点启动没反应,可能是配置文件错误。点击 Nginx 设置 -> 重载配置,看报错信息。通常是因为删除了网站但没删干净配置文件。
目录
作者
赤炜
电商打工人