66 lines
4.7 KiB
Markdown
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 необходимость. Резервное копирование делается вручную
|