From 8231c6a97631e58ab14a1b35a092c0b790b6ebe5 Mon Sep 17 00:00:00 2001 From: QiuSW Date: Mon, 6 Jul 2026 15:17:00 +0800 Subject: [PATCH] Add deployment environment assessment --- docs/deployment/environment-assessment.md | 77 +++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 docs/deployment/environment-assessment.md diff --git a/docs/deployment/environment-assessment.md b/docs/deployment/environment-assessment.md new file mode 100644 index 0000000..a123622 --- /dev/null +++ b/docs/deployment/environment-assessment.md @@ -0,0 +1,77 @@ +# 部署环境评估 + +> 记录 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 内存。