Files
nas-compose/bootstrap.docker-compose.yml
2023-01-03 14:39:35 +01:00

102 lines
2.4 KiB
YAML

name: Bootstrap
services:
# TODO: Authenticate the services that can talk to docker
docker:
image: alpine/socat
command: tcp-listen:2375,fork,reuseaddr unix-connect:/var/run/docker.sock
networks:
- docker
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
labels:
nas-compose.boostrap: true
# TODO: Sort out authentication method for all services (SSO). Authelia?
traefik:
image: traefik
ports:
- 8080:80
- 8443:443
networks:
- traefik
- docker
# TODO: Move to configs?
volumes:
- traefik_dynamic_config:/etc/traefik/dynamic/:ro
configs:
- source: traefik_config
target: /etc/traefik/traefik.yml
secrets:
- traefik_password # TODO: Replace with SSO
- traefik_tls_cert
- traefik_tls_key
depends_on:
- docker
restart: unless-stopped
labels:
nas-compose.boostrap: true
portainer:
image: portainer/portainer-ce
command: >
--host tcp://docker:2375
--hide-label nas-compose.boostrap=true
--admin-password-file /run/secrets/portainer_password
networks:
- docker
- traefik
volumes:
- portainer_data:/data/
secrets:
- portainer_password
depends_on:
- docker
restart: unless-stopped
labels:
nas-compose.boostrap: true
traefik.enable: true
traefik.http.services.portainer.loadbalancer.server.port: 9443
traefik.http.services.portainer.loadbalancer.server.scheme: https
networks:
docker:
name: docker
labels:
nas-compose.boostrap: true
traefik:
name: traefik
labels:
nas-compose.boostrap: true
volumes:
portainer_data:
driver_opts:
type: none
o: bind
device: ${SERVICES_DIR?}/portainer/volumes/data/
labels:
nas-compose.boostrap: true
traefik_dynamic_config:
driver_opts:
type: none
o: bind
device: ${SERVICES_DIR?}/traefik/volumes/config/
labels:
nas-compose.boostrap: true
configs:
traefik_config:
file: ${SERVICES_DIR?}/traefik/configs/traefik.yml
secrets:
traefik_password:
file: ${SERVICES_DIR?}/traefik/secrets/htpasswd
traefik_tls_cert:
file: ${SERVICES_DIR?}/traefik/secrets/traefik.cert
traefik_tls_key:
file: ${SERVICES_DIR?}/traefik/secrets/traefik.key
portainer_password:
file: ${SERVICES_DIR?}/portainer/secrets/portainer_password