diff --git a/LICENCE b/LICENCE new file mode 100644 index 0000000..602738d --- /dev/null +++ b/LICENCE @@ -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. diff --git a/README.md b/README.md new file mode 100644 index 0000000..a86f081 --- /dev/null +++ b/README.md @@ -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 + 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 + ``` diff --git a/autossh/docker-compose.yml b/autossh/docker-compose.yml index efae1e9..591d2df 100644 --- a/autossh/docker-compose.yml +++ b/autossh/docker-compose.yml @@ -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 diff --git a/grafana/docker-compose.yml b/grafana/docker-compose.yml index 1a77578..e4b3892 100644 --- a/grafana/docker-compose.yml +++ b/grafana/docker-compose.yml @@ -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 diff --git a/portainer/docker-compose.yml b/portainer/docker-compose.yml index e6d6370..9dc0fea 100644 --- a/portainer/docker-compose.yml +++ b/portainer/docker-compose.yml @@ -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 diff --git a/samba/docker-compose.yml b/samba/docker-compose.yml index 4aa3f66..29b933a 100644 --- a/samba/docker-compose.yml +++ b/samba/docker-compose.yml @@ -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 diff --git a/screenshots/grafana.jpg b/screenshots/grafana.jpg new file mode 100644 index 0000000..1c0ae73 Binary files /dev/null and b/screenshots/grafana.jpg differ diff --git a/screenshots/portainer.jpg b/screenshots/portainer.jpg new file mode 100644 index 0000000..2594349 Binary files /dev/null and b/screenshots/portainer.jpg differ diff --git a/syncthing/docker-compose.yml b/syncthing/docker-compose.yml index ee84599..f9d7554 100644 --- a/syncthing/docker-compose.yml +++ b/syncthing/docker-compose.yml @@ -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 diff --git a/transmission/docker-compose.yml b/transmission/docker-compose.yml index 2e69ecc..5a1143e 100644 --- a/transmission/docker-compose.yml +++ b/transmission/docker-compose.yml @@ -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