Refactoring

This commit is contained in:
2026-01-15 00:14:56 +04:00
parent 9eeb0fb1f2
commit 09bd0766b0
27 changed files with 370 additions and 47 deletions

193
README.md
View File

@@ -25,16 +25,26 @@
- [Grafana](./grafana/) - Загруженность сервера - [Grafana](./grafana/) - Загруженность сервера
- [Prometheus](./grafana/prometheus.yml) - [Prometheus](./grafana/prometheus.yml)
- [Node Exporter](./grafana/) - [Node Exporter](./grafana/)
- [Proxy](./proxy/) - Reverse proxy
- [Nginx](./proxy/nginx/)
- [DDNS](./proxy/ddns/) - Автоматическое обновление DNS записей у регистратора [рег.ру](https://www.reg.ru)
- Let's Encrypt - Автоматическое обновление SSL сертификатов на все домены
- [Samba](./samba/) - Сетевой диск - [Samba](./samba/) - Сетевой диск
- [Syncthing](./syncthing/) - Синхронизация данных между устройствами - [Syncthing](./syncthing/) - Синхронизация данных между устройствами
- [Transmission](./transmission/) - BitTorrent клиент - [Transmission](./transmission/) - BitTorrent клиент
- [AutoSSH](./autossh/) - SSH тунель - [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** для легкого управления и быстрого запуска - **Все сервисы настроены через Docker Compose** для легкого управления и быстрого запуска
- Мониторинг системы через Grafana с готовыми дашбордами - **Мониторинг системы через Grafana** с готовыми дашбордами
- **Файловый сервер Samba** для доступа к файлам по сети - **Файловый сервер Samba** для доступа к файлам по сети
- Открытый диск только на чтение - Открытый диск только на чтение
- Доступ на запись только после авторизации - Доступ на запись только после авторизации
@@ -43,29 +53,184 @@
- **BitTorrent клиент Transmission** с веб-интерфейсом - **BitTorrent клиент Transmission** с веб-интерфейсом
- **SSH туннелирование через AutoSSH** - **SSH туннелирование через AutoSSH**
- Можно пробросить порт на удалённый VPS, автоматически переподключается при потере соединения - Можно пробросить порт на удалённый VPS, автоматически переподключается при потере соединения
- **Nginx reverse proxy** для маршрутизации трафика к сервисам
- Автоматическое получение и обновление SSL сертификатов через Let's Encrypt
- Автоматическое обновление DNS записей у регистратора [рег.ру](https://www.reg.ru)
- **Git-сервер Gitea** для хостинга собственных репозиториев
- **FileBrowser** - веб-интерфейс для управления файлами через браузер
- **Matrix Synapse** - собственный сервер для мессенджера Matrix с веб-клиентом Element
- Блокировка рекламы, нежелательной слежки, частичная защита от атак с помощью **Pi-hole**
- Управление Docker через **Portainer с веб-интерфейсом** - Управление Docker через **Portainer с веб-интерфейсом**
- Скрипт для снижения энергопотребления CPU - Скрипт для снижения энергопотребления
- Все **сервисы используют переменные окружения** для гибкой настройки и примеры конфигураций - Все **сервисы используют переменные окружения** для гибкой настройки и примеры конфигураций
- Автоматический перезапуск контейнеров при сбоях - Автоматический перезапуск контейнеров при сбоях
## Подготовка:
- Купить белый 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. **Настройте переменные окружения:** ### 1. Portainer
Создайте файл `.env` в директории сервиса с необходимыми переменными по шаблону.
```bash ```bash
cd <service-folder> cd portainer
cp .env.example .env cp .env.example .env && vim .env
sudo docker compose up -d
``` ```
Отредактируйте `.env` под свои задачи. ### 2. Grafana
2. **Запустите нужные сервисы:**
```bash ```bash
docker-compose -f portainer/docker-compose.yml up -d cd grafana
docker-compose -f grafana/docker-compose.yml up -d cp .env.example .env && vim .env
docker-compose -f samba/docker-compose.yml up -d sudo docker compose up -d
docker-compose -f syncthing/docker-compose.yml up -d
docker-compose -f transmission/docker-compose.yml up -d
docker-compose -f autossh/docker-compose.yml 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)

View File

@@ -28,9 +28,17 @@ services:
-L 0.0.0.0:${SSH_TUNNEL_TO:?}:localhost:${SSH_TUNNEL_FROM:?} -L 0.0.0.0:${SSH_TUNNEL_TO:?}:localhost:${SSH_TUNNEL_FROM:?}
${SSH_USER:?}@${SSH_HOST:?} ${SSH_USER:?}@${SSH_HOST:?}
-p ${SSH_PORT:-22} -p ${SSH_PORT:-22}
deploy:
resources:
limits:
cpus: '0.1'
memory: 64M
reservations:
memory: 32M
networks: networks:
- autossh_network - autossh_network
networks: networks:
autossh_network: autossh_network:
name: autossh_network
driver: bridge driver: bridge

View File

@@ -24,9 +24,17 @@ services:
filebrowser users add ${ADMIN_USER:?} ${ADMIN_PASSWORD:?} --perm.admin --scope "." --database /database/filebrowser.db || \ filebrowser users add ${ADMIN_USER:?} ${ADMIN_PASSWORD:?} --perm.admin --scope "." --database /database/filebrowser.db || \
filebrowser users update ${ADMIN_USER:?} --password ${ADMIN_PASSWORD:?} --scope "." --database /database/filebrowser.db filebrowser users update ${ADMIN_USER:?} --password ${ADMIN_PASSWORD:?} --scope "." --database /database/filebrowser.db
filebrowser --database /database/filebrowser.db --address 0.0.0.0 --port 80 --root /srv filebrowser --database /database/filebrowser.db --address 0.0.0.0 --port 80 --root /srv
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
memory: 256M
networks: networks:
- cloud_network - cloud_network
networks: networks:
cloud_network: cloud_network:
name: cloud_network
driver: bridge driver: bridge

View File

@@ -19,6 +19,13 @@ services:
# - ${GITEA_SSH_PORT:?}:2222 # - ${GITEA_SSH_PORT:?}:2222
depends_on: depends_on:
- gitea-db - gitea-db
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
memory: 256M
networks: networks:
- gitea_network - gitea_network
@@ -32,9 +39,17 @@ services:
- POSTGRES_DB=${GITEA_DB:?} - POSTGRES_DB=${GITEA_DB:?}
volumes: volumes:
- ./db:/var/lib/postgresql/data - ./db:/var/lib/postgresql/data
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
memory: 256M
networks: networks:
- gitea_network - gitea_network
networks: networks:
gitea_network: gitea_network:
name: gitea_network
driver: bridge driver: bridge

View File

@@ -9,6 +9,13 @@ services:
command: command:
- "--config.file=/etc/prometheus/prometheus.yml" - "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus" - "--storage.tsdb.path=/prometheus"
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
memory: 256M
networks: networks:
- grafana_network - grafana_network
@@ -24,6 +31,13 @@ services:
environment: environment:
- GF_SECURITY_ADMIN_USER=${GRAFANA_USER:?} # Ваш логин - GF_SECURITY_ADMIN_USER=${GRAFANA_USER:?} # Ваш логин
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:?} # Ваш пароль - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:?} # Ваш пароль
deploy:
resources:
limits:
cpus: '0.5'
memory: 256M
reservations:
memory: 128M
networks: networks:
- grafana_network - grafana_network
@@ -41,6 +55,13 @@ services:
- "--path.sysfs=/host/sys" - "--path.sysfs=/host/sys"
- "--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)" - "--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)"
- "--collector.systemd" - "--collector.systemd"
deploy:
resources:
limits:
cpus: '0.1'
memory: 64M
reservations:
memory: 32M
networks: networks:
- grafana_network - grafana_network
@@ -50,4 +71,5 @@ volumes:
networks: networks:
grafana_network: grafana_network:
name: grafana_network
driver: bridge driver: bridge

View File

@@ -1,5 +1,5 @@
docker run -it --rm \ docker run -it --rm \
-v "$(pwd)/synapse_data:/data" \ -v "$(pwd)/data:/data" \
-e SYNAPSE_SERVER_NAME=example.com \ -e SYNAPSE_SERVER_NAME=matrix.domain.ru \
-e SYNAPSE_REPORT_STATS=yes \ -e SYNAPSE_REPORT_STATS=no \
matrixdotorg/synapse:latest generate matrixdotorg/synapse:latest generate

View File

@@ -1,2 +1,2 @@
docker exec -it matrix-synapse-1 register_new_matrix_user \ docker exec -it matrix-synapse register_new_matrix_user \
-c /data/homeserver.yaml http://localhost:8008 -c /data/homeserver.yaml https://matrix.domain.ru

View File

@@ -9,6 +9,13 @@ services:
- SYNAPSE_CONFIG_PATH=/data/homeserver.yaml - SYNAPSE_CONFIG_PATH=/data/homeserver.yaml
depends_on: depends_on:
- matrix-db - matrix-db
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
memory: 256M
networks: networks:
- matrix_network - matrix_network
@@ -23,6 +30,13 @@ services:
- POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
volumes: volumes:
- ./db:/var/lib/postgresql/data - ./db:/var/lib/postgresql/data
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
memory: 256M
networks: networks:
- matrix_network - matrix_network
@@ -30,9 +44,17 @@ services:
image: vectorim/element-web:latest image: vectorim/element-web:latest
container_name: matrix-element container_name: matrix-element
restart: unless-stopped restart: unless-stopped
deploy:
resources:
limits:
cpus: '1.0'
memory: 256M
reservations:
memory: 128M
networks: networks:
- matrix_network - matrix_network
networks: networks:
matrix_network: matrix_network:
name: matrix_network
driver: bridge driver: bridge

View File

@@ -1,3 +1 @@
PIHOLE_PASSWORD=password
PIHOLE_IP=192.168.32.1 PIHOLE_IP=192.168.32.1
PIHOLE_DNS=77.88.8.8;8.8.8.8;8.8.4.4

10
pihole/block-lists.txt Normal file
View File

@@ -0,0 +1,10 @@
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://v.firebog.net/hosts/Easyprivacy.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

View File

@@ -11,11 +11,23 @@ services:
# - "67:67/udp" # Раскомментируйте, если планируете использовать Pi-hole как DHCP-сервер # - "67:67/udp" # Раскомментируйте, если планируете использовать Pi-hole как DHCP-сервер
- "8080:80/tcp" # Веб-интерфейс будет доступен на порту 8080 (чтобы не занимать 80) - "8080:80/tcp" # Веб-интерфейс будет доступен на порту 8080 (чтобы не занимать 80)
environment: environment:
TZ: 'Europe/Samara' # Укажите ваш часовой пояс TZ: "Europe/Samara" # Укажите ваш часовой пояс
WEBPASSWORD: '${PIHOLE_PASSWORD:?}' # Пароль для входа в админку FTLCONF_LOCAL_IPV4: "${PIHOLE_IP:?}" # IP-адрес вашего хоста (сервера)
FTLCONF_LOCAL_IPV4: '${PIHOLE_IP:?}' # IP-адрес вашего хоста (сервера)
PIHOLE_DNS_: '${PIHOLE_DNS:?}' # Вышестоящие DNS-серверы
volumes: volumes:
- './etc-pihole:/etc/pihole' - "./etc-pihole:/etc/pihole"
- './etc-dnsmasq.d:/etc/dnsmasq.d' - "./etc-dnsmasq.d:/etc/dnsmasq.d"
restart: unless-stopped 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

View File

@@ -12,6 +12,13 @@ services:
ports: ports:
- "${PORTAINER_PORT:?}:9000" - "${PORTAINER_PORT:?}:9000"
command: -H unix:///var/run/docker.sock command: -H unix:///var/run/docker.sock
deploy:
resources:
limits:
cpus: '0.25'
memory: 128M
reservations:
memory: 64M
networks: networks:
- portainer_network - portainer_network
@@ -20,4 +27,5 @@ volumes:
networks: networks:
portainer_network: portainer_network:
name: portainer_network
driver: bridge driver: bridge

View File

@@ -1,8 +1,6 @@
docker compose -f init-compose.yml up -d
docker compose run --rm --entrypoint "certbot" certbot certonly --webroot \ docker compose run --rm --entrypoint "certbot" certbot certonly --webroot \
--webroot-path=/var/www/certbot \ --webroot-path=/var/www/certbot \
--email your-email@gmail.com \ --email your-email@gmail.com \
--agree-tos \ --agree-tos \
--no-eff-email \ --no-eff-email \
-d domain.com -d domain.com -d domain2.com

View File

@@ -1,10 +1,7 @@
domain.com domain.ru
@ @
www www
subdomain1 git
subdomain2 disk
matrix
domain2.com chat
@
www
subdomain1

View File

@@ -13,6 +13,13 @@ services:
- ./ssl/www:/var/www/certbot:ro - ./ssl/www:/var/www/certbot:ro
# Подхватываем новые ssl сертификаты # Подхватываем новые ssl сертификаты
command: /bin/sh -c "while :; do sleep 24h & wait $${!}; nginx -s reload; done & nginx -g 'daemon off;'" command: /bin/sh -c "while :; do sleep 24h & wait $${!}; nginx -s reload; done & nginx -g 'daemon off;'"
deploy:
resources:
limits:
cpus: '0.25'
memory: 128M
reservations:
memory: 64M
networks: networks:
- proxy_network - proxy_network
- gitea_network - gitea_network
@@ -27,6 +34,13 @@ services:
- ./ssl/www:/var/www/certbot - ./ssl/www:/var/www/certbot
# Проверяет сертификаты дважды в сутки. Если осталось менее 30 дней - обновляем # Проверяет сертификаты дважды в сутки. Если осталось менее 30 дней - обновляем
entrypoint: "/bin/sh -c 'trap exit TERM; while :; sleep 30s & wait $${!}; do certbot renew; sleep 12h & wait $${!}; done;'" entrypoint: "/bin/sh -c 'trap exit TERM; while :; sleep 30s & wait $${!}; do certbot renew; sleep 12h & wait $${!}; done;'"
deploy:
resources:
limits:
cpus: '0.25'
memory: 128M
reservations:
memory: 64M
networks: networks:
- proxy_network - proxy_network
@@ -39,18 +53,26 @@ services:
- ./ddns/domains.txt:/app/domains.txt - ./ddns/domains.txt:/app/domains.txt
environment: environment:
- TZ=Europe/Samara - TZ=Europe/Samara
deploy:
resources:
limits:
cpus: '0.25'
memory: 128M
reservations:
memory: 64M
networks: networks:
- proxy_network - proxy_network
networks: networks:
proxy_network: proxy_network:
name: proxy_network
driver: bridge driver: bridge
gitea_network: gitea_network:
external: true external: true
name: gitea_gitea_network name: gitea_network
cloud_network: cloud_network:
external: true external: true
name: cloud_cloud_network name: cloud_network
matrix_network: matrix_network:
external: true external: true
name: matrix_matrix_network name: matrix_network

View File

@@ -8,6 +8,13 @@ services:
- ./ddns/domains.txt:/app/domains.txt - ./ddns/domains.txt:/app/domains.txt
environment: environment:
- TZ=Europe/Samara - TZ=Europe/Samara
deploy:
resources:
limits:
cpus: '0.25'
memory: 128M
reservations:
memory: 64M
nginx-proxy: nginx-proxy:
image: nginx:alpine image: nginx:alpine
@@ -20,3 +27,10 @@ services:
# Папки для SSL сертификатов # Папки для SSL сертификатов
- ./ssl/conf:/etc/letsencrypt:ro - ./ssl/conf:/etc/letsencrypt:ro
- ./ssl/www:/var/www/certbot:ro - ./ssl/www:/var/www/certbot:ro
deploy:
resources:
limits:
cpus: '0.25'
memory: 128M
reservations:
memory: 64M

View File

@@ -20,9 +20,17 @@ services:
-g "acl allow execute always = yes" -g "acl allow execute always = yes"
-g "map archive = yes" -g "map archive = yes"
-g "client max protocol = SMB3" -g "client max protocol = SMB3"
deploy:
resources:
limits:
cpus: '0.5'
memory: 256M
reservations:
memory: 128M
networks: networks:
- samba_network - samba_network
networks: networks:
samba_network: samba_network:
name: samba_network
driver: bridge driver: bridge

BIN
screenshots/cloud.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
screenshots/element.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

BIN
screenshots/gitea.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 211 KiB

BIN
screenshots/synapse.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
screenshots/syncthing.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 696 KiB

View File

@@ -15,9 +15,17 @@ services:
- 22000:22000/tcp # Передача данных - 22000:22000/tcp # Передача данных
- 22000:22000/udp # Передача данных (QUIC) - 22000:22000/udp # Передача данных (QUIC)
- 21027:21027/udp # Локальный поиск (Discovery) - 21027:21027/udp # Локальный поиск (Discovery)
deploy:
resources:
limits:
cpus: '0.5'
memory: 256M
reservations:
memory: 128M
networks: networks:
- syncthing_network - syncthing_network
networks: networks:
syncthing_network: syncthing_network:
name: syncthing_network
driver: bridge driver: bridge

View File

@@ -18,9 +18,17 @@ services:
- 51413:51413 # Порт для входящих соединений (TCP) - 51413:51413 # Порт для входящих соединений (TCP)
- 51413:51413/udp # Порт для входящих соединений (UDP) - 51413:51413/udp # Порт для входящих соединений (UDP)
restart: unless-stopped restart: unless-stopped
deploy:
resources:
limits:
cpus: '0.5'
memory: 256M
reservations:
memory: 128M
networks: networks:
- transmission_network - transmission_network
networks: networks:
transmission_network: transmission_network:
name: transmission_network
driver: bridge driver: bridge