mirror of
https://gitverse.ru/kpa39l/gotosocial.git
synced 2026-09-29 09:55:10 +00:00
146 lines
11 KiB
Markdown
146 lines
11 KiB
Markdown
# 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д) |