From 0b35381ed0d48c307195940ac91f63119402c715 Mon Sep 17 00:00:00 2001 From: Bram Veenboer Date: Sat, 1 Jun 2024 10:21:43 +0200 Subject: [PATCH] Apply yamllint formatting --- .yamllint | 7 + docker-compose.yml | 429 +++++++++++++++++++++++---------------------- 2 files changed, 222 insertions(+), 214 deletions(-) create mode 100644 .yamllint diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000..9d028c7 --- /dev/null +++ b/.yamllint @@ -0,0 +1,7 @@ +extends: default + +rules: + line-length: + max: 200 + level: warning + comments: disable \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index e11a270..2e7ef22 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,3 +1,4 @@ +--- services: # # official @@ -6,28 +7,28 @@ services: image: nginx:1.25.4 # official, linuxserver/nginx container_name: nginx extra_hosts: - - "host:192.168.2.150" + - "host:192.168.2.150" volumes: - - /opt/nginx/etc/nginx/conf:/etc/nginx/conf - - /opt/nginx/etc/nginx/conf.d:/etc/nginx/conf.d - - /opt/nginx/etc/nginx/nginx.conf:/etc/nginx/nginx.conf - - /opt/nginx/var/log/nginx:/var/log/nginx + - /opt/nginx/etc/nginx/conf:/etc/nginx/conf + - /opt/nginx/etc/nginx/conf.d:/etc/nginx/conf.d + - /opt/nginx/etc/nginx/nginx.conf:/etc/nginx/nginx.conf + - /opt/nginx/var/log/nginx:/var/log/nginx restart: unless-stopped filebrowser: image: filebrowser/filebrowser:v2.28.0 # official, no linuxserver image container_name: filebrowser volumes: - - /opt/filebrowser/.filebrowser.json:/.filebrowser.json - - /opt/filebrowser/database.db:/database.db - - /media:/srv/host/media + - /opt/filebrowser/.filebrowser.json:/.filebrowser.json + - /opt/filebrowser/database.db:/database.db + - /media:/srv/host/media ports: - - 8001:80 + - 8001:80 homeassistant: container_name: homeassistant image: homeassistant/home-assistant:2024.4.3 volumes: - - /opt/homeassistant:/config - - /etc/localtime:/etc/localtime:ro + - /opt/homeassistant:/config + - /etc/localtime:/etc/localtime:ro restart: unless-stopped privileged: true network_mode: host @@ -35,50 +36,50 @@ services: image: photoprism/photoprism:231128 # official container_name: photoprism ports: - - 2342:2342 + - 2342:2342 environment: - - PHOTOPRISM_ADMIN_PASSWORD=insecure # INITIAL PASSWORD FOR admin USER, MINIMUM 8 CHARACTERS - - PHOTOPRISM_AUTH_MODE=password # authentication mode (public, password) - - PHOTOPRISM_SITE_URL=https://photoprism.bram.veenboer.xyz/ # public server URL incl http:// or https:// and /path, :port is optional - - PHOTOPRISM_ORIGINALS_LIMIT=5000 # file size limit for originals in MB (increase for high-res video) - - PHOTOPRISM_HTTP_COMPRESSION=gzip # improves transfer speed and bandwidth utilization (none or gzip) - - PHOTOPRISM_LOG_LEVEL=info # log level=trace, debug, info, warning, error, fatal, or panic - - PHOTOPRISM_READONLY=true # do not modify originals directory (reduced functionality) - - PHOTOPRISM_EXPERIMENTAL=false # enables experimental features - - PHOTOPRISM_DISABLE_CHOWN=true # disables updating storage permissions via chmod and chown on startup - - PHOTOPRISM_DISABLE_WEBDAV=true # disables built-in WebDAV server - - PHOTOPRISM_DISABLE_SETTINGS=false # disables settings UI and API - - PHOTOPRISM_DISABLE_TENSORFLOW=false # disables all features depending on TensorFlow - - PHOTOPRISM_DISABLE_FACES=false # disables face detection and recognition (requires TensorFlow) - - PHOTOPRISM_DISABLE_CLASSIFICATION=false # disables image classification (requires TensorFlow) - - PHOTOPRISM_DISABLE_RAW=true # disables indexing and conversion of RAW files - - PHOTOPRISM_RAW_PRESETS=false # enables applying user presets when converting RAW files (reduces performance) - - PHOTOPRISM_JPEG_QUALITY=85 # a higher value increases the quality and file size of JPEG images and thumbnails (25-100) - - PHOTOPRISM_DETECT_NSFW=false # automatically flags photos as private that MAY be offensive (requires TensorFlow) - - PHOTOPRISM_UPLOAD_NSFW=true # allows uploads that MAY be offensive (no effect without TensorFlow) - - PHOTOPRISM_DATABASE_DRIVER=sqlite # SQLite is an embedded database that doesn't require a server - - PHOTOPRISM_UID=1000 - - PHOTOPRISM_GID=1000 + - PHOTOPRISM_ADMIN_PASSWORD=insecure # INITIAL PASSWORD FOR admin USER, MINIMUM 8 CHARACTERS + - PHOTOPRISM_AUTH_MODE=password # authentication mode (public, password) + - PHOTOPRISM_SITE_URL=https://photoprism.bram.veenboer.xyz/ # public server URL incl http:// or https:// and /path, :port is optional + - PHOTOPRISM_ORIGINALS_LIMIT=5000 # file size limit for originals in MB (increase for high-res video) + - PHOTOPRISM_HTTP_COMPRESSION=gzip # improves transfer speed and bandwidth utilization (none or gzip) + - PHOTOPRISM_LOG_LEVEL=info # log level=trace, debug, info, warning, error, fatal, or panic + - PHOTOPRISM_READONLY=true # do not modify originals directory (reduced functionality) + - PHOTOPRISM_EXPERIMENTAL=false # enables experimental features + - PHOTOPRISM_DISABLE_CHOWN=true # disables updating storage permissions via chmod and chown on startup + - PHOTOPRISM_DISABLE_WEBDAV=true # disables built-in WebDAV server + - PHOTOPRISM_DISABLE_SETTINGS=false # disables settings UI and API + - PHOTOPRISM_DISABLE_TENSORFLOW=false # disables all features depending on TensorFlow + - PHOTOPRISM_DISABLE_FACES=false # disables face detection and recognition (requires TensorFlow) + - PHOTOPRISM_DISABLE_CLASSIFICATION=false # disables image classification (requires TensorFlow) + - PHOTOPRISM_DISABLE_RAW=true # disables indexing and conversion of RAW files + - PHOTOPRISM_RAW_PRESETS=false # enables applying user presets when converting RAW files (reduces performance) + - PHOTOPRISM_JPEG_QUALITY=85 # a higher value increases the quality and file size of JPEG images and thumbnails (25-100) + - PHOTOPRISM_DETECT_NSFW=false # automatically flags photos as private that MAY be offensive (requires TensorFlow) + - PHOTOPRISM_UPLOAD_NSFW=true # allows uploads that MAY be offensive (no effect without TensorFlow) + - PHOTOPRISM_DATABASE_DRIVER=sqlite # SQLite is an embedded database that doesn't require a server + - PHOTOPRISM_UID=1000 + - PHOTOPRISM_GID=1000 devices: - - /dev/dri:/dev/dri # Intel QSV + - /dev/dri:/dev/dri # Intel QSV security_opt: - - seccomp:unconfined - - apparmor:unconfined + - seccomp:unconfined + - apparmor:unconfined volumes: - - /opt/photoprism:/photoprism/storage - - /media/scratch/photoprism/cache:/photoprism/storage/cache - - /opt/photoprism/originals:/photoprism/originals/ - - /media/helios/Photographs/Vakantie:/photoprism/originals/Vakantie - - /media/helios/Photographs/Plaatsen:/photoprism/originals/Plaatsen + - /opt/photoprism:/photoprism/storage + - /media/scratch/photoprism/cache:/photoprism/storage/cache + - /opt/photoprism/originals:/photoprism/originals/ + - /media/helios/Photographs/Vakantie:/photoprism/originals/Vakantie + - /media/helios/Photographs/Plaatsen:/photoprism/originals/Plaatsen restart: unless-stopped influxdb: # admin:password image: influxdb:2.3.0 # official container_name: influxdb restart: unless-stopped volumes: - - /opt/influxdb:/var/lib/influxdb2 + - /opt/influxdb:/var/lib/influxdb2 ports: - - 8086:8086 + - 8086:8086 # # Linux Server images # @@ -86,209 +87,209 @@ services: image: linuxserver/rsnapshot:1.4.5 container_name: rsnapshot volumes: - - /opt/rsnapshot/etc:/etc/rsnapshot - - /opt/rsnapshot/var/log:/var/log - - /opt/rsnapshot/var/run:/var/run - - /opt/rsnapshot/var/spool:/var/spool - - /opt/rsnapshot/usr:/host/usr - - /opt/host_aliases:/host/etc/host_aliases - - /media/jupiter/rsnapshot:/host/scratch - - /root/.ssh:/root/.ssh + - /opt/rsnapshot/etc:/etc/rsnapshot + - /opt/rsnapshot/var/log:/var/log + - /opt/rsnapshot/var/run:/var/run + - /opt/rsnapshot/var/spool:/var/spool + - /opt/rsnapshot/usr:/host/usr + - /opt/host_aliases:/host/etc/host_aliases + - /media/jupiter/rsnapshot:/host/scratch + - /root/.ssh:/root/.ssh restart: unless-stopped facette: image: facette/facette:0.5.1 container_name: facette volumes: - - /opt/facette/etc:/etc/facette #RO - - /opt/facette/var:/var/lib/facette #RW - - /opt/collectd/var:/var/lib/collectd #RO - - /media/scratch/collectd/shuttle/rrd/server:/var/lib/collectd/rrd/shuttle #RO - - /media/scratch/collectd/sepia/rrd/sepia:/var/lib/collectd/rrd/sepia #RO - - /media/scratch/collectd/kratos/rrd/kratos:/var/lib/collectd/rrd/kratos #RO + - /opt/facette/etc:/etc/facette #RO + - /opt/facette/var:/var/lib/facette #RW + - /opt/collectd/var:/var/lib/collectd #RO + - /media/scratch/collectd/shuttle/rrd/server:/var/lib/collectd/rrd/shuttle #RO + - /media/scratch/collectd/sepia/rrd/sepia:/var/lib/collectd/rrd/sepia #RO + - /media/scratch/collectd/kratos/rrd/kratos:/var/lib/collectd/rrd/kratos #RO ports: - - 12003:12003 + - 12003:12003 restart: unless-stopped jellyfin: image: linuxserver/jellyfin:10.9.3 container_name: jellyfin volumes: - - /opt/jellyfin/config:/config - - /media/neptune/Video/Movies:/host/srv/movies - - /media/neptune/Video/Shows:/host/srv/shows - - /media/helios/Bram/Music:/host/srv/music/bram - - /media/neptune/Music/Albums:/host/srv/music/albums - - /media/scratch/jellyfin/transcoding-temp/config/data/transcoding-temp - - /media/scratch/jellyfin/transcodes:/config/data/trancodes - - /media/scratch/jellyfin/metadata:/config/data/metadata + - /opt/jellyfin/config:/config + - /media/neptune/Video/Movies:/host/srv/movies + - /media/neptune/Video/Shows:/host/srv/shows + - /media/helios/Bram/Music:/host/srv/music/bram + - /media/neptune/Music/Albums:/host/srv/music/albums + - /media/scratch/jellyfin/transcoding-temp/config/data/transcoding-temp + - /media/scratch/jellyfin/transcodes:/config/data/trancodes + - /media/scratch/jellyfin/metadata:/config/data/metadata ports: - - 8097:8097 + - 8097:8097 devices: - - /dev/dri/renderD128:/dev/dri/renderD128 + - /dev/dri/renderD128:/dev/dri/renderD128 restart: unless-stopped lidarr: image: linuxserver/lidarr:2.2.5.4141-ls165 container_name: lidarr external_links: - - transmission + - transmission volumes: - - /opt/lidarr:/config - - /media/nubes/downloads:/downloads - - /media/neptune/Music/Albums:/music - - /media/nubes/music:/stage - - /media/scratch/lidarr/MediaCover:/config/MediaCover + - /opt/lidarr:/config + - /media/nubes/downloads:/downloads + - /media/neptune/Music/Albums:/music + - /media/nubes/music:/stage + - /media/scratch/lidarr/MediaCover:/config/MediaCover ports: - - 18686:8686 + - 18686:8686 extra_hosts: - - "transmission:192.168.2.150" + - "transmission:192.168.2.150" restart: unless-stopped environment: - - PUID=1000 - - PGID=1000 - - TZ=Europe/Amsterdam + - PUID=1000 + - PGID=1000 + - TZ=Europe/Amsterdam sonarr: image: linuxserver/sonarr:4.0.4.1491-ls236 container_name: sonarr external_links: - - transmission + - transmission volumes: - - /opt/sonarr:/config - - /media/nubes/downloads:/downloads - - /media/neptune/Video/Shows:/tv + - /opt/sonarr:/config + - /media/nubes/downloads:/downloads + - /media/neptune/Video/Shows:/tv ports: - - 18989:8989 + - 18989:8989 extra_hosts: - - "transmission:192.168.2.150" + - "transmission:192.168.2.150" restart: unless-stopped environment: - - PUID=1000 - - PGID=1000 - - TZ=Europe/Amsterdam + - PUID=1000 + - PGID=1000 + - TZ=Europe/Amsterdam radarr: image: linuxserver/radarr:5.4.6.8723-ls213 container_name: radarr external_links: - - transmission + - transmission volumes: - - /opt/radarr:/config - - /media/nubes/downloads:/downloads - - /media/neptune/Video/Movies:/movies + - /opt/radarr:/config + - /media/nubes/downloads:/downloads + - /media/neptune/Video/Movies:/movies ports: - - 17878:7878 + - 17878:7878 extra_hosts: - - "transmission:192.168.2.150" + - "transmission:192.168.2.150" restart: unless-stopped environment: - - PUID=1000 - - PGID=1000 - - TZ=Europe/Amsterdam + - PUID=1000 + - PGID=1000 + - TZ=Europe/Amsterdam bazarr: - image: linuxserver/bazarr:v1.4.2-ls246 - container_name: bazarr - volumes: - - /opt/bazarr/config:/config - - /media/neptune/Video/Movies:/movies - - /media/neptune/Video/Shows:/tv - ports: - - 16767:6767 - restart: unless-stopped - environment: - - PUID=1000 - - PGID=1000 - - TZ=Etc/UTC + image: linuxserver/bazarr:v1.4.2-ls246 + container_name: bazarr + volumes: + - /opt/bazarr/config:/config + - /media/neptune/Video/Movies:/movies + - /media/neptune/Video/Shows:/tv + ports: + - 16767:6767 + restart: unless-stopped + environment: + - PUID=1000 + - PGID=1000 + - TZ=Etc/UTC jackett: image: linuxserver/jackett:v0.21.2371-ls368 container_name: jackett external_links: - - transmission + - transmission volumes: - - /opt/jackett:/config - - /media/nubes/downloads:/downloads + - /opt/jackett:/config + - /media/nubes/downloads:/downloads ports: - - 9117:9117 + - 9117:9117 restart: unless-stopped environment: - - PUID=1000 - - PGID=1000 - - TZ=Europe/Amsterdam + - PUID=1000 + - PGID=1000 + - TZ=Europe/Amsterdam transmission: image: linuxserver/transmission:4.0.5-r0-ls229 container_name: transmission volumes: - - /opt/transmission:/config - - /media/nubes/torrents:/watch - - /media/nubes/downloads:/downloads + - /opt/transmission:/config + - /media/nubes/torrents:/watch + - /media/nubes/downloads:/downloads environment: - - PUID=1000 - - PGID=1000 + - PUID=1000 + - PGID=1000 network_mode: service:surfshark depends_on: - - surfshark + - surfshark restart: unless-stopped openvpn-server: # custom, no linuxserver image image: kylemanna/openvpn:2.4 container_name: openvpn-server privileged: true extra_hosts: - - "host:192.168.2.150" + - "host:192.168.2.150" ports: - - 443:443 + - 443:443 cap_add: - - NET_ADMIN + - NET_ADMIN volumes: - - /opt/openvpn-server:/etc/openvpn - - /opt/openvpn-server/logrotate.d/openvpn:/etc/logrotate.d/openvpn + - /opt/openvpn-server:/etc/openvpn + - /opt/openvpn-server/logrotate.d/openvpn:/etc/logrotate.d/openvpn network_mode: bridge restart: unless-stopped caddy: - image: caddy - container_name: caddy - build: - context: /opt/caddy/ - ports: - - 444:443 - volumes: - - /opt/caddy/Caddyfile:/etc/caddy/Caddyfile - - /opt/caddy/data:/data - environment: - - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:?} - - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:?} - restart: unless-stopped - depends_on: - - nginx - links: - - nginx + image: caddy + container_name: caddy + build: + context: /opt/caddy/ + ports: + - 444:443 + volumes: + - /opt/caddy/Caddyfile:/etc/caddy/Caddyfile + - /opt/caddy/data:/data + environment: + - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:?} + - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:?} + restart: unless-stopped + depends_on: + - nginx + links: + - nginx borgmatic: image: b3vis/borgmatic:1.8.9 # custom, no linuxserver image container_name: borgmatic volumes: - - /media:/media - - /:/host - - /root/.ssh:/root/.ssh - - /opt/borgmatic/config/crontab.txt:/etc/borgmatic.d/crontab.txt - - /opt/borgmatic/config:/config - - /opt/borgmatic/keys:/keys - - /opt/borgmatic/cache:/cache - - /opt/borgmatic/log:/log + - /media:/media + - /:/host + - /root/.ssh:/root/.ssh + - /opt/borgmatic/config/crontab.txt:/etc/borgmatic.d/crontab.txt + - /opt/borgmatic/config:/config + - /opt/borgmatic/keys:/keys + - /opt/borgmatic/cache:/cache + - /opt/borgmatic/log:/log restart: unless-stopped environment: - - TZ=Europe/Amsterdam + - TZ=Europe/Amsterdam cap_add: - - sys_admin + - sys_admin privileged: true # for NFS mount seafile: - image: gronis/seafile:10.0.1 - container_name: seafile - restart: unless-stopped - volumes: - - /opt/seafile:/seafile:rw - - /media/seafile:/seafile/seafile-data:rw - ports: - - 8100:8000 - - 8180:8080 - - 8182:8082 - environment: - - MODE=autorun - #- MODE=maintenance + image: gronis/seafile:10.0.1 + container_name: seafile + restart: unless-stopped + volumes: + - /opt/seafile:/seafile:rw + - /media/seafile:/seafile/seafile-data:rw + ports: + - 8100:8000 + - 8180:8080 + - 8182:8082 + environment: + - MODE=autorun + #- MODE=maintenance esphome: image: esphome/esphome:2022.12.8 container_name: esphome @@ -332,23 +333,23 @@ services: image: rootgg/plik:1.3.8 # custom, no linuxserver image container_name: plik ports: - - 8087:8080 + - 8087:8080 volumes: - - /opt/plik/plikd.cfg:/home/plik/server/plikd.cfg - - /opt/plik/files:/home/plik/server/files + - /opt/plik/plikd.cfg:/home/plik/server/plikd.cfg + - /opt/plik/files:/home/plik/server/files restart: unless-stopped dns-ad-blocker: image: oznu/dns-ad-blocker:latest # custom, no linuxserver image, no version container_name: dns-ad-blocker ports: - - "192.168.2.151:53:53/udp" + - "192.168.2.151:53:53/udp" environment: - - AUTO_UPDATE=1 - - BRANCH=master - - DNSCRYPT=1 - - DNSCRYPT_PROVIDER_NAME=2.dnscrypt-cert.ns0.dnscrypt.nl - - DNSCRYPT_RESOLVER_ADDR=45.76.35.212 - - DNSCRYPT_PROVIDER_KEY=4C84:FB8C:0511:5DFA:5F97:C5ED:0329:1370:C78A:BCD6:4E15:DD53:AB08:DE72:FB84:4ACA + - AUTO_UPDATE=1 + - BRANCH=master + - DNSCRYPT=1 + - DNSCRYPT_PROVIDER_NAME=2.dnscrypt-cert.ns0.dnscrypt.nl + - DNSCRYPT_RESOLVER_ADDR=45.76.35.212 + - DNSCRYPT_PROVIDER_KEY=4C84:FB8C:0511:5DFA:5F97:C5ED:0329:1370:C78A:BCD6:4E15:DD53:AB08:DE72:FB84:4ACA restart: unless-stopped ghost: #image: ghost:5.45.1 # TODO: needs database migration @@ -356,19 +357,19 @@ services: container_name: ghost restart: unless-stopped volumes: - - /opt/ghost/content:/var/lib/ghost/content - - /opt/ghost/etc/config.production.json:/var/lib/ghost/config.production.json + - /opt/ghost/content:/var/lib/ghost/content + - /opt/ghost/etc/config.production.json:/var/lib/ghost/config.production.json ports: - - 2368:2368 + - 2368:2368 lighttpd: image: sebp/lighttpd:1.4.64-r0 # custom, no linuxserver image container_name: lighttpd ports: - - 80:81 + - 80:81 volumes: - - /opt/lighttpd/etc:/host/etc - - /opt/lighttpd/var/log:/host/var/log - - /media/nubes/www:/host/var/www + - /opt/lighttpd/etc:/host/etc + - /opt/lighttpd/var/log:/host/var/log + - /media/nubes/www:/host/var/www tty: true restart: unless-stopped # @@ -382,15 +383,15 @@ services: container_name: collectd privileged: true volumes: - - /opt/collectd/etc:/etc/collectd - - /opt/collectd/var:/var/lib/collectd - - /opt/collectd/usr:/host/usr - - /:/host/root - - /media:/host/media - - /media/jupiter/borg:/host/media/borg - - /media/jupiter/rsnapshot:/host/media/rsnapshot - - /var/lib/docker:/media/docker - - /dev/mapper:/dev/mapper + - /opt/collectd/etc:/etc/collectd + - /opt/collectd/var:/var/lib/collectd + - /opt/collectd/usr:/host/usr + - /:/host/root + - /media:/host/media + - /media/jupiter/borg:/host/media/borg + - /media/jupiter/rsnapshot:/host/media/rsnapshot + - /var/lib/docker:/media/docker + - /dev/mapper:/dev/mapper restart: unless-stopped # # IoT @@ -400,43 +401,43 @@ services: container_name: dsmrdb restart: unless-stopped volumes: - - /opt/dsmr/data:/var/lib/postgresql/data + - /opt/dsmr/data:/var/lib/postgresql/data environment: - - POSTGRES_USER=dsmrreader - - POSTGRES_PASSWORD=dsmrreader - - POSTGRES_DB=dsmrreader - - 5432:5432 + - POSTGRES_USER=dsmrreader + - POSTGRES_PASSWORD=dsmrreader + - POSTGRES_DB=dsmrreader + - 5432:5432 dsmr: image: xirixiz/dsmr-reader-docker:5.11.0-2024.02.04 container_name: dsmr restart: unless-stopped depends_on: - - dsmrdb + - dsmrdb links: - - dsmrdb:dsmrreader + - dsmrdb:dsmrreader volumes: - - /opt/dsmr/backups:/home/dsmr/app/backups - - /dev:/dev + - /opt/dsmr/backups:/home/dsmr/app/backups + - /dev:/dev environment: - - DJANGO_DATABASE_HOST=dsmrdb - - DSMRREADER_ADMIN_USER=admin - - DSMRREADER_ADMIN_PASSWORD=password + - DJANGO_DATABASE_HOST=dsmrdb + - DSMRREADER_ADMIN_USER=admin + - DSMRREADER_ADMIN_PASSWORD=password ports: - - 8888:80 + - 8888:80 timescaledb: image: timescale/timescaledb:2.7.1-pg14 # official container_name: timescaledb volumes: - - /opt/timescaledb:/var/lib/postgresql/data + - /opt/timescaledb:/var/lib/postgresql/data ports: - - 6543:5432 + - 6543:5432 environment: - - POSTGRES_USER=timescaleuser - - POSTGRES_PASSWORD=timescalepwd + - POSTGRES_USER=timescaleuser + - POSTGRES_PASSWORD=timescalepwd grafana: image: grafana/grafana:10.4.2 # official container_name: grafana volumes: # admin:grafana - - /opt/grafana:/var/lib/grafana + - /opt/grafana:/var/lib/grafana ports: - - 3333:3000 + - 3333:3000