8.9 KiB
SinCos 聚合站部署手册(详细版)
- 服务器:
124.220.63.9(1Panel + OpenResty + Python) - 域名:
sincos.cc(腾讯云备案,已解析 A 记录 → 124.220.63.9) - 站点形态:单站 FastAPI(:8003),根路径 = 科技首页(产品矩阵 + 研究 + 最新文章),其余为子页面
目录结构
website/ ← 整个目录上传到服务器 /opt/website
├─ main.py FastAPI 主程序
├─ license.py MAC→LIC 算法
├─ requirements.txt 依赖清单
├─ run.sh 启动脚本
├─ static/ 前端(首页/研究/工具/License/资源中心/博客/管理后台)
└─ data/ 运行时数据(自动创建)
├─ requests/*.txt 申请记录(DokuWiki 式)
├─ licenses/*.lic 生成的授权文件
└─ packages/ ★ 资源包(把真实资源包 zip 放这里)
全新重部署(清空 /opt/website)
适用于:网站目录全部推倒重来,服务器上其它服务(Gitea / Research Digest / Engineer Craft 等)不受影响。 ⚠️ 清空前必须备份运行时数据,否则申请记录、已生成的授权文件、资源包全部丢失。
0. 备份数据(强制)
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. 清空旧目录
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. 恢复运行时数据
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. 安装依赖
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. 验收
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/ 里的资源包已随备份恢复;若备份中没有,需重新上传真实资源包文件。
第一步:准备本地文件(常规更新)
- 优先直接使用
dist/sincos.cc-deploy-YYYYMMDD.zip(干净包:含 website/、.env、DEPLOY.md,不含 data/) - 或手动把
website/打成 zip(只打包目录本身,不含外层、不含 data/ 与 pycache/)
第二步:上传到服务器
方式 A:1Panel 网页上传
1Panel → 文件 → 进入 /opt → 上传 website.zip → 右键解压 → 得到 /opt/website/
方式 B:scp 命令行
scp dist\sincos.cc-deploy-YYYYMMDD.zip root@124.220.63.9:/opt/
# 服务器上:cd /opt && unzip -o sincos.cc-deploy-YYYYMMDD.zip -d /opt/
第三步:服务器安装依赖
SSH 登录服务器后执行:
# 确认 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 进程守护(图形化)
- 1Panel → 应用商店 → 安装 进程守护(Process Supervisor)
- 1Panel → 进程守护 → 创建:
- 名称:
reslib - 运行用户:
root - 运行目录:
/opt/website - 启动命令:
uvicorn main:app --host 0.0.0.0 --port 8003 - 环境变量:
RESLIB_ADMIN_PASSWORD=你的强密码(管理后台密码,务必修改) - 开机自启:开
- 名称:
- 创建后进程状态为"运行中"即成功
方式 B:1Panel Python 项目(图形化) 1Panel → 网站 → 创建网站 → 选择 Python 项目:
- 运行环境:选择已装的 Python
- 项目路径:
/opt/website - 启动命令:
uvicorn main:app --host 0.0.0.0 --port 8003 - 环境变量:
RESLIB_ADMIN_PASSWORD=你的强密码
方式 C:临时测试
cd /opt/website && RESLIB_ADMIN_PASSWORD="你的强密码" python3 -m uvicorn main:app --host 0.0.0.0 --port 8003
验证服务已监听:
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/ |
资源中心(私有服务入口) |
https://sincos.cc/blog/ |
文章列表 |
https://sincos.cc/admin |
管理后台(密码 = 第四步设置的) |
第九步:数据目录初始化
mkdir -p /opt/website/data/{requests,licenses,packages}
packages/放入真实资源包文件(zip 等),文件名即展示给用户的名字requests/、licenses/由系统自动写入
日常维护
写博客
# 本地
# 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/ 目录即可(申请记录 + 授权文件)
tar czf /root/reslib-backup-$(date +%F).tar.gz /opt/website/data
查看日志
# 1Panel 进程守护 → reslib → 日志
重启服务
# 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/
- 全站访问验证