Update
Deploy authentik / deploy (push) Successful in 16s
Deploy duplicati / deploy (push) Successful in 6s
Deploy immich / deploy (push) Successful in 17s
Deploy obsidian / deploy (push) Successful in 11s

This commit is contained in:
Mike McFetridge
2026-07-22 20:31:54 -04:00
parent daa8765e1c
commit 3d3b9097d5
8 changed files with 211 additions and 106 deletions
+28
View File
@@ -0,0 +1,28 @@
# ============================================================
# SYSTEM SETTINGS
# ============================================================
TZ=America/New_York
PUID=1000
PGID=1000
DATA_PATH=/home/miker/docker/authentik
# ============================================================
# AUTHENTIK VERSION & PORTS
# ============================================================
AUTHENTIK_IMAGE=ghcr.io/goauthentik/server
AUTHENTIK_TAG=2026.2.1
COMPOSE_PORT_HTTP=9000
COMPOSE_PORT_HTTPS=9443
# ============================================================
# DATABASE CREDENTIALS
# ============================================================
PG_DB=authentik
PG_USER=authentik
PG_PASS=GenerateSecurePasswordHere
# ============================================================
# SECURITY KEYS
# ============================================================
# Generate with: openssl rand -base64 36
AUTHENTIK_SECRET_KEY=GenerateSecureSecretKeyHere
+49 -49
View File
@@ -1,79 +1,79 @@
# Authentik Identity & SSO Stack
services:
postgresql:
env_file:
- .env
image: docker.io/library/postgres:16-alpine
container_name: authentik-db
restart: unless-stopped
environment:
POSTGRES_DB: ${PG_DB:-authentik}
POSTGRES_PASSWORD: ${PG_PASS:?database password required}
POSTGRES_USER: ${PG_USER:-authentik}
- POSTGRES_DB=${PG_DB:-authentik}
- POSTGRES_USER=${PG_USER:-authentik}
- POSTGRES_PASSWORD=${PG_PASS}
- TZ=${TZ}
volumes:
- ${DATA_PATH}/database:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
interval: 30s
timeout: 5s
retries: 5
start_period: 20s
test:
- CMD-SHELL
- pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}
timeout: 5s
image: docker.io/library/postgres:16-alpine
restart: unless-stopped
volumes:
- /home/miker/docker/authentik/database:/var/lib/postgresql/data
networks:
- authentik
server:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.2.1}
container_name: authentik-server
restart: unless-stopped
command: server
environment:
- AUTHENTIK_POSTGRESQL__HOST=postgresql
- AUTHENTIK_POSTGRESQL__NAME=${PG_DB:-authentik}
- AUTHENTIK_POSTGRESQL__USER=${PG_USER:-authentik}
- AUTHENTIK_POSTGRESQL__PASSWORD=${PG_PASS}
- AUTHENTIK_SECRET_KEY=${AUTHENTIK_SECRET_KEY}
- TZ=${TZ}
volumes:
- ${DATA_PATH}/data:/data
- ${DATA_PATH}/custom-templates:/templates
ports:
- "${COMPOSE_PORT_HTTP}:9000"
- "${COMPOSE_PORT_HTTPS}:9443"
shm_size: 512mb
depends_on:
postgresql:
condition: service_healthy
env_file:
- .env
environment:
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required}
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.2.1}
ports:
- ${COMPOSE_PORT_HTTP}:9000
- ${COMPOSE_PORT_HTTPS}:9443
restart: unless-stopped
shm_size: 512mb
volumes:
- /home/miker/docker/authentik/data:/data
- /home/miker/docker/authentik/custom-templates:/templates
networks:
- authentik
- main
worker:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.2.1}
container_name: authentik-worker
restart: unless-stopped
command: worker
user: root
environment:
- AUTHENTIK_POSTGRESQL__HOST=postgresql
- AUTHENTIK_POSTGRESQL__NAME=${PG_DB:-authentik}
- AUTHENTIK_POSTGRESQL__USER=${PG_USER:-authentik}
- AUTHENTIK_POSTGRESQL__PASSWORD=${PG_PASS}
- AUTHENTIK_SECRET_KEY=${AUTHENTIK_SECRET_KEY}
- TZ=${TZ}
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ${DATA_PATH}/data:/data
- ${DATA_PATH}/certs:/certs
- ${DATA_PATH}/custom-templates:/templates
shm_size: 512mb
depends_on:
postgresql:
condition: service_healthy
env_file:
- .env
environment:
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required}
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.2.1}
restart: unless-stopped
shm_size: 512mb
user: root
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /home/miker/docker/authentik/data:/data
- /home/miker/docker/authentik/certs:/certs
- /home/miker/docker/authentik/custom-templates:/templates
networks:
- authentik
- main
networks:
main:
external: true # Tells Compose not to create this network
external: true
authentik:
external: true # Tells Compose not to create this network
external: true
+19
View File
@@ -0,0 +1,19 @@
# ============================================================
# SYSTEM SETTINGS
# ============================================================
TZ=America/New_York
PUID=1000
PGID=1000
PORT=8250
# ============================================================
# PATH LOCATIONS
# ============================================================
DATA_PATH=/home/miker/docker/duplicati
DOCKER_ROOT=/home/miker/docker
IMMICH_LIBRARY=/home/miker/docker/immich/library
# ============================================================
# SECURITY KEYS
# ============================================================
SETTINGS_ENCRYPTION_KEY=84Jo17Ecw5muzGgqVjpeZQYnWBH7XFM7R01CdR646jSIfNbxgp
+25 -12
View File
@@ -1,17 +1,30 @@
# Duplicati — Encrypted Offsite/Local Backup Client
services:
duplicati:
image: lscr.io/linuxserver/duplicati:latest
container_name: duplicati
environment:
- PUID=1000 # Your host user ID
- PGID=1000 # Your host group ID
- TZ=America/New_York
- SETTINGS_ENCRYPTION_KEY=84Jo17Ecw5muzGgqVjpeZQYnWBH7XFM7R01CdR646jSIfNbxgp # <-- Add this line
volumes:
- /home/miker/docker/duplicati/config:/config
- /home/miker/docker/immich/library:/source/photos:ro # Mounts your photo directory as read-only
- /home/miker/docker:/source/apps:ro # Mounts your application data files
- /home/miker/docker/duplicati/backups:/backups # Optional local backup location
ports:
- 8250:8200
restart: unless-stopped
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- SETTINGS_ENCRYPTION_KEY=${SETTINGS_ENCRYPTION_KEY}
volumes:
- ${DATA_PATH}/config:/config
- ${DATA_PATH}/backups:/backups
- ${IMMICH_LIBRARY}:/source/photos:ro
- ${DOCKER_ROOT}:/source/apps:ro
ports:
- "${PORT}:8200"
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:8200/ || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
networks:
- main
networks:
main:
external: true
+18
View File
@@ -0,0 +1,18 @@
# ============================================================
# SYSTEM SETTINGS
# ============================================================
TZ=America/New_York
IMMICH_VERSION=v3
# ============================================================
# PATH LOCATIONS
# ============================================================
UPLOAD_LOCATION=/home/miker/docker/immich/library
DB_DATA_LOCATION=/home/miker/docker/immich/postgres
# ============================================================
# DATABASE CREDENTIALS
# ============================================================
DB_USERNAME=postgresadmin
DB_PASSWORD=mM3PXXUjK0QMz7
DB_DATABASE_NAME=immich
+36 -26
View File
@@ -1,51 +1,56 @@
# Immich — Self-Hosted Photo & Video Management
name: immich
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:v3
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-v3}
# extends:
# file: hwaccel.transcoding.yml
# service: cpu
volumes:
- /home/miker/docker/immich/library:/data
- /etc/localtime:/etc/localtime:ro
environment:
DB_USERNAME: postgresadmin
DB_PASSWORD: mM3PXXUjK0QMz7
DB_DATABASE_NAME: immich
- DB_USERNAME=${DB_USERNAME}
- DB_PASSWORD=${DB_PASSWORD}
- DB_DATABASE_NAME=${DB_DATABASE_NAME}
- TZ=${TZ}
volumes:
- ${UPLOAD_LOCATION}:/data
- /etc/localtime:/etc/localtime:ro
ports:
- '2283:2283'
- "2283:2283"
depends_on:
- redis
- database
restart: always
healthcheck:
disable: false
database:
condition: service_healthy
redis:
condition: service_healthy
restart: unless-stopped
networks:
- immich
- main
immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:v3
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-v3}
# extends:
# file: hwaccel.ml.yml
# service: cpu
environment:
- TZ=${TZ}
volumes:
- model-cache:/cache
restart: always
healthcheck:
disable: false
restart: unless-stopped
networks:
- immich
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:9@sha256:3b55fbaa0cd93cf0d9d961f405e4dfcc70efe325e2d84da207a0a8e6d8fde4f9
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "valkey-cli ping || exit 1"]
restart: always
interval: 10s
timeout: 5s
retries: 5
networks:
- immich
@@ -53,16 +58,21 @@ services:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
environment:
POSTGRES_PASSWORD: mM3PXXUjK0QMz7
POSTGRES_USER: postgresadmin
POSTGRES_DB: immich
POSTGRES_INITDB_ARGS: '--data-checksums'
- POSTGRES_USER=${DB_USERNAME}
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=${DB_DATABASE_NAME}
- POSTGRES_INITDB_ARGS=--data-checksums
- TZ=${TZ}
volumes:
- /home/miker/docker/immich/postgres:/var/lib/postgresql/data
shm_size: 128mb
restart: always
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
shm_size: 512mb
restart: unless-stopped
healthcheck:
disable: false
test: ["CMD-SHELL", "pg_isready -U ${DB_USERNAME} -d ${DB_DATABASE_NAME}"]
interval: 10s
timeout: 5s
retries: 5
start_period: 15s
networks:
- immich
+15
View File
@@ -0,0 +1,15 @@
# ============================================================
# SYSTEM SETTINGS
# ============================================================
TZ=America/New_York
PUID=1000
PGID=1000
DATA_PATH=/home/miker/docker/obsidian
# ============================================================
# OBSIDIAN LIVESYNC / COUCHDB CONFIGURATION
# ============================================================
COUCHDB_USER=miker
COUCHDB_PASSWORD=tw9222dvO91ZHb
COUCHDB_DATABASE=obsidian
SERVER_DOMAIN=https://obsidian.mikemcfetridge.com
+21 -19
View File
@@ -1,30 +1,32 @@
# Obsidian Self-Hosted LiveSync (CouchDB Engine)
services:
couchdb-obsidian-livesync:
image: docker.io/oleduc/docker-obsidian-livesync-couchdb:master
container_name: obsidian-livesync
# image: couchdb:3.3.3 # Specify a stable CouchDB version
image: 'docker.io/oleduc/docker-obsidian-livesync-couchdb:master'
restart: unless-stopped
environment:
# User and password for CouchDB admin access
- COUCHDB_USER=miker
- COUCHDB_PASSWORD=tw9222dvO91ZHb
- COUCHDB_DATABASE=obsidian
- SERVER_DOMAIN=https://obsidian.mikemcfetridge.com
# Optional: Set PUID, PGID, UMASK, and TZ for user/group permissions and timezone
- PUID=1000
- PGID=1000
- UMASK=0022
- TZ=America/New_York # Adjust timezone as needed
- COUCHDB_USER=${COUCHDB_USER}
- COUCHDB_PASSWORD=${COUCHDB_PASSWORD}
- COUCHDB_DATABASE=${COUCHDB_DATABASE}
- SERVER_DOMAIN=${SERVER_DOMAIN}
- PUID=${PUID}
- PGID=${PGID}
- UMASK=002
- TZ=${TZ}
volumes:
# Mount a local directory for CouchDB data persistence
- /home/miker/docker/obsidian/data:/opt/couchdb/data
# Mount a local directory for CouchDB configuration files
- /home/miker/docker/obsidian/config:/opt/couchdb/etc/local.d
- ${DATA_PATH}/data:/opt/couchdb/data
- ${DATA_PATH}/config:/opt/couchdb/etc/local.d
ports:
# Map CouchDB's default port 5984 to the host machine
- "5984:5984"
restart: unless-stopped # Ensure the container restarts automatically unless explicitly stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5984/_up"]
interval: 30s
timeout: 10s
retries: 5
start_period: 20s
networks:
- main
networks:
main:
external: true # Tells Compose not to create this network
external: true