Полный отказ от 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