适用架构: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

code
curl -fsSL https://get.docker.com | bash
systemctl enable --now docker

2.2 安装宝塔面板 (aaPanel)

以 Ubuntu 为例(其他系统请去宝塔官网复制):

Bash

code
wget -O install.sh https://download.bt.cn/install/install_lts.sh && sudo bash install.sh ed8484bec

安装完成后,记录下终端显示的 外网面板地址用户名密码


3. 部署 PaperGrid 容器

3.1 创建项目目录

Bash

code
mkdir -p /root/papergrid
cd /root/papergrid

3.2 创建配置文件

新建 docker-compose.yml 文件:

Bash

code
nano docker-compose.yml

复制以下内容(注意端口和域名):

YAML

code
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

code
docker compose up -d

检查状态:输入 docker ps,确保 STATUS 为 Up,且端口显示 0.0.0.0:6066->3000/tcp


4. 宝塔面板配置 (关键步骤)

4.1 安装 Nginx

  1. 登录宝塔面板。

  2. 进入「软件商店」,安装 Nginx (推荐 1.22 或更高版本)。

  3. 检查:安装后确保 Nginx 状态为“运行中”(绿色三角形)。

4.2 添加网站

  1. 进入「网站」 -> 「添加站点」。

  2. 域名:填写你的域名。

  3. PHP版本:选择“纯静态”即可。

  4. 提交。

4.3 配置 SSL (HTTPS)

  1. 点击网站名右侧的「设置」。

  2. 选择「SSL」 -> 「Let's Encrypt」。

  3. 勾选域名,点击「申请」。

  4. 成功后开启「强制 HTTPS」。

4.4 配置反向代理 (连接 Docker)

  1. 在网站设置窗口,选择「反向代理」。

  2. 点击「添加反向代理」:

    • 代理名称:PaperGrid

    • 目标URLhttp://127.0.0.1:6066

    • 发送域名$host

  3. 提交。


5. 数据迁移 (旧服务器 -> 新服务器)

当你要换服务器时,只需要迁移 docker-compose.yml数据卷

5.1 备份旧数据 (在旧服务器操作)

PaperGrid 的数据主要在 Docker 的 Volume 中。我们需要找到它并打包。

  1. 查看数据卷位置

    Bash

    code
    docker volume inspect papergrid_papergrid_data
    #通常位于 /var/lib/docker/volumes/papergrid_papergrid_data/_data
    
  2. 进入项目目录打包数据

    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. 如果有上传的图片,也一并打包
    
  3. 下载:通过 SFTP 将 /root/papergrid 整个文件夹(包含 docker-compose.ymlbackup_db.sqlite)下载到本地。

5.2 恢复数据 (在新服务器操作)

  1. 完成本文 第 1~2 步 (环境安装)。

  2. 将备份的文件夹上传到新服务器 /root/papergrid

  3. 启动一次容器以自动创建路径

    Bash

    code
    docker compose up -d
    docker compose down # 生成路径后立刻停止
    
  4. 覆盖数据库文件: 将备份的 backup_db.sqlite 覆盖到新服务器的 Docker 数据卷目录中:

    Bash

    code
    cp /root/papergrid/backup_db.sqlite /var/lib/docker/volumes/papergrid_papergrid_data/_data/db.sqlite
    
  5. 重启服务

    Bash

    code
    docker compose up -d
    

6. 常见故障排查

  • 502 Bad Gateway

    • 检查 Docker 是否运行:docker ps

    • 检查反向代理端口是否填错(应为 6066)。

  • 无法访问 / 连接超时

    • 检查云服务器厂商的 安全组 是否开放了 80/443。

    • 检查宝塔面板左侧「安全」菜单,是否放行了 80/443。

  • Nginx 启动失败

    • 如果在宝塔里点启动没反应,可能是配置文件错误。点击 Nginx 设置 -> 重载配置,看报错信息。通常是因为删除了网站但没删干净配置文件。

登录后发表评论

请先登录账号后再发表评论