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

66 lines
4.7 KiB
Markdown

# Контекст
* **Задача:** Настройка домашнего сервера для театра на мини-ПК
* **ОС:** 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 необходимость. Резервное копирование делается вручную