mirror of
https://gitverse.ru/kpa39l/gotosocial.git
synced 2026-09-29 01:50:08 +00:00
5.2 KiB
5.2 KiB
GoToSocial Deploy — Delta Spec
ADDED Requirements
Requirement: Инстанс GoToSocial работает в Docker на bigbox
- MUST: Сервис GoToSocial запускается как Docker-контейнер из
/opt/gotosocialчерезdocker compose - MUST: Используется образ с фиксированным тегом последнего стабильного релиза (например
superseriousbusiness/gotosocial:v0.22.1) - MUST: Контейнер имеет volume для данных:
data/sqlite.db(SQLite) иdata/storage(медиа) - MUST: Приложение слушает порт внутри контейнера, проброшенный наружу (например
8080:8080) - SHOULD: Рестарт контейнера настроен (
restart: unless-stopped)
Scenario: Контейнер запущен
- GIVEN контейнер запущен, WHEN
docker ps, THEN контейнерgotosocialв статусе Up - GIVEN сервис работает, WHEN
curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:<port>/, THEN HTTP 200
Requirement: Split-domain — host social.dedinit.ru, account-domain dedinit.ru
- MUST: В
config.yaml:host: social.dedinit.ru,account-domain: dedinit.ru,protocol: https - MUST: Не менять
host/account-domainпосле первого запуска (необратимо) - MUST: На apex
dedinit.ru(Jino) добавлены редиректы:/.well-known/webfinger→https://social.dedinit.ru/.well-known/webfinger/.well-known/nodeinfo→https://social.dedinit.ru/.well-known/nodeinfo/.well-known/host-meta→https://social.dedinit.ru/.well-known/host-meta
- SHOULD: Проверить редиректы после публикации на apex
Scenario: Webfinger резолвится
- GIVEN инстанс запущен, WHEN
curl -s -H 'Accept: application/json' 'https://social.dedinit.ru/.well-known/webfinger?resource=acct:estorozhenko@dedinit.ru', THEN JSON с actor - GIVEN apex настроен, WHEN
curl -s -o /dev/null -w '%{http_code}' -L 'https://dedinit.ru/.well-known/webfinger?resource=acct:estorozhenko@dedinit.ru', THEN 200 после редиректа
Requirement: TLS через Caddy на vps02
- MUST: Caddy (vps02, host net) имеет блок
social.dedinit.ru { reverse_proxy 10.8.0.2:<port> } - MUST: Caddy выпускает Let's Encrypt сертификат для social.dedinit.ru автоматически
- MUST: GtS доверяет прокси: в
config.yamltrusted-proxiesвключает IP/подсеть Caddy (например10.8.0.2) - SHOULD: Header
HostиX-Forwarded-Protoпередаются в GtS
Scenario: HTTPS работает
- GIVEN Caddy настроен, WHEN
curl -s -o /dev/null -w '%{http_code}' https://social.dedinit.ru/, THEN 200 - GIVEN сертификат, WHEN
echo | openssl s_client -connect social.dedinit.ru:443 2>/dev/null | openssl x509 -noout -dates, THEN даты валидны
Requirement: SMTP-отправка писем
- MUST:
config.yamlсодержит SMTP:smtp.jino.ru:587, STARTTLS, логинsocial@dedinit.ru(пароль из.env) - MUST: Письма (подтверждение email, уведомления) отправляются через SMTP-сервер
- SHOULD: Проверка отправки тестового письма
Scenario: Отправка письма
- GIVEN SMTP настроен, WHEN администратор инициирует отправку (например создание пользователя / тест), THEN письмо доставлено на указанный адрес
- GIVEN неверный пароль SMTP, WHEN отправка, THEN в логах GtS ошибка аутентификации (не тихий fail)
Requirement: Метрики Prometheus
- MUST: В
config.yaml:metrics-enabled: true - MUST: Переменные окружения
OTEL_METRICS_PRODUCERS=prometheus,OTEL_METRICS_EXPORTER=prometheus - MUST: Эндпоинт
/metricsотдаёт метрики в формате Prometheus (Go runtime, Gin HTTP, Bun DB) - SHOULD: Prometheus на bigbox скрейпит
127.0.0.1:<port>/metrics(добавлен job)
Scenario: Эндпоинт метрик
- GIVEN GtS запущен, WHEN
curl -s http://127.0.0.1:<port>/metrics | head, THEN вывод содержитgo_goroutines,gin_,bun_префиксы - GIVEN Prometheus настроен, WHEN
curl http://127.0.0.1:9090/api/v1/targets, THEN jobgotosocialв статусе UP
Requirement: Логи в JSON для сбора
- MUST:
config.yaml:log-format: json(для Promtail/Loki) - SHOULD: Promtail собирает docker-логи контейнера
gotosocial(labelcontainer=gotosocial/ jobgotosocial)
Scenario: Логи в JSON
- GIVEN контейнер пишет логи, WHEN
docker logs gotosocial | head, THEN строки в JSON-формате
MODIFIED Requirements
(нет)