diff --git a/Debian.md b/Debian.md index 0b74de1..07ab96f 100644 --- a/Debian.md +++ b/Debian.md @@ -1,10 +1,15 @@ -# Настройка Debian +# 🐧 Настройка Debian -## 1. Установка Debian +> Этот гайд описывает установку и настройку Debian для запуска сервисов в контейнерах. + +--- + +## 1️⃣ Установка Debian Стандартная установка Debian Minimal. Занимаем весь виртуальный диск. При установке отключаем графический интерфейс и ставим SSH сервер. -После установки заходим под root и устанавливаем `sudo`. +После установки заходим под `root` и устанавливаем `sudo`: + ```bash apt install sudo usermod -aG sudo имя_пользователя @@ -12,18 +17,26 @@ usermod -aG sudo имя_пользователя Перезаходим и дальше работаем под обычным пользователем. -## 2. Статический IP -Смотрим название сетевого интерфейса и устанавливаем resolvconf (для поддержки dns-nameservers): +--- + +## 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 @@ -31,26 +44,41 @@ iface enp0s3 inet static gateway 192.168.1.1 dns-nameservers 77.88.8.8 8.8.8.8 ``` + +> ⚠️Замените `enp0s3` на название вашего сетевого интерфейса и настройте IP адрес в соответствии с вашей сетевой конфигурацией. + Перезагружаемся: + ```bash sudo reboot ``` -## 3. Установка Podman +--- + +## 3️⃣ Установка Podman > Мы будем использовать Podman вместо Docker в целях безопасности. Podman не требует запущенного демона для работы и по умолчанию нацелен на работу в rootless режиме, что нам очень интересно. +Устанавливаем Podman и podman-compose: + ```bash sudo apt install podman podman-compose ``` -Добавляем загрузку контейнеров с параметром `restart: always` при загрузке системы +Добавляем загрузку контейнеров с параметром `restart: always` при загрузке системы: + ```bash systemctl --user enable podman-restart.service sudo loginctl enable-linger USER ``` -## 4. Клонируем этот репозиторий для запуска сервисов +> ⚠️ Замените `USER` на имя вашего пользователя. + +--- + +## 4️⃣ Клонирование репозитория + +Клонируем этот репозиторий для запуска сервисов: ```bash sudo apt install git @@ -59,35 +87,54 @@ cd ~/services git clone https://github.com/StepanovPlaton/HomeServerServices . ``` -## 5. Монтирование дисков +--- + +## 5️⃣ Монтирование дисков + +Смотрим список разделов с их UUID: -Смотрим список разделов с их UUID ```bash sudo blkid ``` -Создаём точку монтирования + +Создаём точку монтирования: + ```bash mkdir ~/diskN ``` -Добавляем запись в fstab + +Добавляем запись в `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 ``` -**Настройка сервисов описана в файле [Services.md](Services.md)** +> ⚠️ Замените `path/to/disk` на путь к вашему диску. + +--- + +## 📚 Следующие шаги + +**Настройка сервисов описана в файле [Services.md](./Services.md)** diff --git a/OPNsense.md b/OPNsense.md index 27cb2bd..c81fc76 100644 --- a/OPNsense.md +++ b/OPNsense.md @@ -1,38 +1,56 @@ -# Настройка OPNsense +# 🔒 Настройка OPNsense -## 1. Установка OPNsense +> Этот гайд описывает установку и настройку OPNsense в качестве роутера и файрвола для домашней сети. -Ничего не трогаем в момент загрузки. Авторизуемся как `installer`, пароль по умолчанию - `opnsense`. +--- + +## 1️⃣ Установка OPNsense + +Ничего не трогаем в момент загрузки. Авторизуемся как `installer`, пароль по умолчанию — `opnsense`. - Добавляем английскую локаль -- Выбираем ФС - **ZFS RAID0** +- Выбираем ФС — **ZFS RAID0** - Предупреждение о недостатке ОЗУ можно пропустить - Устанавливаем систему -## 2. Создаём второй сетевой мост +--- -Создаём второй сетевой мост для второго порта, подключаем сетевое устройство в ВМ OPNsense. Перезагружаем ВМ OPNsense. +## 2️⃣ Создание второго сетевого моста -## 3. Настройка OPNsense +Создаём второй сетевой мост в Proxmox для второго порта, подключаем сетевое устройство в ВМ OPNsense. Перезагружаем ВМ OPNsense. + +--- + +## 3️⃣ Настройка OPNsense В меню терминала: -1. Выбираем **1 - assign interfaces**: - - Назначаем одному порту **WAN** (порт для провайдера, во внешний интернет) - - Второму порту **LAN** (порт для локальной сети) +### 1. Назначение интерфейсов -2. Выбираем **2 - set interface ip address**: - - Для LAN указываем статический IPv4 (это будет наш Gateway) - - DHCP можно пока не включать, настроим позже +Выбираем **1 - assign interfaces**: -## 4. Обновляем OPNsense +- Назначаем одному порту **WAN** (порт для провайдера, во внешний интернет) +- Второму порту **LAN** (порт для локальной сети) -1. Открываем web интерфейс по адресу установленному для LAN +### 2. Настройка IP адресов + +Выбираем **2 - set interface ip address**: + +- Для LAN указываем статический IPv4 (это будет наш Gateway) +- DHCP можно пока не включать, настроим позже + +--- + +## 4️⃣ Обновление OPNsense + +1. Открываем web интерфейс по адресу, установленному для LAN 2. Заходим **Система > Программное обеспечение > Статус > Проверить наличие обновлений** 3. Потом раздел обновления, снизу кнопка **обновить** 4. Ждём обновления всех пакетов -## 5. Устанавливаем плагин Qemu Agent +--- + +## 5️⃣ Установка плагина Qemu Agent Нужен для управления OPNsense из Proxmox. @@ -40,7 +58,9 @@ 2. Включаем галочку **показать плагины сообщества** 3. Ставим плагин `os-qemu-guest-agent` -## 6. Настраиваем доступ в интернет +--- + +## 6️⃣ Настройка доступа в интернет Можно воспользоваться стандартным мастером настройки: @@ -49,38 +69,54 @@ 3. Устанавливаем логин и пароль провайдера 4. Остальное уже должно быть настроено, но можно что-то изменить -## 7. Настройка DHCP +--- + +## 7️⃣ Настройка DHCP В разделе **Службы**: - Выключаем **Dnsmasq DNS & DHCP** - Включаем **ISC DHCPv4** - - В настройках DNS первым сервером указываем IP адрес OPNsense. Сам DNS сервер настроем в следущем шаге + - В настройках DNS первым сервером указываем IP адрес OPNsense. Сам DNS сервер настроим в следующем шаге -## 8. Настройка DNS +--- + +## 8️⃣ Настройка DNS > Для безопасности домашней сети от чрезмерной рекламы и сбора статистики добавим фильтр [AdGuard Home](https://github.com/AdguardTeam/AdGuardHome) -> Если для вашей сети достаточно обычного DNS просто включите в настройках **Unbound DNS** +> +> Если для вашей сети достаточно обычного DNS, просто включите в настройках **Unbound DNS** + +В консоли OPNsense добавим новый репозиторий: -В консоли 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, хотя это не так - игнорируем предупреждение. +После чего в разделе **Система > ПО > Плагины** появится пакет `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. Проброс портов +- [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 > Передаресация портов** добавим правило. +В разделе **Межсетевой экран > NAT > Переадресация портов** добавим правило: + - **Interface:** WAN - **TCP/IP Version:** IPv4 - **Protocol:** TCP @@ -89,9 +125,12 @@ pkg update - **Redirect target IP:** Введите локальный IP вашего сервера - **Redirect target port:** Порт назначения - **Pool Options:** Default -- **Filter rule association:** Add associated filter rule - - **Это важно:** OPNsense автоматически создаст разрешающее правило в брандмауэре +- **Filter rule association:** Add associated filter rule + - OPNsense автоматически создаст разрешающее правило в брандмауэре Для HTTP нужно добавить перенаправления на 8080 порт сервера, для HTTPS на 8443. Базовые порты 80 и 443 недоступны в rootless контейнере. Сохраняем изменения и проверяем в разделе **Межсетевой экран > Правила > WAN**. -Для доступа из домашней сети нужно добавить зеркальный NAT в разделе **Межсетевой экран > Настройки > Дополнительно** ставим галочки **Отображение для перенаправлений портов** и **Автоматический исходящий NAT для отображения** \ No newline at end of file +Для доступа из домашней сети нужно добавить зеркальный NAT в разделе **Межсетевой экран > Настройки > Дополнительно** ставим галочки: + +- **Отображение для перенаправлений портов** +- **Автоматический исходящий NAT для отображения** diff --git a/Proxmox.md b/Proxmox.md index d96edcd..278b913 100644 --- a/Proxmox.md +++ b/Proxmox.md @@ -1,62 +1,76 @@ -# Настройка Proxmox +# 🖥️ Настройка Proxmox -## 1. Отключаем enterprise репозитории и обновляем пакеты +> Этот гайд описывает установку и настройку Proxmox VE для виртуализации OPNsense и Debian. + +--- + +## 1️⃣ Отключение enterprise репозиториев и обновление пакетов В разделе **Сервер > Обновления > Репозитории**: + - Отключаем всё с упоминанием enterprise - Добавляем No-Subscription репозиторий Затем обновляем пакеты в терминале сервера: + ```bash apt update && apt upgrade ``` -## 2. Загружаем на сервер ISO образы +--- + +## 2️⃣ Загрузка ISO образов + +Загружаем на сервер ISO образы: - Для OPNsense выбираем образ типа **DVD** - Для Debian нужен minimal образ netinst - Копируем файлы в разделе **Сервер > local > ISO-образы** -## 3. Создаём ВМ с OPNsense +--- + +## 3️⃣ Создание ВМ с OPNsense Настройки ВМ: -- **Общее > Запуск при загрузке**: Включаем -- **ОС > Гостевая ОС**: Other (OPNsense - это FreeBSD) -- **Система > Агент QEMU**: включить (нужен для просмотра информации о системе в гипервизоре) -- **Диски > Шина**: SCSI -- **Размер диска**: 16Гб (достаточно) -- **ЦП > Тип**: host -- **ЦП > Кол-во ядер**: 2 -- **Объём ОЗУ**: 2Гб (не менее 1Гб) -- **Сеть > Модель**: VirtIO -- **Сетевой экран**: отключаем (OPNsense сам решает эту задачу) +- **Общее > Запуск при загрузке:** Включаем +- **ОС > Гостевая ОС:** Other (OPNsense — это FreeBSD) +- **Система > Агент QEMU:** включить (нужен для просмотра информации о системе в гипервизоре) +- **Диски > Шина:** SCSI +- **Размер диска:** 16Гб (достаточно) +- **ЦП > Тип:** host +- **ЦП > Кол-во ядер:** 2 +- **Объём ОЗУ:** 2Гб (не менее 1Гб) +- **Сеть > Модель:** VirtIO +- **Сетевой экран:** отключаем (OPNsense сам решает эту задачу) - Остальные настройки по умолчанию Выбираем загруженный ISO-образ и запускаем ВМ. -**Настройка OPNsense описана в файле [OPNsense.md](OPNsense.md)** +**Настройка OPNsense описана в файле [OPNsense.md](./OPNsense.md)** -## 4. Создаём ВМ с Debian +--- -> По идее Proxmox работает на ядре Linux и построен на Debian, поэтому мы могли бы использовать LXC контейнер, однако для запуска Docker (Podman) внутри LXC нужны разрешения, и модули ядра, не способствующие безопасности. По сути при таком подходе Docker (Podman) будет работать чуть ли не в самом гипервизоре, что плохо. Поэтому используем ВМ +## 4️⃣ Создание ВМ с Debian + +> По идее Proxmox работает на ядре Linux и построен на Debian, поэтому мы могли бы использовать LXC контейнер, однако для запуска Docker (Podman) внутри LXC нужны разрешения и модули ядра, не способствующие безопасности. По сути при таком подходе Docker (Podman) будет работать чуть ли не в самом гипервизоре, что плохо. Поэтому используем ВМ. Настройки ВМ: -- **Общее > Запуск при загрузке**: Включаем -- **ОС > Гостевая ОС**: Linux 6.x -- **Система > Агент QEMU**: включить (нужен для просмотра информации о системе в гипервизоре) -- **Диски > Шина**: SCSI -- **Размер диска**: 48Гб (и более) -- **ЦП > Тип**: host -- **ЦП > Кол-во ядер**: 4 (и более) -- **Объём ОЗУ**: 4Гб (и более) -- **Сеть > Модель**: VirtIO -- **Сетевой экран**: отключаем (нас прикрывает OPNsense) +- **Общее > Запуск при загрузке:** Включаем +- **ОС > Гостевая ОС:** Linux 6.x +- **Система > Агент QEMU:** включить (нужен для просмотра информации о системе в гипервизоре) +- **Диски > Шина:** SCSI +- **Размер диска:** 48Гб (и более) +- **ЦП > Тип:** host +- **ЦП > Кол-во ядер:** 4 (и более) +- **Объём ОЗУ:** 4Гб (и более) +- **Сеть > Модель:** VirtIO +- **Сетевой экран:** отключаем (нас прикрывает OPNsense) - Остальные настройки по умолчанию -> Если мы хотим добавить внешние диски для хранения данных, нужно дать ВМ доступ к ним через USB. В разделе **Оборудование** нужно добавить USB-устройство. Лучше всего дать доступ ВМ к самому USB-порту, тогда любое устройство в него вставленное будет доступно внутри ВМ, но можно так же предоставить доступ к конкретному устройству, в какой порт оно не было бы вставлено. +> Если мы хотим добавить внешние диски для хранения данных, нужно дать ВМ доступ к ним через USB. В разделе **Оборудование** нужно добавить USB-устройство. Лучше всего дать доступ ВМ к самому USB-порту, тогда любое устройство в него вставленное будет доступно внутри ВМ, но можно также предоставить доступ к конкретному устройству, в какой порт оно не было бы вставлено. > -> Чтобы посмотреть подключенные USB-устройства и скорости их работы запускаем команду `lsusb -t` и ищем наши диски (`Class=Mass Storage`) +> Чтобы посмотреть подключенные USB-устройства и скорости их работы, запускаем команду `lsusb -t` и ищем наши диски (`Class=Mass Storage`) -**Настройка Debian описана в файле [Debian.md](Debian.md)** \ No newline at end of file +**Настройка Debian описана в файле [Debian.md](./Debian.md)** diff --git a/README.md b/README.md index 86f36ba..3d57fad 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,43 @@ -# Home Server Services +# 🏠 Home Server Services -> **Home Server Services** - это гайд по настройке и полный набор сервисов в Docker для организации домашнего роутера/сервера! +> **Home Server Services** — это гайд по настройке и полный набор сервисов в Docker для организации домашнего роутера/сервера! > -> Главное - это **модульность** и **воспроизводимая установка**. Можно развернуть за 30 минут! +> Главное — это **модульность** и **воспроизводимая установка**. -![](./screenshots/grafana.jpg) -![](./screenshots/portainer.jpg) +![Grafana Dashboard](./screenshots/grafana.jpg) +![Portainer Interface](./screenshots/portainer.jpg) -## Мой сервер: +--- -- CheckWay Sherman Micro +## 📋 Мой сервер + +- **CheckWay Sherman Micro** - [Intel Celeron J1900](https://technical.city/ru/cpu/Core-2-Duo-E8400-protiv-Celeron-J1900) @ 1.99GHz (64 bit) - - 8Gb RAM - - 120Gb SSD + - 8GB RAM + - 120GB SSD - 2x 1Gbps (WAN+LAN) -- Proxmox VE 9.1.4 - - OPNsense 25.7 +- **Proxmox VE 9.1.4** + - **OPNsense 25.7** - [CrowdSec](https://www.crowdsec.net) - - Debian 13 (Trixie) Minimal + - [AdGuard Home](https://github.com/AdguardTeam/AdGuardHome) + - **Debian 13 (Trixie) Minimal** - [Podman](https://podman.io) -## О проекте: +--- + +## 🚀 О проекте - **Полнофункциональный домашний сервер** -- Две одновременно запущенные операционные системы запущенны в гипервизоре Proxmox +- Две одновременно запущенные операционные системы в гипервизоре Proxmox - OPNsense выполняет функции роутера, DHCP и NTP сервера, защищает домашнюю сеть от вторжений с CrowSec - В Debian в Podman запущены контейнеры с сервисами -- **Все сервисы настроены через Docker Compose (совместим с Podman)** для легкого управления и быстрого запуска +- **Все сервисы настроены через Docker Compose** (совместим с Podman) для легкого управления и быстрого запуска - **Мониторинг системы через Grafana** с готовым дашбордом - **Файловый сервер Samba** для доступа к файлам по сети - Открытый диск только на чтение - Доступ на запись только после авторизации - **Синхронизация файлов** между устройствами через **Syncthing** - - Постоянная точка синхронизации позволяет обмениваться файлами между устройствами, даже если они не бывают одновременно в сети - домашний сервер выступает посредником + - Постоянная точка синхронизации позволяет обмениваться файлами между устройствами, даже если они не бывают одновременно в сети — домашний сервер выступает посредником - **BitTorrent клиент Transmission** с веб-интерфейсом - **SSH туннелирование через AutoSSH** - Можно пробросить порт на удалённый VPS, автоматически переподключается при потере соединения @@ -40,46 +45,67 @@ - Автоматическое получение и обновление SSL сертификатов через Let's Encrypt - Автоматическое обновление DNS записей у регистратора [рег.ру](https://www.reg.ru) - **Git-сервер Gitea** для хостинга репозиториев -- **FileBrowser** - веб-интерфейс для управления файлами через браузер -- **Matrix Synapse** - собственный сервер для мессенджера Matrix с веб-клиентом Element -- Блокировка рекламы, нежелательной слежки, частичная защита от атак с помощью **Pi-hole** +- **FileBrowser** — веб-интерфейс для управления файлами через браузер +- **Matrix Synapse** — собственный сервер для мессенджера Matrix с веб-клиентом Element +- Блокировка рекламы, нежелательной слежки, частичная защита от атак с помощью **AdGuard Home** - Управление контейнерами через **Portainer** - Все **сервисы используют переменные окружения** для гибкой настройки и примеры конфигурации -## Подготовка: +--- -- Купить белый IP адрес у провайдера -- Купить домен второго уровня у регистратора [рег.ру](https://www.reg.ru) -- [В настройках API рег.ру](https://www.reg.ru/user/account/settings/api/) добавить CIDR вашего провайдера (чтобы при смене IP наш скрипт смог обновить DNS записи) -- В настройках DNS-серверов зоны указать бесплатные DNS-серверы рег.ру: `ns1.reg.ru`, `ns2.reg.ru` +## 📝 Подготовка -После этих шагов можно переходить к настройке сервера. **[Первым шагом установим гипервизор Proxmox](./Proxmox.md)** +Перед началом установки необходимо выполнить следующие шаги: -## Использование: +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` -#### После настройки и запуска внутренние сервисы доступны (по умолчанию) по следующим портам: +> После выполнения этих шагов можно переходить к настройке сервера. **[Первым шагом установим гипервизор Proxmox](./Proxmox.md)**. Вы также можете установить [Debian с сервисами отдельно, если у вас уже настроен роутер](./Debian.md) -- **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) +#### Grafana — порт `3000` -#### Внешние сервисы запустятся на указанных в конфиге nginx поддоменах: +![Grafana Dashboard](./screenshots/grafana.jpg) -- **Gitea** - ![](./screenshots/gitea.png) -- **Synapse и Element** - |![](./screenshots/synapse.png)|![](./screenshots/element.png)| - |-|-| -- **FileBrowser** - ![](./screenshots/cloud.png) +#### Portainer — порт `9000` + +![Portainer Interface](./screenshots/portainer.jpg) + +#### Transmission — порт `9091` + +![Transmission Interface](./screenshots/transmission.png) + +#### Syncthing — порт `8384` + +![Syncthing Interface](./screenshots/syncthing.png) + +#### Matrix Admin — порт `8009` + +![Matrix Admin Interface](./screenshots/synapse-admin.png) + +### Внешние сервисы + +Внешние сервисы запустятся на указанных в конфиге nginx поддоменах: + +#### Gitea + +![Gitea Interface](./screenshots/gitea.png) + +#### Synapse и Element + +| Synapse | Element | +|---------|---------| +| ![Synapse Interface](./screenshots/synapse.png) | ![Element Interface](./screenshots/element.png) | + +#### FileBrowser + +![FileBrowser Interface](./screenshots/cloud.png) diff --git a/Services.md b/Services.md index 51b2c58..8a9c8c3 100644 --- a/Services.md +++ b/Services.md @@ -1,27 +1,35 @@ -# Настройка сервисов +# ⚙️ Настройка сервисов + +> Этот гайд описывает настройку и запуск всех сервисов в контейнерах. + +--- + +## 1️⃣ Portainer — WebUI для управления контейнерами + +> Для запуска Portainer требуется активный Docker сокет. В Podman по умолчанию его нет, так как это является потенциальным вектором атаки. Запускайте сокет только для конкретного пользователя (не root!) -## 1. [Portainer](./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 -podman generate systemd --new --files --name portainer -systemctl --user enable ./container-portainer.service ``` -## 2. [Grafana](./grafana/) - Dashboard со статистикой загруженности сервера -> Proxmox предоставляет достаточно информации об использовании ресурсов системы, но если вы ставите Debian как контейнеров сервисов отдельно, вам может потребоваться Grafana +--- + +## 2️⃣ Grafana — Dashboard со статистикой загруженности сервера + +> Proxmox предоставляет достаточно информации об использовании ресурсов системы, но если вы ставите Debian как контейнер сервисов отдельно, вам может потребоваться Grafana + ```bash cd grafana cp .env.example .env && vim .env podman-compose up -d -podman generate systemd --new --files --name portainer -systemctl --user enable ./container-portainer.service ``` -### 3. [AutoSSH](./autossh/) - SSH тунель, проброс портов +--- + +## 3️⃣ AutoSSH — SSH туннель, проброс портов ```bash cd autossh @@ -29,8 +37,9 @@ cp .env.example .env && vim .env podman-compose up -d --build ``` -### 4. [Samba](./samba/) - сетевой диск в локальной сети +--- +## 4️⃣ Samba — сетевой диск в локальной сети ```bash cd samba @@ -38,7 +47,7 @@ cp .env.example .env && vim .env podman-compose up -d ``` -> Samba работает на 139 и 445 порту, для доступа к ним нужны root права. Чтобы не запускать контейнер от имени root пробросим порты из контейнера на 1139 и 1445 порты соответственно, и добавим правила в iptables для переадресации трафика +> Samba работает на 139 и 445 порту, для доступа к ним нужны root права. Чтобы не запускать контейнер от имени root, пробросим порты из контейнера на 1139 и 1445 порты соответственно, и добавим правила в iptables для переадресации трафика: ```bash sudo iptables -t nat -A PREROUTING -p tcp --dport 139 -j REDIRECT --to-ports 1139 @@ -47,10 +56,12 @@ sudo iptables -t nat -L -n -v # Посмотреть список правил # Для сохранения правил iptables после перезагрузки sudo apt install iptables-persistent -sudo netfilter-persistent save # сохранить текущие iptables +sudo netfilter-persistent save # сохранить текущие iptables ``` -### 5. [Transmission](./transmission/) - qBitTorrent клиент +--- + +## 5️⃣ Transmission — BitTorrent клиент ```bash cd transmission @@ -58,9 +69,11 @@ 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) +> В настройках клиента указанная в `.env` папка доступна по пути `/downloads`. Можно подключиться с помощью [Transmission Remote GUI](https://github.com/transmission-remote-gui/transgui) или [Transmission Qt](https://transmissionbt.com/download.html) -### 6. [Syncthing](./syncthing/) - синхронизация файлов между устройствами +--- + +## 6️⃣ Syncthing — синхронизация файлов между устройствами ```bash cd syncthing @@ -69,7 +82,9 @@ mkdir config && podman unshare chown -R 1000:1000 config podman-compose up -d ``` -### 7. [Gitea](./gitea/) +--- + +## 7️⃣ Gitea — Git-сервер ```bash cd gitea @@ -80,9 +95,11 @@ mkdir db && podman unshare chown -R 1000:1000 db podman-compose up -d ``` -Gitea конфигурируется позже, уже в веб-форме. Обязательно **отключаем самостоятельную регистрацию** и создаём администратора (пользователя по умолчанию). Остальное не трогаем, уже сконфигурировано в `.env` +> Gitea конфигурируется позже, уже в веб-форме. Обязательно **отключаем самостоятельную регистрацию** и создаём администратора (пользователя по умолчанию). Остальное не трогаем, уже сконфигурировано в `.env` -### 8. [Cloud (FileBrowser)](./cloud/) +--- + +## 8️⃣ Cloud (FileBrowser) — веб-интерфейс для управления файлами ```bash cd cloud @@ -91,13 +108,17 @@ touch filebrowser.db && podman unshare chown -R 1000:1000 filebrowser.db podman-compose up -d ``` -### 9. [Matrix](./matrix/) +--- + +## 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 @@ -111,31 +132,37 @@ database: 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 ``` -### 10. [Nginx Reverse Proxy (Entrypoint)](./proxy) +--- + +## 🔟 Nginx Reverse Proxy (Entrypoint) ```bash cd proxy cp .env.example .env && vim .env ``` -Создаём конфиг для DynDNS: +### Создание конфига для 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). +> Нужно указать ресурсные записи `@` и `www` для доступа к домену второго уровня напрямую. Также нужно добавить домены 3-го уровня для: gitea, cloud (filebrowser), matrix server (synapse), matrix client (element). + +### Первоначальная настройка SSL В первый раз SSL сертификаты нужно создать вручную. @@ -145,14 +172,17 @@ cp ddns/domains.txt.example ddns/domains.txt && vim ddns/domains.txt podman-compose -f init-compose.yml up -d --build ``` -Проверяем по логам в portainer и в личном кабинете рег.ру что ресурсные записи обновились. Ожидаем пока DNS обновит информацию о наших поддоменах (занимает от 15 минут до 24 часов). +Проверяем по логам в portainer и в личном кабинете рег.ру, что ресурсные записи обновились. Ожидаем, пока DNS обновит информацию о наших поддоменах (занимает от 15 минут до 24 часов). + +Затем создаём SSL сертификаты на каждый домен(-ы) с помощью команды: -Затем создаём SSL сертификаты на каждый домен(-ы) c помощью команды ```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 ``` -Настраиваем Nginx: +> ⚠️ Замените `your-email@gmail.com` на ваш email и `domain.com`, `domain2.com` на ваши домены. + +### Настройка Nginx ```bash cd nginx/conf.d @@ -160,7 +190,7 @@ cp default.conf.example default.conf vim default.conf ``` -Запускаем основной контейнер: +### Запуск основного контейнера ```bash podman-compose -f init-compose.yml down 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