Files
theatre-welcome/стек сервера/стек сервера.md
T

4.7 KiB

Контекст

  • Задача: Настройка домашнего сервера для театра на мини-ПК
  • ОС: Ubuntu server
  • Железо: двухъядерный процессор, ОЗУ 6ГБ, 128 ГБ eMMC, внешний USB-диск на 2 ТБ
  • Стек: Docker, Filebrowser (облако), Gitea, Caddy (HTTPS reverse proxy), UFW, fail2ban, SSH;

Диски

  • eMMC: ext4;
  • usb-HDD: /dev/sda1, файловая система EXT4, примонтирован по UUID, с nofail в /mnt/drive2T, отключено резервирование места (tune2fs -m 0), настроен сон диска через hd-idle.

Права доступа (Permissions)

  • Выделенная группа storage. Основной пользователь (songbird) добавлен в эту группу.
  • Каталог хранения /mnt/drive2T: Настроены жесткие права ACL (setfacl) и установлен SGID-бит (chmod g+s), чтобы всё внутри диска автоматически наследовало владельца и полные права (rwx) группы storage.

Службы

  • Зависимости Systemd: Служба docker.service модифицирована: контейнеры строго после внешнего диска /mnt/drive2T (RequiresMountsFor / After)
  • Ротация логов: автоматическая ротация логов контейнеров через logrotate (/etc/logrotate.d/....), чтобы не забивать emmc.

Сеть

  • IP: белый статический, DuckDNS обновляется вручную, домен songbird-theatre.duckdns.org
  • Брандмауэр UFW: По умолчанию deny incoming, allow outgoing. Открыты порты: 22/tcp (SSH) и 443/tcp (HTTPS)
  • Fail2ban:
    • sshd: атаки на SSH (/etc/fail2ban/jail.d/sshd.conf)
    • infra-filebrowser и infra-gitea: фильтр /etc/fail2ban/filter.d/infra-filebrowser.local для логов Caddy и блокировки попыток подбора паролей к Filebrowser и Gitea
    • recidive: бан рецидивистов
  • filebrowser на songbird-theatre.duckdns.org, gitea на git.songbird-theatre.duckdns.org

Доступ

  • SSH: Вход по паролю
  • PermitRootLogin: no
  • AllowUsers: songbird

Docker

Приложения развернуты в связке через Docker Compose в ~/docker/infra/.

  • caddy-proxy: (cpus: 0.45, memory: 250M) HTTPS:443, логи в ~/docker/infra/conf/, user root
    • настройки прокси и логирования: ~/docker/infra/conf/Caddyfile;
    • файл настроек: ~/docker/infra/docker-compose.yml;
  • filebrowser-quantum: (cpus: 1.5, memory: 4500M) Работает за прокси Caddy. Внутренний порт 80 за брандмауэром. Лог в ~/docker/infra/data/filebrowser.log, работает от имени uid=1000 songbird.
    • конфиг: ~/docker/infra/data/config.yaml;
  • gitea: (cpus: 1.5, memory: 2500M) Работает за прокси Caddy. Внутренний порт 3000 за брандмауэром. Лог в ~/docker/infra/conf/caddy-git.log, работает от имени uid=1000 songbird.
    • конфиг: ~/docker/infra/gitea/gitea/conf/app.ini;

Обновления unattended-upgrades.

Gitea

  • LFS:

    • MAX_CREATION_FILE_SIZE = 20971520, /mnt/drive2T/gitea/lfs:/data/git/lfs
    • DISABLE_SSH = true
  • Организация songbird_theatre, репозитории:

    • именуются [проект]-[тип], например theatre-design, lesmiserables-design, lesmiserables-music, система тегов
    • в ReadMe навигация
  • Нюансы:

    • DISABLED_REPO_UNITS = repo.packeges, repo.actions, DEFAULT_REPO_UNITS = repo.code, repo.issues, repo.pulls, repo.projects, repo.releases, [actions] ENABLED = false [packages] ENABLED = false

Требования к ии

Не бойся критиковать решения. Используй максимально проверенные профессиональные с точки зрения архитектуры подходы. Поясняй все команды.

Проверяй все предложения по документации.

Вход по паролю в ssh необходимость. Резервное копирование делается вручную