Coolify Setup: Application Deployment with Self-Hosted PaaS
Coolify installation, Docker and Git integration, application deployment, database management, SSL certificates, environment variables, and self-hosted PaaS alternative to Heroku/Netlify.
Immich Docker installation, automatic photo and video backup, face recognition, map view, shared albums, mobile app and self-hosted Google Photos alternative.
Immich is a self-hosted photo and video backup platform developed as an open-source alternative to Google Photos. It offers modern features like automatic backup via mobile apps, face recognition, map view, and shared albums.
Immich lets you host your photo and video collection on your own server:
version: '3.8'
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:release
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports:
- "2283:2283"
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:6.2-alpine
restart: always
healthcheck:
test: redis-cli ping || exit 1
database:
container_name: immich_postgres
image: tensorchord/pgvecto-rs:pg14-v0.2.0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
volumes:
- pgdata:/var/lib/postgresql/data
restart: always
volumes:
pgdata:
model-cache:
UPLOAD_LOCATION=/data/immich/upload
DB_PASSWORD=StrongPass123!
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
mkdir -p /data/immich/upload
docker compose up -d
docker logs immich_server -f
Access the Immich web interface at http://SERVER_IP:2283. You'll need to create an admin account on first login.
server {
listen 443 ssl http2;
server_name photos.example.com;
ssl_certificate /etc/letsencrypt/live/photos.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/photos.example.com/privkey.pem;
client_max_body_size 50000M;
location / {
proxy_pass http://127.0.0.1:2283;
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;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600s;
proxy_send_timeout 600s;
}
}
https://photos.example.comservices:
immich-server:
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /mnt/photos:/mnt/photos:ro
Administration → External Libraries
- Import Path: /mnt/photos
- Scan frequency: Every 24 hours
- Exclusion patterns: *.tmp, Thumbs.db
Administration → Machine Learning
- Face recognition: Enabled
- Smart search (CLIP): Enabled
- Object detection: Enabled
- Minimum face confidence score: 0.7
# Database backup
docker exec immich_postgres pg_dumpall -U postgres | \
gzip > /backups/immich-db-$(date +%Y%m%d).sql.gz
# Upload directory backup
rsync -avz /data/immich/upload/ /backups/immich-upload/
docker exec immich_postgres pg_dumpall -U postgres > immich-backup.sql
docker compose pull
docker compose up -d
docker logs immich_server -f
Immich is still under active development. Major version updates may contain breaking changes. Always back up the database before updating and read the release notes.
Immich is a powerful self-hosted alternative to Google Photos. You can securely store your photos and videos on your own server and benefit from modern features like face recognition and smart search. With 8 GB RAM on REXE servers, you can manage thousands of photos seamlessly.
Disk space depends entirely on your photo/video collection size. Immich stores original files and creates additional thumbnails (~10-15% extra space). For 10,000 photos, expect about 50-100 GB; much more if you have video collections. ML model cache requires an additional ~2 GB.
Check: 1) Verify the server URL is correct (including https://), 2) Check that port 2283 is open in the firewall, 3) If using Nginx reverse proxy, verify WebSocket support is enabled, 4) Check that the SSL certificate is valid (self-signed certificates may cause issues on mobile).
Check that the ML container is running (docker ps). Initial scanning can take hours for large collections. Minimum 4 GB RAM required (8 GB recommended). Verify face recognition is enabled in Administration → Machine Learning. Check errors with docker logs immich_machine_learning.
Two methods: 1) External library — mount your photo directory as a read-only volume and scan from Administration → External Libraries. 2) CLI tool — bulk upload with immich-cli: npx immich upload --recursive /path/to/photos. External library reads files in place without copying.
If you have a database backup, you can restore it. Stop all containers with docker compose down. Pull images again with docker compose pull. Start with docker compose up -d. Check logs: docker logs immich_server. If the issue persists, search GitHub Issues or roll back to the previous version.
Immich advantages: Your data stays with you, no storage limits (as much as your disk), free and open source. Disadvantages: You need to manage your own server, not as advanced as Google's AI features (but improving rapidly), hasn't reached stable 1.0 yet. Core features (backup, face recognition, search, sharing) are available.
Coolify installation, Docker and Git integration, application deployment, database management, SSL certificates, environment variables, and self-hosted PaaS alternative to Heroku/Netlify.
Nextcloud installation with Docker, Apache/Nginx configuration, database setup, SSL certificate, file synchronization, app store, and performance optimization.
Portainer CE installation, Docker and Kubernetes management, stack deployment, volume/network management, user authorization, webhook and GitOps integration.