mirror of
https://github.com/StepanovPlaton/HomeServerServices.git
synced 2026-04-03 12:20:43 +04:00
Format repo
This commit is contained in:
27
LICENCE
Normal file
27
LICENCE
Normal 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
71
README.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# Home Server Services
|
||||
|
||||
> **Home Server Services** - Это полный набор сервисов в Docker для организации моего домашнего сервера!
|
||||
>
|
||||
> Главное - это **модульность** и **воспроизводимая установка**. Можно развернуть за 15 минут!
|
||||
|
||||

|
||||

|
||||
|
||||
## Сервер:
|
||||
|
||||
- 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
|
||||
```
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -24,7 +22,7 @@ services:
|
||||
- ./grafana:/etc/grafana/provisioning
|
||||
- grafana_data:/var/lib/grafana
|
||||
environment:
|
||||
- GF_SECURITY_ADMIN_USER=${GRAFANA_USER:?} # Ваш логин
|
||||
- GF_SECURITY_ADMIN_USER=${GRAFANA_USER:?} # Ваш логин
|
||||
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:?} # Ваш пароль
|
||||
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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2,7 +2,7 @@ services:
|
||||
samba:
|
||||
image: dperson/samba
|
||||
container_name: samba
|
||||
restart: always
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "139:139"
|
||||
- "445:445"
|
||||
@@ -10,10 +10,16 @@ services:
|
||||
- ${SHARED_FOLDER:?}:/mnt/shared
|
||||
environment:
|
||||
- TZ=Europe/Samara
|
||||
- USERID=${OWNER_USERID:?} # UID вашего пользователя в Linux (id -u)
|
||||
- USERID=${OWNER_USERID:?} # UID вашего пользователя в Linux (id -u)
|
||||
- GROUPID=${OWNER_GROUPID:?} # GID вашего пользователя в Linux (id -g)
|
||||
|
||||
command: >
|
||||
-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
BIN
screenshots/grafana.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 101 KiB |
BIN
screenshots/portainer.jpg
Normal file
BIN
screenshots/portainer.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 101 KiB |
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user