Полный отказ от Google Photos и Spotify: руководство по самохостингу за 3 месяца

Как я полностью отказался от Google Photos и Spotify в пользу самохостинговых альтернатив. Подробное руководство с опытом использования 3 месяца, сравнение решений и практические советы для создания вашей приватной медиатеки.

Не указано

Установка Docker и Docker Compose

Обновите систему и установите Docker вместе с Docker Compose для управления контейнерами.

sudo apt update
sudo apt upgrade -y
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
newgrp docker

Настройка Nextcloud и MinIO через Docker Compose

Создайте файл docker-compose.yml с конфигурацией Nextcloud, MariaDB, Redis и MinIO для облачного хранения файлов.

mkdir ~/selfhosted && cd ~/selfhosted

# Создайте docker-compose.yml со следующим содержимым:
version: '3.8'
services:
  nextcloud:
    image: nextcloud:latest
    container_name: nextcloud
    restart: always
    ports:
      - 8080:80
    environment:
      - MYSQL_HOST=nextcloud-db
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=your_password
      - REDIS_HOST=nextcloud-redis
    volumes:
      - nextcloud_data:/var/www/html
    depends_on:
      - nextcloud-db
      - nextcloud-redis

  nextcloud-db:
    image: mariadb:latest
    environment:
      - MYSQL_ROOT_PASSWORD=your_root_password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=your_password
    volumes:
      - nextcloud_db:/var/lib/mysql

  nextcloud-redis:
    image: redis:alpine
    command: redis-server --requirepass your_redis_password

  minio:
    image: minio/minio
    ports:
      - 9000:9000
      - 9001:9001
    environment:
      - MINIO_ROOT_USER=minio_user
      - MINIO_ROOT_PASSWORD=minio_password
    command: server /data --console-address ":9001"

docker-compose up -d

Настройка PhotoPrism для замены Google Photos

Добавьте PhotoPrism в docker-compose.yml для организации и хранения фотографий с поддержкой ИИ-распознавания.

# Добавьте в docker-compose.yml:
  photoprism:
    image: photoprism/photoprism:latest
    container_name: photoprism
    restart: always
    ports:
      - 2342:2342
    environment:
      - PHOTOPRISM_HTTP_PORT=2342
      - PHOTOPRISM_ADMIN_PASSWORD=your_admin_password
      - PHOTOPRISM_SITE_TITLE=My Photo Library
      - PHOTOPRISM_DETECT_PLACES="true"
      - PHOTOPRISM_DETECT_FACES="true"
      - PHOTOPRISM_DATABASE_DRIVER=mysql
      - PHOTOPRISM_DATABASE_HOST=nextcloud-db
      - PHOTOPRISM_DATABASE_NAME=photoprism
      - PHOTOPRISM_DATABASE_USER=photoprism_user
      - PHOTOPRISM_DATABASE_PASSWORD=photoprism_password
    volumes:
      - photoprism_storage:/photoprism/storage
      - ./photoprism/originals:/photoprism/originals

mkdir -p ~/selfhosted/photoprism/{storage,import,public,backups,originals}
docker-compose up -d photoprism

Настройка Airsonic-Advanced для замены Spotify

Настройте Airsonic-Advanced для потокового воспроизведения вашей музыкальной коллекции.

# Добавьте в docker-compose.yml:
  airsonic:
    image: airsonicadvanced/airsonic-advanced:latest
    container_name: airsonic
    restart: always
    ports:
      - 4040:4040
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Moscow
      - JAVA_OPTS=-Xms512m -Xmx1024m
      - CONTEXT_PATH=/music
    volumes:
      - airsonic_data:/var/airsonic
      - ./airsonic/music:/music
      - ./airsonic/playlists:/playlists
      - ./airsonic/podcasts:/podcasts

mkdir -p ~/selfhosted/airsonic/{music,playlists,podcasts}
docker-compose up -d airsonic

Настройка Nginx как обратного прокси

Настройте Nginx с SSL-сертификатами Let's Encrypt для безопасного доступа к сервисам через доменные имена.

# /etc/nginx/sites-available/photoprism:
server {
    listen 443 ssl http2;
    server_name photos.yourdomain.com;
    ssl_certificate /etc/letsencrypt/live/photos.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/photos.yourdomain.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    location / {
        proxy_pass http://localhost:2342;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

sudo ln -s /etc/nginx/sites-available/photoprism /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Миграция данных из Google Photos

Экспортируйте данные через Google Takeout и импортируйте их в PhotoPrism через веб-интерфейс.

# Создайте структуру папок для импорта
mkdir -p ~/selfhosted/photoprism/import/Google_Photos

# Распакуйте архивы Takeout в папку импорта
unzip Takeout.zip -d ~/selfhosted/photoprism/import/Google_Photos

# Затем в веб-интерфейсе PhotoPrism:
# Settings > Import > Выберите папку и запустите импорт

Миграция музыки из Spotify

Используйте spotdl для экспорта плейлистов из Spotify и переноса в Airsonic.

# Установите spotdl
pip install spotdl

# Экспорт плейлистов
spotdl --user your_spotify_username --playlist "Название плейлиста"

# Создайте структуру для музыки
mkdir -p ~/selfhosted/airsonic/music/Spotify
mv ~/Music/*.mp3 ~/selfhosted/airsonic/music/Spotify/

# В Airsonic: Settings > Music Folder > Добавьте /music и запустите сканирование

Настройка мониторинга с Prometheus и Grafana

Настройте мониторинг ресурсов системы и контейнеров для контроля производительности.

# Добавьте в docker-compose.yml:
  prometheus:
    image: prom/prometheus:latest
    ports:
      - 9090:9090
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml

  grafana:
    image: grafana/grafana:latest
    ports:
      - 3000:3000

# prometheus.yml:
global:
  scrape_interval: 15s
scrape_configs:
  - job_name: 'docker'
    static_configs:
      - targets: ['172.17.0.1:9323']

docker-compose up -d prometheus grafana

Настройка безопасности и fail2ban

Настройте файрвол, fail2ban для защиты от атак и автоматические обновления SSL-сертификатов.

# Установка fail2ban
sudo apt install fail2ban -y

# Настройка файрвола
sudo ufw enable
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https

# Автоматическое обновление SSL
crontab -e
# Добавьте:
0 12 * * * /usr/bin/certbot renew --quiet

# Обновление образов Docker (cron):
0 3 * * 0 cd ~/selfhosted && docker-compose pull && docker-compose up -d