Files
HomeServerServices/README.md
2026-01-15 00:14:56 +04:00

237 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Home Server Services
> **Home Server Services** - это полный набор сервисов в Docker для организации домашнего сервера!
>
> Главное - это **модульность** и **воспроизводимая установка**. Можно развернуть за 15 минут!
![](./screenshots/grafana.jpg)
![](./screenshots/portainer.jpg)
## Мой сервер:
- CheckWay POS88
- [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`
## Сервисы:
- [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** с готовыми дашбордами
- **Файловый сервер 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 с веб-интерфейсом**
- Скрипт для снижения энергопотребления
- Все **сервисы используют переменные окружения** для гибкой настройки и примеры конфигураций
- Автоматический перезапуск контейнеров при сбоях
## Подготовка:
- Купить белый 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
```bash
cd portainer
cp .env.example .env && vim .env
sudo docker compose up -d
```
### 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
```bash
cd samba
cp .env.example .env && vim .env
sudo docker compose up -d
```
### 5. Transmission
```bash
cd transmission
cp .env.example .env && vim .env
sudo docker compose up -d
```
### 6. Syncthing
```bash
cd syncthing
cp .env.example .env && vim .env
sudo docker compose up -d
```
### 7. Gitea
```bash
cd gitea
cp .env.example .env && vim .env
sudo docker compose up -d
```
> **Примечание:** Конфигурируется позже, уже в веб-форме.
### 8. Cloud (FileBrowser)
```bash
cd cloud
cp .env.example .env && vim .env
touch filebrowser.db
sudo docker compose up -d
```
### 9. Matrix
```bash
cd matrix
cp .env.example .env && vim .env
```
Создаём конфиг [по примеру](./matrix/create_config.sh):
```bash
sudo docker compose up -d
```
Создаём пользователя [по примеру](./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 наш сервер.
### 10. 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)
#### Внешние сервисы запустятся на указанных в конфиге nginx поддоменах:
- **Gitea**
![](./screenshots/gitea.png)
- **Synapse и Element**
|![](./screenshots/synapse.png)|![](./screenshots/element.png)|
|-|-|
- **FileBrowser**
![](./screenshots/cloud.png)