Самописные сервисы: заменяем облачных гигантов сервером
Полное руководство по self‑host сервисам: файловое хранилище, музыка, заметки, закладки и дашборды. Развёртывание в Docker, безопасность и поддержка.
Создание сети и структуры папок
Перед развертыванием сервисов рекомендуется создать общую Docker-сеть для связи контейнеров и организовать структуру папок для хранения данных и конфигураций.
mkdir -p ~/selfhost/{immich,navidrome,karakeep,dashy,bookstack}
cd ~/selfhost
# Создаем общую сеть для будущей коммуникации сервисов (если потребуется)
docker network create selfhost_net || trueРазвертывание Immich (Фотографии)
Создайте папку immich и файл docker-compose.yml внутри нее. Приведенный ниже конфиг настраивает сервер, ML-движок, Redis и базу данных PostgreSQL. Обязательно укажите корректный путь к вашей папке с фото в секции volumes.
version: "3.8"
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:release
volumes:
- ./upload:/usr/src/app/upload
- /path/to/your/photos:/usr/src/app/library:ro
env_file:
- .env
depends_on:
- redis
- database
restart: always
immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:release
volumes:
- ./model-cache:/cache
env_file:
- .env
restart: always
redis:
container_name: immich_redis
image: redis:alpine
restart: always
database:
container_name: immich_db
image: tensorchord/pgvector:pg14-v0.1.0
env_file:
- .env
volumes:
- ./database:/var/lib/postgresql/data
restart: always
networks:
default:
driver: bridgeРазвертывание Navidrome (Музыка)
Создайте папку navidrome и файл docker-compose.yml. Укажите ID вашего пользователя (команда id -u в терминале) и путь к папке с музыкой. Сервис доступен на порту 4533.
version: "3"
services:
navidrome:
image: deluan/navidrome:latest
user: 1000:1000 # Замените на ваш UID:GID
ports:
- "4533:4533"
volumes:
- ./data:/data
- /path/to/your/music:/music:ro
restart: always
environment:
ND_SCANSCHEDULE: 1h
ND_LOGLEVEL: infoРазвертывание Karakeep (Закладки и заметки)
Karakeep (бывший Hoarder) требует сопутствующие сервисы: Meilisearch для поиска и headless Chrome для архивации страниц. Создайте папку karakeep и файл docker-compose.yml.
version: "3"
services:
karakeep:
image: ghcr.io/karakeep-app/karakeep:latest
restart: always
ports:
- "3000:3000"
environment:
- MEILI_ADDR=http://meilisearch:7700
- BROWSER_WEB_URL=http://chrome:9222
volumes:
- ./data:/data
depends_on:
- meilisearch
- chrome
meilisearch:
image: getmeili/meilisearch:v1.8
restart: always
environment:
- MEILI_NO_ANALYTICS=true
volumes:
- ./meilisearch:/meili_data
chrome:
image: browserless/chrome
restart: always
environment:
- MAX_CONCURRENT_SESSIONS=1Развертывание Dashy (Дашборд)
Dashy позволит собрать ссылки на все ваши сервисы в одном месте. Создайте папку dashy и файл docker-compose.yml. Основная конфигурация будет в файле conf.yml (его нужно создать рядом).
version: "3.8"
services:
dashy:
image: lissy93/dashy:latest
container_name: dashy
ports:
- 4000:80
volumes:
- ./conf.yml:/app/public/conf.yml
environment:
- NODE_ENV=production
restart: alwaysРазвертывание BookStack (Вики)
BookStack требует базу данных MariaDB. Создайте папку bookstack и файл docker-compose.yml. Замените пароли на свои и укажите внешний URL (для корректной работы ссылок).
version: "3.8"
services:
bookstack:
image: lscr.io/linuxserver/bookstack:latest
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Moscow
- APP_URL=http://ваш-сервер:6875
- DB_HOST=bookstack_db
- DB_USER=bookstack
- DB_PASS=super_strong_password
- DB_DATABASE=bookstack
volumes:
- ./bookstack_config:/config
ports:
- 6875:80
depends_on:
- bookstack_db
restart: unless-stopped
bookstack_db:
image: mariadb:10.6
environment:
- MYSQL_ROOT_PASSWORD=even_stronger_root_pass
- MYSQL_DATABASE=bookstack
- MYSQL_USER=bookstack
- MYSQL_PASSWORD=super_strong_password
volumes:
- ./bookstack_db:/var/lib/mysql
restart: unless-stoppedЗапуск всех сервисов
Перейдите в каждую созданную папку (immich, navidrome, karakeep, dashy, bookstack) и выполните команду запуска. Для удобства можно создать общий скрипт или запускать по очереди.
docker compose up -dНастройка автоматического обновления (Watchtower)
Для автоматического обновления контейнеров создайте отдельный файл docker-compose.watchtower.yml (например, в папке ~/selfhost). Watchtower будет проверять обновления образов.
services:
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 300
restart: alwaysКак self-host штуки для повседневных задач? (Сборник лучших самописных сервисов)
Введение: Зачем self-host сервисы для повседневных задач?
Self-hosting (развертывание сервисов на собственном сервере) — это не только для энтузиастов. Это реальная альтернатива облачным сервисам, дающая три ключевых преимущества:
- Бесплатно в долгосрочной перспективе. Вы платите за железо/облачный VPS один раз в месяц, а не абонентскую плату за каждую подписку. Для одного человека или семьи экономия заметна.
- Безопасность и контроль. Ваши данные (фотографии, заметки, файлы) хранятся на вашем сервере. Вы контролируете, кто и когда к ним имеет доступ. Нет риска блокировки аккаунта или прекращения поддержки сервиса крупной корпорацией.
- Кастомизация. Сервис настраивается под ваши нужды. От интерфейса до интеграции с другими вашими системами.
Критерии выбора
При выборе софта для домашнего сервера ориентируйтесь на следующее:
- Надежность и стабильность: Проект должен быть достаточно зрелым, с регулярными обновлениями.
- Простота развертывания: Лучше всего, если есть готовый образ Docker и простой
docker-compose.yml. - Активное комьюнити: Большое количество пользователей означает больше готовых инструкций, решение частых проблем и быстрый ответ на вопросы.
- Легковесность: Для домашнего сервера (часто Raspberry Pi или старый ПК) важна низкая потребность в ресурсах.
Топ-5 сервисов для повседневных задач
Ниже собраны лучшие решения, которые закрывают большинство потребностей в цифровой жизни. Для развертывания используется Docker — самый простой и изолированный способ.
1. Дисковые решения: Nextcloud / Immich (замена Google Photos)
Задача: Хранение файлов, синхронизация календарей, контактов и замена Google Photos.
- Nextcloud: Это «комбайн». Помимо облачного диска, он умеет календарь, задачи, заметки, видеозвонки (видеоконференции) и многое другое. Удобен для тех, кто хочет одно приложение на все случаи.
- Immich (Рекомендация для фото): Специализированная замена Google Photos. Красивый интерфейс, автоматическая загрузка с телефона (через приложение), распознавание лиц, геолокации. Работает быстрее и проще Nextcloud в части фото.
Инструкция по развертыванию (Docker Compose):
- Установите Docker и Docker Compose по официальной инструкции для вашей ОС.
- Создайте папку для проекта и файл
docker-compose.yml.
Пример для Immich:
# docker-compose.yml
version: "3.8"
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:release
volumes:
- ./upload:/usr/src/app/upload
- /path/to/your/photos:/usr/src/app/library:ro # Только для чтения!
env_file:
- .env
depends_on:
- redis
- database
restart: always
immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:release
volumes:
- ./model-cache:/cache
env_file:
- .env
restart: always
redis:
container_name: immich_redis
image: redis:alpine
restart: always
database:
container_name: immich_db
image: tensorchord/pgvector:pg14-v0.1.0
env_file:
- .env
volumes:
- ./database:/var/lib/postgresql/data
restart: always
networks:
default:
driver: bridge
- Создайте файл
.env(настройки можно скопировать из документации Immich). - Запустите:
docker compose up -d.
2. Замена Spotify: Navidrome / Supersonic
Задача: Стриминг собственной музыкальной коллекции.
- Navidrome: Легковесный сервер. Поддерживает форматы MP3, FLAC, AAC. Есть индексация метаданных, рейтинги, плейлисты.
- Supersonic: Красивый, современный клиент для Navidrome (и других Subsonic-совместимых серверов). Можно установить на ПК или телефон.
Инструкция по развертыванию Navidrome:
# docker-compose.yml для Navidrome
version: "3"
services:
navidrome:
image: deluan/navidrome:latest
user: 1000:1000 # Укажите ID вашего пользователя (id -u)
ports:
- "4533:4533"
volumes:
- ./data:/data
- /path/to/your/music:/music:ro # Папка с музыкой
restart: always
environment:
ND_SCANSCHEDULE: 1h
ND_LOGLEVEL: info
- После запуска перейдите по адресу
http://ваш-сервер:4533. - Загрузите приложение Subsonic на телефон (или используйте клиент Ultrasonic) и введите адрес вашего сервера, логин и пароль (по умолчанию создается админ).
3. Умные заметки и закладки: Karakeep / Linkwarden
Задача: Сохранение идей, ссылок, архивация страниц (замена Pocket/Instapaper).
- Karakeep (бывший Hoarder): Самая современная и удобная альтернатива. Позволяет сохранять ссылки, текстовые заметки, изображения. Есть теги, поиск и автоматическое создание превью/архивов страниц.
- Linkwarden: Сфокусирован на архивации ссылок и создании снимков страниц (чтобы контент не пропал при удалении сайта).
Инструкция по развертыванию Karakeep:
# docker-compose.yml для Karakeep
version: "3"
services:
karakeep:
image: ghcr.io/karakeep-app/karakeep:latest
restart: always
ports:
- "3000:3000"
environment:
- MEILI_ADDR=http://meilisearch:7700
- BROWSER_WEB_URL=http://chrome:9222
volumes:
- ./data:/data
depends_on:
- meilisearch
- chrome
meilisearch:
image: getmeili/meilisearch:v1.8
restart: always
environment:
- MEILI_NO_ANALYTICS=true
volumes:
- ./meilisearch:/meili_data
chrome:
image: browserless/chrome
restart: always
environment:
- MAX_CONCURRENT_SESSIONS=1
4. Персональный дашборд: Dashy / Heimdall
Задача: Централизованный доступ ко всем вашим сервисам (ссылки на Nextcloud, Navidrome, Immich, домашнюю автоматизацию и т.д.).
- Dashy: Имеет мощные возможности кастомизации, виджеты (погода, системные метрики), поддержку нескольких колонок. Визуально очень гибок.
- Heimdall: Проще и минималистичнее. Скорее для быстрого доступа к иконкам ссылок.
Инструкция по развертыванию Dashy:
# docker-compose.yml для Dashy
version: "3.8"
services:
dashy:
image: lissy93/dashy:latest
container_name: dashy
ports:
- 4000:80
volumes:
- ./conf.yml:/app/public/conf.yml # Основной конфиг
environment:
- NODE_ENV=production
restart: always
- Создайте файл
conf.yml(образец есть в документации Dashy). Опишите секции и ссылки на ваши сервисы. - Откройте
http://ваш-сервер:4000.
5. Вики для дома: Documize / BookStack
Задача: Запись инструкций, рецептов, технических заметок, данных о страховке и гарантиях (замена Notion/Confluence).
- BookStack: Имеет структуру "Книга -> Глава -> Страница". Очень дружелюбный интерфейс, отличный редактор, поддержка прав доступа. Идеально для семьи.
- Documize: Более сухой и структурный, ближе к корпоративным вики.
Инструкция по развертыванию BookStack (рекомендуется):
Для BookStack требуется база данных (MySQL/MariaDB).
# docker-compose.yml для BookStack
version: "3.8"
services:
bookstack:
image: lscr.io/linuxserver/bookstack:latest
container_name: bookstack
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Moscow # Ваш часовой пояс
- APP_URL=http://ваш-сервер:6875 # Важно: URL вашего сервера
- DB_HOST=bookstack_db
- DB_USER=bookstack
- DB_PASS=super_strong_password # Замените!
- DB_DATABASE=bookstack
volumes:
- ./bookstack_config:/config
ports:
- 6875:80
depends_on:
- bookstack_db
restart: unless-stopped
bookstack_db:
image: mariadb:10.6
container_name: bookstack_db
environment:
- MYSQL_ROOT_PASSWORD=even_stronger_root_pass # Замените!
- MYSQL_DATABASE=bookstack
- MYSQL_USER=bookstack
- MYSQL_PASSWORD=super_strong_password # Та же, что выше
volumes:
- ./bookstack_db:/var/lib/mysql
restart: unless-stopped
Как автоматизировать обновления и бэкапы
Без автоматизации сервер превратится в источник проблем. Используем Docker Compose и Cron.
1. Автоматические обновления (Watchtower)
Watchtower — контейнер, который следит за вашими образами и перезапускает контейнеры при выходе новых версий.
Добавьте в ваш docker-compose.yml (или создайте отдельный файл для системных сервисов):
# docker-compose.watchtower.yml
services:
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 300 # Проверка каждые 5 минут
restart: always
2. Резервное копирование (Cron + Scripts)
Самый надежный способ — снимать снимки (snapshots) данных и копировать их в удаленное хранилище (Backblaze, Yandex.Disk, другой сервер).
Пример скрипта бэкапа (backup.sh):
#!/bin/bash
DATE=$(date +%Y-%m-%d_%H-%M)
BACKUP_DIR="/path/to/backups"
SERVICES_DIR="/path/to/your/docker/projects"
# 1. Бэкап баз данных (если есть)
docker exec -t bookstack_db mysqldump -u root -p"ВАШ_ПАРОЛЬ" bookstack > $BACKUP_DIR/db_bookstack_$DATE.sql
# 2. Бэкап конфигов и данных (используя tar)
tar -czf $BACKUP_DIR/data_$DATE.tar.gz $SERVICES_DIR
# 3. Удаление старых бэкапов (старше 7 дней)
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete
Сделайте скрипт исполняемым: chmod +x backup.sh.
Добавьте задание в Cron (crontab -e) для запуска, например, каждую ночь в 3:00:
0 3 * * * /path/to/backup.sh
Безопасность: Настройка SSL и доступ извне
Доступ к домашнему серверу через IP-адрес из интернета небезопасен. Используйте следующие методы.
Вариант 1: Tailscale (Рекомендуется для новичков)
Tailscale создает виртуальную частную сеть (VPN) на основе WireGuard. Это безопасно и просто.
- Установите Tailscale на сервер и на ваши устройства (телефон, ноутбук).
- Авторизуйтесь под одним аккаунтом.
- Включите "Exit Node" на сервере, если нужен доступ в интернет через него.
- Доступ к сервисам по
http://ip-адрес-сервера-в-tailscale:портбезопасен внутри сети.
Вариант 2: Cloudflare Tunnel (для публичного доступа)
Позволяет выставить сервисы в интернет без открытых портов на роутере.
- Зарегистрируйтесь на Cloudflare (бесплатно).
- Установите
cloudflaredна сервер. - Привяжите туннель к домену (например,
my-home.arpa). - Настройте маршруты (Public Hostname) для каждого сервиса (Nextcloud.my-home.arpa, Photos.my-home.arpa).
- Включите защиту Access (если нужно), чтобы только вы могли зайти.
Заключение: Ваш домашний сервер как цифровой хаб
Начав с одного сервиса (например, Immich для фото), вы постепенно соберете целую экосистему. Главное — начать с малого, выбрать простое железо (старый ПК или Raspberry Pi 4/5 с SSD) и использовать Docker.
Ваш цифровой хаб будет расти вместе с вашими потребностями, предоставляя полный контроль, безопасность и удовлетворение от созданного своими руками.
Удачи в развертывании!