Files
2026-02-24 09:53:19 +08:00

6.7 KiB
Raw Permalink Blame History

部署指南 (Deployment Guide)

本指南将指导您将应用部署到已安装 iPanel/宝塔面板 和 Node.js 环境的 Linux 服务器上。

1. 准备工作

启用 Standalone 模式 (已自动配置)

为了减小服务器上的文件体积,我们已经在 next.config.ts 中启用了 output: 'standalone' 模式。这会创建一个包含所有必要依赖的精简构建包。

检查环境

确保您的服务器已安装:

  • Node.js: 版本需 >= 18.0.0 (推荐 v20 LTS)
  • Nginx: 用于反向代理
  • PM2: 用于进程守护 (通常面板可以一键安装,或通过 npm install -g pm2 安装)
  • Database: 您的代码目前使用 SQLite (本地文件),部署非常简单。

2. 构建项目

本地电脑上执行构建命令:

# 1. 安装依赖 (仅当添加了新包时需要)
npm install

# 2. 生成 Prisma 客户端 (仅当修改了数据库结构时需要)
npx prisma generate

# 3. 构建项目
npm run build

构建完成后,您会看到一个 .next 文件夹。

3. 打包发布 (推荐方式)

我们已经将繁琐的文件复制步骤自动化了。请按照以下“标准流程”进行部署:

3.1 本地构建 & 打包

  1. 构建:

    npm run build
    
  2. 打包 (运行自动化脚本): 在 PowerShell 中执行:

    ./scripts/build-dockerapp.ps1
    

    这个脚本会自动将 standalone, static, public, prisma, docker-compose.yml 等所有必要文件整理到项目根目录下的 dockerapp 文件夹中。

3.2 上传 & 部署

  1. 上传: 将整个 dockerapp 文件夹上传到服务器(例如 /www/wwwroot/wojide/dockerapp)。

  2. 启动: 进入服务器上的该目录,运行 Docker Compose

    cd dockerapp
    docker-compose up -d --build
    

此方式会自动使用包内的 Dockerfiledocker-compose.yml 构建并启动服务,无需再手动配置 Nginx 或 PM2(Docker 会处理端口映射,通常映射到 3001 或您配置的端口)。

目录结构说明 (dockerapp 文件夹内):

dockerapp/
├── .next/            <-- 包含 static 和 standalone/server
├── node_modules/     <-- 最小化依赖
├── public/           <-- 静态资源
├── prisma/           <-- 数据库结构
├── Dockerfile        <-- 构建脚本
├── docker-compose.yml <-- 编排脚本
└── ...

4. 1Panel 面板配置指南 (图形化界面)

根据您提供的 1Panel 创建运行环境截图,请按以下方式填写:

  • 名称: wojide (或任意您喜欢的名字)
  • 应用: Node.js (版本保持默认或选择 LTS 版本)
  • 项目目录: 选择您在第 3 步上传文件的目录 (例如 /www/wwwroot/wojide)
  • 启动命令:
    • 开启 [自定义启动命令] 开关 (非常重要!)
    • 输入命令: node server.js
    • 解释: Standalone 模式下直接运行 server.js 即可,不需要 npm run start。
  • 包管理器: npm
  • 端口: 如果有端口设置,请输入 3000

点击确认创建后,容器会自动启动。

5. 服务器端配置 (数据库迁移)

登录服务器终端 (SSH) 或使用面板的终端功能。

5.1 数据库迁移

进入网站目录并运行迁移,确保 dev.db 存在:

### 5.1 数据库迁移
进入网站目录并运行迁移,确保 `dev.db` 存在:

**情况 A: 直接安装的 Node 环境 (宝塔默认)**
```bash
cd /www/wwwroot/wojide
npx prisma migrate deploy

情况 B: Docker 部署 (1Panel / 容器化)

即使文件在宿主机上,Docker 容器也能通过“挂载”访问它们。您只需进入容器并找到那个挂载目录。

  1. 确定容器: 在 1Panel 找到您的应用容器 ID。

  2. 进入容器并运行:

    # 1. 登录容器
    docker exec -it <container_id> sh
    
    # 2. 寻找项目目录 (关键步骤!)
    # 在 1Panel 中,网站目录通常也会挂载到容器内的相同路径,或者 /app 目录。
    # 尝试进入:
    cd /www/wwwroot/wojide  
    # 或者 ls /app 看看是否有文件
    
    # 3. 确认你在正确的目录下 (应该能看到 prisma 文件夹)
    ls 
    
    # 4. 运行迁移 (更稳妥的方式: 先全局安装指定版本)
    # 先安装 CLI 工具
    npm install -g prisma@5.10.2
    
    # 然后运行迁移
    prisma migrate deploy
    
    # 5. 退出
    exit
    

### 5.2 启动服务

使用 PM2 启动项目:

```bash
# 启动
pm2 start server.js --name "wojide-app"

# 查看状态
pm2 status

# 如果报错,查看日志
pm2 logs wojide-app

此时,项目应该运行在 http://localhost:3000

6. 初始化配置 (重要!)

首次部署后,数据库是空的,还没有设置密码。 您需要手动调用一次初始化接口来创建默认密码 (admin)。

方法 A: 使用 Curl (在服务器终端)

curl -X POST http://localhost:3000/api/settings/init

如果成功,会返回 Initialized default settings

方法 B: 使用浏览器控制台 如果不方便用 Curl,可以在您的电脑浏览器打开网站登录页,按 F12 打开控制台,输入以下代码并回车:

fetch('/api/settings/init', { method: 'POST' }).then(r=>r.json()).then(console.log)

初始化成功后,您可以使用默认密码 admin 登录。

7. 配置 Nginx 反向代理 (通过面板)

在面板中找到您的网站设置 -> 反向代理 (Reverse Proxy)

  • 代理名称: NextJS
  • 目标 URL: http://127.0.0.1:3000
  • 发送域名: $host

保存后,您应该可以通过域名访问您的网站了。

8. 后续更新 (代码修改后)

当您修改了代码并想要更新服务器版本时:

  1. 本地构建: 运行 npm run build
  2. 上传覆盖:
    • 上传 .next/standalone 中的内容覆盖服务器对应文件。
    • 上传 .next/static 覆盖服务器上的 .next/static
  3. 重启服务:
    • 在 1Panel 容器列表中,点击该容器的 “重启” 按钮。

注意: 如果您修改了数据库结构 (schema.prisma),请在重启前参考第 5.1 步进入容器运行 npx prisma migrate deploy

常见问题

  • 样式丢失? 请检查步骤 3/4,确保 .next/static 文件夹已正确上传到服务器的 .next/static 路径。Standalone 模式默认不包含静态资源,需要手动复制。

  • 数据库报错? 确保 .env 文件中的 DATABASE_URL 路径正确。对于 SQLite,建议使用绝对路径,例如 file:/www/wwwroot/your-website/prisma/dev.db

  • 权限问题? 确保网站目录的所有者是运行 Nginx/Node 的用户 (通常是 wwwroot,视配置而定)。