fix first batch of _dev stacks: authentik, directus, duplicati, filebrowser, firefly, headscale, homepage, invoiceninja, jellyfin, lubelogger

This commit is contained in:
openhands
2026-07-16 04:56:21 +00:00
parent 1b77ca5844
commit 6eedbf4a0d
20 changed files with 327 additions and 266 deletions
+46 -57
View File
@@ -1,69 +1,58 @@
services: services:
postgresql: postgresql:
env_file: image: ${AUTHENTIK_POSTGRES_IMAGE:-postgres:16-alpine}
- .env restart: ${AUTHENTIK_RESTART:-unless-stopped}
environment:
POSTGRES_DB: ${PG_DB:-authentik}
POSTGRES_PASSWORD: ${PG_PASS:?database password required}
POSTGRES_USER: ${PG_USER:-authentik}
healthcheck:
interval: 30s
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: volumes:
- database:/var/lib/postgresql/data - ${VOL_PATH:-/data}/authentik/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=${PG_DB:-authentik}
- POSTGRES_PASSWORD=${PG_PASS:?database password required}
- POSTGRES_USER=${PG_USER:-authentik}
networks:
- internal
server: server:
command: server
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:-2025.10.1} image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.10.1}
ports: restart: ${AUTHENTIK_RESTART:-unless-stopped}
- ${COMPOSE_PORT_HTTP:-9000}:9000
- ${COMPOSE_PORT_HTTPS:-9443}:9443
restart: unless-stopped
volumes: volumes:
- ./media:/media - ${VOL_PATH:-/data}/authentik/media:/media
- ./custom-templates:/templates - ${VOL_PATH:-/data}/authentik/custom-templates:/templates
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}
ports:
- "${AUTHENTIK_PORT_HTTP:-9000}:9000"
- "${AUTHENTIK_PORT_HTTPS:-9443}:9443"
networks:
- proxy
- internal
depends_on:
- postgresql
command: server
worker: worker:
command: worker
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:-2025.10.1} image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.10.1}
restart: unless-stopped restart: ${AUTHENTIK_RESTART:-unless-stopped}
user: root
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock - ${VOL_PATH:-/data}/authentik/media:/media
- ./media:/media - ${VOL_PATH:-/data}/authentik/certs:/certs
- ./certs:/certs - ${VOL_PATH:-/data}/authentik/custom-templates:/templates
- ./custom-templates:/templates 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}
networks:
- internal
depends_on:
- postgresql
command: worker
volumes: networks:
database: proxy:
driver: local external: true
internal:
+18 -5
View File
@@ -1,5 +1,18 @@
#echo "PG_PASS=$(openssl rand -base64 36 | tr -d '\n')" >> .env # Compose
#echo "AUTHENTIK_SECRET_KEY=$(openssl rand -base64 60 | tr -d '\n')" >> .env VOL_PATH=/data
#echo "AUTHENTIK_ERROR_REPORTING__ENABLED=true" >> .env AUTHENTIK_IMAGE=ghcr.io/goauthentik/server
#COMPOSE_PORT_HTTP=80 AUTHENTIK_TAG=2025.10.1
#COMPOSE_PORT_HTTPS=443 AUTHENTIK_RESTART=unless-stopped
AUTHENTIK_PORT_HTTP=9000
AUTHENTIK_PORT_HTTPS=9443
AUTHENTIK_POSTGRES_IMAGE=postgres:16-alpine
# Database
PG_DB=authentik
PG_USER=authentik
# Generate: openssl rand -base64 36 | tr -d '\n'
PG_PASS=
# Authentik
# Generate: openssl rand -base64 60 | tr -d '\n'
AUTHENTIK_SECRET_KEY=
+50 -23
View File
@@ -1,28 +1,55 @@
services: services:
directus: mariadb:
image: directus/directus:latest image: ${MARIADB_IMAGE:-mariadb:10.11}
restart: unless-stopped restart: ${DIRECTUS_RESTART:-unless-stopped}
ports: volumes:
- "8000:8055" - ${VOL_PATH:-/data}/directus/db:/var/lib/mysql
environment: environment:
SECRET: ${DIRECTUS_SECRET:-0123456789} - MARIADB_DATABASE=${MARIADB_DATABASE:-directus}
DB_CLIENT: mysql - MARIADB_USER=${MARIADB_USER:-directus}
DB_HOST: mariadb - MARIADB_PASSWORD=${MARIADB_PASSWORD:-ChangeThisPassword}
DB_PORT: 3306 - MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD:-ChangeThisRootPassword}
DB_DATABASE: ${MARIADB_DATABASE:-dbname} networks:
DB_USER: ${MARIADB_USER:-db_username} - internal
DB_PASSWORD: ${MARIADB_PASSWORD:-db_password}
ADMIN_EMAIL: ${DIRECTUS_ADMIN_EMAIL:-noreply@example.com} redis:
ADMIN_PASSWORD: ${DIRECTUS_ADMIN_PASSWORD:-change_me_to_admin_pass} image: ${REDIS_IMAGE:-redis:7-alpine}
CACHE_ENABLED: "true" restart: ${DIRECTUS_RESTART:-unless-stopped}
CACHE_AUTO_PURGE: "true" networks:
CACHE_STORE: "redis" - internal
REDIS: "redis://cache:6379"
PUBLIC_URL: ${DIRECTUS_PUBLIC_URL:-http://localhost:8055} directus:
image: ${DIRECTUS_IMAGE:-directus/directus:latest}
restart: ${DIRECTUS_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/directus/uploads:/directus/uploads
- ${VOL_PATH:-/data}/directus/extensions:/directus/extensions
- ${VOL_PATH:-/data}/directus/templates:/directus/templates
environment:
- SECRET=${DIRECTUS_SECRET:-0123456789}
- DB_CLIENT=mysql
- DB_HOST=mariadb
- DB_PORT=3306
- DB_DATABASE=${MARIADB_DATABASE:-directus}
- DB_USER=${MARIADB_USER:-directus}
- DB_PASSWORD=${MARIADB_PASSWORD:-ChangeThisPassword}
- ADMIN_EMAIL=${DIRECTUS_ADMIN_EMAIL:-noreply@example.com}
- ADMIN_PASSWORD=${DIRECTUS_ADMIN_PASSWORD:-ChangeThisPassword}
- CACHE_ENABLED=true
- CACHE_AUTO_PURGE=true
- CACHE_STORE=redis
- REDIS=redis://redis:6379
- PUBLIC_URL=${DIRECTUS_PUBLIC_URL:-http://localhost:8055}
ports:
- "${DIRECTUS_PORT:-8000}:8055"
networks:
- proxy
- internal
depends_on: depends_on:
- mariadb - mariadb
- redis - redis
volumes:
- ${VOL_PATH:-./data}/directus/uploads:/directus/uploads networks:
- ${VOL_PATH:-./data}/directus/extensions:/directus/extensions proxy:
- ${VOL_PATH:-./data}/directus/templates:/directus/templates external: true
internal:
+14 -6
View File
@@ -1,10 +1,18 @@
# Global # Compose
COMPOSE_PROJECT_NAME=directus VOL_PATH=/data
TZ=America/Vancouver DIRECTUS_IMAGE=directus/directus:latest
VOL_CONFIG_PATH=/docker/directus/config DIRECTUS_RESTART=unless-stopped
VOL_PATH=/docker/directus/data DIRECTUS_PORT=8000
# MariaDB
MARIADB_IMAGE=mariadb:10.11
MARIADB_DATABASE=directus
MARIADB_USER=directus
MARIADB_PASSWORD=ChangeThisPassword
MARIADB_ROOT_PASSWORD=ChangeThisRootPassword
# Directus # Directus
DIRECTUS_SECRET=01234567890123456789012345678912 DIRECTUS_SECRET=01234567890123456789012345678912
DIRECTUS_ADMIN_EMAIL=noreply@example.com DIRECTUS_ADMIN_EMAIL=noreply@example.com
DIRECTUS_ADMIN_PASSWORD=enter_secure_password_here DIRECTUS_ADMIN_PASSWORD=ChangeThisPassword
DIRECTUS_PUBLIC_URL=http://localhost:8055
+17 -10
View File
@@ -1,16 +1,23 @@
services: services:
duplicati: duplicati:
image: ${DUPLICATI_IMAGE:-duplicati/duplicati:latest} image: ${DUPLICATI_IMAGE:-duplicati/duplicati:latest}
restart: ${DUPLICATI_RESTART:-unless-stopped}
volumes: volumes:
- ${VOL_PATH:-./data}/duplicati/config:/data - ${VOL_PATH:-/data}/duplicati/config:/data
- ${VOL_PATH:-./data}/duplicati/backups:/backups - ${VOL_PATH:-/data}/duplicati/backups:/backups
- ${VOL_PATH:-./data}/duplicati/source:/source:ro - ${VOL_PATH:-/data}/duplicati/source:/source:ro
# Add More sorces, for example: - /NAS:/source_nas:ro - ${VOL_PATH:-/data}/duplicati/restore:/restore
- ${VOL_PATH:-./data}/duplicati/restore:/restore
environment: environment:
TZ: ${TZ:-America/Vancouver} - TZ=${TZ:-America/Vancouver}
SETTINGS_ENCRYPTION_KEY: "${DUPLICATI_KEY:-ThisNeedsToChange}" - SETTINGS_ENCRYPTION_KEY=${DUPLICATI_KEY:-ThisNeedsToChange}
DUPLICATI__WEBSERVICE_PASSWORD: "${DUPLICATI_PASS:-changeMe}" - DUPLICATI__WEBSERVICE_PASSWORD=${DUPLICATI_PASS:-changeMe}
restart: unless-stopped
ports: ports:
- "8200:8200" - "${DUPLICATI_PORT:-8200}:8200"
networks:
- proxy
- internal
networks:
proxy:
external: true
internal:
+6 -3
View File
@@ -1,7 +1,10 @@
TZ=America/Vancouver # Compose
VOL_PATH=./data VOL_PATH=/data
DUPLICATI_IMAGE=duplicati/duplicati:latest
DUPLICATI_RESTART=unless-stopped
DUPLICATI_PORT=8200
# Duplicati # Duplicati
DUPLICATI_IMAGE=duplicati/duplicati:latest #2.1.0.5
DUPLICATI_KEY=ThisNeedsToChange DUPLICATI_KEY=ThisNeedsToChange
DUPLICATI_PASS=changeMe DUPLICATI_PASS=changeMe
TZ=America/Vancouver
+16 -6
View File
@@ -1,12 +1,22 @@
services: services:
filebrowser: filebrowser:
image: ${FILEBROWSER_IMAGE:-gtstef/filebrowser:latest} image: ${FILEBROWSER_IMAGE:-gtstef/filebrowser:latest}
restart: ${FILEBROWSER_RESTART:-unless-stopped}
volumes: volumes:
- ${VOL_PATH:-./data}/storage:/srv - ${VOL_PATH:-/data}/storage:/srv
- ${VOL_PATH:-./data}/filebrowser/root:/home/filebrowser/data - ${VOL_PATH:-/data}/filebrowser/root:/home/filebrowser/data
- ${VOL_CONFIG_PATH:-./config}/config.yaml:/home/filebrowser/config.yaml - ${FILEBROWSER_CONFIG_PATH:-/data/filebrowser}/config.yaml:/home/filebrowser/config.yaml
environment: environment:
FILEBROWSER_CONFIG: "${FILEBROWSER_CONFIG:-/home/filebrowser/config.yaml}" - FILEBROWSER_CONFIG=${FILEBROWSER_CONFIG:-/home/filebrowser/config.yaml}
FILEBROWSER_ADMIN_PASSWORD: ${FILEBROWSER_ADMIN_PASSWORD:-admin} - FILEBROWSER_ADMIN_PASSWORD=${FILEBROWSER_ADMIN_PASSWORD:-admin}
TZ: ${TZ:-America/Vancouver} - TZ=${TZ:-America/Vancouver}
ports:
- "${FILEBROWSER_PORT:-8080}:80"
networks:
- proxy
- internal
networks:
proxy:
external: true
internal:
+9 -7
View File
@@ -1,9 +1,11 @@
# Filebrowser Quantum # Compose
VOL_PATH=/data
FILEBROWSER_IMAGE=gtstef/filebrowser:latest
FILEBROWSER_RESTART=unless-stopped
FILEBROWSER_PORT=8080
FILEBROWSER_CONFIG_PATH=/data/filebrowser
VOL_CONFIG_PATH=./config # Filebrowser
VOL_PATH=./data FILEBROWSER_CONFIG=/home/filebrowser/config.yaml
TZ=America/Vancouver
FILEBROWSER_IMAGE=gtstef/filebrowser:latest #0.8.7-beta
FILEBROWSER_CONFIG="/home/filebrowser/config.yaml"
FILEBROWSER_ADMIN_PASSWORD=admin FILEBROWSER_ADMIN_PASSWORD=admin
TZ=America/Vancouver
+17 -4
View File
@@ -1,12 +1,25 @@
services: services:
firefly: firefly:
image: ${FIREFLY_IMAGE:-fireflyiii/core:latest} image: ${FIREFLY_IMAGE:-fireflyiii/core:latest}
restart: unless-stopped restart: ${FIREFLY_RESTART:-unless-stopped}
volumes: volumes:
- ${VOL_PATH:-./data}/firefly:/var/www/html/storage/upload - ${VOL_PATH:-/data}/firefly:/var/www/html/storage/upload
ports:
- "${FIREFLY_PORT:-8080}:8080"
networks:
- proxy
- internal
firefly-importer: firefly-importer:
image: ${FIREFLY_IMPORTER_IMAGE:-fireflyiii/data-importer:latest} image: ${FIREFLY_IMPORTER_IMAGE:-fireflyiii/data-importer:latest}
restart: unless-stopped restart: ${FIREFLY_RESTART:-unless-stopped}
volumes: volumes:
- ${VOL_PATH:-./data}/firefly:/var/www/html/storage/upload - ${VOL_PATH:-/data}/firefly:/var/www/html/storage/upload
networks:
- proxy
- internal
networks:
proxy:
external: true
internal:
+4 -4
View File
@@ -1,6 +1,6 @@
VOL_PATH=/docker/vol/portainer-data #HELP: volpath # Compose
COOKBOOK=/git/docker-compose-cookbooks #HELP: cookbooks VOL_PATH=/data
# firefly
FIREFLY_IMAGE=fireflyiii/core:latest FIREFLY_IMAGE=fireflyiii/core:latest
FIREFLY_IMPORTER_IMAGE=fireflyiii/data-importer:latest FIREFLY_IMPORTER_IMAGE=fireflyiii/data-importer:latest
FIREFLY_RESTART=unless-stopped
FIREFLY_PORT=8080
+9 -26
View File
@@ -1,51 +1,34 @@
# Headscale Docker Compose Template
services: services:
headscale: headscale:
image: ${HEADSCALE_IMAGE:-headscale/headscale:latest} image: ${HEADSCALE_IMAGE:-headscale/headscale:latest}
restart: ${HEADSCALE_RESTART:-unless-stopped} restart: ${HEADSCALE_RESTART:-unless-stopped}
volumes: volumes:
- ${CONFIG_PATH:-./config}/headscale/config:/etc/headscale - ${VOL_PATH:-/data}/headscale/config:/etc/headscale
- ${DATA_PATH:-./data}/headscale:/var/lib/headscale - ${VOL_PATH:-/data}/headscale/data:/var/lib/headscale
- ${LOG_PATH:-./logs}/headscale:/var/log/headscale - ${VOL_PATH:-/data}/headscale/logs:/var/log/headscale
- /etc/localtime:/etc/localtime:ro
environment: environment:
- TZ=${TZ:-UTC} - TZ=${TZ:-America/Vancouver}
- HEADSCALE_LOG_LEVEL=${HEADSCALE_LOG_LEVEL:-info} - HEADSCALE_LOG_LEVEL=${HEADSCALE_LOG_LEVEL:-info}
expose:
- "8080"
networks: networks:
- proxy
- internal - internal
command: command:
- headscale - headscale
- serve - serve
user: "1000:1000"
headscale-ui: headscale-ui:
image: ${HEADSCALE_UI_IMAGE:-goodieshq/headscale-admin:latest} image: ${HEADSCALE_UI_IMAGE:-goodieshq/headscale-admin:latest}
restart: ${HEADSCALE_UI_RESTART:-unless-stopped} restart: ${HEADSCALE_UI_RESTART:-unless-stopped}
environment: environment:
- TZ=${TZ:-UTC} - TZ=${TZ:-America/Vancouver}
- HEADSCALE_URL=http://headscale:8080 - HEADSCALE_URL=http://headscale:8080
networks:
expose: - proxy
- "80" - internal
depends_on: depends_on:
- headscale - headscale
networks:
- internal
networks: networks:
proxy: proxy:
external: true external: true
internal: internal:
driver: bridge
+4 -22
View File
@@ -1,30 +1,12 @@
# ========================= # Compose
# Headscale Configuration VOL_PATH=/data
# =========================
# Images
HEADSCALE_IMAGE=headscale/headscale:latest HEADSCALE_IMAGE=headscale/headscale:latest
HEADSCALE_UI_IMAGE=goodieshq/headscale-admin:0.26 HEADSCALE_UI_IMAGE=goodieshq/headscale-admin:0.26
# Restart policy
HEADSCALE_RESTART=unless-stopped HEADSCALE_RESTART=unless-stopped
HEADSCALE_UI_RESTART=unless-stopped HEADSCALE_UI_RESTART=unless-stopped
# Paths # Headscale
CONFIG_PATH=./config
DATA_PATH=./data
LOG_PATH=./logs
# Timezone
TZ=America/Vancouver
# Logging
HEADSCALE_LOG_LEVEL=info HEADSCALE_LOG_LEVEL=info
# Domain (IMPORTANT)
HEADSCALE_DOMAIN=headscale.example.com HEADSCALE_DOMAIN=headscale.example.com
HEADSCALE_URL=https://headscale.example.com HEADSCALE_URL=https://headscale.example.com
TZ=America/Vancouver
# Ports (not exposed publicly, but useful for internal reference)
HEADSCALE_PORT=8080
HEADSCALE_UI_PORT=9090
+12 -7
View File
@@ -1,13 +1,18 @@
services: services:
homepage: homepage:
image: ${HOMEPAGE_IMAGE:-ghcr.io/gethomepage/homepage:latest} image: ${HOMEPAGE_IMAGE:-ghcr.io/gethomepage/homepage:latest}
restart: unless-stopped restart: ${HOMEPAGE_RESTART:-unless-stopped}
volumes: volumes:
- homepage-config:/app/config - ${VOL_PATH:-/data}/homepage/config:/app/config
- /var/run/docker.sock:/var/run/docker.sock # Optional, for Docker integrations
environment: environment:
- TZ=${TZ:-America/Vancouver} # optional, if your app needs a timezone - TZ=${TZ:-America/Vancouver}
ports:
- "${HOMEPAGE_PORT:-3000}:3000"
networks:
- proxy
- internal
volumes: networks:
homepage-config: proxy:
name: homepage-config external: true
internal:
+5 -2
View File
@@ -1,3 +1,6 @@
# Homepage # Compose
VOL_PATH=/data
HOMEPAGE_IMAGE=ghcr.io/gethomepage/homepage:latest HOMEPAGE_IMAGE=ghcr.io/gethomepage/homepage:latest
VOL_CONFIG_PATH=./config HOMEPAGE_RESTART=unless-stopped
HOMEPAGE_PORT=3000
TZ=America/Vancouver
+43 -54
View File
@@ -1,62 +1,51 @@
services: services:
app:
build:
context: .
image: invoiceninja/invoiceninja-debian:${TAG:-latest}
restart: unless-stopped
env_file:
- ./sample.env
volumes:
# - ./php/php.ini:/usr/local/etc/php/conf.d/invoiceninja.ini:ro
# - ./php/php-fpm.conf:/usr/local/etc/php-fpm.d/invoiceninja.conf:ro
# - ./supervisor/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf:ro
- ./data/public:/var/www/html/public
- ./data/storage:/var/www/html/storage
depends_on:
mysql: mysql:
condition: service_healthy image: ${MYSQL_IMAGE:-mysql:8}
restart: ${INVOICENINJA_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/invoiceninja/mysql:/var/lib/mysql
environment:
- MYSQL_DATABASE=${DB_DATABASE:-ninja}
- MYSQL_USER=${DB_USERNAME:-ninja}
- MYSQL_PASSWORD=${DB_PASSWORD:-ninja}
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD:-ninjaAdm1nPassword}
networks:
- internal
redis: redis:
condition: service_healthy image: ${REDIS_IMAGE:-redis:alpine}
restart: ${INVOICENINJA_RESTART:-unless-stopped}
networks:
- internal
app:
image: ${INVOICENINJA_IMAGE:-invoiceninja/invoiceninja-debian:latest}
restart: ${INVOICENINJA_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/invoiceninja/public:/var/www/html/public
- ${VOL_PATH:-/data}/invoiceninja/storage:/var/www/html/storage
networks:
- internal
depends_on:
- mysql
- redis
nginx: nginx:
image: nginx:alpine image: ${NGINX_IMAGE:-nginx:alpine}
restart: unless-stopped restart: ${INVOICENINJA_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/invoiceninja/nginx:/etc/nginx/conf.d:ro
- ${VOL_PATH:-/data}/invoiceninja/public:/var/www/html/public:ro
- ${VOL_PATH:-/data}/invoiceninja/storage:/var/www/html/storage:ro
ports: ports:
- "8000:80" - "${INVOICENINJA_PORT:-8000}:80"
volumes: networks:
- ./nginx:/etc/nginx/conf.d:ro - proxy
- ./data/public:/var/www/html/public:ro - internal
- ./data/storage:/var/www/html/storage:ro
depends_on: depends_on:
app: - app
condition: service_healthy
mysql: networks:
image: mysql:8 proxy:
restart: unless-stopped external: true
environment: internal:
MYSQL_DATABASE: ${DB_DATABASE:-ninja}
MYSQL_USER: ${DB_USERNAME:-ninja}
MYSQL_PASSWORD: ${DB_PASSWORD:-ninja}
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-ninjaAdm1nPassword}
volumes:
- ./data/mysql/:/var/lib/mysql
healthcheck:
test:
[
"CMD",
"mysqladmin",
"ping",
"-h",
"localhost",
"-u${MYSQL_USER}",
"-p${MYSQL_PASSWORD}",
]
redis:
image: redis:alpine
restart: unless-stopped
volumes:
- ./data/redis:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
+9
View File
@@ -1,3 +1,12 @@
# Compose
VOL_PATH=/data
INVOICENINJA_IMAGE=invoiceninja/invoiceninja-debian:latest
INVOICENINJA_RESTART=unless-stopped
INVOICENINJA_PORT=8000
MYSQL_IMAGE=mysql:8
NGINX_IMAGE=nginx:alpine
REDIS_IMAGE=redis:alpine
# IN application vars # IN application vars
APP_URL=http://localhost:8000 APP_URL=http://localhost:8000
# echo -n "base64:$(openssl rand -base64 32)" # echo -n "base64:$(openssl rand -base64 32)"
+20 -12
View File
@@ -1,16 +1,24 @@
services: services:
jellyfin: jellyfin:
image: ${JELLYFIN_IMAGE:-jellyfin/jellyfin:latest} image: ${JELLYFIN_IMAGE:-jellyfin/jellyfin:latest}
restart: unless-stopped restart: ${JELLYFIN_RESTART:-unless-stopped}
environment:
- JELLYFIN_PublishedServerUrl=${JELLYFIN_PublishedServerUrl:-http://localhost:8096}
volumes: volumes:
- ${VOL_PATH:-./data}/jellyfin-cache:/cache - ${VOL_PATH:-/data}/jellyfin/cache:/cache
- ${VOL_PATH:-./data}/jellyfin-config:/config - ${VOL_PATH:-/data}/jellyfin/config:/config
- ${VOL_PATH:-./data}/jellyfin-content/books:/books - ${VOL_PATH:-/data}/jellyfin/media/books:/books
- ${VOL_PATH:-./data}/jellyfin-content/media:/media - ${VOL_PATH:-/data}/jellyfin/media/movies:/movies
- ${VOL_PATH:-./data}/jellyfin-content/movies:/movies - ${VOL_PATH:-/data}/jellyfin/media/music:/music
- ${VOL_PATH:-./data}/jellyfin-content/music:/music - ${VOL_PATH:-/data}/jellyfin/media/photos:/photos
- ${VOL_PATH:-./data}/jellyfin-content/musicvideos:/musicvideos - ${VOL_PATH:-/data}/jellyfin/media/shows:/shows
- ${VOL_PATH:-./data}/jellyfin-content/photos:/photos environment:
- ${VOL_PATH:-./data}/jellyfin-content/shows:/shows - JELLYFIN_PublishedServerUrl=${JELLYFIN_URL:-http://localhost:8096}
ports:
- "${JELLYFIN_PORT:-8096}:8096"
networks:
- proxy
- internal
networks:
proxy:
external: true
internal:
+6 -5
View File
@@ -1,7 +1,8 @@
# Global # Compose
VOL_PATH=./data VOL_PATH=/data
COOKBOOK=/git/docker-compose-cookbooks #HELP: cookbooks JELLYFIN_IMAGE=jellyfin/jellyfin:latest
JELLYFIN_RESTART=unless-stopped
JELLYFIN_PORT=8096
# Jellyfin # Jellyfin
JELLYFIN_IMAGE=jellyfin/jellyfin:latest JELLYFIN_URL=http://localhost:8096
JELLYFIN_PublishedServerUrl=http://localhost:8096
+13 -5
View File
@@ -1,9 +1,17 @@
services: services:
lubelogger: lubelogger:
image: ${LUBELOGR_IMAGE_NAME:-ghcr.io/hargata/lubelogger:latest} image: ${LUBELOGGER_IMAGE:-ghcr.io/hargata/lubelogger:latest}
restart: ${LUBELOGR_RESTART:-unless-stopped} restart: ${LUBELOGGER_RESTART:-unless-stopped}
volumes: volumes:
- ${VOL_PATH:-./data}/lubelogger/App:/App/data - ${VOL_PATH:-/data}/lubelogger/data:/App/data
- ${VOL_PATH:-./data}/lubelogger/keys:/root/.aspnet/DataProtection-Keys - ${VOL_PATH:-/data}/lubelogger/keys:/root/.aspnet/DataProtection-Keys
ports: ports:
- "${LUBELOGR_PORT:-8080}:8080" - "${LUBELOGGER_PORT:-8080}:8080"
networks:
- proxy
- internal
networks:
proxy:
external: true
internal:
+5 -4
View File
@@ -1,4 +1,5 @@
LUBELOGR_IMAGE_NAME=ghcr.io/hargata/lubelogger:latest # Compose
LUBELOGR_RESTART=unless-stopped VOL_PATH=/data
LUBELOGR_PORT=8080 LUBELOGGER_IMAGE=ghcr.io/hargata/lubelogger:latest
LUBELOGGER_RESTART=unless-stopped
LUBELOGGER_PORT=8080