diff --git a/Debian.md b/Debian.md new file mode 100644 index 0000000..07ab96f --- /dev/null +++ b/Debian.md @@ -0,0 +1,140 @@ +# 🐧 Настройка Debian + +> Этот гайд описывает установку и настройку Debian для запуска сервисов в контейнерах. + +--- + +## 1️⃣ Установка Debian + +Стандартная установка Debian Minimal. Занимаем весь виртуальный диск. При установке отключаем графический интерфейс и ставим SSH сервер. + +После установки заходим под `root` и устанавливаем `sudo`: + +```bash +apt install sudo +usermod -aG sudo имя_пользователя +``` + +Перезаходим и дальше работаем под обычным пользователем. + +--- + +## 2️⃣ Настройка статического IP + +Смотрим название сетевого интерфейса и устанавливаем `resolvconf` (для поддержки `dns-nameservers`): + +```bash +ip addr +sudo apt install resolvconf +``` + +Редактируем настройки: + +```bash +sudo nano /etc/network/interfaces +``` + +Добавляем настройки: + +```ini +auto enp0s3 +iface enp0s3 inet static + address 192.168.1.100 + netmask 255.255.255.0 + gateway 192.168.1.1 + dns-nameservers 77.88.8.8 8.8.8.8 +``` + +> ⚠️Замените `enp0s3` на название вашего сетевого интерфейса и настройте IP адрес в соответствии с вашей сетевой конфигурацией. + +Перезагружаемся: + +```bash +sudo reboot +``` + +--- + +## 3️⃣ Установка Podman + +> Мы будем использовать Podman вместо Docker в целях безопасности. Podman не требует запущенного демона для работы и по умолчанию нацелен на работу в rootless режиме, что нам очень интересно. + +Устанавливаем Podman и podman-compose: + +```bash +sudo apt install podman podman-compose +``` + +Добавляем загрузку контейнеров с параметром `restart: always` при загрузке системы: + +```bash +systemctl --user enable podman-restart.service +sudo loginctl enable-linger USER +``` + +> ⚠️ Замените `USER` на имя вашего пользователя. + +--- + +## 4️⃣ Клонирование репозитория + +Клонируем этот репозиторий для запуска сервисов: + +```bash +sudo apt install git +mkdir ~/services +cd ~/services +git clone https://github.com/StepanovPlaton/HomeServerServices . +``` + +--- + +## 5️⃣ Монтирование дисков + +Смотрим список разделов с их UUID: + +```bash +sudo blkid +``` + +Создаём точку монтирования: + +```bash +mkdir ~/diskN +``` + +Добавляем запись в `fstab`: + +```bash +sudo nano /etc/fstab +``` + +В конец добавляем: + +```ini +UUID=***-***-***-***-*** /home/USER/diskN ext4 defaults,nofail 0 2 +``` + +> ⚠️ Замените `UUID=***-***-***-***-***` на UUID вашего диска и `USER` на имя вашего пользователя. + +Монтируем диск: + +```bash +sudo systemctl daemon-reload +sudo mount -a +``` + +Для корректной работы с диском может потребоваться изменить права доступа: + +```bash +sudo chown -R 1000:1000 path/to/disk +podman unshare chown -R 1000:1000 path/to/disk +``` + +> ⚠️ Замените `path/to/disk` на путь к вашему диску. + +--- + +## 📚 Следующие шаги + +**Настройка сервисов описана в файле [Services.md](./Services.md)** diff --git a/OPNsense.md b/OPNsense.md new file mode 100644 index 0000000..c81fc76 --- /dev/null +++ b/OPNsense.md @@ -0,0 +1,136 @@ +# 🔒 Настройка OPNsense + +> Этот гайд описывает установку и настройку OPNsense в качестве роутера и файрвола для домашней сети. + +--- + +## 1️⃣ Установка OPNsense + +Ничего не трогаем в момент загрузки. Авторизуемся как `installer`, пароль по умолчанию — `opnsense`. + +- Добавляем английскую локаль +- Выбираем ФС — **ZFS RAID0** +- Предупреждение о недостатке ОЗУ можно пропустить +- Устанавливаем систему + +--- + +## 2️⃣ Создание второго сетевого моста + +Создаём второй сетевой мост в Proxmox для второго порта, подключаем сетевое устройство в ВМ OPNsense. Перезагружаем ВМ OPNsense. + +--- + +## 3️⃣ Настройка OPNsense + +В меню терминала: + +### 1. Назначение интерфейсов + +Выбираем **1 - assign interfaces**: + +- Назначаем одному порту **WAN** (порт для провайдера, во внешний интернет) +- Второму порту **LAN** (порт для локальной сети) + +### 2. Настройка IP адресов + +Выбираем **2 - set interface ip address**: + +- Для LAN указываем статический IPv4 (это будет наш Gateway) +- DHCP можно пока не включать, настроим позже + +--- + +## 4️⃣ Обновление OPNsense + +1. Открываем web интерфейс по адресу, установленному для LAN +2. Заходим **Система > Программное обеспечение > Статус > Проверить наличие обновлений** +3. Потом раздел обновления, снизу кнопка **обновить** +4. Ждём обновления всех пакетов + +--- + +## 5️⃣ Установка плагина Qemu Agent + +Нужен для управления OPNsense из Proxmox. + +1. Заходим **Система > Программное обеспечение > Плагины** +2. Включаем галочку **показать плагины сообщества** +3. Ставим плагин `os-qemu-guest-agent` + +--- + +## 6️⃣ Настройка доступа в интернет + +Можно воспользоваться стандартным мастером настройки: + +1. Открываем его в разделе **Система > Конфигурация > Мастер** +2. Для доступа в WAN выбираем пункт **PPPoE** +3. Устанавливаем логин и пароль провайдера +4. Остальное уже должно быть настроено, но можно что-то изменить + +--- + +## 7️⃣ Настройка DHCP + +В разделе **Службы**: + +- Выключаем **Dnsmasq DNS & DHCP** +- Включаем **ISC DHCPv4** + - В настройках DNS первым сервером указываем IP адрес OPNsense. Сам DNS сервер настроим в следующем шаге + +--- + +## 8️⃣ Настройка DNS + +> Для безопасности домашней сети от чрезмерной рекламы и сбора статистики добавим фильтр [AdGuard Home](https://github.com/AdguardTeam/AdGuardHome) +> +> Если для вашей сети достаточно обычного DNS, просто включите в настройках **Unbound DNS** + +В консоли OPNsense добавим новый репозиторий: + +```bash +fetch -o /usr/local/etc/pkg/repos/mimugmail.conf https://www.routerperformance.net/mimugmail.conf +pkg update +``` + +После чего в разделе **Система > ПО > Плагины** появится пакет `os-adguardhome-maxit` (ставим галочку показать пользовательские пакеты). Устанавливаем его и включаем в разделе **Службы**. Мастер настройки запустится на IP OPNsense на 3000 порту. + +В настройках: + +- **Указываем внутренний интерфейс LAN** и ставим WebUI AdGuardHome на 3000 порт +- В разделе DNS-сервер также **выбираем только внутренний интерфейс LAN**, порт по умолчанию 53 + +> ⚠️ По какой-то причине AdGuard думает, что у нас динамический IP, хотя это не так — игнорируем предупреждение. + +В настройках добавляем блоклисты по выбору: + +- [Hagezi Multi Pro++](https://raw.githubusercontent.com/hagezi/dns-blocklists/main/adblock/pro.plus.txt) — Идеальный баланс. Блокирует почти всё, при этом редко «ломает» сайты +- [Hagezi Multi Ultimate](https://raw.githubusercontent.com/hagezi/dns-blocklists/main/adblock/ultimate.txt) — Самый жесткий вариант. Блокирует агрессивно, включая глубокую телеметрию. Может потребоваться ручная разблокировка некоторых сервисов (белый список) +- И любые другие на своё усмотрение + +--- + +## 9️⃣ Проброс портов + +> Для начала нужно освободить 80 порт, потому что на нём по умолчанию доступен сам OPNsense. В разделе **Система > Настройки > Администрирование** заменим 80 порт на 8000 + +В разделе **Межсетевой экран > NAT > Переадресация портов** добавим правило: + +- **Interface:** WAN +- **TCP/IP Version:** IPv4 +- **Protocol:** TCP +- **Destination:** WAN address +- **Destination port range:** Внешний порт +- **Redirect target IP:** Введите локальный IP вашего сервера +- **Redirect target port:** Порт назначения +- **Pool Options:** Default +- **Filter rule association:** Add associated filter rule + - OPNsense автоматически создаст разрешающее правило в брандмауэре + +Для HTTP нужно добавить перенаправления на 8080 порт сервера, для HTTPS на 8443. Базовые порты 80 и 443 недоступны в rootless контейнере. Сохраняем изменения и проверяем в разделе **Межсетевой экран > Правила > WAN**. + +Для доступа из домашней сети нужно добавить зеркальный NAT в разделе **Межсетевой экран > Настройки > Дополнительно** ставим галочки: + +- **Отображение для перенаправлений портов** +- **Автоматический исходящий NAT для отображения** diff --git a/Proxmox.md b/Proxmox.md new file mode 100644 index 0000000..278b913 --- /dev/null +++ b/Proxmox.md @@ -0,0 +1,76 @@ +# 🖥️ Настройка Proxmox + +> Этот гайд описывает установку и настройку Proxmox VE для виртуализации OPNsense и Debian. + +--- + +## 1️⃣ Отключение enterprise репозиториев и обновление пакетов + +В разделе **Сервер > Обновления > Репозитории**: + +- Отключаем всё с упоминанием enterprise +- Добавляем No-Subscription репозиторий + +Затем обновляем пакеты в терминале сервера: + +```bash +apt update && apt upgrade +``` + +--- + +## 2️⃣ Загрузка ISO образов + +Загружаем на сервер ISO образы: + +- Для OPNsense выбираем образ типа **DVD** +- Для Debian нужен minimal образ netinst +- Копируем файлы в разделе **Сервер > local > ISO-образы** + +--- + +## 3️⃣ Создание ВМ с OPNsense + +Настройки ВМ: + +- **Общее > Запуск при загрузке:** Включаем +- **ОС > Гостевая ОС:** Other (OPNsense — это FreeBSD) +- **Система > Агент QEMU:** включить (нужен для просмотра информации о системе в гипервизоре) +- **Диски > Шина:** SCSI +- **Размер диска:** 16Гб (достаточно) +- **ЦП > Тип:** host +- **ЦП > Кол-во ядер:** 2 +- **Объём ОЗУ:** 2Гб (не менее 1Гб) +- **Сеть > Модель:** VirtIO +- **Сетевой экран:** отключаем (OPNsense сам решает эту задачу) +- Остальные настройки по умолчанию + +Выбираем загруженный ISO-образ и запускаем ВМ. + +**Настройка OPNsense описана в файле [OPNsense.md](./OPNsense.md)** + +--- + +## 4️⃣ Создание ВМ с Debian + +> По идее Proxmox работает на ядре Linux и построен на Debian, поэтому мы могли бы использовать LXC контейнер, однако для запуска Docker (Podman) внутри LXC нужны разрешения и модули ядра, не способствующие безопасности. По сути при таком подходе Docker (Podman) будет работать чуть ли не в самом гипервизоре, что плохо. Поэтому используем ВМ. + +Настройки ВМ: + +- **Общее > Запуск при загрузке:** Включаем +- **ОС > Гостевая ОС:** Linux 6.x +- **Система > Агент QEMU:** включить (нужен для просмотра информации о системе в гипервизоре) +- **Диски > Шина:** SCSI +- **Размер диска:** 48Гб (и более) +- **ЦП > Тип:** host +- **ЦП > Кол-во ядер:** 4 (и более) +- **Объём ОЗУ:** 4Гб (и более) +- **Сеть > Модель:** VirtIO +- **Сетевой экран:** отключаем (нас прикрывает OPNsense) +- Остальные настройки по умолчанию + +> Если мы хотим добавить внешние диски для хранения данных, нужно дать ВМ доступ к ним через USB. В разделе **Оборудование** нужно добавить USB-устройство. Лучше всего дать доступ ВМ к самому USB-порту, тогда любое устройство в него вставленное будет доступно внутри ВМ, но можно также предоставить доступ к конкретному устройству, в какой порт оно не было бы вставлено. +> +> Чтобы посмотреть подключенные USB-устройства и скорости их работы, запускаем команду `lsusb -t` и ищем наши диски (`Class=Mass Storage`) + +**Настройка Debian описана в файле [Debian.md](./Debian.md)** diff --git a/README.md b/README.md index daf33ae..3d57fad 100644 --- a/README.md +++ b/README.md @@ -1,253 +1,111 @@ -# Home Server Services +# 🏠 Home Server Services -> **Home Server Services** - это полный набор сервисов в Docker для организации домашнего сервера! +> **Home Server Services** — это гайд по настройке и полный набор сервисов в Docker для организации домашнего роутера/сервера! > -> Главное - это **модульность** и **воспроизводимая установка**. Можно развернуть за 15 минут! +> Главное — это **модульность** и **воспроизводимая установка**. -![](./screenshots/grafana.jpg) -![](./screenshots/portainer.jpg) +![Grafana Dashboard](./screenshots/grafana.jpg) +![Portainer Interface](./screenshots/portainer.jpg) -## Мой сервер: +--- -- CheckWay POS88 +## 📋 Мой сервер + +- **CheckWay Sherman Micro** - [Intel Celeron J1900](https://technical.city/ru/cpu/Core-2-Duo-E8400-protiv-Celeron-J1900) @ 1.99GHz (64 bit) - - 4Gb RAM - - 120Gb SSD - - Не греется, не шумит, мало потребляет -- Debian 13 (Trixie) Minimal - - [Docker](https://www.docker.com/) - - [Docker Compose](https://docs.docker.com/compose/) - - Политика частоты работы CPU - `ondemand` + - 8GB RAM + - 120GB SSD + - 2x 1Gbps (WAN+LAN) +- **Proxmox VE 9.1.4** + - **OPNsense 25.7** + - [CrowdSec](https://www.crowdsec.net) + - [AdGuard Home](https://github.com/AdguardTeam/AdGuardHome) + - **Debian 13 (Trixie) Minimal** + - [Podman](https://podman.io) -## Сервисы: +--- -- [Portainer](./portainer/) - Управление контейнерами -- [Grafana](./grafana/) - Загруженность сервера - - [Prometheus](./grafana/prometheus.yml) - - [Node Exporter](./grafana/) -- [Proxy](./proxy/) - Reverse proxy - - [Nginx](./proxy/nginx/) - - [DDNS](./proxy/ddns/) - Автоматическое обновление DNS записей у регистратора [рег.ру](https://www.reg.ru) - - Let's Encrypt - Автоматическое обновление SSL сертификатов на все домены -- [Samba](./samba/) - Сетевой диск -- [Syncthing](./syncthing/) - Синхронизация данных между устройствами -- [Transmission](./transmission/) - BitTorrent клиент -- [AutoSSH](./autossh/) - SSH тунель -- [Gitea](./gitea/) - Git-сервер -- [Cloud](./cloud/) - FileBrowser - веб-интерфейс для управления файлами -- [Matrix](./matrix/) - сервер Matrix - - [Synapse](./matrix/create_config.sh) - Matrix сервер Synapse - - [Element](./matrix/docker-compose.yml) - Matrix веб-клиент Element -- [Pi-hole](./pihole/) - DNS фильтр (блокировка рекламы, слежки, защита от атак) - -## О проекте: +## 🚀 О проекте - **Полнофункциональный домашний сервер** -- **Все сервисы настроены через Docker Compose** для легкого управления и быстрого запуска -- **Мониторинг системы через Grafana** с готовыми дашбордами +- Две одновременно запущенные операционные системы в гипервизоре Proxmox + - OPNsense выполняет функции роутера, DHCP и NTP сервера, защищает домашнюю сеть от вторжений с CrowSec + - В Debian в Podman запущены контейнеры с сервисами +- **Все сервисы настроены через Docker Compose** (совместим с Podman) для легкого управления и быстрого запуска +- **Мониторинг системы через Grafana** с готовым дашбордом - **Файловый сервер Samba** для доступа к файлам по сети - Открытый диск только на чтение - Доступ на запись только после авторизации - **Синхронизация файлов** между устройствами через **Syncthing** - - Постоянная точка синхронизации позволяет обмениваться файлами между устройствами, даже если они не бывают одновременно в сети - домашний сервер выступает посредником + - Постоянная точка синхронизации позволяет обмениваться файлами между устройствами, даже если они не бывают одновременно в сети — домашний сервер выступает посредником - **BitTorrent клиент Transmission** с веб-интерфейсом - **SSH туннелирование через AutoSSH** - Можно пробросить порт на удалённый VPS, автоматически переподключается при потере соединения - **Nginx reverse proxy** для маршрутизации трафика к сервисам - Автоматическое получение и обновление SSL сертификатов через Let's Encrypt - Автоматическое обновление DNS записей у регистратора [рег.ру](https://www.reg.ru) -- **Git-сервер Gitea** для хостинга собственных репозиториев -- **FileBrowser** - веб-интерфейс для управления файлами через браузер -- **Matrix Synapse** - собственный сервер для мессенджера Matrix с веб-клиентом Element -- Блокировка рекламы, нежелательной слежки, частичная защита от атак с помощью **Pi-hole** -- Управление Docker через **Portainer с веб-интерфейсом** -- Скрипт для снижения энергопотребления -- Все **сервисы используют переменные окружения** для гибкой настройки и примеры конфигураций -- Автоматический перезапуск контейнеров при сбоях +- **Git-сервер Gitea** для хостинга репозиториев +- **FileBrowser** — веб-интерфейс для управления файлами через браузер +- **Matrix Synapse** — собственный сервер для мессенджера Matrix с веб-клиентом Element +- Блокировка рекламы, нежелательной слежки, частичная защита от атак с помощью **AdGuard Home** +- Управление контейнерами через **Portainer** +- Все **сервисы используют переменные окружения** для гибкой настройки и примеры конфигурации -## Подготовка: +--- -- Купить белый IP адрес у провайдера -- В настройках роутера пробросить 80 и 443 порт на сервер -- Купить домен второго уровня у регистратора [рег.ру](https://www.reg.ru) -- [В настройках API рег.ру](https://www.reg.ru/user/account/settings/api/) добавить CIDR вашего провайдера (чтобы при смене IP наш скрипт смог обновить DNS записи) -- В настройках DNS-серверов зоны указать бесплатные DNS-серверы рег.ру: `ns1.reg.ru`, `ns2.reg.ru` +## 📝 Подготовка -## Запуск: +Перед началом установки необходимо выполнить следующие шаги: -### 1. Portainer +1. **Купить белый IP адрес** у провайдера +2. **Купить домен второго уровня** у регистратора [рег.ру](https://www.reg.ru) +3. [В настройках API рег.ру](https://www.reg.ru/user/account/settings/api/) добавить CIDR вашего провайдера (чтобы при смене IP наш скрипт смог обновить DNS записи) +4. В настройках DNS-серверов зоны указать бесплатные DNS-серверы рег.ру: `ns1.reg.ru`, `ns2.reg.ru` -```bash -cd portainer -cp .env.example .env && vim .env -sudo docker compose up -d -``` +> После выполнения этих шагов можно переходить к настройке сервера. **[Первым шагом установим гипервизор Proxmox](./Proxmox.md)**. Вы также можете установить [Debian с сервисами отдельно, если у вас уже настроен роутер](./Debian.md) -### 2. Grafana +--- -```bash -cd grafana -cp .env.example .env && vim .env -sudo docker compose up -d -``` +## 🎯 Использование -### 3. AutoSSH +### Внутренние сервисы -```bash -cd autossh -cp .env.example .env && vim .env -sudo docker compose up -d --build -``` +После настройки и запуска внутренние сервисы доступны (по умолчанию) по следующим портам: -### 4. Samba +#### Grafana — порт `3000` -```bash -cd samba -cp .env.example .env && vim .env -sudo docker compose up -d -``` +![Grafana Dashboard](./screenshots/grafana.jpg) -### 5. Transmission +#### Portainer — порт `9000` -```bash -cd transmission -cp .env.example .env && vim .env -sudo docker compose up -d -``` +![Portainer Interface](./screenshots/portainer.jpg) -### 6. Syncthing +#### Transmission — порт `9091` -```bash -cd syncthing -cp .env.example .env && vim .env -sudo docker compose up -d -``` +![Transmission Interface](./screenshots/transmission.png) -### 7. Gitea +#### Syncthing — порт `8384` -```bash -cd gitea -cp .env.example .env && vim .env -sudo docker compose up -d -``` +![Syncthing Interface](./screenshots/syncthing.png) -> **Примечание:** Конфигурируется позже, уже в веб-форме. +#### Matrix Admin — порт `8009` -### 8. Cloud (FileBrowser) +![Matrix Admin Interface](./screenshots/synapse-admin.png) -```bash -cd cloud -cp .env.example .env && vim .env -touch filebrowser.db -sudo docker compose up -d -``` +### Внешние сервисы -### 9. Matrix +Внешние сервисы запустятся на указанных в конфиге nginx поддоменах: -```bash -cd matrix -cp .env.example .env && vim .env -``` +#### Gitea -Создаём конфиг [по примеру](./matrix/create_config.sh). Меняем базу данных на PostgreSQL: +![Gitea Interface](./screenshots/gitea.png) -```yaml -database: - name: psycopg2 - args: - user: user - password: passw0rd - database: db - host: matrix-db - cp_min: 5 - cp_max: 10 -``` +#### Synapse и Element -Запускаем: +| Synapse | Element | +|---------|---------| +| ![Synapse Interface](./screenshots/synapse.png) | ![Element Interface](./screenshots/element.png) | -```bash -sudo docker compose up -d -``` +#### FileBrowser -Создаём пользователя [по примеру](./matrix/create_user.sh). - -### 10. Pi-hole - -```bash -cd pihole -cp .env.example .env && vim .env -sudo docker compose up -d -``` - -[Устанавливаем пароль](./pihole/set-password.sh) (оставить пустым для доступа без пароля) - -В разделе Settings > DNS выбираем вышестоящие DNS сервер. Включаем сверху расширенные настройки и в блоке interface settings выбираем пункт `Permit all origins`. В разделе Lists добавляем [списки доменов для блокировки](./pihole/block-lists.txt). Затем обновляем их в Tools > Update Gravity. В настройках ПК (роутера) устанавливаем в качестве DNS наш сервер. - -### 11. Nginx Reverse Proxy (Entrypoint) - -```bash -cd proxy -cp .env.example .env && vim .env -``` - -Создаём конфиг для DynDNS: - -```bash -cp ddns/domains.txt.example ddns/domains.txt && vim ddns/domains.txt -``` - -Нужно указать ресурсные записи `@` и `www` для доступа к домену второго уровня напрямую. Также нужно добавить домены 3-го уровня для: gitea, cloud (filebrowser), matrix server (synapse), matrix client (element). - -В первый раз SSL сертификаты нужно создать вручную. - -Запускаем DDNS скрипт и HTTP сервер для Let's Encrypt: - -```bash -sudo docker compose -f init-compose.yml up -d --build -``` - -Проверяем по логам в portainer и в личном кабинете рег.ру что ресурсные записи обновились. Ожидаем пока DNS обновит информацию о наших поддоменах (занимает от 15 минут до 24 часов). Затем создаём SSL сертификаты на каждый домен(-ы) [по примеру](./proxy/create-first-cert-example.sh). - -Настраиваем Nginx: - -```bash -cd nginx/conf.d -cp default.conf.example default.conf -vim default.conf -``` - -Запускаем основной контейнер: - -```bash -sudo docker compose -f init-compose.yml down -sudo docker compose up -d --build -``` - -## Использование: - -#### После настройки и запуска внутренние сервисы доступны (по умолчанию) по следующим портам: - -- **Grafana** — порт `3000`: - ![](./screenshots/grafana.jpg) - -- **Portainer** — порт `9000`: - ![](./screenshots/portainer.jpg) - -- **Transmission** — порт `9091`: - ![](./screenshots/transmission.png) - -- **Syncthing** — порт `8384`: - ![](./screenshots/syncthing.png) - -- **Pi-hole** — порт `8080`: - ![](./screenshots/pihole.png) - -#### Внешние сервисы запустятся на указанных в конфиге nginx поддоменах: - -- **Gitea** - ![](./screenshots/gitea.png) -- **Synapse и Element** - |![](./screenshots/synapse.png)|![](./screenshots/element.png)| - |-|-| -- **FileBrowser** - ![](./screenshots/cloud.png) +![FileBrowser Interface](./screenshots/cloud.png) diff --git a/Services.md b/Services.md new file mode 100644 index 0000000..8a9c8c3 --- /dev/null +++ b/Services.md @@ -0,0 +1,198 @@ +# ⚙️ Настройка сервисов + +> Этот гайд описывает настройку и запуск всех сервисов в контейнерах. + +--- + +## 1️⃣ Portainer — WebUI для управления контейнерами + +> Для запуска Portainer требуется активный Docker сокет. В Podman по умолчанию его нет, так как это является потенциальным вектором атаки. Запускайте сокет только для конкретного пользователя (не root!) + +```bash +cd portainer +cp .env.example .env && vim .env +systemctl --user enable --now podman.socket +podman-compose up -d +``` + +--- + +## 2️⃣ Grafana — Dashboard со статистикой загруженности сервера + +> Proxmox предоставляет достаточно информации об использовании ресурсов системы, но если вы ставите Debian как контейнер сервисов отдельно, вам может потребоваться Grafana + +```bash +cd grafana +cp .env.example .env && vim .env +podman-compose up -d +``` + +--- + +## 3️⃣ AutoSSH — SSH туннель, проброс портов + +```bash +cd autossh +cp .env.example .env && vim .env +podman-compose up -d --build +``` + +--- + +## 4️⃣ Samba — сетевой диск в локальной сети + +```bash +cd samba +cp .env.example .env && vim .env +podman-compose up -d +``` + +> Samba работает на 139 и 445 порту, для доступа к ним нужны root права. Чтобы не запускать контейнер от имени root, пробросим порты из контейнера на 1139 и 1445 порты соответственно, и добавим правила в iptables для переадресации трафика: + +```bash +sudo iptables -t nat -A PREROUTING -p tcp --dport 139 -j REDIRECT --to-ports 1139 +sudo iptables -t nat -A PREROUTING -p tcp --dport 445 -j REDIRECT --to-ports 1445 +sudo iptables -t nat -L -n -v # Посмотреть список правил + +# Для сохранения правил iptables после перезагрузки +sudo apt install iptables-persistent +sudo netfilter-persistent save # сохранить текущие iptables +``` + +--- + +## 5️⃣ Transmission — BitTorrent клиент + +```bash +cd transmission +cp .env.example .env && vim .env +podman-compose up -d +``` + +> В настройках клиента указанная в `.env` папка доступна по пути `/downloads`. Можно подключиться с помощью [Transmission Remote GUI](https://github.com/transmission-remote-gui/transgui) или [Transmission Qt](https://transmissionbt.com/download.html) + +--- + +## 6️⃣ Syncthing — синхронизация файлов между устройствами + +```bash +cd syncthing +cp .env.example .env && vim .env +mkdir config && podman unshare chown -R 1000:1000 config +podman-compose up -d +``` + +--- + +## 7️⃣ Gitea — Git-сервер + +```bash +cd gitea +cp .env.example .env && vim .env +mkdir config && podman unshare chown -R 1000:1000 config +mkdir data && podman unshare chown -R 1000:1000 data +mkdir db && podman unshare chown -R 1000:1000 db +podman-compose up -d +``` + +> Gitea конфигурируется позже, уже в веб-форме. Обязательно **отключаем самостоятельную регистрацию** и создаём администратора (пользователя по умолчанию). Остальное не трогаем, уже сконфигурировано в `.env` + +--- + +## 8️⃣ Cloud (FileBrowser) — веб-интерфейс для управления файлами + +```bash +cd cloud +cp .env.example .env && vim .env +touch filebrowser.db && podman unshare chown -R 1000:1000 filebrowser.db +podman-compose up -d +``` + +--- + +## 9️⃣ Matrix — собственный сервер для мессенджера Matrix + +```bash +cd matrix +mkdir data && podman unshare chown -R 1000:1000 data +podman run -it --rm -v "$(pwd)/data:/data" -e SYNAPSE_SERVER_NAME=MATRIX.DOMAIN.ru -e SYNAPSE_REPORT_STATS=no docker.io/matrixdotorg/synapse:latest generate +``` +> ⚠️ Замените `MATRIX.DOMAIN.ru` на ваш домен для Matrix сервера. + +Меняем базу данных на PostgreSQL и прописываем БД, пользователя, пароль: + +```yaml +database: + name: psycopg2 + args: + user: user + password: passw0rd + database: db + host: matrix-db + cp_min: 5 + cp_max: 10 +``` + +```bash +mkdir db && podman unshare chown -R 1000:1000 db +cp .env.example .env && vim .env +podman-compose up -d +``` + +Создаём пользователя: + +```bash +podman exec -it matrix-synapse register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008 +``` + +--- + +## 🔟 Nginx Reverse Proxy (Entrypoint) + +```bash +cd proxy +cp .env.example .env && vim .env +``` + +### Создание конфига для DynDNS + +```bash +cp ddns/domains.txt.example ddns/domains.txt && vim ddns/domains.txt +``` + +> Нужно указать ресурсные записи `@` и `www` для доступа к домену второго уровня напрямую. Также нужно добавить домены 3-го уровня для: gitea, cloud (filebrowser), matrix server (synapse), matrix client (element). + +### Первоначальная настройка SSL + +В первый раз SSL сертификаты нужно создать вручную. + +Запускаем DDNS скрипт и HTTP сервер для Let's Encrypt: + +```bash +podman-compose -f init-compose.yml up -d --build +``` + +Проверяем по логам в portainer и в личном кабинете рег.ру, что ресурсные записи обновились. Ожидаем, пока DNS обновит информацию о наших поддоменах (занимает от 15 минут до 24 часов). + +Затем создаём SSL сертификаты на каждый домен(-ы) с помощью команды: + +```bash +podman-compose run --rm --entrypoint "certbot" certbot certonly --webroot --webroot-path=/var/www/certbot --email your-email@gmail.com --agree-tos --no-eff-email -d domain.com -d domain2.com +``` + +> ⚠️ Замените `your-email@gmail.com` на ваш email и `domain.com`, `domain2.com` на ваши домены. + +### Настройка Nginx + +```bash +cd nginx/conf.d +cp default.conf.example default.conf +vim default.conf +``` + +### Запуск основного контейнера + +```bash +podman-compose -f init-compose.yml down +podman-compose up -d --build +``` \ No newline at end of file diff --git a/autossh/docker-compose.yml b/autossh/docker-compose.yml index 0850c47..61a8652 100644 --- a/autossh/docker-compose.yml +++ b/autossh/docker-compose.yml @@ -20,18 +20,18 @@ services: command: > -M 0 -N - + -v -o StrictHostKeyChecking=no -o ServerAliveInterval=60 -o ServerAliveCountMax=3 - + -o ExitOnForwardFailure=yes + -p ${SSH_PORT:-22} -L 0.0.0.0:${SSH_TUNNEL_TO:?}:localhost:${SSH_TUNNEL_FROM:?} ${SSH_USER:?}@${SSH_HOST:?} - -p ${SSH_PORT:-22} deploy: resources: limits: - cpus: '0.1' + cpus: "0.1" memory: 64M reservations: memory: 32M diff --git a/pihole/.env.example b/pihole/.env.example deleted file mode 100644 index f985156..0000000 --- a/pihole/.env.example +++ /dev/null @@ -1 +0,0 @@ -PIHOLE_IP=192.168.32.1 \ No newline at end of file diff --git a/pihole/block-lists.txt b/pihole/block-lists.txt deleted file mode 100644 index 5225b37..0000000 --- a/pihole/block-lists.txt +++ /dev/null @@ -1,9 +0,0 @@ -https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts -https://raw.githubusercontent.com/hagezi/dns-blocklists/main/adblock/multi.txt -https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/spy.txt -https://raw.githubusercontent.com/ElkyBoy/ruadlist-pihole/refs/heads/main/adservers_pihole.txt -https://abp.oisd.nl/basic/ -https://adaway.org/hosts.txt -https://v.firebog.net/hosts/RPiList-Malware.txt -https://raw.githubusercontent.com/anudeepND/blacklist/master/adservers.txt -https://raw.githubusercontent.com/mmotti/pihole-regex/refs/heads/master/regex.list diff --git a/pihole/docker-compose.yml b/pihole/docker-compose.yml deleted file mode 100644 index 4ed09d2..0000000 --- a/pihole/docker-compose.yml +++ /dev/null @@ -1,33 +0,0 @@ -services: - pihole: - container_name: pihole - image: pihole/pihole:latest - # Для корректной работы DNS-фильтрации контейнеру нужны права администратора сети - cap_add: - - NET_ADMIN - ports: - - "53:53/tcp" - - "53:53/udp" - # - "67:67/udp" # Раскомментируйте, если планируете использовать Pi-hole как DHCP-сервер - - "8080:80/tcp" # Веб-интерфейс будет доступен на порту 8080 (чтобы не занимать 80) - environment: - TZ: "Europe/Samara" # Укажите ваш часовой пояс - FTLCONF_LOCAL_IPV4: "${PIHOLE_IP:?}" # IP-адрес вашего хоста (сервера) - volumes: - - "./etc-pihole:/etc/pihole" - - "./etc-dnsmasq.d:/etc/dnsmasq.d" - restart: unless-stopped - deploy: - resources: - limits: - cpus: "0.25" - memory: 128M - reservations: - memory: 64M - networks: - - pihole_network - -networks: - pihole_network: - name: pihole_network - driver: bridge diff --git a/pihole/etc-dnsmasq.d/.keep b/pihole/etc-dnsmasq.d/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/pihole/etc-pihole/.keep b/pihole/etc-pihole/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/pihole/set-password.sh b/pihole/set-password.sh deleted file mode 100644 index 7752f4a..0000000 --- a/pihole/set-password.sh +++ /dev/null @@ -1 +0,0 @@ -docker exec -it pihole pihole setpassword diff --git a/powersave_mode.sh b/powersave_mode.sh deleted file mode 100755 index a2c38a8..0000000 --- a/powersave_mode.sh +++ /dev/null @@ -1,7 +0,0 @@ -sudo apt update -sudo apt install linux-cpupower - -sudo cpupower frequency-set -g ondemand - -echo "===== CPU FREQUENCY INFO =====" -cpupower frequency-info diff --git a/proxy/crowdsec.sh b/proxy/crowdsec.sh new file mode 100644 index 0000000..01e93af --- /dev/null +++ b/proxy/crowdsec.sh @@ -0,0 +1,34 @@ +# Получить API ключ +docker exec crowdsec cscli bouncers add firewall-bouncer + +# Посмотреть статистику в реальном времени: +docker exec crowdsec cscli metrics + +# Добавить IP в белый список (локально): +docker exec crowdsec cscli whitelists add --ip 192.168.1.5 +# Посмотреть белые списки: +docker exec crowdsec cscli parsers list | grep whitelist + +# Список всех активных банов: +docker exec crowdsec cscli decisions list +# Забанить IP вручную (на 24 часа по умолчанию): +docker exec crowdsec cscli decisions add --ip 1.2.3.4 --duration 24h --reason "Причина" +# Забанить целую подсеть: +docker exec crowdsec cscli decisions add --range 1.2.3.0/24 +# Удалить вообще все активные баны: +docker exec crowdsec cscli decisions delete --all + +# Список последних событий: +docker exec crowdsec cscli alerts list +# Посмотреть подробности конкретного алерта (по ID): +docker exec crowdsec cscli alerts inspect + +# Посмотреть, что установлено: +docker exec crowdsec cscli hub list +# Обновить базу правил (как apt update): +docker exec crowdsec cscli hub update +# Установить новую коллекцию (например, для защиты SSH): +docker exec crowdsec cscli collections install crowdsecurity/sshd + +# Список подключенных баунсеров (исполнителей, блокировщиков): +docker exec crowdsec cscli bouncers list \ No newline at end of file diff --git a/samba/docker-compose.yml b/samba/docker-compose.yml index b98dd80..86a096b 100644 --- a/samba/docker-compose.yml +++ b/samba/docker-compose.yml @@ -24,7 +24,7 @@ services: resources: limits: cpus: '0.5' - memory: 256M + memory: 512M reservations: memory: 128M networks: diff --git a/screenshots/synapse-admin.png b/screenshots/synapse-admin.png new file mode 100644 index 0000000..d7df0a5 Binary files /dev/null and b/screenshots/synapse-admin.png differ