mirror of
https://github.com/nickyeoman/docker-compose-cookbooks.git
synced 2026-09-03 18:36:22 +00:00
fix first batch of _dev stacks: authentik, directus, duplicati, filebrowser, firefly, headscale, homepage, invoiceninja, jellyfin, lubelogger
This commit is contained in:
+46
-57
@@ -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:
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"]
|
|
||||||
|
|||||||
@@ -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
@@ -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:
|
||||||
|
|||||||
@@ -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
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user