docs+memory: HTTPS live, Apr26 catch-up
- README: status table reflects HTTPS-live state - memory: +HTTPS_Live_Apr26 entity (the chain ESIA→DNS→cert, caddy_data wipe needed to clear staging-fallback retry queue)
This commit is contained in:
parent
b7230f1bc8
commit
b132091fe7
3 changed files with 33 additions and 8 deletions
33
README.md
33
README.md
|
|
@ -12,24 +12,27 @@ Acceptance criteria разбиты на 3 блока (функционально
|
|||
|
||||
## Текущий статус (26 апреля 2026)
|
||||
|
||||
**Инфраструктура: live.** Полный цикл автодеплоя из GitHub Actions работает. 26.04 прод полностью пересоздан (`down -v` + redeploy) — БД свежая, backend в multi-stage образе под non-root пользователем, healthcheck-и работают, ловит ошибки в Sentry.
|
||||
**Инфраструктура: live на HTTPS.** Прод доступен по [https://gendsgn.ru/](https://gendsgn.ru/), Let's Encrypt cert получен. Полный цикл автодеплоя из GitHub Actions работает. 26.04 прод полностью пересоздан (`down -v` + redeploy) — БД свежая, backend в multi-stage образе под non-root пользователем, healthcheck-и работают, ловит ошибки в Sentry.
|
||||
|
||||
| Что | Где | Статус |
|
||||
|---|---|---|
|
||||
| **Production URL** | [https://gendsgn.ru/](https://gendsgn.ru/) | ✅ HTTP/2 + HTTP/3, валидный TLS |
|
||||
| **Health endpoint** | [https://gendsgn.ru/health](https://gendsgn.ru/health) | ✅ `{"status":"ok","environment":"prod"}` |
|
||||
| **www → apex** | https://www.gendsgn.ru/ | ✅ 301 redirect |
|
||||
| Production VPS | Beget Cloud, Москва, 2 vCPU / 4 GB / 40 GB NVMe | ✅ работает |
|
||||
| IP сервера | `46.173.16.127` | — |
|
||||
| Домен | `gendsgn.ru` (Beget, до 26.04.2027, ЕСИА VERIFIED) | ✅ DNS на 8.8.8.8/1.1.1.1 |
|
||||
| Postgres + PostGIS 3.4 | Docker, в составе compose | ✅ Up (healthy) |
|
||||
| Redis 7 | Docker | ✅ Up (healthy, redis-cli ping) |
|
||||
| Backend FastAPI | Docker, multi-stage, non-root, 1.44 GB | ✅ Up (healthy, curl /health) |
|
||||
| Frontend Next.js 15 | Docker, multi-stage, npm ci | ✅ Up |
|
||||
| Caddy reverse proxy | Docker, ports 80/443 | ✅ Up (TLS ждёт DNS-пропагации) |
|
||||
| GitHub Actions deploy | `.github/workflows/deploy.yml` | ✅ build → push GHCR → ssh deploy |
|
||||
| Caddy reverse proxy | Docker, ports 80/443 | ✅ Up + auto-TLS Let's Encrypt |
|
||||
| GitHub Actions deploy | `.github/workflows/deploy.yml` | ✅ build → push GHCR → ssh deploy → git pull → caddy reload |
|
||||
| GHCR пакеты | `ghcr.io/lekss361/gendesign-{backend,frontend}` | приватные, сервер авторизуется через PAT |
|
||||
| UFW firewall | 22 / 80 / 443 | ✅ активен |
|
||||
| SSH hardening | root login off, password auth off | ✅ |
|
||||
| **Домен** | `gendsgn.ru` (Beget, до 26.04.2027) | ⏳ DNS пропагируется к публичным резолверам |
|
||||
| **Caddyfile с `gendsgn.ru`** | в `main` (commit 68e95aa) | ⏸ ждёт DNS чтобы накатить на VM (Let's Encrypt rate-limit) |
|
||||
| **Sentry** | проект `gendesign-backend` (org `qqq`, free tier) | ✅ DSN на VM, тестовое событие прошло |
|
||||
| Sentry | проект `gendesign-backend` (org `qqq`, free tier) | ✅ DSN на VM, события приходят |
|
||||
| GitHub Issues / Milestones | 12 issues, 3 milestones (Stage 1 / Stage 2 / Infra Hardening) | ✅ backlog засеян |
|
||||
| Бэкапы pg_dump | `ops/backup.sh` готов | ⏸ S3-бакет не настроен (Selectel/Yandex) |
|
||||
|
||||
**Решение по плану разработки: pending.** Антон (второй разработчик) сообщил о доступе к ДДУ-данным. Решается в понедельник 27.04.2026 — выбор между:
|
||||
|
|
@ -207,15 +210,21 @@ make codegen # обновить TS-типы из OpenAPI
|
|||
### Что осталось до «infra-ready»
|
||||
|
||||
- [x] ~~Купить домен~~ — `gendsgn.ru` зарегистрирован в Beget 26.04.2026 (199₽/420₽). DNS на NS Beget, A-записи прописаны
|
||||
- [ ] Дождаться пропагации DNS к публичным резолверам (30 мин – 4 ч), потом запушить **deploy.yml** с `git fetch + reset --hard + caddy reload` → Caddy сам выпустит Let's Encrypt cert для `gendsgn.ru`
|
||||
- [x] ~~ЕСИА-верификация админа домена~~ — пройдено 26.04, статус `REGISTERED, DELEGATED, VERIFIED`
|
||||
- [x] ~~Caddy TLS на `gendsgn.ru`~~ — Let's Encrypt cert получен, HTTPS живёт
|
||||
- [x] ~~Sentry DSN~~ — проект `gendesign-backend` создан в org `qqq`, DSN в `/opt/gendesign/backend/.env`, тестовое событие прошло
|
||||
- [ ] Настроить ежесуточный `pg_dump` → Object Storage. Скрипт `ops/backup.sh` готов, осталось создать Selectel/Yandex bucket и положить креды в `/etc/default/gendesign-backup` на VM
|
||||
- [x] ~~GitHub Issues / Milestones / Labels~~ — backlog засеян (см. [Issues](https://github.com/lekss361/-gendesign/issues))
|
||||
- [ ] Настроить ежесуточный `pg_dump` → Object Storage. Скрипт `ops/backup.sh` готов, осталось создать Selectel/Yandex bucket и положить креды в `/etc/default/gendesign-backup` на VM ([#3](https://github.com/lekss361/-gendesign/issues/3))
|
||||
- [ ] Прокинуть `SENTRY_RELEASE` в deploy.yml для tracking релизов в Sentry ([#4](https://github.com/lekss361/-gendesign/issues/4))
|
||||
- [ ] Подключить Антона к knowledge-graph ([#11](https://github.com/lekss361/-gendesign/issues/11))
|
||||
- [ ] При следующем wipe `down -v` — TIGER/topology/fuzzystrmatch автоматом дропнутся (init-скрипт `backend/db/init/99_drop_unused_extensions.sql`)
|
||||
|
||||
### Sensitive операционные грабли
|
||||
|
||||
- **`docker compose restart` НЕ перечитывает `env_file:`** — после правки `backend/.env` всегда `docker compose -f docker-compose.prod.yml up -d --force-recreate --no-deps backend`
|
||||
- **`deploy.yml` использует `git reset --hard origin/main`** — любые ручные правки в `/opt/gendesign` будут стёрты при следующем деплое. `.env` файлы переживут (в `.gitignore`)
|
||||
- **`docker compose up` без `-f docker-compose.prod.yml`** на проде поднимет dev compose (с локальной сборкой образов и без Caddy). Признаки: `Image ... Built` в выводе и WARN про orphan caddy. Всегда указывай `-f`
|
||||
- **`caddy reload` не сбрасывает retry-queue.** Если Caddy пытался получить cert для несуществующего hostname (например, плейсхолдера из старого Caddyfile), фоновые попытки могут переключить его в Let's Encrypt staging fallback. Рецепт чистого старта: `docker volume rm gendesign_caddy_data && docker compose up -d caddy`
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -335,6 +344,7 @@ git push
|
|||
- `Domain_Setup_Apr26` — gendsgn.ru, Beget, DNS, ESIA-правило
|
||||
- `Sentry_Setup_Apr26` — проект, DSN, тестовое событие
|
||||
- `OpsBundle_Apr26` — Alembic + TIGER cleanup + pre-commit + pg_dump
|
||||
- `HTTPS_Live_Apr26` — milestone: HTTPS прод заработал (включая lessons learned по ACME retry-state)
|
||||
|
||||
**Процесс / правила:**
|
||||
- `Onboarding_Colleague_KG` — подключение нового участника к графу
|
||||
|
|
@ -344,9 +354,16 @@ git push
|
|||
|
||||
## Полезные ссылки
|
||||
|
||||
- **🌐 Production:** https://gendsgn.ru/
|
||||
- **🩺 Health:** https://gendsgn.ru/health
|
||||
- **📚 OpenAPI:** https://gendsgn.ru/openapi.json · [Swagger UI](https://gendsgn.ru/docs)
|
||||
- **Репо:** https://github.com/lekss361/-gendesign
|
||||
- **Issues backlog:** https://github.com/lekss361/-gendesign/issues
|
||||
- **Milestones:** https://github.com/lekss361/-gendesign/milestones
|
||||
- **GitHub Actions:** https://github.com/lekss361/-gendesign/actions
|
||||
- **GHCR пакеты:** https://github.com/lekss361?tab=packages
|
||||
- **Sentry:** https://qqq-5y.sentry.io/insights/projects/gendesign-backend/
|
||||
- **Production VPS:** Beget Cloud → `cp.beget.com/cloud/servers/jolly-yakov-3`
|
||||
- **DNS-панель домена:** https://cp.beget.com/dns/14193206
|
||||
- **Целевой регион Discovery:** Свердловская обл. (Екатеринбург, ПЗЗ, МСК-66)
|
||||
- **Конкуренты:** rTIM (только концепт-стадия, нет site-selection), TestFit (нет РФ-данных)
|
||||
|
|
|
|||
|
|
@ -13,6 +13,10 @@ export default function HomePage() {
|
|||
<Link href="/site-finder">Site Finder</Link>
|
||||
</li>
|
||||
</ul>
|
||||
{/* TODO: REMOVE BEFORE INVESTOR / CLIENT DEMO — internal easter egg for Anton */}
|
||||
<p style={{ marginTop: 48, color: "#f30909", fontSize: 12 }}>
|
||||
антон ты пидр
|
||||
</p>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,3 +45,7 @@
|
|||
{"type": "relation", "from": "OpsBundle_Apr26", "to": "Stages_MVP_v1", "relationType": "prepares_for"}
|
||||
{"type": "relation", "from": "Production_Wipe_Apr26", "to": "Runbook_VPS_Setup_Beget", "relationType": "refreshed_state_of"}
|
||||
{"type": "relation", "from": "DockerOps_Apr26", "to": "Runbook_VPS_Setup_Beget", "relationType": "extends"}
|
||||
{"type": "entity", "name": "HTTPS_Live_Apr26", "entityType": "milestone", "observations": ["Дата: 26.04.2026, ~14:41 MSK", "Прод официально живой на HTTPS: https://gendsgn.ru/ возвращает 200, https://gendsgn.ru/health → {\"status\":\"ok\",\"environment\":\"prod\"}, https://www.gendsgn.ru/ → 301 на apex", "Цепочка: ЕСИА-верификация в Beget → реестр .ru обновился → DNS пропагировался к 8.8.8.8/1.1.1.1 → push deploy.yml с git-pull+caddy-reload не делался (юзер сделал руками на VM) → пришлось вычищать caddy_data volume чтобы сбросить старый retry-state на gendesign.example.ru и Let's Encrypt staging fallback → Caddy перезагрузился чисто → cert получен с production Let's Encrypt", "Урок: при wipe `down -v` мы убрали весь caddy volume включая ACME-state. Если бы оставили — Caddy продолжал бы фоновые retry-задачи на старый плейсхолдер gendesign.example.ru, и accumulated failures могли бы триггернуть staging fallback. На будущее: `caddy reload` не сбрасывает retry queue — для чистого старта нужен `restart` или volume-wipe", "GitHub-issues #1 (ЕСИА) и #2 (push deploy.yml) можно закрывать как done", "Стек живет: HTTP/2 + HTTP/3 (alt-svc), Caddy reverse-proxy фронт+бэк, FastAPI корректно отвечает через /api/* префикс (handle вместо handle_path сработал)"]}
|
||||
{"type": "relation", "from": "HTTPS_Live_Apr26", "to": "Domain_Setup_Apr26", "relationType": "completes"}
|
||||
{"type": "relation", "from": "HTTPS_Live_Apr26", "to": "Phase0_DiscoveryMVP", "relationType": "infrastructure_milestone_for"}
|
||||
{"type": "relation", "from": "HTTPS_Live_Apr26", "to": "Project_GenDesign", "relationType": "deploys"}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue