Blog / Tutorials

Self-Host Immich on a VPS: Replace Google Photos for $10/Month

By the NoctHost TeamJune 28, 20263 min read

Google Photos stopped being free. Now you're paying $3/month for 100 GB or $10/month for 2 TB — and your photos are being used to train AI models you didn't consent to.

Immich is the fix. It's an open-source photo and video platform that looks and works almost exactly like Google Photos: automatic backup from your phone, face recognition, AI-powered search, shared albums, and a timeline view. The difference is that it runs on a server you control, and your photos never leave it.

This guide walks through deploying Immich on a VPS from a blank server to syncing photos from your phone.

What You Need

  • A VPS with at least 4 GB RAM (6 GB recommended for machine learning features)
  • Enough storage for your photo library — expect 50–100 GB per year of phone photos
  • A domain name for HTTPS access

The Pro plan on NoctHost (4 vCPU, 8 GB RAM, 160 GB SSD) handles a family-sized library with room for the machine learning container that powers face recognition and smart search.

Step 1: Install Docker

apt update && apt upgrade -y
curl -fsSL https://get.docker.com | sh
apt install -y docker-compose-plugin

Step 2: Download the Immich Docker Compose Files

mkdir ~/immich && cd ~/immich
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

Step 3: Configure Environment Variables

Open .env and set these values:

nano .env
UPLOAD_LOCATION=/mnt/photos
DB_DATA_LOCATION=/mnt/immich-db
DB_PASSWORD=change_this_to_something_strong
TZ=Europe/Tallinn

Create the directories:

mkdir -p /mnt/photos /mnt/immich-db

Step 4: Start Immich

docker compose up -d
docker compose logs -f

First startup takes a few minutes while it pulls container images. Once you see the server listening message, Immich is running on port 2283.

Step 5: Set Up HTTPS with Nginx

apt install -y nginx certbot python3-certbot-nginx
nano /etc/nginx/sites-available/immich
server {
    server_name photos.yourdomain.com;
    client_max_body_size 50000M;

    location / {
        proxy_pass http://localhost:2283;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
    }
}
ln -s /etc/nginx/sites-available/immich /etc/nginx/sites-enabled/
certbot --nginx -d photos.yourdomain.com
nginx -t && systemctl reload nginx

Step 6: Create Your Account

Open https://photos.yourdomain.com in your browser. The first account you create becomes the admin.

Step 7: Set Up Mobile Backup

Install the Immich app on your phone — available on iOS and Android. Enter your server URL and log in. In the app settings:

  • Enable background backup
  • Set to Wi-Fi only to save mobile data
  • Enable backup on charging

Your photos will start syncing automatically. For an existing library, the initial backup runs in the background over several hours.

Backups

Immich stores your photos in /mnt/photos. Back this up to a separate location — an S3-compatible bucket, another server, or external storage. Never rely on a single VPS as the only copy of your photos.

A simple nightly backup with rclone to Backblaze B2 costs around $0.006 per GB per month — nearly nothing for most personal libraries.

What You Get

The machine learning container processes your library in the background. After initial indexing (a few hours for a large collection), you get:

  • Face recognition that groups photos by person automatically
  • Smart search — type "beach" or "birthday party" and it finds matching photos
  • Duplicate detection
  • Location-based albums if your photos have GPS metadata

All of this runs on your server. Nothing is sent to external AI services.

Spin one up in about a minute

Email signup, pay with crypto, hourly billing. Trying a box costs cents — destroy it when you are done.

Deploy a server

Frequently asked

How much storage do I need?
A rough guide: 50–100 GB per year of mixed phone photos and video. RAW files from a camera use significantly more. Start with what you have and upgrade storage as needed.
Can multiple people use the same Immich instance?
Yes. You can create separate accounts for family members, each with their own private library. Albums can be shared between accounts.
How do I update Immich?
Pull the latest images and recreate the containers: cd ~/immich, then docker compose pull, then docker compose up -d.
Does Immich work without a GPU?
Yes. CPU inference is slower for initial library processing but works fine for ongoing use. For a library of 10,000+ photos, face recognition and smart search will still work — processing just takes longer on first run.

Keep reading