Skip to main content
Arct Cloud provides the unmanaged Linux VPS for this deployment. Immich is not preinstalled or managed by Arct Cloud, and you are responsible for application administration, storage capacity, backups, security, and updates.
Immich should not be the only copy of your photos or videos. Maintain independent, tested backups of both the asset files and the database.

Choose a Plan

Immich’s current official minimum is 2 CPU cores and 6 GB RAM; the recommended size is 4 CPU cores and 8 GB RAM. Thumbnails and transcoded video can add roughly 10–20% to the original library size. Check current plan resources on the Arct Cloud pricing page, leave space for the database and Docker images, and plan migration before the disk approaches capacity.

Before You Begin

Prepare the following:
  • A fresh Ubuntu 24.04 server
  • A domain or subdomain such as photos.example.com
  • An A record pointing that hostname to the server’s public IPv4 address
  • Docker Engine 25 or newer with the Docker Compose plugin, installed from the official Docker repository
  • A reverse proxy such as Caddy or Nginx
Immich requires a full virtual machine, local SSD-backed PostgreSQL storage, and the docker compose command. The legacy docker-compose command is not supported.

Install Immich

1

Deploy and Connect

2

Allow the Ubuntu User to Run Docker

After installing Docker Engine and the Compose plugin from Docker’s official Ubuntu repository, add the default Ubuntu user to the Docker group:
Reconnect so the group change takes effect, then verify Docker and Compose work without sudo:
The docker group grants effective root access through privileged containers and host mounts. Add only trusted administrator accounts.
3

Download the Official Compose Files

These release assets are the installation method recommended by Immich for production Docker Compose deployments.
4

Configure Storage and Secrets

Edit /opt/immich/.env and set at least these values:
Use only letters and numbers in DB_PASSWORD, as recommended by Immich. Keep the PostgreSQL directory on local NVMe storage; a network share is not supported for the database.Protect the environment file after editing it:
5

Keep the Application Port Private

In the immich-server service, bind the published port to loopback rather than every interface:
Do not expose port 2283 through UFW or an external firewall.
6

Start the Stack

Wait until the containers report healthy before continuing. Initial machine-learning image downloads and startup can take several minutes.
7

Create the Administrator Privately

Keep port 2283 bound to loopback. From a second terminal on your local computer, open an SSH tunnel:
Open http://127.0.0.1:2283, create the first account, and sign in. The first account becomes the administrator. Enable multi-factor authentication, save the recovery codes separately, and review user creation and storage settings before exposing the service publicly.Stop the tunnel with Ctrl+C only after administrator access and MFA are verified.
8

Enable Public HTTPS

Install Caddy using its official Debian and Ubuntu instructions, then add this block to /etc/caddy/Caddyfile:
Immich must be served from the root of a domain or subdomain, not a path such as /immich.
Open https://photos.example.com, sign in with the existing administrator, and confirm MFA before inviting other users. At no point should the unauthenticated first-account screen be reachable through the public proxy.

Firewall

Allow SSH before enabling UFW:
Only 22, 80, and 443 should normally be public. Keep PostgreSQL, Redis, and port 2283 private.

Back Up and Restore

Immich automatically creates database dumps under UPLOAD_LOCATION/backups, but those dumps do not include photos or videos. A complete recovery set requires all of the following:
  • A current Immich database dump
  • An off-server copy of the entire UPLOAD_LOCATION, especially upload, library, and profile
  • The contents of every external library, or a separately protected authoritative copy of those files
  • The protected .env file and every Compose or override file, including all external-library mount definitions
  • The exact configured image references, running image IDs, and Immich version used when the backup was created
Create a restricted metadata checkpoint alongside each asset and database backup:
The Compose files preserve host-to-container mount definitions for external libraries; the database dump preserves Immich’s library records. Both are required to reconnect the same paths during recovery. Store this metadata checkpoint encrypted with the matching database and filesystem backup. For the most consistent filesystem copy, stop the immich-server container while the backup tool reads the asset directories. If the service must remain online, back up the database first and the filesystem second. Never edit files inside the Immich library directly. Follow the official backup and restore guide and perform a test restore before relying on the backup. Restores across different Immich versions can require migrations.

Update Safely

Immich supports the current stable release and does not support downgrades. Before updating, upgrade mobile clients, read the release notes, account for breaking changes, and create a complete backup.
If you pin IMMICH_VERSION, update it only after reviewing the target release. Restore a compatible backup instead of attempting an unsupported downgrade.

Troubleshooting

Official Resources

Immich Installation

Current Docker Compose files, environment settings, and post-installation guidance.

Immich on GitHub

Source code, releases, issues, and security information.
Immich is developed independently of Arct Cloud. Arct Cloud is an independent infrastructure provider and is not affiliated with, sponsored by, or endorsed by Immich or FUTO.