2022-10-05 22:47:24 +00:00
|
|
|
x-logging: &logging
|
|
|
|
|
logging:
|
|
|
|
|
driver: "local"
|
|
|
|
|
options:
|
|
|
|
|
max-size: "5m"
|
|
|
|
|
max-file: "2"
|
|
|
|
|
|
2020-11-21 10:48:08 +00:00
|
|
|
services:
|
2024-12-30 12:14:53 +00:00
|
|
|
|
2026-09-02 19:59:46 +01:00
|
|
|
###################################
|
|
|
|
|
# FOUNDRY #
|
|
|
|
|
# https://rec.scarif.space/foundy #
|
|
|
|
|
###################################
|
2021-06-21 18:25:05 +01:00
|
|
|
foundry:
|
2025-07-20 22:21:37 +01:00
|
|
|
profiles: ["prod"]
|
2022-10-05 22:47:24 +00:00
|
|
|
<<: *logging
|
2021-06-21 18:25:05 +01:00
|
|
|
image: felddy/foundryvtt:release
|
|
|
|
|
volumes:
|
2026-08-07 22:28:41 +01:00
|
|
|
- /mnt/tower/containers/foundry:/data
|
2026-08-07 21:49:31 +01:00
|
|
|
- ./foundry/patches:/data/patches
|
2021-06-21 18:25:05 +01:00
|
|
|
restart: always
|
|
|
|
|
environment:
|
|
|
|
|
- "FOUNDRY_PASSWORD=${FOUNDRY_PASSWORD}"
|
|
|
|
|
- "FOUNDRY_USERNAME=${FOUNDRY_USER}"
|
|
|
|
|
- FOUNDRY_ADMIN_KEY=${FOUNDRY_ADMIN_KEY}
|
|
|
|
|
- FOUNDRY_HOSTNAME=https://rec.${DOMAIN}
|
|
|
|
|
- FOUNDRY_PROXY_PORT=443
|
|
|
|
|
- FOUNDRY_PORT=443
|
|
|
|
|
- FOUNDRY_PROXY_SSL=true
|
|
|
|
|
- FOUNDRY_ROUTE_PREFIX=foundry
|
2021-06-22 08:33:44 +01:00
|
|
|
- CONTAINER_CACHE=/data/container_cache
|
2023-03-23 20:29:29 +00:00
|
|
|
- CONTAINER_PATCHES=/data/patches
|
|
|
|
|
- FOUNDRY_UID=1000
|
|
|
|
|
- FOUNDRY_GID=1000
|
2025-07-20 22:21:37 +01:00
|
|
|
- VIRTUAL_HOST=rec.${DOMAIN}
|
2026-08-07 22:28:41 +01:00
|
|
|
- LETSENCRYPT_HOST=rec.${DOMAIN}
|
2025-07-20 22:21:37 +01:00
|
|
|
- CERT_NAME=${DOMAIN}
|
|
|
|
|
- VIRTUAL_PORT=30000
|
|
|
|
|
- VIRTUAL_PATH=/foundry
|
2021-06-21 18:25:05 +01:00
|
|
|
networks:
|
|
|
|
|
- nginx
|
|
|
|
|
|
2026-09-02 19:59:46 +01:00
|
|
|
###################################
|
|
|
|
|
# NEXTCLOUD #
|
|
|
|
|
# https://tower.scarif.space #
|
|
|
|
|
###################################
|
2020-11-22 23:14:54 +00:00
|
|
|
nextcloud:
|
2025-07-25 23:22:07 +01:00
|
|
|
profiles: ["prod", "dev"]
|
2022-10-05 22:47:24 +00:00
|
|
|
<<: *logging
|
2020-11-22 23:14:54 +00:00
|
|
|
build: ./nextcloud
|
2026-08-04 22:02:01 +01:00
|
|
|
image: nextcloud:33-fpm-alpine
|
2023-03-23 20:29:29 +00:00
|
|
|
restart: unless-stopped
|
|
|
|
|
user: 1000:1000
|
2025-07-25 23:22:07 +01:00
|
|
|
ports:
|
|
|
|
|
- 9000:9000
|
2020-11-22 23:14:54 +00:00
|
|
|
volumes:
|
2026-08-07 22:28:41 +01:00
|
|
|
- /mnt/tower/containers/nextcloud:/var/www/html
|
2025-07-25 23:22:07 +01:00
|
|
|
- ./nextcloud/redis-session.ini:/usr/local/etc/php/conf.d/redis-session.ini
|
2023-03-23 20:29:29 +00:00
|
|
|
- /mnt/tower/stardust:/var/www/html/data
|
|
|
|
|
- /mnt/tower/foundry:/var/www/foundry
|
2020-11-22 23:14:54 +00:00
|
|
|
environment:
|
2025-07-20 22:21:37 +01:00
|
|
|
- VIRTUAL_HOST=tower.${DOMAIN}
|
2026-08-07 22:28:41 +01:00
|
|
|
- LETSENCRYPT_HOST=tower.${DOMAIN}
|
2025-07-20 22:21:37 +01:00
|
|
|
- CERT_NAME=${DOMAIN}
|
|
|
|
|
- VIRTUAL_PORT=9000
|
|
|
|
|
- VIRTUAL_PROTO=fastcgi
|
2020-11-22 23:14:54 +00:00
|
|
|
- REDIS_HOST=redis
|
|
|
|
|
- MYSQL_HOST=db
|
|
|
|
|
- MYSQL_PASSWORD=${DB_PASSWORD}
|
|
|
|
|
- MYSQL_DATABASE=nextcloud
|
|
|
|
|
- MYSQL_USER=${DB_USER}
|
|
|
|
|
- NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_ADMIN_PASSWORD}
|
|
|
|
|
- NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER}
|
2023-03-23 20:29:29 +00:00
|
|
|
- MAIL_FROM_ADDRESS=${MAIL_FROM}
|
|
|
|
|
- SMTP_HOST=${MAIL_HOST}
|
|
|
|
|
- SMTP_PORT=${MAIL_PORT}
|
|
|
|
|
- SMTP_USER=${MAIL_USER}
|
|
|
|
|
- SMTP_PASSWORD=${MAIL_PASSWORD}
|
|
|
|
|
- "NEXTCLOUD_TRUSTED_DOMAINS=tower.${DOMAIN} 127.0.0.1"
|
|
|
|
|
- USER_UID=1000
|
|
|
|
|
- USER_GID=1000
|
|
|
|
|
- APACHE_RUN_USER=1000
|
|
|
|
|
- APACHE_RUN_GROUP=1000
|
2020-11-22 23:14:54 +00:00
|
|
|
depends_on:
|
|
|
|
|
- db
|
|
|
|
|
- redis
|
2020-11-24 21:19:10 +00:00
|
|
|
networks:
|
|
|
|
|
- db
|
|
|
|
|
- redis
|
|
|
|
|
- nginx
|
2020-12-07 21:55:23 +00:00
|
|
|
extra_hosts:
|
2023-03-23 20:29:29 +00:00
|
|
|
- "tower.${DOMAIN}:${LOCAL_IP}"
|
|
|
|
|
- "office.${DOMAIN}:${LOCAL_IP}"
|
2024-12-30 12:15:35 +00:00
|
|
|
|
2020-12-07 21:55:23 +00:00
|
|
|
collabora:
|
2025-07-20 22:21:37 +01:00
|
|
|
profiles: ["prod", "dev"]
|
2022-10-05 22:47:24 +00:00
|
|
|
<<: *logging
|
2020-12-07 21:55:23 +00:00
|
|
|
image: collabora/code
|
2023-03-23 20:29:29 +00:00
|
|
|
restart: unless-stopped
|
2020-12-07 21:55:23 +00:00
|
|
|
cap_add:
|
|
|
|
|
- MKNOD
|
|
|
|
|
environment:
|
2025-07-20 22:21:37 +01:00
|
|
|
- VIRTUAL_HOST=office.${DOMAIN}
|
2026-08-07 22:28:41 +01:00
|
|
|
- LETSENCRYPT_HOST=office.${DOMAIN}
|
2025-07-20 22:21:37 +01:00
|
|
|
- CERT_NAME=${DOMAIN}
|
|
|
|
|
- VIRTUAL_PORT=9980
|
2023-03-23 20:29:29 +00:00
|
|
|
- "DONT_GEN_SSL_CERT=True"
|
2020-12-07 21:55:23 +00:00
|
|
|
- domain=tower.${DOMAIN}
|
2026-03-13 18:47:30 +00:00
|
|
|
- "aliasgroup1=https://tower.${DOMAIN}"
|
2020-12-07 21:55:23 +00:00
|
|
|
- cert_domain=office.${DOMAIN}
|
|
|
|
|
- server_name=office.${DOMAIN}
|
|
|
|
|
- username=${COLLABORA_USER}
|
|
|
|
|
- password=${COLLABORA_PASSWORD}
|
|
|
|
|
- "extra_params=-o:ssl.enable=false --o:ssl.termination=true"
|
|
|
|
|
- "dictionaries=de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru ro"
|
|
|
|
|
networks:
|
|
|
|
|
- nginx
|
|
|
|
|
extra_hosts:
|
2023-03-23 20:29:29 +00:00
|
|
|
- "tower.${DOMAIN}:${LOCAL_IP}"
|
|
|
|
|
- "office.${DOMAIN}:${LOCAL_IP}"
|
2020-12-13 16:37:09 +00:00
|
|
|
|
2026-09-02 19:59:46 +01:00
|
|
|
###################################
|
|
|
|
|
# VAULTWARDEN #
|
|
|
|
|
# https://vault.scarif.space #
|
|
|
|
|
###################################
|
|
|
|
|
vaultwarden:
|
|
|
|
|
image: vaultwarden/server:latest
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
environment:
|
|
|
|
|
- "DOMAIN=https://vault.${DOMAIN}"
|
|
|
|
|
- VIRTUAL_HOST=vault.${DOMAIN}
|
|
|
|
|
- LETSENCRYPT_HOST=vault.${DOMAIN}
|
|
|
|
|
- VIRTUAL_PORT=80
|
2026-09-20 14:34:03 +01:00
|
|
|
- SIGNUPS_ALLOWED=false
|
|
|
|
|
networks:
|
|
|
|
|
- nginx
|
2026-09-02 19:59:46 +01:00
|
|
|
volumes:
|
|
|
|
|
- /mnt/tower/containers/vaultwarden:/data/
|
|
|
|
|
|
|
|
|
|
###################################
|
|
|
|
|
# GITEA #
|
|
|
|
|
# https://labs.scarif.space #
|
|
|
|
|
###################################
|
2020-11-25 21:33:30 +00:00
|
|
|
gitea:
|
2025-07-20 22:21:37 +01:00
|
|
|
profiles: ["prod", "dev"]
|
2022-10-05 22:47:24 +00:00
|
|
|
<<: *logging
|
2020-11-25 21:33:30 +00:00
|
|
|
image: gitea/gitea:1
|
|
|
|
|
environment:
|
2025-07-20 22:21:37 +01:00
|
|
|
- VIRTUAL_HOST=labs.${DOMAIN}
|
2026-08-07 22:28:41 +01:00
|
|
|
- LETSENCRYPT_HOST=labs.${DOMAIN}
|
2025-07-20 22:21:37 +01:00
|
|
|
- CERT_NAME=${DOMAIN}
|
|
|
|
|
- VIRTUAL_PORT=3000
|
2020-11-25 21:33:30 +00:00
|
|
|
- "APP_NAME=Labs: Where the good stuff happens"
|
|
|
|
|
- RUN_MODE=prod
|
|
|
|
|
- DOMAIN=labs.${DOMAIN}
|
|
|
|
|
- ROOT_URL=https://labs.${DOMAIN}
|
|
|
|
|
- DB_TYPE=mysql
|
|
|
|
|
- DB_HOST=db
|
|
|
|
|
- DB_NAME=gitea
|
|
|
|
|
- DB_USER=${DB_USER}
|
|
|
|
|
- DB_PASSWD=${DB_PASSWORD}
|
2020-12-05 15:46:40 +00:00
|
|
|
- USER_UID=1200
|
|
|
|
|
- USER_GID=1200
|
|
|
|
|
- DISABLE_REGISTRATION=true
|
2020-11-25 21:33:30 +00:00
|
|
|
restart: always
|
|
|
|
|
volumes:
|
2026-08-07 22:28:41 +01:00
|
|
|
- /mnt/tower/containers/gitea:/data
|
2023-03-23 20:29:29 +00:00
|
|
|
- /mnt/tower/labs:/data/git
|
2020-12-05 15:46:40 +00:00
|
|
|
- /home/git/.ssh/:/data/git/.ssh/
|
2020-11-25 21:33:30 +00:00
|
|
|
- /etc/timezone:/etc/timezone:ro
|
|
|
|
|
- /etc/localtime:/etc/localtime:ro
|
|
|
|
|
ports:
|
2020-12-05 15:46:40 +00:00
|
|
|
- "127.0.0.1:2222:22"
|
2020-11-25 21:33:30 +00:00
|
|
|
networks:
|
|
|
|
|
- db
|
|
|
|
|
- nginx
|
|
|
|
|
depends_on:
|
|
|
|
|
- db
|
2026-08-04 22:02:01 +01:00
|
|
|
|
2026-09-02 19:59:46 +01:00
|
|
|
###################################
|
|
|
|
|
# AUDIOBOOKSHELF #
|
|
|
|
|
# https://echo.scarif.space #
|
|
|
|
|
###################################
|
2026-08-04 22:02:01 +01:00
|
|
|
audiobookshelf:
|
|
|
|
|
image: ghcr.io/advplyr/audiobookshelf:latest
|
|
|
|
|
volumes:
|
|
|
|
|
- /mnt/tower/stardust/chris/files/Library/Audiobooks:/audiobooks
|
|
|
|
|
- /mnt/tower/stardust/chris/files/Library/Podcasts:/podcasts
|
2026-08-07 22:45:05 +01:00
|
|
|
- /mnt/tower/containers/audiobookshelf/config:/config
|
|
|
|
|
- /mnt/tower/containers/audiobookshelf:/metadata
|
2026-08-04 22:02:01 +01:00
|
|
|
environment:
|
|
|
|
|
- TZ=Europe/London
|
|
|
|
|
- VIRTUAL_HOST=echo.${DOMAIN}
|
2026-08-07 22:28:41 +01:00
|
|
|
- LETSENCRYPT_HOST=echo.${DOMAIN}
|
2026-08-04 22:02:01 +01:00
|
|
|
- VIRTUAL_PORT=80
|
2025-07-25 21:17:58 +01:00
|
|
|
networks:
|
|
|
|
|
- nginx
|
2026-08-04 22:02:01 +01:00
|
|
|
|
2026-09-02 19:59:46 +01:00
|
|
|
###################################
|
|
|
|
|
# GROCY #
|
|
|
|
|
# https://supplies.scarif.space #
|
|
|
|
|
###################################
|
2026-08-04 22:02:01 +01:00
|
|
|
grocy:
|
|
|
|
|
image: lscr.io/linuxserver/grocy:latest
|
|
|
|
|
environment:
|
|
|
|
|
- PUID=1000
|
|
|
|
|
- PGID=1000
|
|
|
|
|
- TZ=Europe/London
|
2026-08-07 21:49:31 +01:00
|
|
|
- CURRENCY=GBP
|
|
|
|
|
- DEFAULT_LOCALE=en_GB
|
|
|
|
|
- VIRTUAL_HOST=supplies.${DOMAIN}
|
2026-08-07 22:28:41 +01:00
|
|
|
- LETSENCRYPT_HOST=supplies.${DOMAIN}
|
2026-08-04 22:24:59 +01:00
|
|
|
- VIRTUAL_PORT=80
|
2026-08-04 22:02:01 +01:00
|
|
|
volumes:
|
2026-08-07 21:49:31 +01:00
|
|
|
- /mnt/tower/containers/grocy:/config
|
|
|
|
|
- ./grocy/config-dist.php:/config/config-dist.php
|
2026-08-04 22:02:01 +01:00
|
|
|
restart: unless-stopped
|
2026-08-04 22:24:59 +01:00
|
|
|
networks:
|
|
|
|
|
- nginx
|
2026-08-04 22:02:01 +01:00
|
|
|
|
2026-09-02 19:59:46 +01:00
|
|
|
###################################
|
|
|
|
|
# HOMEBOX #
|
|
|
|
|
# https://assets.scarif.space #
|
|
|
|
|
###################################
|
2026-08-07 21:49:31 +01:00
|
|
|
homebox:
|
|
|
|
|
image: ghcr.io/sysadminsmedia/homebox:latest
|
|
|
|
|
restart: always
|
|
|
|
|
environment:
|
|
|
|
|
- HBOX_LOG_LEVEL=info
|
|
|
|
|
- HBOX_LOG_FORMAT=text
|
2026-08-08 15:22:36 +01:00
|
|
|
- HBOX_WEB_MAX_UPLOAD_SIZE=20
|
2026-08-07 21:49:31 +01:00
|
|
|
- HBOX_OPTIONS_ALLOW_ANALYTICS=false
|
|
|
|
|
- HBOX_AUTH_API_KEY_PEPPER=${HOMEBOX_API_KEY_PEPPER}
|
|
|
|
|
- HBOX_OPTIONS_ALLOW_REGISTRATION=true
|
|
|
|
|
- VIRTUAL_HOST=assets.${DOMAIN}
|
2026-08-07 22:28:41 +01:00
|
|
|
- LETSENCRYPT_HOST=assets.${DOMAIN}
|
2026-08-07 21:49:31 +01:00
|
|
|
- VIRTUAL_PORT=7745
|
|
|
|
|
volumes:
|
|
|
|
|
- /mnt/tower/containers/homebox:/data/
|
|
|
|
|
networks:
|
|
|
|
|
- nginx
|
2025-07-25 21:17:58 +01:00
|
|
|
|
2026-09-02 19:59:46 +01:00
|
|
|
###################################
|
|
|
|
|
# SEARXNG #
|
|
|
|
|
# https://holocron.scarif.space #
|
|
|
|
|
###################################
|
2025-07-25 21:17:58 +01:00
|
|
|
searxng:
|
|
|
|
|
image: docker.io/searxng/searxng:latest
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
networks:
|
|
|
|
|
- nginx
|
|
|
|
|
- redis
|
|
|
|
|
volumes:
|
|
|
|
|
- ./searxng:/etc/searxng:rw
|
2026-08-07 22:28:41 +01:00
|
|
|
- /mnt/tower/containers/searxng:/var/cache/searxng:rw
|
2025-07-25 21:17:58 +01:00
|
|
|
environment:
|
|
|
|
|
- SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/
|
|
|
|
|
- SEARXNG_SECRET=${SEARXNG_SECRET_KEY}
|
|
|
|
|
- VIRTUAL_HOST=holocron.${DOMAIN}
|
2026-08-07 22:28:41 +01:00
|
|
|
- LETSENCRYPT_HOST=holocron.${DOMAIN}
|
2025-07-25 21:17:58 +01:00
|
|
|
- VIRTUAL_PORT=8080
|
|
|
|
|
- CERT_NAME=${DOMAIN}
|
|
|
|
|
<<: *logging
|
|
|
|
|
|
2026-09-02 19:59:46 +01:00
|
|
|
###################################
|
|
|
|
|
# MINECRAFT #
|
|
|
|
|
###################################
|
2024-12-26 00:06:39 +00:00
|
|
|
minecraft:
|
2025-07-20 22:21:37 +01:00
|
|
|
profiles: ["prod"]
|
2024-12-26 00:06:39 +00:00
|
|
|
<<: *logging
|
|
|
|
|
image: itzg/minecraft-server
|
|
|
|
|
tty: true
|
|
|
|
|
stdin_open: true
|
|
|
|
|
ports:
|
|
|
|
|
- "25565:25565"
|
|
|
|
|
environment:
|
|
|
|
|
- TYPE=VANILLA
|
|
|
|
|
- VERSION=LATEST
|
|
|
|
|
- EULA=TRUE
|
|
|
|
|
- MEMORY=2G
|
|
|
|
|
- RCON_PASSWORD=${MINECRAFT_PASSWORD}
|
|
|
|
|
- MOTD="Scarif Minecraft Server"
|
2024-12-26 12:54:17 +00:00
|
|
|
- WHITELIST=${MINECRAFT_WHITELIST}
|
2024-12-26 00:06:39 +00:00
|
|
|
volumes:
|
2026-08-07 22:28:41 +01:00
|
|
|
- /mnt/tower/containers/minecraft:/data
|
2024-12-26 00:06:39 +00:00
|
|
|
|
2024-12-26 12:54:17 +00:00
|
|
|
mc-backup:
|
2025-07-20 22:21:37 +01:00
|
|
|
profiles: ["prod"]
|
2024-12-26 12:54:17 +00:00
|
|
|
<<: *logging
|
|
|
|
|
image: itzg/mc-backup
|
|
|
|
|
depends_on:
|
|
|
|
|
minecraft:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
environment:
|
|
|
|
|
- RCON_HOST=minecraft
|
|
|
|
|
- RCON_PASSWORD=${MINECRAFT_PASSWORD}
|
|
|
|
|
- INITIAL_DELAY=0
|
|
|
|
|
- BACKUP_INTERVAL=24h
|
|
|
|
|
- PAUSE_IF_NO_PLAYERS=true
|
|
|
|
|
- PLAYERS_ONLINE_CHECK_INTERVAL=10
|
|
|
|
|
- PRUNE_BACKUPS_DAYS=30
|
|
|
|
|
volumes:
|
2026-08-07 22:28:41 +01:00
|
|
|
- /mnt/tower/containers/minecraft:/data
|
2026-09-02 19:59:46 +01:00
|
|
|
- /mnt/tower/containers/minecraft/backup:/backups
|
2024-12-26 12:54:17 +00:00
|
|
|
|
2026-09-02 19:59:46 +01:00
|
|
|
###################################
|
|
|
|
|
# NAVIDROME #
|
|
|
|
|
# https://radio.scarif.space #
|
|
|
|
|
###################################
|
2023-12-01 09:03:33 +00:00
|
|
|
navidrome:
|
2025-07-20 22:21:37 +01:00
|
|
|
profiles: ["prod"]
|
2023-12-01 09:03:33 +00:00
|
|
|
<<: *logging
|
|
|
|
|
image: deluan/navidrome:latest
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
environment:
|
2025-07-20 22:21:37 +01:00
|
|
|
- VIRTUAL_HOST=radio.${DOMAIN}
|
2026-08-07 22:28:41 +01:00
|
|
|
- LETSENCRYPT_HOST=radio.${DOMAIN}
|
2025-07-20 22:21:37 +01:00
|
|
|
- CERT_NAME=${DOMAIN}
|
|
|
|
|
- VIRTUAL_PORT=4533
|
2023-12-01 09:03:33 +00:00
|
|
|
- ND_SCANSCHEDULE=1h
|
|
|
|
|
- ND_LOGLEVEL=info
|
|
|
|
|
- ND_SESSIONTIMEOUT=24h
|
|
|
|
|
- ND_BASEURL=https://radio.${DOMAIN}
|
|
|
|
|
volumes:
|
2026-08-07 21:49:31 +01:00
|
|
|
- /mnt/tower/containers/navidrome:/data
|
2026-08-04 22:02:01 +01:00
|
|
|
- /mnt/tower/stardust/chris/files/Library/Music:/music:ro
|
2023-12-01 09:03:33 +00:00
|
|
|
networks:
|
|
|
|
|
- nginx
|
|
|
|
|
|
2026-09-02 19:59:46 +01:00
|
|
|
###################################
|
|
|
|
|
# PIHOLE #
|
|
|
|
|
# https://net.scarif.space #
|
|
|
|
|
###################################
|
2023-07-09 22:56:43 +01:00
|
|
|
pihole:
|
2025-07-20 22:21:37 +01:00
|
|
|
profiles: ["prod"]
|
2023-07-09 22:56:43 +01:00
|
|
|
<<: *logging
|
|
|
|
|
image: pihole/pihole:latest
|
|
|
|
|
ports:
|
|
|
|
|
- "53:53/tcp"
|
|
|
|
|
- "53:53/udp"
|
|
|
|
|
environment:
|
2025-07-20 22:21:37 +01:00
|
|
|
- VIRTUAL_HOST=net.${DOMAIN}
|
|
|
|
|
- CERT_NAME=${DOMAIN}
|
|
|
|
|
- TZ="Europe/London"
|
|
|
|
|
- WEBPASSWORD=${PIHOLE_PASSWORD}
|
2023-07-09 22:56:43 +01:00
|
|
|
volumes:
|
2026-09-02 19:59:46 +01:00
|
|
|
- "/mnt/tower/containers/pihole/etc-pihole:/etc/pihole"
|
|
|
|
|
- "./pihole/etc-dnsmasq.d:/etc/dnsmasq.d"
|
2023-07-09 22:56:43 +01:00
|
|
|
restart: unless-stopped
|
|
|
|
|
networks:
|
|
|
|
|
- nginx
|
|
|
|
|
|
2026-09-02 19:59:46 +01:00
|
|
|
###################################
|
|
|
|
|
# DAWARICH #
|
|
|
|
|
# https://map.scarif.space #
|
|
|
|
|
###################################
|
|
|
|
|
dawarich_app:
|
|
|
|
|
image: freikin/dawarich:latest
|
|
|
|
|
volumes:
|
|
|
|
|
- /mnt/tower/containers/dawarich/public:/var/app/public
|
|
|
|
|
- /mnt/tower/containers/dawarich/watched:/var/app/tmp/imports/watched
|
|
|
|
|
- /mnt/tower/containers/dawarich/storage:/var/app/storage
|
|
|
|
|
- /mnt/tower/containers/dawarich/data:/dawarich_db_data
|
|
|
|
|
networks:
|
|
|
|
|
- dawarich
|
|
|
|
|
- redis
|
|
|
|
|
- nginx
|
|
|
|
|
stdin_open: true
|
|
|
|
|
tty: true
|
|
|
|
|
entrypoint: web-entrypoint.sh
|
|
|
|
|
command: ['bin/rails', 'server', '-p', '3000', '-b', '::']
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
environment:
|
|
|
|
|
VIRTUAL_HOST: maps.${DOMAIN}
|
|
|
|
|
VIRTUAL_PORT: 3000
|
|
|
|
|
LETSENCRYPT_HOST: maps.${DOMAIN}
|
|
|
|
|
RAILS_ENV: ${RAILS_ENV:-production}
|
|
|
|
|
PUID: ${PUID:-1000}
|
|
|
|
|
PGID: ${PGID:-1000}
|
|
|
|
|
REDIS_URL: ${REDIS_URL:-redis://redis:6379}
|
|
|
|
|
DATABASE_HOST: ${DATABASE_HOST:-dawarich_db}
|
|
|
|
|
DATABASE_PORT: ${DATABASE_PORT:-5432}
|
|
|
|
|
DATABASE_USERNAME: ${DATABASE_USERNAME:-postgres}
|
|
|
|
|
DATABASE_PASSWORD: ${DATABASE_PASSWORD:-password}
|
|
|
|
|
DATABASE_NAME: ${DATABASE_NAME:-dawarich_development}
|
|
|
|
|
APPLICATION_HOSTS: maps.${DOMAIN},localhost,::1,127.0.0.1
|
|
|
|
|
TIME_ZONE: ${TIME_ZONE:-Europe/London}
|
|
|
|
|
APPLICATION_PROTOCOL: ${APPLICATION_PROTOCOL:-http}
|
|
|
|
|
PROMETHEUS_EXPORTER_ENABLED: ${PROMETHEUS_EXPORTER_ENABLED:-false}
|
|
|
|
|
SECRET_KEY_BASE: ${DAWARICH_SECRET_KEY}
|
|
|
|
|
RAILS_LOG_TO_STDOUT: ${RAILS_LOG_TO_STDOUT:-true}
|
|
|
|
|
SELF_HOSTED: ${SELF_HOSTED:-true}
|
|
|
|
|
STORE_GEODATA: ${STORE_GEODATA:-true}
|
|
|
|
|
WEB_CONCURRENCY: ${WEB_CONCURRENCY:-1}
|
|
|
|
|
<<: *logging
|
|
|
|
|
depends_on:
|
|
|
|
|
- dawarich_db
|
|
|
|
|
- redis
|
|
|
|
|
deploy:
|
|
|
|
|
resources:
|
|
|
|
|
limits:
|
|
|
|
|
cpus: ${APP_CPU_LIMIT:-0.50}
|
|
|
|
|
memory: ${APP_MEMORY_LIMIT:-4G}
|
2026-03-13 18:42:44 +00:00
|
|
|
|
2026-09-02 19:59:46 +01:00
|
|
|
dawarich_sidekiq:
|
|
|
|
|
image: freikin/dawarich:latest
|
|
|
|
|
volumes:
|
|
|
|
|
- /mnt/tower/containers/dawarich/public:/var/app/public
|
|
|
|
|
- /mnt/tower/containers/dawarich/watched:/var/app/tmp/imports/watched
|
|
|
|
|
- /mnt/tower/containers/dawarich/storage:/var/app/storage
|
|
|
|
|
networks:
|
|
|
|
|
- dawarich
|
|
|
|
|
- redis
|
|
|
|
|
stdin_open: true
|
|
|
|
|
tty: true
|
|
|
|
|
entrypoint: sidekiq-entrypoint.sh
|
|
|
|
|
command: ['sidekiq']
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
environment:
|
|
|
|
|
RAILS_ENV: ${RAILS_ENV:-production}
|
|
|
|
|
### To run under a non-root user, set PUID/PGID here (do NOT use `user:`).
|
|
|
|
|
# PUID: ${PUID:-1000}
|
|
|
|
|
# PGID: ${PGID:-1000}
|
|
|
|
|
REDIS_URL: ${REDIS_URL:-redis://redis:6379}
|
|
|
|
|
DATABASE_HOST: ${DATABASE_HOST:-dawarich_db}
|
|
|
|
|
DATABASE_PORT: ${DATABASE_PORT:-5432}
|
|
|
|
|
DATABASE_USERNAME: ${DATABASE_USERNAME:-postgres}
|
|
|
|
|
DATABASE_PASSWORD: ${DATABASE_PASSWORD:-password}
|
|
|
|
|
DATABASE_NAME: ${DATABASE_NAME:-dawarich_development}
|
|
|
|
|
APPLICATION_HOSTS: maps.${DOMAIN},localhost,::1,127.0.0.1
|
|
|
|
|
BACKGROUND_PROCESSING_CONCURRENCY: ${BACKGROUND_PROCESSING_CONCURRENCY:-3}
|
|
|
|
|
APPLICATION_PROTOCOL: ${APPLICATION_PROTOCOL:-http}
|
|
|
|
|
PROMETHEUS_EXPORTER_ENABLED: ${PROMETHEUS_EXPORTER_ENABLED:-false}
|
|
|
|
|
SECRET_KEY_BASE: ${DAWARICH_SECRET_KEY}
|
|
|
|
|
RAILS_LOG_TO_STDOUT: ${RAILS_LOG_TO_STDOUT:-true}
|
|
|
|
|
SELF_HOSTED: ${SELF_HOSTED:-true}
|
|
|
|
|
STORE_GEODATA: ${STORE_GEODATA:-true}
|
|
|
|
|
<<: *logging
|
|
|
|
|
depends_on:
|
|
|
|
|
- dawarich_db
|
|
|
|
|
- redis
|
|
|
|
|
- dawarich_app
|
|
|
|
|
|
|
|
|
|
dawarich_db:
|
|
|
|
|
image: postgis/postgis:17-3.5-alpine
|
|
|
|
|
shm_size: 1G
|
|
|
|
|
volumes:
|
|
|
|
|
- /mnt/tower/containers/dawarich/db:/var/lib/postgresql/data
|
|
|
|
|
networks:
|
|
|
|
|
- dawarich
|
|
|
|
|
<<: *logging
|
|
|
|
|
environment:
|
|
|
|
|
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
|
|
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password}
|
|
|
|
|
POSTGRES_DB: ${POSTGRES_DB:-dawarich_development}
|
|
|
|
|
restart: always
|
|
|
|
|
|
|
|
|
|
###################################
|
|
|
|
|
# SURE #
|
|
|
|
|
# https://credits.scarif.space #
|
|
|
|
|
###################################
|
|
|
|
|
|
|
|
|
|
sure_app:
|
|
|
|
|
image: ghcr.io/we-promise/sure:stable
|
|
|
|
|
volumes:
|
|
|
|
|
- /mnt/tower/containers/sure:/rails/storage
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
<<: *logging
|
|
|
|
|
environment:
|
|
|
|
|
VIRTUAL_HOST: credits.${DOMAIN}
|
|
|
|
|
VIRTUAL_PORT: 3000
|
|
|
|
|
LETSENCRYPT_HOST: credits.${DOMAIN}
|
|
|
|
|
POSTGRES_USER: ${POSTGRES_USER:-sure_user}
|
|
|
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-sure_password}
|
|
|
|
|
POSTGRES_DB: ${POSTGRES_DB:-sure_production}
|
|
|
|
|
SECRET_KEY_BASE: ${SURE_SECRET_KEY}
|
|
|
|
|
SELF_HOSTED: "true"
|
|
|
|
|
RAILS_FORCE_SSL: "false"
|
|
|
|
|
RAILS_ASSUME_SSL: "false"
|
|
|
|
|
DB_HOST: sure_db
|
|
|
|
|
DB_PORT: 5432
|
|
|
|
|
REDIS_URL: redis://redis:6379/1
|
|
|
|
|
depends_on:
|
|
|
|
|
- sure_db
|
|
|
|
|
- redis
|
|
|
|
|
networks:
|
|
|
|
|
- sure
|
|
|
|
|
- nginx
|
|
|
|
|
- redis
|
|
|
|
|
|
|
|
|
|
sure_worker:
|
|
|
|
|
image: ghcr.io/we-promise/sure:stable
|
|
|
|
|
command: bundle exec sidekiq
|
|
|
|
|
<<: *logging
|
|
|
|
|
volumes:
|
|
|
|
|
- /mnt/tower/containers/sure:/rails/storage
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
depends_on:
|
|
|
|
|
- sure_db
|
|
|
|
|
- redis
|
|
|
|
|
environment:
|
|
|
|
|
POSTGRES_USER: ${POSTGRES_USER:-sure_user}
|
|
|
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-sure_password}
|
|
|
|
|
POSTGRES_DB: ${POSTGRES_DB:-sure_production}
|
|
|
|
|
SECRET_KEY_BASE: ${SURE_SECRET_KEY}
|
|
|
|
|
SELF_HOSTED: "true"
|
|
|
|
|
RAILS_FORCE_SSL: "false"
|
|
|
|
|
RAILS_ASSUME_SSL: "false"
|
|
|
|
|
DB_HOST: sure_db
|
|
|
|
|
DB_PORT: 5432
|
|
|
|
|
REDIS_URL: redis://redis:6379/1
|
|
|
|
|
networks:
|
|
|
|
|
- sure
|
|
|
|
|
- redis
|
|
|
|
|
|
|
|
|
|
sure_db:
|
|
|
|
|
image: postgres:16
|
|
|
|
|
<<: *logging
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
volumes:
|
|
|
|
|
- /mnt/tower/containers/sure/db:/var/lib/postgresql/data
|
|
|
|
|
environment:
|
|
|
|
|
POSTGRES_USER: ${POSTGRES_USER:-sure_user}
|
|
|
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-sure_password}
|
|
|
|
|
POSTGRES_DB: ${POSTGRES_DB:-sure_production}
|
|
|
|
|
networks:
|
|
|
|
|
- sure
|
|
|
|
|
|
2026-09-20 14:34:03 +01:00
|
|
|
###################################
|
|
|
|
|
# WOLF #
|
|
|
|
|
###################################
|
|
|
|
|
wolf:
|
|
|
|
|
image: ghcr.io/games-on-whales/wolf:stable
|
|
|
|
|
<<: *logging
|
|
|
|
|
environment:
|
|
|
|
|
- NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol
|
|
|
|
|
volumes:
|
|
|
|
|
- /mnt/tower/containers/wolf/etc/wolf/:/etc/wolf:rw
|
|
|
|
|
- ./wolf/config.toml:/etc/wolf/cfg/config.toml:ro
|
|
|
|
|
- /var/run/docker.sock:/var/run/docker.sock:rw
|
|
|
|
|
- /dev/:/dev/:rw
|
|
|
|
|
- /run/udev:/run/udev:rw
|
|
|
|
|
- nvidia-driver-vol:/usr/nvidia:rw
|
|
|
|
|
devices:
|
|
|
|
|
- /dev/dri
|
|
|
|
|
- /dev/uinput
|
|
|
|
|
- /dev/uhid
|
|
|
|
|
- /dev/nvidia-uvm
|
|
|
|
|
- /dev/nvidia-uvm-tools
|
|
|
|
|
- /dev/nvidia-caps/nvidia-cap1
|
|
|
|
|
- /dev/nvidia-caps/nvidia-cap2
|
|
|
|
|
- /dev/nvidiactl
|
|
|
|
|
- /dev/nvidia0
|
|
|
|
|
- /dev/nvidia-modeset
|
|
|
|
|
device_cgroup_rules:
|
|
|
|
|
- 'c 13:* rmw'
|
|
|
|
|
network_mode: host
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
|
|
|
|
###################################
|
|
|
|
|
# JELLYFIN #
|
|
|
|
|
# https://media.scarif.space #
|
|
|
|
|
###################################
|
|
|
|
|
jellyfin:
|
|
|
|
|
image: jellyfin/jellyfin
|
|
|
|
|
<<: *logging
|
|
|
|
|
ports:
|
|
|
|
|
- 8096:8096/tcp
|
|
|
|
|
- 7359:7359/udp
|
|
|
|
|
volumes:
|
|
|
|
|
- ./jellyfin/config:/config
|
|
|
|
|
- /mnt/tower/containers/jellyfin/cache:/cache
|
|
|
|
|
- type: bind
|
|
|
|
|
source: /mnt/tower/stardust/chris/files/Library/Movies
|
|
|
|
|
target: /movies
|
|
|
|
|
- type: bind
|
|
|
|
|
source: /mnt/tower/stardust/chris/files/Library/Shows
|
|
|
|
|
target: /shows
|
|
|
|
|
restart: 'unless-stopped'
|
|
|
|
|
# Optional - alternative address used for autodiscovery
|
|
|
|
|
environment:
|
|
|
|
|
- JELLYFIN_PublishedServerUrl=http://media.${DOMAIN}
|
|
|
|
|
- VIRTUAL_HOST=media.${DOMAIN}
|
|
|
|
|
- VIRTUAL_PORT=8096
|
|
|
|
|
- LETSENCRYPT_HOST=media.${DOMAIN}
|
|
|
|
|
extra_hosts:
|
|
|
|
|
- 'host.docker.internal:host-gateway'
|
|
|
|
|
networks:
|
|
|
|
|
- nginx
|
|
|
|
|
|
|
|
|
|
###################################
|
|
|
|
|
# PHOTOPRISM #
|
|
|
|
|
# https://holo.scarif.space #
|
|
|
|
|
###################################
|
|
|
|
|
photoprism:
|
|
|
|
|
image: photoprism/photoprism:latest
|
|
|
|
|
<<: *logging
|
|
|
|
|
# restart: unless-stopped
|
|
|
|
|
stop_grace_period: 15s
|
|
|
|
|
depends_on:
|
|
|
|
|
- db
|
|
|
|
|
security_opt:
|
|
|
|
|
- seccomp:unconfined
|
|
|
|
|
- apparmor:unconfined
|
|
|
|
|
ports:
|
|
|
|
|
- "2342:2342"
|
|
|
|
|
environment:
|
|
|
|
|
PHOTOPRISM_ADMIN_USER: "${PHOTOPRISM_USER}"
|
|
|
|
|
PHOTOPRISM_ADMIN_PASSWORD: "${PHOTOPRISM_PASSWORD}"
|
|
|
|
|
PHOTOPRISM_AUTH_MODE: "password"
|
|
|
|
|
PHOTOPRISM_DISABLE_TLS: "true"
|
|
|
|
|
PHOTOPRISM_DEFAULT_TLS: "false"
|
|
|
|
|
PHOTOPRISM_SITE_URL: "http://holo.${DOMAIN}"
|
|
|
|
|
PHOTOPRISM_SITE_TITLE: "Holo"
|
|
|
|
|
PHOTOPRISM_SITE_CAPTION: "Photo library"
|
|
|
|
|
PHOTOPRISM_READONLY: "false"
|
|
|
|
|
PHOTOPRISM_EXPERIMENTAL: "true"
|
|
|
|
|
PHOTOPRISM_DISABLE_CHOWN: "false"
|
|
|
|
|
PHOTOPRISM_DISABLE_WEBDAV: "true"
|
|
|
|
|
PHOTOPRISM_DISABLE_MCP: "true"
|
|
|
|
|
PHOTOPRISM_SIDECAR_YAML: "true"
|
|
|
|
|
PHOTOPRISM_BACKUP_ALBUMS: "true"
|
|
|
|
|
PHOTOPRISM_BACKUP_DATABASE: "false"
|
|
|
|
|
PHOTOPRISM_INDEX_SCHEDULE: "@every 3h"
|
|
|
|
|
PHOTOPRISM_UPLOAD_LIMIT: 50000
|
|
|
|
|
PHOTOPRISM_ORIGINALS_LIMIT: 50000
|
|
|
|
|
PHOTOPRISM_HTTP_COMPRESSION: "zstd,gzip"
|
|
|
|
|
PHOTOPRISM_DATABASE_DRIVER: "sqlite"
|
|
|
|
|
PHOTOPRISM_INIT: "https tensorflow"
|
|
|
|
|
OLLAMA_BASE_URL: "http://ollama:11434"
|
|
|
|
|
OLLAMA_API_KEY: ""
|
|
|
|
|
PHOTOPRISM_FFMPEG_ENCODER: "nvidia"
|
|
|
|
|
PHOTOPRISM_FFMPEG_BITRATE: "64"
|
|
|
|
|
NVIDIA_VISIBLE_DEVICES: "all"
|
|
|
|
|
NVIDIA_DRIVER_CAPABILITIES: "all"
|
|
|
|
|
PHOTOPRISM_UID: 1000
|
|
|
|
|
PHOTOPRISM_GID: 1000
|
|
|
|
|
PHOTOPRISM_UMASK: 0000
|
|
|
|
|
VIRTUAL_HOST: "holo.${DOMAIN}"
|
|
|
|
|
VIRTUAL_PORT: 2342
|
|
|
|
|
LETSENCRYPT_HOST: "holo.${DOMAIN}"
|
|
|
|
|
user: "1000:1000"
|
|
|
|
|
devices:
|
|
|
|
|
- "/dev/dri:/dev/dri"
|
|
|
|
|
working_dir: "/photoprism" # do not change or remove
|
|
|
|
|
volumes:
|
|
|
|
|
- "/mnt/tower/stardust/chris/files/Memories:/photoprism/originals"
|
|
|
|
|
- "/mnt/tower/stardust/chris/files/Unsorted/Memories:/photoprism/import"
|
|
|
|
|
- "/mnt/tower/containers/photoprism/storage:/photoprism/storage"
|
|
|
|
|
- "./photoprism/vision.yml:/photoprism/storage/config/vision.yml:ro"
|
|
|
|
|
networks:
|
|
|
|
|
- nginx
|
|
|
|
|
- db
|
|
|
|
|
- ollama
|
|
|
|
|
deploy:
|
|
|
|
|
resources:
|
|
|
|
|
reservations:
|
|
|
|
|
devices:
|
|
|
|
|
- driver: "nvidia"
|
|
|
|
|
capabilities: [ gpu ]
|
|
|
|
|
count: "all"
|
|
|
|
|
|
2026-09-02 19:59:46 +01:00
|
|
|
###################################
|
|
|
|
|
# UTILITIES #
|
|
|
|
|
###################################
|
2020-11-21 10:48:08 +00:00
|
|
|
db:
|
2025-07-20 22:21:37 +01:00
|
|
|
profiles: ["prod", "dev"]
|
2022-10-05 22:47:24 +00:00
|
|
|
<<: *logging
|
2020-11-21 10:48:08 +00:00
|
|
|
image: mariadb
|
2021-08-14 12:57:25 +00:00
|
|
|
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --skip-innodb-read-only-compressed
|
2020-11-21 10:48:08 +00:00
|
|
|
environment:
|
2020-11-22 23:14:54 +00:00
|
|
|
- MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
|
|
|
|
|
- MYSQL_USER=${DB_USER}
|
|
|
|
|
- MYSQL_PASSWORD=${DB_PASSWORD}
|
2020-11-21 10:48:08 +00:00
|
|
|
volumes:
|
2026-08-07 22:28:41 +01:00
|
|
|
- /mnt/tower/containers/db:/var/lib/mysql
|
2020-11-22 23:14:54 +00:00
|
|
|
- ./db/init:/docker-entrypoint-initdb.d
|
|
|
|
|
restart: always
|
2020-11-24 21:19:10 +00:00
|
|
|
networks:
|
|
|
|
|
- db
|
2020-11-22 23:14:54 +00:00
|
|
|
|
|
|
|
|
redis:
|
2025-07-20 22:21:37 +01:00
|
|
|
profiles: ["prod", "dev"]
|
2025-07-25 21:17:58 +01:00
|
|
|
<<: *logging
|
2020-11-22 23:14:54 +00:00
|
|
|
image: redis:alpine
|
2020-11-21 10:48:08 +00:00
|
|
|
restart: always
|
2020-11-24 21:19:10 +00:00
|
|
|
networks:
|
|
|
|
|
- redis
|
2020-11-21 10:48:08 +00:00
|
|
|
|
2025-07-25 21:17:58 +01:00
|
|
|
mongodb:
|
2026-09-02 19:59:46 +01:00
|
|
|
<<: *logging
|
2025-07-25 21:17:58 +01:00
|
|
|
profiles: ["prod", "dev"]
|
|
|
|
|
image: mongo
|
|
|
|
|
restart: always
|
|
|
|
|
volumes:
|
2026-08-07 22:28:41 +01:00
|
|
|
- /mnt/tower/containers/mongodb:/data/db
|
2025-07-25 21:17:58 +01:00
|
|
|
command: mongod
|
|
|
|
|
networks:
|
|
|
|
|
- db
|
|
|
|
|
environment:
|
|
|
|
|
- MONGO_INITDB_ROOT_USERNAME=${DB_USER}
|
|
|
|
|
- MONGO_INITDB_ROOT_PASSWORD=${DB_PASSWORD}
|
2026-09-02 19:59:46 +01:00
|
|
|
|
|
|
|
|
rsync-backup:
|
2025-07-25 21:17:58 +01:00
|
|
|
<<: *logging
|
2026-09-02 19:59:46 +01:00
|
|
|
build: ./backup
|
|
|
|
|
volumes:
|
|
|
|
|
- /mnt/tower:/data:ro
|
|
|
|
|
- /mnt/backup/tower:/backup
|
|
|
|
|
- ./backup/crontab.txt:/etc/crontabs/root:ro
|
|
|
|
|
- ./backup/exclude.txt:/config/exclude.txt:ro
|
|
|
|
|
restart: unless-stopped
|
2025-07-25 21:17:58 +01:00
|
|
|
|
2026-09-20 14:34:03 +01:00
|
|
|
## Ollama Large-Language Model Runner (optional)
|
|
|
|
|
## run "ollama pull [name]:[version]" to download a vision model
|
|
|
|
|
## listed at <https://ollama.com/search?c=vision>, for example:
|
|
|
|
|
## docker compose exec ollama ollama pull gemma4:latest
|
|
|
|
|
ollama:
|
|
|
|
|
image: ollama/ollama:latest
|
|
|
|
|
<<: *logging
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
stop_grace_period: 15s
|
|
|
|
|
# ports:
|
|
|
|
|
# - "11434:11434"
|
|
|
|
|
environment:
|
|
|
|
|
OLLAMA_HOST: "0.0.0.0:11434"
|
|
|
|
|
OLLAMA_MODELS: "/root/.ollama"
|
|
|
|
|
OLLAMA_MAX_QUEUE: "100"
|
|
|
|
|
OLLAMA_NUM_PARALLEL: "1"
|
|
|
|
|
OLLAMA_MAX_LOADED_MODELS: "1"
|
|
|
|
|
OLLAMA_LOAD_TIMEOUT: "5m"
|
|
|
|
|
OLLAMA_KEEP_ALIVE: "5m"
|
|
|
|
|
OLLAMA_CONTEXT_LENGTH: "4096"
|
|
|
|
|
OLLAMA_MULTIUSER_CACHE: "false"
|
|
|
|
|
OLLAMA_NOPRUNE: "false"
|
|
|
|
|
OLLAMA_NOHISTORY: "true"
|
|
|
|
|
OLLAMA_FLASH_ATTENTION: "true"
|
|
|
|
|
OLLAMA_KV_CACHE_TYPE: "f16"
|
|
|
|
|
OLLAMA_SCHED_SPREAD: "false"
|
|
|
|
|
DO_NOT_TRACK: "true"
|
|
|
|
|
HF_HUB_DISABLE_TELEMETRY: "1"
|
|
|
|
|
OLLAMA_NO_CLOUD: "1" # uncomment to disable Ollama Cloud models/features
|
|
|
|
|
## NVIDIA GPU Hardware Acceleration (see https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html):
|
|
|
|
|
NVIDIA_VISIBLE_DEVICES: "all"
|
|
|
|
|
NVIDIA_DRIVER_CAPABILITIES: "compute,utility"
|
|
|
|
|
volumes:
|
|
|
|
|
- "ollama:/root/.ollama"
|
|
|
|
|
networks:
|
|
|
|
|
- ollama
|
|
|
|
|
## NVIDIA GPU Hardware Acceleration (see https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html):
|
|
|
|
|
deploy:
|
|
|
|
|
resources:
|
|
|
|
|
reservations:
|
|
|
|
|
devices:
|
|
|
|
|
- driver: "nvidia"
|
|
|
|
|
capabilities: [ gpu ]
|
|
|
|
|
count: "all"
|
|
|
|
|
|
2020-11-21 10:48:08 +00:00
|
|
|
nginx:
|
2025-07-25 21:17:58 +01:00
|
|
|
<<: *logging
|
2025-07-20 22:21:37 +01:00
|
|
|
profiles: ["prod", "dev"]
|
|
|
|
|
image: nginxproxy/nginx-proxy
|
2020-11-21 10:48:08 +00:00
|
|
|
restart: always
|
2025-07-20 22:21:37 +01:00
|
|
|
ports:
|
|
|
|
|
- "80:80"
|
|
|
|
|
- "443:443"
|
2026-08-07 22:28:41 +01:00
|
|
|
labels:
|
|
|
|
|
- "com.github.nginx-proxy.nginx"
|
2020-11-21 10:48:08 +00:00
|
|
|
volumes:
|
2025-07-20 22:21:37 +01:00
|
|
|
- /var/run/docker.sock:/tmp/docker.sock:ro
|
2020-12-13 23:08:24 +00:00
|
|
|
- /opt/ssl:/etc/nginx/certs:ro
|
2026-08-07 22:28:41 +01:00
|
|
|
- html:/usr/share/nginx/html
|
|
|
|
|
- vhost:/etc/nginx/vhost.d
|
2025-07-25 21:17:58 +01:00
|
|
|
- ./nginx/vhost.d/labs_location:/etc/nginx/vhost.d/labs.${DOMAIN}_location:ro
|
|
|
|
|
- ./nginx/vhost.d/office:/etc/nginx/vhost.d/office.${DOMAIN}:ro
|
|
|
|
|
- ./nginx/vhost.d/rec:/etc/nginx/vhost.d/rec.${DOMAIN}:ro
|
|
|
|
|
- ./nginx/vhost.d/tower_location_override:/etc/nginx/vhost.d/tower.${DOMAIN}_location_override:ro
|
|
|
|
|
- ./nginx/vhost.d/tower:/etc/nginx/vhost.d/tower.${DOMAIN}:ro
|
2026-08-08 15:22:36 +01:00
|
|
|
- ./nginx/vhost.d/assets:/etc/nginx/vhost.d/assets.${DOMAIN}:ro
|
2025-07-25 21:17:58 +01:00
|
|
|
- ./nginx/conf.d/custom_proxy.conf:/etc/nginx/conf.d/custom_proxy.conf:ro
|
2026-08-07 22:28:41 +01:00
|
|
|
- /mnt/tower/containers/nextcloud:/var/www/html/nextcloud:ro
|
2022-12-20 23:21:50 +00:00
|
|
|
- ./christmas:/var/www/html/christmas:ro
|
2020-11-24 21:19:10 +00:00
|
|
|
networks:
|
|
|
|
|
- nginx
|
2020-11-21 10:48:08 +00:00
|
|
|
|
2026-08-07 22:28:41 +01:00
|
|
|
acme-companion:
|
|
|
|
|
<<: *logging
|
|
|
|
|
profiles: ["prod"]
|
|
|
|
|
image: nginxproxy/acme-companion
|
|
|
|
|
restart: always
|
|
|
|
|
environment:
|
|
|
|
|
- DEFAULT_EMAIL=stoffles@gmail.com
|
|
|
|
|
volumes:
|
|
|
|
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
|
|
|
- /opt/ssl:/etc/nginx/certs:rw
|
|
|
|
|
- acme:/etc/acme.sh
|
|
|
|
|
- vhost:/etc/nginx/vhost.d:rw
|
|
|
|
|
- html:/usr/share/nginx/html:rw
|
|
|
|
|
depends_on:
|
|
|
|
|
- nginx
|
|
|
|
|
networks:
|
|
|
|
|
- nginx
|
|
|
|
|
|
2023-03-23 20:29:29 +00:00
|
|
|
certs:
|
2025-07-20 22:21:37 +01:00
|
|
|
profiles: ["dev"]
|
|
|
|
|
image: paulczar/omgwtfssl
|
|
|
|
|
restart: "no"
|
|
|
|
|
volumes:
|
|
|
|
|
- /opt/ssl:/certs
|
2023-03-23 20:29:29 +00:00
|
|
|
environment:
|
|
|
|
|
- SSL_SUBJECT=${DOMAIN}
|
|
|
|
|
- CA_SUBJECT=chris@${DOMAIN}
|
|
|
|
|
- SSL_KEY=/certs/${DOMAIN}.key
|
|
|
|
|
- SSL_CSR=/certs/${DOMAIN}.csr
|
|
|
|
|
- SSL_CERT=/certs/${DOMAIN}.crt
|
2020-11-25 21:33:30 +00:00
|
|
|
|
2020-11-21 10:48:08 +00:00
|
|
|
volumes:
|
2026-08-07 22:28:41 +01:00
|
|
|
html:
|
|
|
|
|
vhost:
|
|
|
|
|
acme:
|
2026-09-20 14:34:03 +01:00
|
|
|
ollama:
|
|
|
|
|
nvidia-driver-vol:
|
|
|
|
|
external: true
|
2020-11-24 21:19:10 +00:00
|
|
|
|
|
|
|
|
networks:
|
|
|
|
|
db:
|
|
|
|
|
nginx:
|
|
|
|
|
redis:
|
2026-09-02 19:59:46 +01:00
|
|
|
sure:
|
|
|
|
|
dawarich:
|
2020-12-22 18:05:10 +00:00
|
|
|
meet.jitsi:
|
2026-09-20 14:34:03 +01:00
|
|
|
ollama:
|
2022-10-05 22:47:24 +00:00
|
|
|
|