mirror of
https://github.com/cita-777/metapi.git
synced 2026-11-03 06:04:15 +08:00
267 lines
5.8 KiB
Markdown
267 lines
5.8 KiB
Markdown
# 🚢 部署指南
|
||
|
||
[返回文档中心](./README.md)
|
||
|
||
---
|
||
|
||
## Zeabur 一键部署
|
||
|
||
<a href="https://zeabur.com/templates/DOX5PR">
|
||
<img alt="Deploy on Zeabur" src="https://zeabur.com/button.svg" height="28">
|
||
</a>
|
||
|
||
点击按钮即可一键部署到 [Zeabur](https://zeabur.com),无需手动配置 Docker 或服务器。
|
||
|
||
模板会自动完成:
|
||
|
||
- 拉取 `1467078763/metapi:latest` 镜像
|
||
- 配置 HTTP 端口(4000)
|
||
- 挂载持久化存储(`/app/data`)
|
||
- 分配域名
|
||
|
||
部署时需要填写以下变量:
|
||
|
||
| 变量 | 说明 |
|
||
|------|------|
|
||
| `AUTH_TOKEN` | 后台管理员登录令牌(请设置强密码) |
|
||
| `PROXY_TOKEN` | 下游客户端调用 `/v1/*` 时使用的 Bearer Token |
|
||
| `TZ` | 服务时区,影响定时任务和日志(如 `Asia/Shanghai`) |
|
||
| `PORT` | 内部监听端口(默认 `4000`,一般无需修改) |
|
||
|
||
部署完成后,通过 Zeabur 分配的域名访问后台管理面板即可。
|
||
|
||
---
|
||
|
||
## Docker Compose 部署(推荐)
|
||
|
||
### 标准步骤
|
||
|
||
```bash
|
||
mkdir metapi && cd metapi
|
||
|
||
# 创建 docker-compose.yml(参见快速上手)
|
||
# 设置环境变量
|
||
export AUTH_TOKEN=your-admin-token
|
||
export PROXY_TOKEN=your-proxy-sk-token
|
||
|
||
# 启动
|
||
docker compose up -d
|
||
```
|
||
|
||
### 使用 `.env` 文件
|
||
|
||
如果不想每次 export,可以创建 `.env` 文件:
|
||
|
||
```bash
|
||
# .env
|
||
AUTH_TOKEN=your-admin-token
|
||
PROXY_TOKEN=your-proxy-sk-token
|
||
TZ=Asia/Shanghai
|
||
PORT=4000
|
||
```
|
||
|
||
```bash
|
||
docker compose --env-file .env up -d
|
||
```
|
||
|
||
> ⚠️ `.env` 文件包含敏感信息,请勿提交到 Git 仓库。
|
||
|
||
## Docker 命令部署
|
||
|
||
```bash
|
||
docker run -d --name metapi \
|
||
-p 4000:4000 \
|
||
-e AUTH_TOKEN=your-admin-token \
|
||
-e PROXY_TOKEN=your-proxy-sk-token \
|
||
-e TZ=Asia/Shanghai \
|
||
-v ./data:/app/data \
|
||
--restart unless-stopped \
|
||
1467078763/metapi:latest
|
||
```
|
||
|
||
> **路径说明:**
|
||
> - `./data:/app/data` — 相对路径,数据存到当前目录下的 `data` 文件夹
|
||
> - 也可以使用绝对路径:`/your/custom/path:/app/data`
|
||
|
||
## Release 包部署(免 Docker)
|
||
|
||
适用于没有 Docker 环境的服务器,或 Windows / macOS 桌面使用场景。
|
||
|
||
### 前置条件
|
||
|
||
- Node.js 20+(推荐 22 LTS)
|
||
|
||
### 步骤
|
||
|
||
1. 从 [Releases](https://github.com/cita-777/metapi/releases) 下载与你系统匹配的压缩包(Linux / Windows / macOS)
|
||
2. 解压后进入目录
|
||
|
||
Linux / macOS:
|
||
|
||
```bash
|
||
export AUTH_TOKEN=your-admin-token
|
||
export PROXY_TOKEN=your-proxy-sk-token
|
||
export PORT=4000
|
||
export DATA_DIR=./data
|
||
./start.sh
|
||
```
|
||
|
||
Windows(PowerShell):
|
||
|
||
```powershell
|
||
$env:AUTH_TOKEN="your-admin-token"
|
||
$env:PROXY_TOKEN="your-proxy-sk-token"
|
||
$env:PORT="4000"
|
||
$env:DATA_DIR="./data"
|
||
.\start.bat
|
||
```
|
||
|
||
`start.sh` / `start.bat` 的作用是:
|
||
|
||
- 先检查 `better-sqlite3` 与当前 Node.js ABI 是否兼容
|
||
- 若检测到 ABI 不匹配,会自动尝试 `npm rebuild better-sqlite3`
|
||
- 若重建失败,会回退到 `npm ci --omit=dev` 重新安装运行时依赖
|
||
- 最后执行数据库迁移并启动服务
|
||
|
||
> [!NOTE]
|
||
> 如果本机 Node 主版本与打包时不同(例如包内依赖基于 Node 22,而本机是 Node 24),首次启动可能触发自动重建,需联网。
|
||
|
||
### Release 包升级
|
||
|
||
1. 下载新版本的 Release 包
|
||
2. 解压覆盖旧文件(`data/` 目录不受影响)
|
||
3. 重新启动即可
|
||
|
||
---
|
||
|
||
## 反向代理
|
||
|
||
### Nginx
|
||
|
||
流式请求(SSE)需要关闭缓冲,否则流式输出会异常:
|
||
|
||
```nginx
|
||
server {
|
||
listen 443 ssl;
|
||
server_name your-domain.com;
|
||
|
||
ssl_certificate /path/to/cert.pem;
|
||
ssl_certificate_key /path/to/key.pem;
|
||
|
||
location / {
|
||
proxy_pass http://127.0.0.1:4000;
|
||
|
||
# SSE 关键配置
|
||
proxy_buffering off;
|
||
proxy_cache off;
|
||
proxy_set_header Connection '';
|
||
proxy_http_version 1.1;
|
||
chunked_transfer_encoding off;
|
||
|
||
# 标准代理头
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
|
||
# 超时设置(长对话场景)
|
||
proxy_read_timeout 300s;
|
||
proxy_send_timeout 300s;
|
||
}
|
||
}
|
||
```
|
||
|
||
### Caddy
|
||
|
||
```
|
||
your-domain.com {
|
||
reverse_proxy localhost:4000 {
|
||
flush_interval -1
|
||
}
|
||
}
|
||
```
|
||
|
||
## 升级
|
||
|
||
```bash
|
||
# 拉取最新镜像
|
||
docker compose pull
|
||
|
||
# 重新启动(数据不受影响)
|
||
docker compose up -d
|
||
|
||
# 清理旧镜像
|
||
docker image prune -f
|
||
```
|
||
|
||
## 回滚
|
||
|
||
如果升级后出现问题:
|
||
|
||
1. **升级前备份**(建议每次升级前执行):
|
||
|
||
```bash
|
||
cp -r data/ data-backup-$(date +%Y%m%d)/
|
||
```
|
||
|
||
2. **回滚到指定版本**:
|
||
|
||
```bash
|
||
# 修改 docker-compose.yml 中的 image tag
|
||
# 例如:image: 1467078763/metapi:v1.0.0
|
||
|
||
# 恢复数据
|
||
rm -rf data/
|
||
cp -r data-backup-20260228/ data/
|
||
|
||
# 重启
|
||
docker compose up -d
|
||
```
|
||
|
||
## 数据持久化
|
||
|
||
Metapi 的所有运行数据存储在 SQLite 数据库中,位于 `DATA_DIR`(默认 `./data`)目录下。
|
||
|
||
只要挂载了该目录,升级、重启都不会丢失数据。
|
||
|
||
### 备份策略建议
|
||
|
||
- 每日自动备份 `data/` 目录
|
||
- 保留最近 7~30 天的备份
|
||
- 重要操作前手动快照
|
||
|
||
## 文档站部署
|
||
|
||
Metapi 使用 [VitePress](https://vitepress.dev) 构建文档站,支持本地预览和 GitHub Pages 自动部署。
|
||
|
||
### 本地预览
|
||
|
||
```bash
|
||
npm run docs:dev
|
||
```
|
||
|
||
访问 `http://localhost:4173` 查看文档站。
|
||
|
||
### 构建静态站点
|
||
|
||
```bash
|
||
npm run docs:build
|
||
```
|
||
|
||
构建产物位于 `docs/.vitepress/dist/`,可部署到任意静态站点托管服务。
|
||
|
||
### GitHub Pages 自动部署
|
||
|
||
推送到 `main` 分支后,`.github/workflows/docs-pages.yml` 会自动构建并部署到 GitHub Pages。
|
||
|
||
首次使用需在仓库设置中开启:
|
||
|
||
`Settings → Pages → Build and deployment → Source: GitHub Actions`
|
||
|
||
---
|
||
|
||
## 下一步
|
||
|
||
- [配置说明](./configuration.md) — 详细环境变量
|
||
- [运维手册](./operations.md) — 日志排查、健康检查
|