Самописные сервисы для日常生活: Замена облачным гигантам на своем сервере
Полное руководство по 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