Самописные сервисы: заменяем облачных гигантов сервером

Полное руководство по self‑host сервисам: файловое хранилище, музыка, заметки, закладки и дашборды. Развёртывание в Docker, безопасность и поддержка.

Не указано
Алексей Кузнецов
Алексей Кузнецов
Системный администратор20 января 2026 г.

Создание сети и структуры папок

Перед развертыванием сервисов рекомендуется создать общую 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 (развертывание сервисов на собственном сервере) — это не только для энтузиастов. Это реальная альтернатива облачным сервисам, дающая три ключевых преимущества:

  1. Бесплатно в долгосрочной перспективе. Вы платите за железо/облачный VPS один раз в месяц, а не абонентскую плату за каждую подписку. Для одного человека или семьи экономия заметна.
  2. Безопасность и контроль. Ваши данные (фотографии, заметки, файлы) хранятся на вашем сервере. Вы контролируете, кто и когда к ним имеет доступ. Нет риска блокировки аккаунта или прекращения поддержки сервиса крупной корпорацией.
  3. Кастомизация. Сервис настраивается под ваши нужды. От интерфейса до интеграции с другими вашими системами.

Критерии выбора

При выборе софта для домашнего сервера ориентируйтесь на следующее:

  • Надежность и стабильность: Проект должен быть достаточно зрелым, с регулярными обновлениями.
  • Простота развертывания: Лучше всего, если есть готовый образ Docker и простой docker-compose.yml.
  • Активное комьюнити: Большое количество пользователей означает больше готовых инструкций, решение частых проблем и быстрый ответ на вопросы.
  • Легковесность: Для домашнего сервера (часто Raspberry Pi или старый ПК) важна низкая потребность в ресурсах.

Топ-5 сервисов для повседневных задач

Ниже собраны лучшие решения, которые закрывают большинство потребностей в цифровой жизни. Для развертывания используется Docker — самый простой и изолированный способ.

1. Дисковые решения: Nextcloud / Immich (замена Google Photos)

Задача: Хранение файлов, синхронизация календарей, контактов и замена Google Photos.

  • Nextcloud: Это «комбайн». Помимо облачного диска, он умеет календарь, задачи, заметки, видеозвонки (видеоконференции) и многое другое. Удобен для тех, кто хочет одно приложение на все случаи.
  • Immich (Рекомендация для фото): Специализированная замена Google Photos. Красивый интерфейс, автоматическая загрузка с телефона (через приложение), распознавание лиц, геолокации. Работает быстрее и проще Nextcloud в части фото.

Инструкция по развертыванию (Docker Compose):

  1. Установите Docker и Docker Compose по официальной инструкции для вашей ОС.
  2. Создайте папку для проекта и файл 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
  1. Создайте файл .env (настройки можно скопировать из документации Immich).
  2. Запустите: 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. Это безопасно и просто.

  1. Установите Tailscale на сервер и на ваши устройства (телефон, ноутбук).
  2. Авторизуйтесь под одним аккаунтом.
  3. Включите "Exit Node" на сервере, если нужен доступ в интернет через него.
  4. Доступ к сервисам по http://ip-адрес-сервера-в-tailscale:порт безопасен внутри сети.

Вариант 2: Cloudflare Tunnel (для публичного доступа)

Позволяет выставить сервисы в интернет без открытых портов на роутере.

  1. Зарегистрируйтесь на Cloudflare (бесплатно).
  2. Установите cloudflared на сервер.
  3. Привяжите туннель к домену (например, my-home.arpa).
  4. Настройте маршруты (Public Hostname) для каждого сервиса (Nextcloud.my-home.arpa, Photos.my-home.arpa).
  5. Включите защиту Access (если нужно), чтобы только вы могли зайти.

Заключение: Ваш домашний сервер как цифровой хаб

Начав с одного сервиса (например, Immich для фото), вы постепенно соберете целую экосистему. Главное — начать с малого, выбрать простое железо (старый ПК или Raspberry Pi 4/5 с SSD) и использовать Docker.

Ваш цифровой хаб будет расти вместе с вашими потребностями, предоставляя полный контроль, безопасность и удовлетворение от созданного своими руками.

Удачи в развертывании!

Поделиться:TelegramX / TwitterVK