Files
gotosocial/README.md
T

123 lines
4.5 KiB
Markdown

# 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_<TS>.tar.gz -C /opt/gotosocial/data/
# вернуть .env при необходимости
tar xzf gotosocial_env_<TS>.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 не попадает