arter97 / immich-native

Immich hosted without Docker
34 stars 2 forks source link

Native Immich

This repository provides instructions and helper scripts to install Immich without Docker, natively.

Notes

1. Install dependencies

As the time of writing, Node.js v20 LTS, PostgreSQL 16 and Redis 7.2.4 was used.

pgvector is included in the official PostgreSQL's APT repository:

sudo apt install postgresql(-16)-pgvector

Immich uses FFmpeg to process media.

Either install FFmpeg using APT by sudo apt install ffmpeg (not recommended due to Ubuntu shipping older versions),

or use FFmpeg Static Builds and install it to /usr/bin.

Other APT packages

sudo apt install python3-venv python3-dev uuid-runtime

A separate Python's virtualenv will be stored to /var/lib/immich.

2. Prepare immich user

This guide isolates Immich to run on a separate immich user.

This provides basic permission isolation and protection.

sudo adduser \
  --home /var/lib/immich/home \
  --shell=/sbin/nologin \
  --no-create-home \
  --disabled-password \
  --disabled-login \
  immich
sudo mkdir -p /var/lib/immich
sudo chown immich:immich /var/lib/immich
sudo chmod 700 /var/lib/immich

3. Prepare PostgreSQL DB

Create a strong random string to be used with PostgreSQL immich database.

You need to save this and write to the env file later.

sudo -u postgres psql
postgres=# create database immich;
postgres=# create user immich with encrypted password 'YOUR_STRONG_RANDOM_PW';
postgres=# grant all privileges on database immich to immich;
postgrse=# ALTER USER immich WITH SUPERUSER;
postgres=# \q

4. Prepare env

Save the env file to /var/lib/immich, and configure on your own.

You'll only have to set DB_PASSWORD.

sudo cp env /var/lib/immich
sudo chown immich:immich /var/lib/immich/env

5. Build and install Immich

Clone this repository to somewhere anyone can access (like /tmp) and run install.sh as root.

Anytime Immich is updated, all you have to do is run it again.

In summary, the install.sh script does the following:

1. Clones and builds Immich.

2. Installs Immich to /var/lib/immich with minor patches.

6. Install systemd services

Because the install script switches to the immich user during installation, you must install systemd services manually:

sudo cp immich*.service /etc/systemd/system/
sudo systemctl daemon-reload
for i in immich*.service; do
  sudo systemctl enable $i
  sudo systemctl start $i
done

Done!

Your Immich installation should be running at 3001 port, listening from localhost (127.0.0.1).

Immich will additionally use localhost's 3002 and 3003 ports.

Please add firewall rules and apply https proxy and secure your Immich instance.

Uninstallation

# Run as root!

# Remove Immich systemd services
for i in immich*.service; do
  systemctl stop $i
  systemctl disable $i
done
rm /etc/systemd/system/immich*.service
systemctl daemon-reload

# Remove Immich files
rm -rf /var/lib/immich

# Delete immich user
deluser immich

# Remove Immich DB
sudo -u postgres psql
postgres=# drop user immich;
postgres=# drop database immich;
postgres=# \q

# Optionally remove dependencies
# Review /var/log/apt/history.log and remove packages you've installed