Files
gotosocial/STATUS.md
T

146 lines
11 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.
# GoToSocial — Статус
Обновлено: 2026-09-19
## Текущее состояние
GoToSocial **запущен и работает** на social.dedinit.ru: контейнер Up, HTTPS 200, админ создан.
Split-domain работает: аккаунты `@user@dedinit.ru`, хост social.dedinit.ru, apex-webfinger отдаёт JSON.
Ежедневный cron-бэкап (02:00) активен и проверен.
Почта: пустой From исправлен (GTS_SMTP_FROM), SPF+DKIM включены (19.09). Мониторинг: дашборд Grafana GoToSocial (20 панелей).
## Сделано
### Запуск на bigbox (шаг 1)
- 2026-09-06: тег образа `0.22.1` (не `v0.22.1` — оригинала не существует), порт `8082:8080`
(8080 на bigbox занят NetBox!), права `data/` → 1000:1000
- 2026-09-06: конфиг через `GTS_*` env — docker-образ НЕ читает смонтированный config.yaml
(падал «host must be set»), .cache для Wazero
- 2026-09-06: админ `estorozhenko` создан/confirmed/promoted; HTTPS LE на social.dedinit.ru ✅
### Caddy vps02 (шаг 2)
- 2026-09-06: Caddyfile: `social.dedinit.ru { reverse_proxy 10.8.0.2:8082 }` + reload
(бэкап Caddyfile.bak-1788723018), сертификат LE выпущен сразу, сайт 200
### Split-domain apex Jino (шаг 3)
- 2026-09-06: .htaccess/mod_rewrite на Jino НЕ работают (проверено) → статический ответ:
- `/.well-known/webfinger?resource=...` → Apache 301 → `/webfinger/` → 200 JSON (index.html)
- `/.well-known/nodeinfo` → 301 → `/nodeinfo/` → 200 JSON
- `/.well-known/host-meta` → 200 XRD (text/xml)
- Файлы в `/dedinit.ru/.well-known/` (Jino) + `/opt/dedinit.ru/static/.well-known/` (в git, Hugo копирует)
### Крон бэкапа (шаг 4)
- 2026-09-06: backup.sh переписан на SQLite Backup API через python3 (sqlite3 CLI нет ни на хосте,
ни в контейнере); медиа из data/ (это и есть /gotosocial/storage), SQLite отдельно
- 2026-09-06: cron `gotosocial-backup-daily` (id 67308da56b6d), daily 02:00, no_agent, deliver local,
тихий (пустой stdout при успехе), проверен немедленным запуском (3 бэкапа 19:41-19:42)
- Локально 7 дней, ЯД 30 дней
### Git
- 2026-09-06: gotosocial commit d9951b6 запушен на gitverse (56f228a..d9951b6)
- 2026-09-06: dedinit.ru commit b049cb2 запушен на gitverse (3d2f07b..b049cb2)
### Веб-клиент Phanpy + чистый подвал (2026-09-07)
- Phanpy (openengineering/phanpy:latest) в docker-compose, порт 8383 (внутри nginx слушает 8080!) → https://web.dedinit.ru (Caddy vps02 → 10.8.0.2:8383)
- DNS: web.dedinit.ru A 87.242.100.206 (добавлен пользователем); TLS от Caddy (авто-LE)
- CORS на API GtS уже `*` — Phanpy работает из браузера напрямую; проверено preflight 204 + allow-origin
- Кастомный page_footer.tmpl (без 🏳️🌈🏳️⚧️🦥 в подвале), смонтирован volume `./web/template/page_footer.tmpl:ro`
- Проверка при обновлении GtS: `./scripts/check-pride.sh` (python3-детект юникода, нормализация; grep-эмодзи ловил ложные срабатывания)
### Федеративная лента анонимно (2026-09-11)
- Пустая федальная лента = GtS 0.22.1 по умолчанию отдаёт 401 на /api/v1/timelines/public без OAuth-токена
(`instance-expose-public-timeline: false`). Phanpy открывает ленту до логина → пусто.
- ФИКС: `GTS_INSTANCE_EXPOSE_PUBLIC_TIMELINE: "true"` в docker-compose.yml + recreate.
Проверено: анонимный GET → 200, статусы есть и снаружи (https://social.dedinit.ru).
- **Тренды пустые — НЕ баг конфига**: в GtS 0.22.1 (последний релиз) `/api/v1/trends/{tags,statuses,links}`
захардкожены на `EmptyJSONArray` («NOT FULLY IMPLEMENTED») — исходники internal/api/client/trends/*.
Никакой env-опцией не включаются. Ждать реализации в новых версиях GtS.
### Почта: причина найдена и исправлена (2026-09-13)
- Симптом: письмо подтверждения приходило В СПАМ и с ПУСТЫМ заголовком `From:`
(пользователь: «в поле отправителя ничего не заполнено, поэтому письмо полностью
было заблокировано», X-Yandex-Spam: 4).
- **Первопричина**: в docker-compose.yml была `GTS_SMTP_FROM_ADDRESS` — НЕСУЩЕСТВУЮЩИЙ ключ.
GtS ждёт `smtp-from` → env `GTS_SMTP_FROM` (internal/config + vendored viper:
дефисы→подчёркивания, префикс GTS_, UPPER). `GetSMTPFrom()` возвращал "" → заголовок
`From: ` пустой при корректном envelope (`Authenticated sender: social@dedinit.ru`).
- **ФИКС**: `GTS_SMTP_FROM: "social@dedinit.ru"` в compose + перезапуск контейнера.
Проверено: env в контейнере `GTS_SMTP_FROM=social@dedinit.ru`, инстанс жив (HTTPS 200),
пользователь kunikov подтверждён вручную (`admin account confirm`), письмо из спама достано.
- SMTP Jino при этом был рабочим с самого начала: login OK, RCPT OK, `250 Ok: queued`.
RealSender (не Noop): GTS_SMTP_HOST непустой → `email.NewSender()`.
- ОСТАЁТСЯ: у dedinit.ru НЕТ SPF и DMARC (DKIM `default` есть). Яндекс кладёт письма в спам
без SPF/DMARC независимо от From. Нужно: SPF TXT `v=spf1 a mx include:jino.ru ~all`
(или из панели Jino) + DMARC `_dmarc.dedinit.ru`.
### Системное: systemd1 D-Bus завис → dockerd переведён на cgroupfs (2026-09-13)
- При перезапуске gotosocial `docker compose up` упал: `Failed to activate service
'org.freedesktop.systemd1': timed out` — systemd1 не отвечал по D-Bus (25s таймаут),
системные вызовы systemctl/dbus-send тоже зависали. Причина не выяснена
(фоновый шум mount.davfs «open files exceed max cache size by 3400 MiB» в журнале).
- ВАЖНО: cgroup-драйвер docker был `systemd` → каждый старт контейнера шёл через systemd1.
- **ФИКС**: `/etc/docker/daemon.json` → `"exec-opts": ["native.cgroupdriver=cgroupfs"]`,
dockerd перезапущен вручную (nohup dockerd --containerd=... ). Все контейнеры живы,
метрики/инстанс работают.
- **ДОЛГ**: после ПЕРЕЗАГРУЗКИ сервера dockerd поднимется через systemd; если systemd1 снова
зависнет — контейнеры не стартуют. Проверить после рестарта сервера.
- Побочный эффект: с хоста 127.0.0.1:8082 curl висит (docker-proxy НЕ отвечает), но внешний
доступ social.dedinit.ru (Caddy vps02 → 10.8.0.2:8082) работает — инстанс полностью жив.
## В работе / Следующие шаги
- [x] Регистрация открыта (10/день) + apex-webfinger динамический (change fix-apex-webfinger-and-registration, архив)
- [x] Веб-клиент Phanpy + чистый подвал (change add-webclient-and-clean-footer)
- [x] **Отладка почты** (13.09): причина найдена — `GTS_SMTP_FROM_ADDRESS` вместо `GTS_SMTP_FROM` → пустой From; исправлено, kunikov подтверждён
- [x] **SPF/DMARC для dedinit.ru** (Jino, 19.09): DKIM включён
(dkim._domainkey.dedinit.ru, IN TXT, v=DKIM1; t=s; p=…), SPF включён
(dedinit.ru, IN TXT, v=spf1 redirect=_spf.jino.ru). DMARC — см. «Открытые
вопросы».
- [x] **Мониторинг GtS** (19.09): job `gotosocial` в prometheus.yml —
127.0.0.1:9464/metrics; дашборд Grafana `GoToSocial` (папка gotosocial,
uid gotosocial-main, 20 панелей: доступность/instance/workers/HTTP/SQL/
процесс). Заодно исправлено пересечение провайдеров dashboards.yml
(garage-dashboards смотрел на весь каталог → блокировал запись всех
дашбордов). Openspec: add-gotosocial-dashboard (archive).
- [ ] Логи в json-формате при желании (log-format: json) — по умолчанию logfmt
## Процедура при обновлении версии GtS (важно!)
1. Обновить тег образа в docker-compose.yml (например `0.23.0`).
2. Проверить шаблон подвала на флаги ДО перезапуска:
```bash
IMAGE=superseriousbusiness/gotosocial:0.23.0 /opt/gotosocial/scripts/check-pride.sh
```
(скрипт создаёт временный контейнер из образа, копирует шаблоны, ищет 🏳️🌈🏳️⚧️).
3. Если найдены — обновить `/opt/gotosocial/web/template/page_footer.tmpl` (убрать span с эмодзи),
затем `docker compose up -d gotosocial`.
4. Проверить: `curl -s https://social.dedinit.ru/@kpa39l | grep -c '🏳'` → 0.
## Отложено (post-MVP, по решению пользователя)
- Мониторинг бэкапов (метрики в Prometheus + дашборд Grafana)
- Импорт из Telegram
## Как запустить / проверить
```bash
cd /opt/gotosocial
docker compose up -d
curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:8082/ # 200
curl -s http://127.0.0.1:9464/metrics | head # метрики (в контейнере)
curl -s 'https://social.dedinit.ru/.well-known/webfinger?resource=acct:estorozhenko@dedinit.ru'
curl -s 'https://dedinit.ru/.well-known/webfinger?resource=acct:estorozhenko@dedinit.ru' # apex JSON
bash backup.sh && ls -lh backups/
```
## Ключевые артефакты
- /opt/gotosocial/docker-compose.yml, .env, backup.sh, README.md (config.yaml — reference, НЕ читается образом)
- gitverse.ru/kpa39l/gotosocial (истина), gitea.nixg.ru/estorozhenko/gotosocial (зеркало)
- /opt/dedinit.ru/static/.well-known/ (apex, в git b049cb2)
## Открытые вопросы
- Пароль админа: создан с паролем из сессии (если менялся — обновить в заметках)
- DMARC для dedinit.ru — SPF и DKIM включены (19.09), DMARC не подтверждён в панели Jino (рекомендовано `v=DMARC1; p=none; rua=mailto:admin@dedinit.ru`)
- ZFS-бэкапы/другие ротации не требуются (хватает local 7д + ЯД 30д)