Files
NoteAI/DEPLOY.md
T
2026-02-24 09:53:19 +08:00

211 lines
6.7 KiB
Markdown
Raw 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.
# 部署指南 (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. 构建项目
在**本地电脑**上执行构建命令:
```bash
# 1. 安装依赖 (仅当添加了新包时需要)
npm install
# 2. 生成 Prisma 客户端 (仅当修改了数据库结构时需要)
npx prisma generate
# 3. 构建项目
npm run build
```
构建完成后,您会看到一个 `.next` 文件夹。
## 3. 打包发布 (推荐方式)
我们已经将繁琐的文件复制步骤自动化了。请按照以下“标准流程”进行部署:
### 3.1 本地构建 & 打包
1. **构建**:
```bash
npm run build
```
2. **打包** (运行自动化脚本):
在 PowerShell 中执行:
```powershell
./scripts/build-dockerapp.ps1
```
*这个脚本会自动将 `standalone`, `static`, `public`, `prisma`, `docker-compose.yml` 等所有必要文件整理到项目根目录下的 **`dockerapp`** 文件夹中。*
### 3.2 上传 & 部署
1. **上传**:
将整个 **`dockerapp`** 文件夹上传到服务器(例如 `/www/wwwroot/wojide/dockerapp`)。
2. **启动**:
进入服务器上的该目录,运行 Docker Compose
```bash
cd dockerapp
docker-compose up -d --build
```
此方式会自动使用包内的 `Dockerfile` 和 `docker-compose.yml` 构建并启动服务,无需再手动配置 Nginx 或 PM2(Docker 会处理端口映射,通常映射到 3001 或您配置的端口)。
**目录结构说明 (`dockerapp` 文件夹内)**:
```text
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` 存在:
```bash
### 5.1 数据库迁移
进入网站目录并运行迁移,确保 `dev.db` 存在:
**情况 A: 直接安装的 Node 环境 (宝塔默认)**
```bash
cd /www/wwwroot/wojide
npx prisma migrate deploy
```
**情况 B: Docker 部署 (1Panel / 容器化)**
即使文件在宿主机上,Docker 容器也能通过“挂载”访问它们。您只需**进入容器**并找到那个挂载目录。
1. **确定容器**: 在 1Panel 找到您的应用容器 ID。
2. **进入容器并运行**:
```bash
# 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 (在服务器终端)**
```bash
curl -X POST http://localhost:3000/api/settings/init
```
如果成功,会返回 `Initialized default settings`。
**方法 B: 使用浏览器控制台**
如果不方便用 Curl,可以在您的电脑浏览器打开网站登录页,按 `F12` 打开控制台,输入以下代码并回车:
```js
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 的用户 (通常是 `www` 或 `root`,视配置而定)。