Files
gotosocial/openspec/changes/deploy-gotosocial/design.md
T

5.0 KiB

Design — Deploy GoToSocial

Архитектура

                    Internet
                       │ 443
                       ▼
        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 (v0.22.1)          │
        │  config.yaml (host=social.dedinit.ru, │
        │   account-domain=dedinit.ru)          │
        │  volumes: data/ (sqlite.db + storage) │
        │  metrics :8080/metrics (OTEL→prom)    │
        │  logs: json → promtail → Loki         │
        │  backup.sh → backups/ → Я.Диск        │
        └──────────────────────────────────────┘
  • GtS живёт на bigbox (10.8.0.2), как остальные сервисы
  • Caddy на vps02 проксирует social.dedinit.ru → 10.8.0.2:8080 (через WG)
  • Split-domain: аккаунты @user@dedinit.ru, сервер на social.dedinit.ru
  • Apex (dedinit.ru на Jino, 81.177.135.38) получает .well-known редиректы

Файлы

/opt/gotosocial/docker-compose.yml

services:
  gotosocial:
    image: superseriousbusiness/gotosocial:v0.22.1
    container_name: gotosocial
    restart: unless-stopped
    env_file:
      - .env
    ports:
      - "8080:8080"
    volumes:
      - ./data:/gotosocial/storage
      - ./config.yaml:/gotosocial/config.yaml:ro
  • Порт 8080 (внутри и наружу); проброс на bigbox-интерфейс или в WG-подсеть
  • config.yaml монтируется read-only
  • Пароль SMTP и секреты — из .env (переменные GTS_* приоритетнее config.yaml)

/opt/gotosocial/config.yaml (ключевое)

host: "social.dedinit.ru"
account-domain: "dedinit.ru"
protocol: "https"
bind-address: "0.0.0.0"
port: 8080
trusted-proxies:
  - "10.8.0.2"       # Caddy (bigbox) — через WG от vps02

instance-account-domain: "dedinit.ru"
instance-expose-peers: true        # опционально
instance-expose-suspended: false

# SQLite
db-type: "sqlite"
db-address: "/gotosocial/storage/sqlite.db"
storage-local-base-path: "/gotosocial/storage/media"

# SMTP (smtp.jino.ru)
smtp-host: "smtp.jino.ru"
smtp-port: 587
smtp-username: "social@dedinit.ru"
smtp-password: "${GTS_SMTP_PASSWORD}"
smtp-from: "social@dedinit.ru"

# Метрики
metrics-enabled: true
metrics-auth-enabled: false        # защитим на уровне прокси при необходимости

# Логи
log-level: "info"
log-format: "json"
log-timestamp-format: "2006-01-02T15:04:05.000Z07:00"

/opt/gotosocial/.env (в git исключён)

GTS_SMTP_PASSWORD='fF@4guOf9spE2#8$'
# любые другие секреты

/opt/gotosocial/backup.sh

  • VACUUM INTO / sqlite3 .backup для consistent SQLite
  • tar.gz: data/ (sqlite + storage/media) в backups/gotosocial_<ts>.tar.gz
  • env: backups/gotosocial_env_<ts>.tar.gz
  • копия на /mnt/yandex-disk/backup/gotosocial-backups/
  • ротация: локально 7 дней, ЯД 30 дней
  • проверка mountpoint ЯД, exit != 0 при ошибке

/opt/gotosocial/README.md

  • Порт-маппинги, структура, команды, бэкап/восстановление, обновление

Применение

# bigbox
cd /opt/gotosocial
docker compose up -d
docker logs -f gotosocial

# создание пользователя (после первого старта)
docker compose exec gotosocial gotosocial admin account create \
  --username estorozhenko --email kpa39l@yandex.ru \
  --password '<pass>' --confirmation

# vps02 — Caddyfile
# добавить блок social.dedinit.ru { reverse_proxy 10.8.0.2:8080 }
docker exec caddy caddy reload --config /etc/caddy/Caddyfile

# apex dedinit.ru — добавить .well-known редиректы на Jino

Откат (Rollback)

  1. docker compose down на bigbox — сервис остановлен
  2. Удалить блок из Caddyfile на vps02, caddy reload
  3. Удалить/откатить .well-known редиректы на apex
  4. Данные (data/) не удаляются — можно перезапустить

Проверка

curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:8080/            # 200
curl -s http://127.0.0.1:8080/metrics | grep -E 'go_goroutines|gin_|bun_' # метрики
echo | openssl s_client -connect social.dedinit.ru:443 2>/dev/null | openssl x509 -noout -dates
curl -s 'https://social.dedinit.ru/.well-known/webfinger?resource=acct:estorozhenko@dedinit.ru'
bash /opt/gotosocial/backup.sh && ls -lh /opt/gotosocial/backups/