Files
gotosocial/STATUS.md
T

11 KiB
Raw Blame History

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) работает — инстанс полностью жив.

В работе / Следующие шаги

  • Регистрация открыта (10/день) + apex-webfinger динамический (change fix-apex-webfinger-and-registration, архив)
  • Веб-клиент Phanpy + чистый подвал (change add-webclient-and-clean-footer)
  • Отладка почты (13.09): причина найдена — GTS_SMTP_FROM_ADDRESS вместо GTS_SMTP_FROM → пустой From; исправлено, kunikov подтверждён
  • 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 — см. «Открытые вопросы».
  • Мониторинг 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. Проверить шаблон подвала на флаги ДО перезапуска:
    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

Как запустить / проверить

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д)