Files
skelet/docs/deployment/environment-assessment.md
T

78 lines
3.1 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.
# 部署环境评估
> 记录 2026-07-06 对 Lightsail 实例的只读核查结果,以及 Skelet 第一版部署方式建议。
## 一、结论
当前 Lightsail 实例可以作为 Skelet 第一版的 2 核 2G VPS 使用,但运行环境尚未满足项目要求。
建议第一版采用系统环境部署:
```text
Ubuntu 22.04
Nginx 80/443
Gunicorn systemd service
Python 3.12 venv
Django / Wagtail
SQLite db.sqlite3 + WAL
local media/
daily backup
```
暂不建议把 Docker 作为第一版主部署路径。
## 二、当前实例核查结果
| 检查项 | 当前状态 | 判断 |
| --- | --- | --- |
| 实例规格 | AWS metadata 显示 `t3.small`;2 vCPU,约 1.9 GiB 内存 | 符合 2 核 2G 目标 |
| 系统 | Ubuntu 22.04.5 LTS | 可用 |
| 磁盘 | 根分区约 60G,已用约 4G | 足够 |
| Python | 只有 Python 3.10.12;未安装 Python 3.12 | 不符合 |
| SQLite | Python 内置 SQLite 3.37.2,JSON1 可用;未安装 `sqlite3` CLI | 部分符合 |
| Nginx | 未安装 | 不符合 |
| Gunicorn | 未安装 | 不符合 |
| 80/443 | 当前无监听服务 | 符合部署前提 |
| 防火墙 | `ufw` inactive | 后续需按部署策略配置 |
| SSH 用户 | `ubuntu` 可登录;`deploy` 公钥登录失败 | 需创建或配置 `deploy` 用户 |
| Swap | 未配置 swap | 建议补 1G swap |
| 现有服务 | Docker 已运行 `sub2api`、Postgres、Redis、shadowsocks;占用 8080/8388 | 非干净环境,但不阻止 Nginx 80/443 部署 |
## 三、为什么第一版建议用系统环境
项目当前文档已明确第一版部署目标是单 VPS、Gunicorn + Nginx、SQLite,并且不把 Docker 作为必需项。
Skelet 第一版是内容目录和评测站,运行结构简单。系统环境部署更贴近当前项目边界,组件少,故障面更小:
```text
Nginx -> Gunicorn -> Django/Wagtail -> SQLite
```
SQLite 放进 Docker 后,需要额外处理 volume、文件权限、WAL 文件、备份一致性和恢复路径。对当前 MVP 来说,这些复杂度没有带来足够收益。
当前实例上已经运行多个 Docker 容器,包括 Postgres 和 Redis。在 2G 内存机器上继续把 Skelet 容器化,会让资源边界和故障排查更复杂。第一版更重要的是尽快跑通 Wagtail、内容录入、SEO 验证和备份。
## 四、Docker 可作为后续选项
后续出现以下条件时,再重新评估 Docker:
- 迁移 PostgreSQL。
- 同机部署多个隔离服务。
- 需要 staging / production 环境一致性。
- 引入 Redis、后台 worker、任务队列等组件。
- 需要频繁迁移到其他机器或平台。
在这些条件出现前,Docker 不应成为第一版部署的默认前提。
## 五、上线前待补事项
1. 创建并配置 `deploy` 用户 SSH 登录。
2. 安装 Python 3.12。
3. 安装 `sqlite3` CLI、Nginx 和必要系统依赖。
4. T-001 初始化项目后,创建 Python venv 并安装 Wagtail / Django 依赖。
5. 配置 Gunicorn systemd service。
6. 配置 Nginx 反向代理和静态 / 媒体文件服务。
7. 启用 SQLite WAL。
8. 配置 `db.sqlite3` 和 `media/` 的每日备份。
9. 评估现有 Docker 服务是否继续保留,避免与 Skelet 争抢 2G 内存。