Files
soul/DEPLOYMENT.md

204 lines
7.4 KiB
Markdown
Raw Permalink 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.

# 部署指南
## 整站与后台管理端
本项目是**一个 Next.js 应用**,前台 H5、后台管理、API 都在同一套代码里:
- **前台**`/``/chapters``/read/*``/my``/match`
- **后台管理端**`/admin``/admin/login``/admin/settings``/admin/users`
- **API**`/api/*`(含 `/api/admin/*`
**部署一次 = 前台 + 后台 + API 一起上线。** 后台无需单独部署,上线后访问:
- 后台首页:`https://你的域名/admin`
- 后台登录:`https://你的域名/admin/login`(账号见项目文档,如 `admin` / `key123456`
---
## 项目内已有的部署配置
| 类型 | 文件/目录 | 说明 |
|------|------------|------|
| 总览文档 | `DEPLOYMENT.md`(本文件) | 部署步骤、环境变量、支付回调 |
| Docker | `Dockerfile` | Next.js 独立构建(`output: 'standalone'` |
| Docker 编排 | `docker-compose.yml` | 整站容器、端口 3000、支付/基础环境变量 |
| Next 配置 | `next.config.mjs` | `output: 'standalone'` 供 Docker 使用 |
| 宝塔一键部署 | `scripts/deploy-to-server.sh` | SSH 到宝塔服务器拉代码、安装依赖、构建、PM2 重启 |
| 宝塔自动化 | `开发文档/8、部署/Next.js自动化部署流程.md` | GitHub Webhook + 宝塔,推送即自动部署 |
| NAS 部署 | `deploy_to_nas.sh``redeploy.sh``quick_deploy.sh` | 部署到 NAS / 内网环境 |
| **宝塔部署(跨平台)** | **`scripts/deploy_baota.py`** | **Python 脚本Windows/Mac/Linux 通用,不依赖 .sh 或 sshpass** |
`vercel.json`Vercel 会按默认规则部署本仓库;若需自定义路由或头信息,可再加 `vercel.json`
---
## 宝塔部署Python 跨平台)
本项目在 Mac 上开发,原有一键部署脚本为 `scripts/deploy-to-server.sh`(依赖 sshpass仅 Linux/Mac。为在 **Windows / Mac / Linux** 上都能部署到宝塔,提供了 **Python 脚本**,不依赖 shell 或 sshpass。
### 1. 安装依赖
\`\`\`bash
pip install paramiko
\`\`\`
### 2. 配置服务器信息
复制示例配置并填写真实信息(**不要提交到 Git**
\`\`\`bash
cp scripts/deploy_config.example.json deploy_config.json
# 编辑 deploy_config.json填写 server_host、server_user、project_path、branch、pm2_app_name 等
\`\`\`
或使用环境变量(不写配置文件时,脚本会提示输入密码):
- `DEPLOY_HOST`:服务器 IP
- `DEPLOY_USER`SSH 用户名(如 root
- `DEPLOY_PROJECT_PATH`:服务器上项目路径(如 /www/wwwroot/soul
- `DEPLOY_BRANCH`:要部署的分支(如 soul-content
- `DEPLOY_PM2_APP`PM2 应用名(如 soul
- `DEPLOY_SSH_KEY`SSH 私钥路径(可选,不填则用密码)
### 3. 执行部署
在**项目根目录**执行:
\`\`\`bash
python scripts/deploy_baota.py
# 或指定配置
python scripts/deploy_baota.py --config scripts/deploy_config.json
# 仅查看将要执行的步骤(不连接)
python scripts/deploy_baota.py --dry-run
\`\`\`
脚本会依次执行SSH 连接 → 拉取代码 → 安装依赖 → 构建 → PM2 重启。部署完成后访问:
- 前台:`https://soul.quwanzhi.com`
- 后台:`https://soul.quwanzhi.com/admin`
### 4. 首次在宝塔上准备
若服务器上尚未有代码,需先在宝塔上:
1. 在网站目录(如 `/www/wwwroot/soul`)执行 `git clone <你的仓库> .`,或从本地上传代码。
2. 在宝塔「PM2 管理器」中新增项目:项目目录选该路径,启动文件为 `node_modules/next/dist/bin/next``node server.js`(若使用 standalone 输出),启动参数为 `start -p 3006`(与 `package.json``start` 端口一致)。
3. 配置 Nginx 反向代理到该端口,并绑定域名。
4. 之后即可用 `python scripts/deploy_baota.py` 做日常拉代码、构建、重启。
---
## 生产环境部署步骤
### 1. Vercel部署
\`\`\`bash
# 安装Vercel CLI
npm install -g vercel
# 登录Vercel
vercel login
# 部署项目
vercel --prod
\`\`\`
### 2. 环境变量配置
在Vercel项目设置中添加以下环境变量
**支付宝配置:**
- `ALIPAY_PARTNER_ID`: 2088511801157159
- `ALIPAY_KEY`: lz6ey1h3kl9zqkgtjz3avb5gk37wzbrp
- `ALIPAY_APP_ID`: wx432c93e275548671
- `ALIPAY_RETURN_URL`: https://your-domain.com/payment/success
- `ALIPAY_NOTIFY_URL`: https://your-domain.com/api/payment/alipay/notify
**微信支付配置:**
- `WECHAT_APP_ID`: wx432c93e275548671
- `WECHAT_APP_SECRET`: 25b7e7fdb7998e5107e242ebb6ddabd0
- `WECHAT_MCH_ID`: 1318592501
- `WECHAT_API_KEY`: wx3e31b068be59ddc131b068be59ddc2
- `WECHAT_NOTIFY_URL`: https://your-domain.com/api/payment/wechat/notify
**基础配置:**
- `NEXT_PUBLIC_BASE_URL`: https://your-domain.com
### 3. 域名配置
1. 在Vercel项目设置中绑定自定义域名
2. 配置DNS记录指向Vercel
3. 启用HTTPSVercel自动配置SSL证书
### 4. 支付回调配置
**支付宝配置:**
1. 登录支付宝开放平台
2. 在应用详情中配置异步通知地址:`https://your-domain.com/api/payment/alipay/notify`
3. 配置同步返回地址:`https://your-domain.com/payment/success`
**微信支付配置:**
1. 登录微信商户平台
2. 在产品中心配置支付回调URL`https://your-domain.com/api/payment/wechat/notify`
3. 添加支付授权域名:`your-domain.com`
**提现(商家转账到零钱):** 详见 `开发文档/提现功能完整技术文档.md`。需配置:
- `WECHAT_MCH_ID`:商户号
- `WECHAT_APP_ID`:小程序/公众号 AppID`wxb8bbb2b10dec74aa`
- `WECHAT_API_V3_KEY``WECHAT_MCH_KEY`APIv3 密钥32 字节,用于回调解密)
- `WECHAT_KEY_PATH``WECHAT_MCH_PRIVATE_KEY_PATH`商户私钥文件路径apiclient_key.pem
- `WECHAT_MCH_CERT_SERIAL_NO`商户证书序列号OpenSSL 从 apiclient_cert.pem 提取)
- 商户平台需配置:商家转账到零钱、转账结果通知 URL`https://你的域名/api/payment/wechat/transfer/notify`
### 5. 测试流程
1. 创建测试订单
2. 使用沙箱环境测试支付宝支付
3. 使用微信开发者工具测试微信支付
4. 验证回调接口正常接收
5. 确认订单状态更新正确
6. 验证内容解锁功能
### 6. 监控和日志
- 在Vercel Dashboard查看部署日志
- 使用Vercel Analytics监控访问数据
- 配置错误告警通知
## 本地开发
\`\`\`bash
# 安装依赖
npm install
# 启动开发服务器
npm run dev
# 访问 http://localhost:3000
\`\`\`
### Windows 本地执行 `pnpm build` 报 EPERM symlink
本项目使用 `output: 'standalone'`,构建时 Next.js 会创建符号链接。**Windows 默认不允许普通用户创建符号链接**,会报错:
- `EPERM: operation not permitted, symlink ... -> .next\standalone\node_modules\...`
**可选做法(任选其一):**
1. **开启 Windows 开发者模式(推荐,一劳永逸)**
- 设置 → 隐私和安全性 → 针对开发人员 → **开发人员模式** 打开
- 开启后无需管理员即可创建符号链接,本地 `pnpm build` 可正常完成。
2. **以管理员身份运行终端再执行构建**
- 右键 Cursor/终端 → “以管理员身份运行”,在项目根目录执行 `pnpm build`
若只做部署、不在本机打 standalone 包,可直接用 `python scripts/deploy_baota.py`,构建会在**服务器Linux**上执行,不会遇到该问题。
## 注意事项
1. 生产环境必须使用HTTPS
2. 定期更新支付密钥
3. 保护环境变量安全
4. 备份用户数据
5. 监控支付异常