Files

286 lines
8.9 KiB
Markdown
Raw Permalink Normal View History

2026-08-13 21:24:16 +08:00
# SinCos 聚合站部署手册(详细版)
- 服务器:`124.220.63.9`(1Panel + OpenResty + Python)
- 域名:`sincos.cc`(腾讯云备案,已解析 A 记录 → 124.220.63.9)
- 站点形态:单站 FastAPI(:8003),根路径 = 科技首页(产品矩阵 + 研究 + 最新文章),其余为子页面
2026-08-13 21:24:16 +08:00
## 目录结构
```
website/ ← 整个目录上传到服务器 /opt/website
├─ main.py FastAPI 主程序
├─ license.py MAC→LIC 算法
├─ requirements.txt 依赖清单
├─ run.sh 启动脚本
├─ static/ 前端(首页/研究/工具/License/资源中心/博客/管理后台)
2026-08-13 21:24:16 +08:00
└─ data/ 运行时数据(自动创建)
├─ requests/*.txt 申请记录(DokuWiki 式)
├─ licenses/*.lic 生成的授权文件
└─ packages/ ★ 资源包(把真实资源包 zip 放这里)
```
---
## 全新重部署(清空 /opt/website)
2026-08-13 21:24:16 +08:00
> 适用于:网站目录全部推倒重来,服务器上其它服务(Gitea / Research Digest / Engineer Craft 等)不受影响。
> ⚠️ 清空前**必须备份运行时数据**,否则申请记录、已生成的授权文件、资源包全部丢失。
### 0. 备份数据(强制)
```bash
tar czf /root/website-backup-$(date +%F).tar.gz /opt/website/data
# 建议再拉回本地一份:
# scp root@124.220.63.9:/root/website-backup-*.tar.gz ./
```
### 1. 停止服务
1Panel → 进程守护 → `reslib` → 停止
### 2. 清空旧目录
```bash
rm -rf /opt/website
```
### 3. 上传并解压新包
本地使用 `dist/sincos.cc-deploy-YYYYMMDD.zip`(含 `website/` 与 `DEPLOY.md`):
- 1Panel → 文件 → `/opt` → 上传 → 解压;或
- scp 后执行 `cd /opt && unzip -o sincos.cc-deploy-YYYYMMDD.zip -d /opt/`
得到全新的 `/opt/website/`。
### 4. 恢复运行时数据
```bash
tar xzf /root/website-backup-$(date +%F).tar.gz -C /
mkdir -p /opt/website/data/{requests,licenses,packages}
```
确认三个目录都在:`/opt/website/data/requests`、`licenses`、`packages`。
### 5. 安装依赖
```bash
pip3 install -r /opt/website/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
```
### 6. 确认管理密码
- 新包内 `website/.env` 已带 `RESLIB_ADMIN_PASSWORD=ds3317210`;
- 若 1Panel 进程守护里配置了同名环境变量,**环境变量优先**,需在 1Panel 里同步改成新密码。
### 7. 启动服务
1Panel → 进程守护 → `reslib` → 启动(如已删除则重新创建):
- 运行目录:`/opt/website`
- 启动命令:`uvicorn main:app --host 0.0.0.0 --port 8003`
- 环境变量:`RESLIB_ADMIN_PASSWORD=ds3317210`(可选,与 .env 二选一)
- 开机自启:开
### 8. 验收
```bash
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8003/
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8003/license/
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8003/tools/
```
浏览器验证:
| 地址 | 预期 |
|---|---|
| `https://sincos.cc/` | 新科技首页 |
| `https://sincos.cc/tools/` | 工具矩阵 + 界面实录 |
| `https://sincos.cc/research/neural/` | NeuralMix v2.0(含图表) |
| `https://sincos.cc/license/` | License 中心 |
| `https://sincos.cc/admin` | 用新密码 `ds3317210` 登录 |
### 9. 资源包
原 `data/packages/` 里的资源包已随备份恢复;若备份中没有,需重新上传真实资源包文件。
---
## 第一步:准备本地文件(常规更新)
1. 优先直接使用 `dist/sincos.cc-deploy-YYYYMMDD.zip`(干净包:含 website/、.env、DEPLOY.md,不含 data/)
2. 或手动把 `website/` 打成 zip(只打包目录本身,不含外层、不含 data/ 与 __pycache__/)
2026-08-13 21:24:16 +08:00
---
## 第二步:上传到服务器
**方式 A:1Panel 网页上传**
1Panel → 文件 → 进入 `/opt` → 上传 `website.zip` → 右键解压 → 得到 `/opt/website/`
**方式 B:scp 命令行**
```bash
scp dist\sincos.cc-deploy-YYYYMMDD.zip root@124.220.63.9:/opt/
# 服务器上:cd /opt && unzip -o sincos.cc-deploy-YYYYMMDD.zip -d /opt/
2026-08-13 21:24:16 +08:00
```
---
## 第三步:服务器安装依赖
SSH 登录服务器后执行:
```bash
# 确认 python 版本(1Panel 环境一般自带 python3)
python3 --version
# 安装依赖
pip3 install -r /opt/website/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
```
若提示 pip3 不存在,用 `python3 -m pip install -r /opt/website/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple`
---
## 第四步:设置管理密码并启动
**方式 A(推荐):1Panel 进程守护(图形化)**
1. 1Panel → 应用商店 → 安装 **进程守护**(Process Supervisor)
2. 1Panel → 进程守护 → 创建:
- 名称:`reslib`
- 运行用户:`root`
- 运行目录:`/opt/website`
- 启动命令:`uvicorn main:app --host 0.0.0.0 --port 8003`
- 环境变量:`RESLIB_ADMIN_PASSWORD=你的强密码`(管理后台密码,务必修改)
- 开机自启:开
3. 创建后进程状态为"运行中"即成功
**方式 B:1Panel Python 项目(图形化)**
1Panel → 网站 → 创建网站 → 选择 **Python 项目**:
- 运行环境:选择已装的 Python
- 项目路径:`/opt/website`
- 启动命令:`uvicorn main:app --host 0.0.0.0 --port 8003`
- 环境变量:`RESLIB_ADMIN_PASSWORD=你的强密码`
**方式 C:临时测试**
```bash
cd /opt/website && RESLIB_ADMIN_PASSWORD="你的强密码" python3 -m uvicorn main:app --host 0.0.0.0 --port 8003
```
验证服务已监听:
```bash
curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8003/
# 应返回 200
```
---
## 第五步:1Panel 建站(反代)
1Panel → 网站 → 创建网站 → **反向代理**:
- 主域名:`sincos.cc`
- 其他域名:留空(不需要 www)
- 代理地址:`http://127.0.0.1:8003`
- 创建
然后 网站 → 选中 sincos.cc → **网站** → 确认 OpenResty 已启用(反向代理自动走 OpenResty)。
---
## 第六步:HTTPS 证书
1Panel → 网站 → sincos.cc → **HTTPS** → 申请证书:
- 类型:Let's Encrypt(推荐,自动续期)
- 勾选:强制 HTTPS、自动续期
- 申请成功后站点即带 https://
> 备案域名证书申请无特殊要求。若 Let's Encrypt 连不上,可改用腾讯云免费证书(DNSPod 申请 → 上传证书)。
---
## 第七步:防火墙放行
1Panel → 安全 → 防火墙:
- 放行端口:`80`、`443`(8003 不需要对外开放,只在服务器内网访问)
- 若之前有其他站点端口(30000/10000 等)保持原状
---
## 第八步:上线验证
| 地址 | 预期 |
|---|---|
| `https://sincos.cc/` | 科技首页(Hero + 研究平台 + 工具矩阵 + 最新文章) |
| `https://sincos.cc/research/` | 前沿技术研究聚合页 |
| `https://sincos.cc/tools/` | 工具开发产品页(6 个产品独立介绍页) |
| `https://sincos.cc/license/` | License 中心(申请 / 查询下载 / 资源包) |
| `https://sincos.cc/license/apply` | License 申请(MAC 输入) |
| `https://sincos.cc/license/status` | 查询/下载 |
| `https://sincos.cc/license/package` | 资源包获取(仅 approved) |
| `https://sincos.cc/resources/` | 资源中心(私有服务入口) |
2026-08-13 21:24:16 +08:00
| `https://sincos.cc/blog/` | 文章列表 |
| `https://sincos.cc/admin` | 管理后台(密码 = 第四步设置的) |
---
## 第九步:数据目录初始化
```bash
mkdir -p /opt/website/data/{requests,licenses,packages}
```
- `packages/` 放入真实资源包文件(zip 等),文件名即展示给用户的名字
- `requests/`、`licenses/` 由系统自动写入
---
## 日常维护
**写博客**
```powershell
# 本地
# 1. 新建 blog\posts\2026-xx-xx-标题.md(front matter: title/date/tags)
# 2. 构建
python -X utf8 blog\build.py
# 3. 将 website\static\home.html、about.html、blog\ 目录 上传覆盖到服务器 /opt/website/static/
```
**备份**(每周):备份 `/opt/website/data/` 目录即可(申请记录 + 授权文件)
```bash
tar czf /root/reslib-backup-$(date +%F).tar.gz /opt/website/data
```
**查看日志**
```bash
# 1Panel 进程守护 → reslib → 日志
```
**重启服务**
```bash
# 1Panel 进程守护 → reslib → 重启(或先停后启)
```
---
## 常见问题
| 问题 | 处理 |
|---|---|
| 80/443 访问超时 | 检查防火墙放行、1Panel 网站状态 |
| 反代 502 | `curl http://127.0.0.1:8003/` 检查后端是否在跑;1Panel 进程守护查看 reslib 状态 |
| 证书申请失败 | 确认 DNS A 记录解析完成且 80 端口可访问 |
| 申请提交后 txt 乱码 | 确认服务器 `python3` 默认编码 UTF-8(正常不会) |
| 忘记管理密码 | SSH 执行 `export RESLIB_ADMIN_PASSWORD=新密码` 后重启服务 |
## 待办清单
- [ ] 上传 website/ 到服务器
- [ ] 安装依赖
- [ ] 设置 RESLIB_ADMIN_PASSWORD
- [ ] 启动服务并 curl 验证 200
- [ ] 1Panel 建反代站 + SSL
- [ ] 防火墙放行 80/443
- [ ] 放真实资源包到 data/packages/
- [ ] 全站访问验证