Format repo

This commit is contained in:
2026-01-02 05:41:37 +04:00
parent 65d8337742
commit c023664bef
10 changed files with 150 additions and 26 deletions

27
LICENCE Normal file
View File

@@ -0,0 +1,27 @@
# DON'T BE A D\*CK PUBLIC LICENSE
> Version 1.2, February 2021
> Copyright (C) 2023 sh9351
Everyone is permitted to copy and distribute verbatim or modified copies of this license document.
> DON'T BE A DICK PUBLIC LICENSE
> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
1. Do whatever you like with the original work, just don't be a dick.
Being a dick includes - but is not limited to - the following instances:
1a. Outright copyright infringement - Don't just copy the original work/works and change the name.
1b. Selling the unmodified original with no work done what-so-ever, that's REALLY being a dick.
1c. Modifying the original work to contain hidden harmful content. That would make you a PROPER dick.
2. If you become rich through modifications, related works/services, or supporting the original work,
share the love. Only a dick would make loads off this work and not buy the original work's
creator(s) a pint.
3. Code is provided with no warranty. Using somebody else's code and bitching when it goes wrong makes
you a DONKEY dick. Fix the problem yourself. A non-dick would submit the fix back or submit a [bug report](https://www.chiark.greenend.org.uk/~sgtatham/bugs.html).
4. If you use code, calling it your own would make you a ROYAL dick. [How to cite a repo](https://academia.stackexchange.com/questions/14010/how-do-you-cite-a-github-repository). Alternatively, even just a comment giving attribution to where you found the code would be OK.

71
README.md Normal file
View File

@@ -0,0 +1,71 @@
# 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/) (server:9443) - Управление контейнерами
- [Grafana](./grafana/) (server:3000) - Загруженность сервера
- [Prometheus](./grafana/prometheus.yml)
- [Node Exporter](./grafana/)
- [Samba](./samba/) - Сетевой диск
- [Syncthing](./syncthing/) - Синхронизация данных между устройствами
- [Transmission](./transmission/) - BitTorrent клиент
- [AutoSSH](./autossh/) - SSH тунель
## О проекте:
- **Полнофункциональный домашний сервер** на Docker
- **Все сервисы настроены через Docker Compose** для легкого управления и быстрого запуска
- Мониторинг системы через Grafana с готовыми дашбордами
- **Файловый сервер Samba** для доступа к файлам по сети
- Открытый диск только на чтение
- Доступ на запись только после авторизации
- **Синхронизация файлов** между устройствами через **Syncthing**
- Постоянная точка синхронизации позволяет обмениваться файлами между устройствами, даже если они не бывают одновременно в сети - домашний сервер выступает посредником
- **BitTorrent клиент Transmission** с веб-интерфейсом
- **SSH туннелирование через AutoSSH**
- Можно пробросить порт на удалённый VPS, автоматически переподключается при потере соединения
- Управление Docker через **Portainer с веб-интерфейсом**
- Скрипт для снижения энергопотребления CPU
- Все **сервисы используют переменные окружения** для гибкой настройки и примеры конфигураций
- Автоматический перезапуск контейнеров при сбоях
## Запуск:
1. **Настройте переменные окружения:**
Создайте файл `.env` в директории сервиса с необходимыми переменными по шаблону.
```bash
cd <service-folder>
cp .env.example .env
```
Отредактируйте `.env` под свои задачи.
2. **Запустите нужные сервисы:**
```bash
docker-compose -f portainer/docker-compose.yml up -d
docker-compose -f grafana/docker-compose.yml up -d
docker-compose -f samba/docker-compose.yml 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
```

View File

@@ -2,9 +2,9 @@ services:
autossh:
build: .
container_name: autossh
restart: always
restart: unless-stopped
ports:
- "${SSH_TUNNEL_TO}:${SSH_TUNNEL_TO}"
- "${SSH_TUNNEL_TO:?}:${SSH_TUNNEL_TO:?}"
environment:
# Пароль берется из переменной SSHPASS (для sshpass)
@@ -25,5 +25,12 @@ services:
-o ServerAliveInterval=60
-o ServerAliveCountMax=3
-L 0.0.0.0:${SSH_TUNNEL_TO:?}:localhost:${SSH_TUNNEL_FROM}
${SSH_USER}@${SSH_HOST} -p ${SSH_PORT}
-L 0.0.0.0:${SSH_TUNNEL_TO:?}:localhost:${SSH_TUNNEL_FROM:?}
${SSH_USER:?}@${SSH_HOST:?}
-p ${SSH_PORT:-22}
networks:
- autossh_network
networks:
autossh_network:
driver: bridge

View File

@@ -7,10 +7,8 @@ services:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
# ports:
# - "9090:9090"
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
networks:
- grafana_network
@@ -38,13 +36,11 @@ services:
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.rootfs=/rootfs'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
- '--collector.systemd'
# ports:
# - "9100:9100"
- "--path.procfs=/host/proc"
- "--path.rootfs=/rootfs"
- "--path.sysfs=/host/sys"
- "--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)"
- "--collector.systemd"
networks:
- grafana_network

View File

@@ -2,7 +2,7 @@ services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
restart: unless-stopped
security_opt:
- no-new-privileges:true
volumes:
@@ -13,6 +13,12 @@ services:
- "${PORTAINER_PORT:?}:9000"
- "8000:8000"
command: -H unix:///var/run/docker.sock
networks:
- portainer_network
volumes:
portainer_data:
networks:
portainer_network:
driver: bridge

View File

@@ -2,7 +2,7 @@ services:
samba:
image: dperson/samba
container_name: samba
restart: always
restart: unless-stopped
ports:
- "139:139"
- "445:445"
@@ -17,3 +17,9 @@ services:
-u "${SMB_USER:?};${SMB_PASSWORD:?}"
-s "${READONLY_NET_NAME:?};/mnt/shared;yes;yes;yes"
-s "${NET_NAME:?};/mnt/shared;yes;no;no;${SMB_USER:?}"
networks:
- samba_network
networks:
samba_network:
driver: bridge

BIN
screenshots/grafana.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

BIN
screenshots/portainer.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

View File

@@ -3,15 +3,21 @@ services:
image: syncthing/syncthing:latest
container_name: syncthing
hostname: ${SYNCTHING_HOSTNAME:?} # Имя устройства в сети Syncthing
restart: unless-stopped
environment:
- PUID=${OWNER_USERID} # ID пользователя в системе (можно узнать командой id)
- PGID=${OWNER_GROUPID} # ID группы в системе
- PUID=${OWNER_USERID:?} # ID пользователя в системе (можно узнать командой id)
- PGID=${OWNER_GROUPID:?} # ID группы в системе
volumes:
- ./config:/var/syncthing/config # Конфигурация и база данных
- ${SYNCTHING_FOLDER}:/var/syncthing/Sync # Папка с данными (путь на хосте:путь в контейнере)
- ${SYNCTHING_FOLDER:?}:/var/syncthing/Sync # Папка с данными (путь на хосте:путь в контейнере)
ports:
- ${SYNCTHING_WEB_UI_PORT}:8384 # Web GUI (управление через браузер)
- ${SYNCTHING_WEB_UI_PORT:?}:8384 # Web GUI (управление через браузер)
- 22000:22000/tcp # Передача данных
- 22000:22000/udp # Передача данных (QUIC)
- 21027:21027/udp # Локальный поиск (Discovery)
restart: unless-stopped
networks:
- syncthing_network
networks:
syncthing_network:
driver: bridge

View File

@@ -5,7 +5,6 @@ services:
deploy:
resources:
limits:
memory: 1G
environment:
- PUID=${OWNER_USERID:?}
- PGID=${OWNER_GROUPID:?}
@@ -18,7 +17,13 @@ services:
- ${TRANSMISSION_DOWNLOADS:?}:/downloads
- ${TRANSMISSION_WATCH:?}:/watch # Добавляет автоматически все torrent файлы из этой папки
ports:
- ${TRANSMISSION_WEB_UI_PORT}:9091 # Веб-интерфейс
- ${TRANSMISSION_WEB_UI_PORT:?}:9091 # Веб-интерфейс
- 51413:51413 # Порт для входящих соединений (TCP)
- 51413:51413/udp # Порт для входящих соединений (UDP)
restart: unless-stopped
networks:
- transmission_network
networks:
transmission_network:
driver: bridge