# GoToSocial — нода на social.dedinit.ru Split-domain федиверсная нода ActivityPub (GoToSocial v0.22.1) в Docker на bigbox. Аккаунты: `@user@dedinit.ru`. Сервер: `https://social.dedinit.ru`. ## Архитектура ``` Internet ──► vps02 87.242.100.206 (Caddy 2, host net) social.dedinit.ru ──► reverse_proxy 10.8.0.2:8080 │ WireGuard 10.8.0.0/24 ▼ bigbox 10.8.0.2 (Docker) └─ gotosocial (superseriousbusiness/gotosocial:v0.22.1) volumes: ./data → /gotosocial/storage (SQLite + медиа) ./config.yaml → /gotosocial/config.yaml (ro) env_file: .env (секреты) ``` ## Порт-маппинг | Порт (host bigbox) | Контейнер | Назначение | |---|---|---| | 8080 | 8080 | HTTP GoToSocial (API/UI), проксируется Caddy с vps02 | - Внешний доступ: только через `https://social.dedinit.ru` (Caddy, 80/443 на vps02) - `172.29.0.0/16` — docker network `gotosocial` ## Структура ``` /opt/gotosocial/ ├── docker-compose.yml # сервис (фиксированный тег v0.22.1) ├── config.yaml # конфиг GtS (host/account-domain/SMTP/метрики) ├── .env # секреты (в git исключён) ├── backup.sh # consistent бэкап SQLite + медиа → ЯД ├── data/ # данные: sqlite.db + storage/ (медиа) ├── backups/ # локальные бэкапы (7 дней) └── openspec/ # OpenSpec-воркфлоу (changes/deploy-gotosocial) ``` ## Команды ```bash # Запуск / остановка / логи docker compose up -d docker compose down docker logs -f gotosocial # Конфиг проверить docker compose config --quiet # Создать пользователя (первый раз) + сделать админом docker compose exec gotosocial gotosocial admin account create \ --username estorozhenko --email kpa39l@yandex.ru \ --password 'ВРЕМЕННЫЙ_ПАРОЛЬ' --confirmation docker compose exec gotosocial gotosocial admin account promote \ --username estorozhenko ``` ## Реверс-прокси (vps02) Caddyfile на vps02: ``` social.dedinit.ru { reverse_proxy 10.8.0.2:8080 } ``` Применить: `docker exec caddy caddy reload --config /etc/caddy/Caddyfile` TLS (Let's Encrypt) Caddy выдаёт автоматически. ## Split-domain (.well-known на apex dedinit.ru) На 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` Проверка: `curl -sL 'https://dedinit.ru/.well-known/webfinger?resource=acct:estorozhenko@dedinit.ru'` > ВАЖНО: `host` и `account-domain` после первого запуска менять нельзя (необратимо). ## Бэкап ```bash bash /opt/gotosocial/backup.sh ``` - SQLite consistent (`VACUUM INTO`), медиа (`storage/`), `.env` — отдельным архивом - Локально: `backups/` (ротация 7 дней) - Яндекс.Диск: `/mnt/yandex-disk/backup/gotosocial-backups/` (ротация 30 дней) - При недоступности ЯД — exit code != 0, ошибка в stderr ## Восстановление ```bash # остановить сервис docker compose down # распаковать архив данных tar xzf gotosocial_.tar.gz -C /opt/gotosocial/data/ # вернуть .env при необходимости tar xzf gotosocial_env_.tar.gz -C /opt/gotosocial/ # запустить docker compose up -d ``` ## Обновление ```bash # 1. бэкап: bash backup.sh # 2. поменять тег в docker-compose.yml (фиксированный, напр. v0.22.2) # 3. docker compose pull && docker compose up -d ``` ## Метрики и логи - Метрики: `:8080/metrics` (Prometheus, OTEL) — Go runtime / Gin / Bun - Логи: `log-format: json` → собираются Promtail → Loki - Дашборд Grafana и мониторинг бэкапов — post-MVP ## SMTP - `smtp.jino.ru:587`, STARTTLS, логин `social@dedinit.ru` - Пароль в `.env` (`GTS_SMTP_PASSWORD`), в git не попадает