399 lines
9.7 KiB
YAML
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
|