Files
docker-services/compose.yml

399 lines
9.7 KiB
YAML

services:
watchtower: # Watchtower (automatically updates base images)
container_name: watchtower
image: containrrr/watchtower:latest
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- service_network
portainer: # Portainer (visualizes docker stack)
container_name: portainer
image: portainer/portainer-ce:latest
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data/portainer:/data
networks:
- service_network
expose:
- 9000
node-exporter: # Node Exporter (collects metrics from the host)
container_name: node-exporter
image: quay.io/prometheus/node-exporter:latest
restart: always
command:
- --path.rootfs=/host
pid: host
volumes:
- /:/host:ro,rslave
networks:
- info_network
expose:
- 9100
cadvisor: # cAdvisor (collects metrics from docker)
container_name: cadvisor
image: gcr.io/cadvisor/cadvisor:latest
restart: always
command:
- --housekeeping_interval=30s
- --disable_metrics=disk,diskIO,tcp,udp,percpu,sched,process,referenced_memory # lower CPU usage
- --docker_only=true
cap_add:
- SYS_PTRACE
devices:
- /dev/kmsg
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker:/var/lib/docker:ro
- /dev/disk:/dev/disk:ro
networks:
- info_network
expose:
- 8080
prometheus: # Prometheus (collects logs & metrics)
container_name: prometheus
image: prom/prometheus:latest
restart: unless-stopped
command:
- --config.file=/config/prometheus.yml
user: 1001:0
volumes:
- ./data/prometheus/config:/config
- ./data/prometheus/data:/prometheus
networks:
- service_network
- info_network
expose:
- 9090
grafana: # Grafana (visualizes Prometheus logs & metrics)
container_name: grafana
image: grafana/grafana-oss:latest
restart: unless-stopped
user: 1001:0
volumes:
- ./data/grafana:/var/lib/grafana
networks:
- service_network
expose:
- 3000
npm: # Nginx Proxy Manager (handles proxies)
container_name: npm
image: jc21/nginx-proxy-manager:latest
restart: always
env_file: ./env/npm.env
volumes:
- ./data/npm:/data
- ./data/letsencrypt:/etc/letsencrypt
networks:
- service_network
- hidden_network
ports:
- 80:80
- 81:81
- 443:443
nextcloud: # Nextcloud (hosts file server)
container_name: nextcloud
build: ./provision/nextcloud
restart: unless-stopped
user: 1001:0
env_file: ./env/nextcloud.env
volumes:
- ./data/nextcloud:/var/www/html
- $LARGE_STORAGE_DIR/nextcloud:/var/www/html/data
networks:
- service_network
- nextcloud_network
expose:
- 80
depends_on:
- nextcloud-db
- nextcloud-cache
nextcloud-db:
container_name: nextcloud-db
image: mariadb:10.6
restart: always
command:
- --transaction-isolation=READ-COMMITTED
- --log-bin=binlog
- --binlog-format=ROW
env_file: ./env/nextcloud-db.env
volumes:
- ./data/nextcloud-db:/var/lib/mysql
networks:
- nextcloud_network
nextcloud-cache:
container_name: nextcloud-cache
image: redis:alpine
restart: always
networks:
- nextcloud_network
pterodactyl: # Pterodactyl (hosts game servers)
container_name: pterodactyl
image: ghcr.io/pterodactyl/panel:latest
restart: unless-stopped
env_file: ./env/pterodactyl.env
volumes:
- ./data/pterodactyl:/app/var
networks:
- service_network
- pterodactyl_network
expose:
- 80
depends_on:
- pterodactyl-db
- pterodactyl-cache
pterodactyl-db:
container_name: pterodactyl-db
image: mariadb:10.5
restart: always
command:
- --default-authentication-plugin=mysql_native_password
env_file: ./env/pterodactyl-db.env
volumes:
- ./data/pterodactyl-db:/var/lib/mysql
networks:
- pterodactyl_network
pterodactyl-cache:
container_name: pterodactyl-cache
image: redis:alpine
restart: always
networks:
- pterodactyl_network
photoprism: # Photoprism (manages photo and video library)
container_name: photoprism
image: photoprism/photoprism:latest
restart: unless-stopped
env_file: ./env/photoprism.env
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
devices:
- /dev/dri/card0:/dev/dri/card0
- /dev/dri/renderD128:/dev/dri/renderD128
working_dir: /photoprism
volumes:
- ./data/photoprism:/photoprism/storage
- $LARGE_STORAGE_DIR/photoprism/import:/photoprism/import
- $LARGE_STORAGE_DIR/photoprism/originals:/photoprism/originals
networks:
- service_network
- photoprism_network
expose:
- 2342
depends_on:
- photoprism-db
photoprism-db:
container_name: photoprism-db
image: mariadb:10.10
restart: always
command:
- --innodb-buffer-pool-size=512M
- --transaction-isolation=READ-COMMITTED
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --max-connections=512
- --innodb-rollback-on-timeout=OFF
- --innodb-lock-wait-timeout=120
env_file: ./env/photoprism-db.env
volumes:
- ./data/photoprism-db:/var/lib/mysql
networks:
- photoprism_network
jellyfin: # Jellyfin (manages movies, shows, & books)
container_name: jellyfin
image: jellyfin/jellyfin:latest
restart: unless-stopped
user: 1001:0
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
devices:
- /dev/dri/card0:/dev/dri/card0
- /dev/dri/renderD128:/dev/dri/renderD128
volumes:
- ./data/jellyfin/config:/config
- ./data/jellyfin/cache:/cache
- $LARGE_STORAGE_DIR/media/movies:/movies
- $LARGE_STORAGE_DIR/media/shows:/shows
- $LARGE_STORAGE_DIR/media/books:/books
- $LARGE_STORAGE_DIR/media/yt:/yt
networks:
service_network:
exposed_service_network:
ipv4_address: 192.168.1.104
gitea: # Gitea (hosts git server)
container_name: gitea
image: gitea/gitea:latest
restart: unless-stopped
env_file: ./env/gitea.env
volumes:
- $LARGE_STORAGE_DIR/gitea:/data
networks:
- service_network
- gitea_network
expose:
- 3000
depends_on:
- gitea-db
gitea-db:
container_name: gitea-db
image: mysql:8
restart: always
env_file: ./env/gitea-db.env
volumes:
- ./data/gitea-db:/var/lib/mysql
networks:
- gitea_network
homer: # Homer (displays all self-hosted services)
container_name: homer
image: b4bz/homer:latest
restart: unless-stopped
user: 1001:0
env_file: ./env/homer.env
volumes:
- ./data/homer:/www/assets
networks:
- service_network
expose:
- 8080
uptime-kuma: # Uptime Kuma (displays uptime for all self-hosted services)
container_name: uptime-kuma
image: louislam/uptime-kuma:latest
restart: unless-stopped
tty: true
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data/uptime-kuma:/app/data
networks:
- service_network
expose:
- 3001
firefly: # Firefly III (tracks finances)
container_name: firefly
image: fireflyiii/core:latest
restart: unless-stopped
env_file: ./env/firefly.env
networks:
- service_network
- firefly_network
expose:
- 8080
depends_on:
- firefly-db
firefly-db:
container_name: firefly-db
image: mariadb:latest
restart: always
env_file: ./env/firefly-db.env
volumes:
- ./data/firefly-db:/var/lib/mysql
networks:
- firefly_network
demo-db:
container_name: demo-db
image: mariadb:latest
restart: always
env_file: ./env/demo-db.env
volumes:
- ./data/demo-db:/var/lib/mysql
networks:
- service_network
ports:
- 3000:3306
project-me-db:
container_name: project-me-db
image: mariadb:latest
restart: always
env_file: ./env/project-me-db.env
volumes:
- ./data/project-me-db:/var/lib/mysql
networks:
- project_me_network
project-me-frontend: # Project Me (displays personal portfolio)
container_name: project-me-frontend
image: ghcr.io/cobypowers/project-me-frontend:release
restart: unless-stopped
networks:
- service_network
- project_me_network
expose:
- 3000
project-me-backend: # Project Me (handles database connections)
container_name: project-me-backend
image: ghcr.io/cobypowers/project-me-backend:release
restart: unless-stopped
env_file: ./env/project-me-backend.env
networks:
- service_network
- project_me_network
expose:
- 4000
depends_on:
- project-me-db
networks:
info_network:
name: info_network
nextcloud_network:
name: nextcloud_network
pterodactyl_network:
name: pterodactyl_network
photoprism_network:
name: photoprism_network
gitea_network:
name: gitea_network
firefly_network:
name: firefly_network
project_me_network:
name: project_me_network
hidden_network:
name: hidden_network
external: true
service_network:
name: service_network
ipam:
config:
- subnet: 172.1.0.0/24
gateway: 172.1.0.1
exposed_service_network:
name: exposed_service_network
driver: macvlan
driver_opts:
parent: enp5s0
ipam:
config:
- subnet: 192.168.1.0/24
gateway: 192.168.1.1