502 lines
13 KiB
YAML
502 lines
13 KiB
YAML
x-logging: &logging
|
|
logging:
|
|
driver: "local"
|
|
options:
|
|
max-size: "5m"
|
|
max-file: "2"
|
|
|
|
#x-firecrawl-service: &firecrawl-service
|
|
# image: ghcr.io/mendableai/firecrawl
|
|
#
|
|
#x-firecrawl-env: &firecrawl-env
|
|
# REDIS_URL: redis://redis:6379
|
|
# REDIS_RATE_LIMIT_URL: redis://redis:6379
|
|
# PLAYWRIGHT_MICROSERVICE_URL: http://playwright:3000/scrape
|
|
|
|
services:
|
|
|
|
foundry:
|
|
profiles: ["prod"]
|
|
<<: *logging
|
|
image: felddy/foundryvtt:release
|
|
volumes:
|
|
- /mnt/tower/foundry:/data
|
|
- ./foundry/patches:/data/patches
|
|
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
|
|
- CONTAINER_CACHE=/data/container_cache
|
|
- CONTAINER_PATCHES=/data/patches
|
|
- FOUNDRY_UID=1000
|
|
- FOUNDRY_GID=1000
|
|
- VIRTUAL_HOST=rec.${DOMAIN}
|
|
- CERT_NAME=${DOMAIN}
|
|
- VIRTUAL_PORT=30000
|
|
- VIRTUAL_PATH=/foundry
|
|
networks:
|
|
- nginx
|
|
|
|
nextcloud:
|
|
profiles: ["prod", "dev"]
|
|
<<: *logging
|
|
build: ./nextcloud
|
|
image: nextcloud:33-fpm-alpine
|
|
restart: unless-stopped
|
|
user: 1000:1000
|
|
ports:
|
|
- 9000:9000
|
|
volumes:
|
|
- nextcloud:/var/www/html
|
|
- ./nextcloud/redis-session.ini:/usr/local/etc/php/conf.d/redis-session.ini
|
|
- /mnt/tower/stardust:/var/www/html/data
|
|
- /mnt/tower/foundry:/var/www/foundry
|
|
environment:
|
|
- VIRTUAL_HOST=tower.${DOMAIN}
|
|
- CERT_NAME=${DOMAIN}
|
|
- VIRTUAL_PORT=9000
|
|
- VIRTUAL_PROTO=fastcgi
|
|
- 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}
|
|
- 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
|
|
depends_on:
|
|
- db
|
|
- redis
|
|
networks:
|
|
- db
|
|
- redis
|
|
- nginx
|
|
extra_hosts:
|
|
- "tower.${DOMAIN}:${LOCAL_IP}"
|
|
- "office.${DOMAIN}:${LOCAL_IP}"
|
|
|
|
collabora:
|
|
profiles: ["prod", "dev"]
|
|
<<: *logging
|
|
image: collabora/code
|
|
restart: unless-stopped
|
|
cap_add:
|
|
- MKNOD
|
|
environment:
|
|
- VIRTUAL_HOST=office.${DOMAIN}
|
|
- CERT_NAME=${DOMAIN}
|
|
- VIRTUAL_PORT=9980
|
|
- "DONT_GEN_SSL_CERT=True"
|
|
- domain=tower.${DOMAIN}
|
|
- "aliasgroup1=https://tower.${DOMAIN}"
|
|
- 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:
|
|
- "tower.${DOMAIN}:${LOCAL_IP}"
|
|
- "office.${DOMAIN}:${LOCAL_IP}"
|
|
|
|
gitea:
|
|
profiles: ["prod", "dev"]
|
|
<<: *logging
|
|
image: gitea/gitea:1
|
|
environment:
|
|
- VIRTUAL_HOST=labs.${DOMAIN}
|
|
- CERT_NAME=${DOMAIN}
|
|
- VIRTUAL_PORT=3000
|
|
- "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}
|
|
- USER_UID=1200
|
|
- USER_GID=1200
|
|
- DISABLE_REGISTRATION=true
|
|
restart: always
|
|
volumes:
|
|
- gitea:/data
|
|
- /mnt/tower/labs:/data/git
|
|
- /home/git/.ssh/:/data/git/.ssh/
|
|
- /etc/timezone:/etc/timezone:ro
|
|
- /etc/localtime:/etc/localtime:ro
|
|
ports:
|
|
- "127.0.0.1:2222:22"
|
|
networks:
|
|
- db
|
|
- nginx
|
|
depends_on:
|
|
- db
|
|
|
|
audiobookshelf:
|
|
image: ghcr.io/advplyr/audiobookshelf:latest
|
|
volumes:
|
|
- /mnt/tower/stardust/chris/files/Library/Audiobooks:/audiobooks
|
|
- /mnt/tower/stardust/chris/files/Library/Podcasts:/podcasts
|
|
- /mnt/tower/stardust/chris/files/Library/Audiobooks/.audiobookshelf/config:/config
|
|
- /mnt/tower/stardust/chris/files/Library/Audiobooks/.audiobookshelf:/metadata
|
|
environment:
|
|
- TZ=Europe/London
|
|
- VIRTUAL_HOST=echo.${DOMAIN}
|
|
- VIRTUAL_PORT=80
|
|
networks:
|
|
- nginx
|
|
|
|
grocy:
|
|
image: lscr.io/linuxserver/grocy:latest
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- TZ=Europe/London
|
|
- CURRENCY=GBP
|
|
- DEFAULT_LOCALE=en_GB
|
|
- VIRTUAL_HOST=supplies.${DOMAIN}
|
|
- VIRTUAL_PORT=80
|
|
volumes:
|
|
- /mnt/tower/containers/grocy:/config
|
|
- ./grocy/config-dist.php:/config/config-dist.php
|
|
restart: unless-stopped
|
|
networks:
|
|
- nginx
|
|
|
|
homebox:
|
|
image: ghcr.io/sysadminsmedia/homebox:latest
|
|
restart: always
|
|
environment:
|
|
- HBOX_LOG_LEVEL=info
|
|
- HBOX_LOG_FORMAT=text
|
|
- HBOX_WEB_MAX_UPLOAD_SIZE=10
|
|
# Please consider allowing analytics to help us improve Homebox (basic computer information, no personal data)
|
|
- HBOX_OPTIONS_ALLOW_ANALYTICS=false
|
|
# Use a strong random string for the pepper in production, it will be used to hash API keys and make them more secure
|
|
- HBOX_AUTH_API_KEY_PEPPER=${HOMEBOX_API_KEY_PEPPER}
|
|
- HBOX_OPTIONS_ALLOW_REGISTRATION=true
|
|
- VIRTUAL_HOST=assets.${DOMAIN}
|
|
- VIRTUAL_PORT=7745
|
|
volumes:
|
|
- /mnt/tower/containers/homebox:/data/
|
|
networks:
|
|
- nginx
|
|
|
|
searxng:
|
|
image: docker.io/searxng/searxng:latest
|
|
restart: unless-stopped
|
|
networks:
|
|
- nginx
|
|
- redis
|
|
volumes:
|
|
- ./searxng:/etc/searxng:rw
|
|
- searxng:/var/cache/searxng:rw
|
|
environment:
|
|
- SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/
|
|
- SEARXNG_SECRET=${SEARXNG_SECRET_KEY}
|
|
- VIRTUAL_HOST=holocron.${DOMAIN}
|
|
- VIRTUAL_PORT=8080
|
|
- CERT_NAME=${DOMAIN}
|
|
<<: *logging
|
|
|
|
minecraft:
|
|
profiles: ["prod"]
|
|
<<: *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"
|
|
- WHITELIST=${MINECRAFT_WHITELIST}
|
|
volumes:
|
|
- minecraft:/data
|
|
|
|
mc-backup:
|
|
profiles: ["prod"]
|
|
<<: *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:
|
|
- minecraft:/data:ro
|
|
- /mnt/backups/minecraft:/backups
|
|
|
|
navidrome:
|
|
profiles: ["prod"]
|
|
<<: *logging
|
|
image: deluan/navidrome:latest
|
|
restart: unless-stopped
|
|
environment:
|
|
- VIRTUAL_HOST=radio.${DOMAIN}
|
|
- CERT_NAME=${DOMAIN}
|
|
- VIRTUAL_PORT=4533
|
|
- ND_SCANSCHEDULE=1h
|
|
- ND_LOGLEVEL=info
|
|
- ND_SESSIONTIMEOUT=24h
|
|
- ND_BASEURL=https://radio.${DOMAIN}
|
|
volumes:
|
|
- /mnt/tower/containers/navidrome:/data
|
|
- /mnt/tower/stardust/chris/files/Library/Music:/music:ro
|
|
networks:
|
|
- nginx
|
|
|
|
pihole:
|
|
profiles: ["prod"]
|
|
<<: *logging
|
|
image: pihole/pihole:latest
|
|
ports:
|
|
- "53:53/tcp"
|
|
- "53:53/udp"
|
|
environment:
|
|
- VIRTUAL_HOST=net.${DOMAIN}
|
|
- CERT_NAME=${DOMAIN}
|
|
- TZ="Europe/London"
|
|
- WEBPASSWORD=${PIHOLE_PASSWORD}
|
|
volumes:
|
|
- "/docker/pihole/etc-pihole:/etc/pihole"
|
|
- "/docker/pihole/etc-dnsmasq.d:/etc/dnsmasq.d"
|
|
restart: unless-stopped
|
|
networks:
|
|
- nginx
|
|
|
|
# jitsi:
|
|
# profiles: ["prod"]
|
|
# <<: *logging
|
|
# image: jitsi/web:stable
|
|
# restart: unless-stopped
|
|
# volumes:
|
|
# - ${CONFIG}/web:/config:Z
|
|
# - ${CONFIG}/web/crontabs:/var/spool/cron/crontabs:Z
|
|
# - ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts:Z
|
|
# environment:
|
|
# - VIRTUAL_HOST=comms.${DOMAIN}
|
|
# - VIRTUAL_PORT=80
|
|
# - CERT_NAME=${DOMAIN}
|
|
# - ENABLE_AUTH=1
|
|
# - ENABLE_GUESTS=1
|
|
# - ENABLE_PREJOIN_PAGE=1
|
|
# - ENABLE_WELCOME_PAGE=1
|
|
# - ENABLE_CLOSE_PAGE=1
|
|
# - ENABLE_NOISY_MIC_DETECTION=1
|
|
# - ETHERPAD_TITLE="Video Chat"
|
|
# - ETHERPAD_DEFAULT_PAD_TEXT="Welcome to Web Chat!\n\n"
|
|
# - ETHERPAD_SKIN_NAME="colibris"
|
|
# - ETHERPAD_SKIN_VARIANTS="super-light-toolbar super-light-editor light-background full-width-editor"
|
|
# - XMPP_BOSH_URL_BASE=https://xmpp.meet.jitsi:5280
|
|
# - XMPP_AUTH_DOMAIN
|
|
# - XMPP_MUC_DOMAIN
|
|
# - XMPP_GUEST_DOMAIN
|
|
# - XMPP_RECORDER_DOMAIN
|
|
# networks:
|
|
# nginx:
|
|
# meet.jitsi:
|
|
#
|
|
# prosody:
|
|
# profiles: ["prod"]
|
|
# <<: *logging
|
|
# image: jitsi/prosody:stable
|
|
# restart: unless-stopped
|
|
# expose:
|
|
# - '${XMPP_PORT:-52222}'
|
|
# - '5347'
|
|
# - '5280'
|
|
# volumes:
|
|
# - ${CONFIG}/prosody/config:/config:Z
|
|
# - ${CONFIG}/prosody/prosody-plugins-custom:/prosody-plugins-custom:Z
|
|
# environment:
|
|
# - ENABLE_NOISY_MIC_DETECTION=1
|
|
# - ENABLE_AUTH=1
|
|
# - ENABLE_GUESTS=1
|
|
# - ENABLE_LOBBY=1
|
|
# - XMPP_DOMAIN
|
|
# - XMPP_AUTH_DOMAIN
|
|
# - XMPP_MUC_DOMAIN
|
|
# - XMPP_INTERNAL_MUC_DOMAIN
|
|
# - XMPP_GUEST_DOMAIN
|
|
# - JVB_AUTH_USER
|
|
# - JIGASI_XMPP_USER=jigasi
|
|
# - XMPP_RECORDER_DOMAIN
|
|
# - JIBRI_RECORDER_USER=recorder
|
|
# - JIBRI_XMPP_USER=jibri
|
|
# - JICOFO_AUTH_PASSWORD=
|
|
# networks:
|
|
# meet.jitsi:
|
|
# aliases:
|
|
# - ${XMPP_SERVER:-xmpp.meet.jitsi}
|
|
#
|
|
# # Focus component
|
|
# jicofo:
|
|
# profiles: ["prod"]
|
|
# <<: *logging
|
|
# image: jitsi/jicofo:stable
|
|
# restart: unless-stopped
|
|
# volumes:
|
|
# - ${CONFIG}/jicofo:/config:Z
|
|
# depends_on:
|
|
# - prosody
|
|
# environment:
|
|
# - ENABLE_AUTH=1
|
|
# - XMPP_DOMAIN
|
|
# - XMPP_MUC_DOMAIN
|
|
# - XMPP_INTERNAL_MUC_DOMAIN
|
|
# - JVB_BREWERY_MUC
|
|
# - JIGASI_BREWERY_MUC=jigasibrewery
|
|
# - XMPP_RECORDER_DOMAIN
|
|
# - JIBRI_BREWERY_MUC=jibribrewery
|
|
# - JIBRI_PENDING_TIMEOUT=90
|
|
# - JICOFO_AUTH_PASSWORD=
|
|
# networks:
|
|
# meet.jitsi:
|
|
#
|
|
# # Video bridge
|
|
# jvb:
|
|
# profiles: ["prod"]
|
|
# <<: *logging
|
|
# image: jitsi/jvb:stable
|
|
# restart: unless-stopped
|
|
# ports:
|
|
# - '${JVB_PORT:-10000}:${JVB_PORT:-10000}/udp'
|
|
# - '127.0.0.1:${JVB_COLIBRI_PORT:-8080}:8080'
|
|
# volumes:
|
|
# - ${CONFIG}/jvb:/config:Z
|
|
# depends_on:
|
|
# - prosody
|
|
# environment:
|
|
# - DOCKER_HOST_ADDRESS=${LOCAL_IP}
|
|
# - XMPP_SERVER
|
|
# - XMPP_AUTH_DOMAIN
|
|
# - XMPP_INTERNAL_MUC_DOMAIN
|
|
# - JVB_BREWERY_MUC
|
|
# - JVB_AUTH_USER
|
|
# - JVB_STUN_SERVERS=meet-jit-si-turnrelay.jitsi.net:443
|
|
# - JVB_PORT
|
|
# networks:
|
|
# meet.jitsi:
|
|
# aliases:
|
|
# - jvb.meet.jitsi
|
|
|
|
db:
|
|
profiles: ["prod", "dev"]
|
|
<<: *logging
|
|
image: mariadb
|
|
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --skip-innodb-read-only-compressed
|
|
environment:
|
|
- MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
|
|
- MYSQL_USER=${DB_USER}
|
|
- MYSQL_PASSWORD=${DB_PASSWORD}
|
|
volumes:
|
|
- db:/var/lib/mysql
|
|
- ./db/init:/docker-entrypoint-initdb.d
|
|
restart: always
|
|
networks:
|
|
- db
|
|
|
|
redis:
|
|
profiles: ["prod", "dev"]
|
|
<<: *logging
|
|
image: redis:alpine
|
|
restart: always
|
|
networks:
|
|
- redis
|
|
|
|
mongodb:
|
|
profiles: ["prod", "dev"]
|
|
image: mongo
|
|
restart: always
|
|
volumes:
|
|
- mongodb:/data/db
|
|
command: mongod
|
|
networks:
|
|
- db
|
|
environment:
|
|
- MONGO_INITDB_ROOT_USERNAME=${DB_USER}
|
|
- MONGO_INITDB_ROOT_PASSWORD=${DB_PASSWORD}
|
|
<<: *logging
|
|
|
|
nginx:
|
|
<<: *logging
|
|
profiles: ["prod", "dev"]
|
|
image: nginxproxy/nginx-proxy
|
|
restart: always
|
|
ports:
|
|
- "80:80"
|
|
- "443:443"
|
|
volumes:
|
|
- /var/run/docker.sock:/tmp/docker.sock:ro
|
|
- /opt/ssl:/etc/nginx/certs:ro
|
|
- ./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
|
|
- ./nginx/conf.d/custom_proxy.conf:/etc/nginx/conf.d/custom_proxy.conf:ro
|
|
- nextcloud:/var/www/html/nextcloud:ro
|
|
- ./christmas:/var/www/html/christmas:ro
|
|
networks:
|
|
- nginx
|
|
|
|
certs:
|
|
profiles: ["dev"]
|
|
image: paulczar/omgwtfssl
|
|
restart: "no"
|
|
volumes:
|
|
- /opt/ssl:/certs
|
|
environment:
|
|
- SSL_SUBJECT=${DOMAIN}
|
|
- CA_SUBJECT=chris@${DOMAIN}
|
|
- SSL_KEY=/certs/${DOMAIN}.key
|
|
- SSL_CSR=/certs/${DOMAIN}.csr
|
|
- SSL_CERT=/certs/${DOMAIN}.crt
|
|
|
|
volumes:
|
|
db:
|
|
gitea:
|
|
nextcloud:
|
|
foundry:
|
|
minecraft:
|
|
change:
|
|
mongodb:
|
|
searxng:
|
|
|
|
networks:
|
|
db:
|
|
nginx:
|
|
redis:
|
|
meet.jitsi:
|
|
|