Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 27 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,55 +2,57 @@

## Overview

This media server is designed to run a variety of services, including:
- Immich Server: a photo and video sharing platform
- Immich Machine Learning: a machine learning model for image and video processing
- Redis: an in-memory data store
- PostgreSQL: a relational database
- Duplicati: a backup management solution
- Plex: a media management and streaming platform
- Nginx: a web server and reverse proxy
This media server is designed to run a variety of services as listed below.

## Services

### 1. Immich Server

* Service type: Photo and Video management solution
* Container Name: `immich_server`
* Environment Variables:
+ `IMMICH_VERSION`: Immich version
+ `UPLOAD_LOCATION`: the location of media files on the host machine (default: `./immich/library`)
+ `EXTERNAL_LIB`: a library path for external media
+ `UPLOAD_LOCATION`: the location of media files on the host machine
+ `EXTERNAL_LIB`: the location of external media
+ `UPLOAD_LOCATION`: the location of uploaded files

### 2. Immich Machine Learning

* Service type: ML for Immich
* Container Name: `immich_machine_learning`

### 3. Redis

* Service type: Queuing database for Immich
* Container Name: `immich_redis`

### 4. PostgreSQL

* Service type: Resting database for Immich
* Container Name: `immich_postgres`
* Environment Variables:
+ `DB_PASSWORD`: your database password (default: `postgres`)
+ `DB_USERNAME`: your database username (default: `postgres`)
+ `DB_NAME`: your database name (default: `immich`)
+ `DB_DATA_LOCATION`: host location of your database

### 5. Plex
### 5. Jellyfin

* Container Name: `plex`
* Service type: Media Steaming solution
* Container Name: `jellyfin`
* Environment Variables:
+ `PLEX_VERSION`: Plex version
+ `PUID`: the user ID for Plex to run as
+ `PGID`: the group ID for Plex to run as
+ `TZ`: the timezone for Plex to use
+ `PLEX_CLAIM_TOKEN`: your Plex server claim token (replace with your own token)
+ `STREAM_EXT_LIB`: Location of your streaming media

### 6. Nginx
### 6. Duplicati

* Service type: Data backup solution
* Container Name: `duplicati`
* Environment Variables:
+ `SETTINGS_ENCRYPTION_KEY`: your encryption/decryption password. This key is used to encrypt and decrypt your backups so keep this safe off-site
+ `DUPLICATI__WEBSERVICE_PASSWORD`: password for the Duplicati WebUI login

### 7. Nginx

* Service type: Reverse proxy
* Container Name: `nginx`
* Environment Variables:
+ `NGINX_VERSION`: nginx version
Expand All @@ -64,13 +66,13 @@ This media server is designed to run a variety of services, including:

The following volumes are mounted:

* `model-cache`: a cache directory for model storage
* `/etc/localtime:/etc/localtime:ro`: syncs the container's time with the host's time
* `./data/immich/library`: Immich upload library storage
* `./data/immich/postgres`: Immich postgres database storage
* `./data/plexmediaserver`: mounts the Plex server application data directory
* `./data/ssl`: mounts the SSL certificate and key files
* `./data/jellyfin`: mounts the Jellyfin server data directory
* `./data/duplicati`: Duplicati working directory
* `./data/ssl`: mounts the SSL certificate and key files
* `model-cache`: a cache directory for model storage
* `/etc/localtime:/etc/localtime:ro`: syncs the container's time with the host's time

## Running the Media Server

Expand All @@ -97,12 +99,11 @@ sudo docker compose down
## Hardware Acceleration

- The `hwaccel.*.yml` files contain docker configurations for hardware acceleration using `openvino` for Intel CPUs, and `cuda` for nvidia GPUs, for Immich.
- The `docker-compose.yml` uses `openvino` by default.
- HW acceleration in Plex can be enabled from the web interface.
- The `compose.yaml` uses `openvino` by default.

## Notes

* Copy `sample-configs/.env` into the root of this project (same location as `docker-compose.yml`).
* Copy `sample-configs/.env` into the root of this project (same location as `compose.yaml`).
* Update all placeholder variables with your own values.
* Make sure to replace `postgres` with a secure password for PostgreSQL.
* For individual services, refer to their docker-compose documentations for more options.
40 changes: 20 additions & 20 deletions compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ services:
disable: false
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:9@sha256:3b55fbaa0cd93cf0d9d961f405e4dfcc70efe325e2d84da207a0a8e6d8fde4f9
image: docker.io/valkey/valkey:9@sha256:4963247afc4cd33c7d3b2d2816b9f7f8eeebab148d29056c2ca4d7cbc966f2d9
healthcheck:
test: redis-cli ping || exit 1
restart: always
Expand All @@ -69,6 +69,25 @@ services:
restart: always
healthcheck:
disable: false
jellyfin:
container_name: jellyfin
restart: unless-stopped
image: jellyfin/jellyfin
ports:
- 8096:8096/tcp
- 7359:7359/udp
volumes:
- ./data/jellyfin/config:/config
- ./data/jellyfin/cache:/cache
- type: bind
source: ${STREAM_EXT_LIB}
target: /media
- type: bind
source: /path/to/fonts
target: /usr/local/share/fonts/custom
read_only: true
extra_hosts:
- host.docker.internal:host-gateway
duplicati:
image: lscr.io/linuxserver/duplicati:latest
container_name: duplicati
Expand Down Expand Up @@ -102,25 +121,6 @@ services:
depends_on:
- immich-server
- jellyfin
jellyfin:
container_name: jellyfin
restart: unless-stopped
image: jellyfin/jellyfin
ports:
- 8096:8096/tcp
- 7359:7359/udp
volumes:
- ./data/jellyfin/config:/config
- ./data/jellyfin/cache:/cache
- type: bind
source: ${STREAM_EXT_LIB}
target: /media
- type: bind
source: /path/to/fonts
target: /usr/local/share/fonts/custom
read_only: true
extra_hosts:
- host.docker.internal:host-gateway
volumes:
model-cache:
networks: {}
2 changes: 1 addition & 1 deletion sample-configs/.env
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
##########
# IMMICH
##########
IMMICH_VERSION=v2.7.5
IMMICH_VERSION=v3.0.1
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables

UPLOAD_LOCATION=./data/immich/library # The location where your uploaded files are stored
Expand Down