Самописные сервисы для日常生活: Замена облачным гигантам на своем сервере

Полное руководство по 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