
===== HOST =====

Hostname:   esh-vm-docker.esteban.net
Date:       2026-04-20T14:28:06-07:00
Uptime:     up 2 weeks, 6 days, 22 hours, 11 minutes
OS:         Debian GNU/Linux 12 (bookworm)
Kernel:     6.1.0-41-amd64
Arch:       x86_64

===== HARDWARE =====

CPU cores:  16
CPU model:  QEMU Virtual CPU version 2.5+
MemTotal:   15.6 GB
MemAvailable: 11.4 GB

===== GPUS =====

nvidia-smi not present (no NVIDIA GPUs or driver not installed)

===== FILESYSTEMS (df) =====

Filesystem                 Size  Used Avail Use% Mounted on
/dev/sda1                  250G  122G  117G  52% /
10.0.50.50:/mnt/backup      92T   26G   92T   1% /mnt/backup
10.0.50.50:/mnt/compose    1.5T  4.1G  1.5T   1% /mnt/compose
10.0.50.50:/mnt/documents   92T     0   92T   0% /mnt/documents
10.0.50.50:/mnt/books       92T   96G   92T   1% /mnt/books

===== PERSISTENT MOUNTS (/etc/fstab, non-comment) =====

UUID=a2e1bc05-3afa-4803-9ab2-dfee1d5c9e6c /               ext4    errors=remount-ro 0       1
UUID=4f4fa84b-2b71-4ee5-9be4-2deb4c287d8e none            swap    sw              0       0
/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0
10.0.50.50:/mnt/compose /mnt/compose nfs defaults 0 0
10.0.50.50:/mnt/books /mnt/books nfs defaults 0 0
10.0.50.50:/mnt/documents /mnt/documents nfs defaults 0 0
10.0.50.50:/mnt/backup /mnt/backup nfs defaults 0 0

===== TARGETED DATA PATHS =====

/opt  (total: 62M)
  total 16
  drwxr-xr-x  4 root    root    4096 2025-03-18 23:59 .
  drwxr-xr-x 19 root    root    4096 2025-12-29 14:50 ..
  drwxr-xr-x  5 lkraven lkraven 4096 2025-03-18 23:58 docker
  drwxrwxrwx  6 lkraven lkraven 4096 2024-06-13 22:00 docker-bu

/opt/docker  (total: 53M)
  total 32
  drwxr-xr-x  5 lkraven lkraven 4096 2025-03-18 23:58 .
  drwxr-xr-x  4 root    root    4096 2025-03-18 23:59 ..
  drwxr-xr-x 18 lkraven lkraven 4096 2026-04-19 01:08 compose
  drwxr-xr-x  7 lkraven lkraven 4096 2025-11-29 00:26 conf
  drwxr-xr-x  8 lkraven lkraven 4096 2025-03-18 23:59 .git
  -rw-r--r--  1 lkraven lkraven   34 2025-03-18 23:58 .gitignore
  -rw-r--r--  1 lkraven lkraven 1059 2025-03-18 23:58 LICENSE
  -rw-r--r--  1 lkraven lkraven   60 2025-03-18 23:58 README.md

/opt/docker/compose  (total: 180K)
  total 76
  drwxr-xr-x 18 lkraven lkraven 4096 2026-04-19 01:08 .
  drwxr-xr-x  5 lkraven lkraven 4096 2025-03-18 23:58 ..
  drwxr-xr-x  2 lkraven lkraven 4096 2026-04-20 14:27 adguard
  drwxr-xr-x  2 root    root    4096 2026-04-19 01:07 beszel-esh-vm-docker
  drwxr-xr-x  2 lkraven lkraven 4096 2025-03-18 23:58 calibre
  drwxr-xr-x  2 lkraven lkraven 4096 2025-03-18 23:58 calibre-web
  drwxr-xr-x  2 root    root    4096 2025-10-03 22:01 cloudflare-ddns-esh
  drwxr-xr-x  2 lkraven lkraven 4096 2025-03-18 23:58 dockge
  drwxr-xr-x  2 root    root    4096 2026-04-19 00:30 dozzle-agent
  drwxr-xr-x  2 lkraven lkraven 4096 2025-03-18 23:58 drawio
  drwxr-xr-x  2 lkraven lkraven 4096 2025-03-18 23:58 esphome
  drwxr-xr-x  2 lkraven lkraven 4096 2025-08-31 17:39 homeassistant
  drwxr-xr-x  2 lkraven lkraven 4096 2025-05-19 22:10 homepage
  drwxr-xr-x  2 root    root    4096 2025-11-29 00:40 mosquitto
  drwxr-xr-x  2 lkraven lkraven 4096 2025-08-28 09:37 paperless-ngx
  drwxr-xr-x  2 lkraven lkraven 4096 2025-08-31 17:41 pgadmin
  -rw-r--r--  1 lkraven lkraven   25 2025-03-18 23:58 README.md
  drwxr-xr-x  2 lkraven lkraven 4096 2025-05-19 22:10 traefik
  drwxr-xr-x  2 lkraven lkraven 4096 2025-03-18 23:58 uptimekuma

/opt/docker/conf  (total: 50M)
  total 28
  drwxr-xr-x 7 lkraven lkraven 4096 2025-11-29 00:26 .
  drwxr-xr-x 5 lkraven lkraven 4096 2025-03-18 23:58 ..
  drwxr-xr-x 2 nas     nas     4096 2026-03-20 21:00 calibre-web
  drwxr-xr-x 2 lkraven lkraven 4096 2025-10-03 22:13 cloudflare-ddns
  drwxr-xr-x 5 lkraven lkraven 4096 2026-03-30 22:30 homepage
  drwxr-xr-x 2    1883    1883 4096 2025-11-29 00:50 mosquitto
  drwxr-xr-x 3 lkraven lkraven 4096 2025-03-18 23:58 traefik-esh

/var/lib/docker  (total: 4.0K)

/srv  (total: 20K)
  total 12
  drwxr-xr-x  3 root root 4096 2024-06-13 21:52 .
  drwxr-xr-x 19 root root 4096 2025-12-29 14:50 ..
  drwxrwxrwx  3 root root 4096 2024-06-13 21:54 backups


===== DOCKER =====

Server: 20.10.24+dfsg1   Client: 20.10.24+dfsg1

----- docker info -----
Containers:      24 (running 21, paused 0, stopped 3)
Images:          84
Runtimes:        map[io.containerd.runc.v2:{runc [] <nil>} io.containerd.runtime.v1.linux:{runc [] <nil>} runc:{runc [] <nil>}]
Default runtime: runc
Storage driver:  overlay2
Root dir:        /var/lib/docker
Server version:  20.10.24+dfsg1

----- running containers -----
NAMES                       IMAGE                                        STATUS                 PORTS
beszel-agent                henrygd/beszel-agent:latest                  Up 37 hours            
dozzle-agent                amir20/dozzle:latest                         Up 38 hours            0.0.0.0:7007->7007/tcp, 8080/tcp
traefik                     traefik:latest                               Up 4 days              0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:8380->8080/tcp, :::8380->8080/tcp
paperless-ngx-webserver-1   ghcr.io/paperless-ngx/paperless-ngx:latest   Up 2 weeks (healthy)   0.0.0.0:8200->8000/tcp, :::8200->8000/tcp
paperless-ngx-broker-1      redis:7                                      Up 2 weeks             6379/tcp
paperless-ngx-backup-1      offen/docker-volume-backup:latest            Up 2 weeks             
homepage                    ghcr.io/gethomepage/homepage:latest          Up 2 weeks (healthy)   0.0.0.0:5100->3000/tcp, :::5100->3000/tcp
homeassistant               homeassistant/home-assistant:latest          Up 46 hours            
mosquitto                   eclipse-mosquitto:latest                     Up 2 weeks             0.0.0.0:1883->1883/tcp, :::1883->1883/tcp
adguardhome                 adguard/adguardhome                          Up 2 weeks             67-68/udp, 0.0.0.0:53->53/udp, :::53->53/udp, 443/udp, 0.0.0.0:53->53/tcp, :::53->53/tcp, 853/udp, 0.0.0.0:853->853/tcp, :::853->853/tcp, 3000/udp, 5443/tcp, 0.0.0.0:3000->3000/tcp, 0.0.0.0:784->784/udp, :::3000->3000/tcp, :::784->784/udp, 5443/udp, 6060/tcp, 0.0.0.0:8080->80/tcp, :::8080->80/tcp, 0.0.0.0:8443->443/tcp, :::8443->443/tcp
cloudflare-ddns             timothyjmiller/cloudflare-ddns:latest        Up 2 weeks             
pgadmin4_container          dpage/pgadmin4                               Up 2 weeks             443/tcp, 0.0.0.0:5050->80/tcp, :::5050->80/tcp
pgadmin-backup-1            1127ad194f2f                                 Up 2 weeks             
esphome                     ghcr.io/esphome/esphome                      Up 2 weeks (healthy)   
drawio                      jgraph/drawio                                Up 2 weeks (healthy)   0.0.0.0:8087->8080/tcp, :::8087->8080/tcp, 0.0.0.0:8447->8443/tcp, :::8447->8443/tcp
calibre-web                 lscr.io/linuxserver/calibre-web:latest       Up 2 weeks             0.0.0.0:8083->8083/tcp, :::8083->8083/tcp
calibre                     lscr.io/linuxserver/calibre:latest           Up 2 weeks             3000-3001/tcp, 0.0.0.0:8181->8181/tcp, :::8181->8181/tcp, 0.0.0.0:8082->8080/tcp, :::8082->8080/tcp, 0.0.0.0:8281->8081/tcp, :::8281->8081/tcp
45d2522a8cb6_uptime-kuma    louislam/uptime-kuma:latest                  Up 2 weeks (healthy)   0.0.0.0:3001->3001/tcp, :::3001->3001/tcp
dockge-dockge-1             louislam/dockge:latest                       Up 2 weeks (healthy)   0.0.0.0:5001->5001/tcp, :::5001->5001/tcp
portainer_agent             portainer/agent:2.19.4                       Up 2 weeks             0.0.0.0:9001->9001/tcp, :::9001->9001/tcp
portainer                   portainer/portainer-ce:latest                Up 2 weeks             0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp, 9000/tcp

----- all containers -----
NAMES                       IMAGE                                        STATUS
beszel-agent                henrygd/beszel-agent:latest                  Up 37 hours
dozzle-agent                amir20/dozzle:latest                         Up 38 hours
traefik                     traefik:latest                               Up 4 days
paperless-ngx-webserver-1   ghcr.io/paperless-ngx/paperless-ngx:latest   Up 2 weeks (healthy)
paperless-ngx-broker-1      redis:7                                      Up 2 weeks
paperless-ngx-backup-1      offen/docker-volume-backup:latest            Up 2 weeks
homepage                    ghcr.io/gethomepage/homepage:latest          Up 2 weeks (healthy)
homeassistant               homeassistant/home-assistant:latest          Up 46 hours
mosquitto                   eclipse-mosquitto:latest                     Up 2 weeks
adguardhome                 adguard/adguardhome                          Up 2 weeks
friendly_maxwell            0745ced90756                                 Exited (13) 4 months ago
focused_pascal              0745ced90756                                 Exited (13) 4 months ago
pedantic_proskuriakova      0745ced90756                                 Exited (3) 4 months ago
cloudflare-ddns             timothyjmiller/cloudflare-ddns:latest        Up 2 weeks
pgadmin4_container          dpage/pgadmin4                               Up 2 weeks
pgadmin-backup-1            1127ad194f2f                                 Up 2 weeks
esphome                     ghcr.io/esphome/esphome                      Up 2 weeks (healthy)
drawio                      jgraph/drawio                                Up 2 weeks (healthy)
calibre-web                 lscr.io/linuxserver/calibre-web:latest       Up 2 weeks
calibre                     lscr.io/linuxserver/calibre:latest           Up 2 weeks
45d2522a8cb6_uptime-kuma    louislam/uptime-kuma:latest                  Up 2 weeks (healthy)
dockge-dockge-1             louislam/dockge:latest                       Up 2 weeks (healthy)
portainer_agent             portainer/agent:2.19.4                       Up 2 weeks
portainer                   portainer/portainer-ce:latest                Up 2 weeks

----- networks -----
NAME                          DRIVER    SCOPE
adguard_default               bridge    local
bridge                        bridge    local
calibre-web_default           bridge    local
cloudflare-ddns-esh_default   bridge    local
homeassistant_macvlan_net     macvlan   local
homepage_default              bridge    local
host                          host      local
none                          null      local
pgadmin_default               bridge    local
traefik-net                   bridge    local

----- networks (external, non-default — worth knowing for compose external: true) -----
adguard_default
calibre-web_default
cloudflare-ddns-esh_default
homepage_default
pgadmin_default
traefik-net

----- named volumes -----
VOLUME NAME                                                        DRIVER
6cdde6cf4b58151d434e8a3da23e77d9c04acdaa574a91ff7bbe60ea113a2adf   local
6f7206c067f22a53bf7d0c737f74075f849c11fd535b884c4d3cbb73d275bc21   local
007fc81bd8008b22173f8e4a365b2ca43a37080902ab961a197dde0d8782c786   local
8b1ff384b6cb4859c64a21b51d32780027a3682dc1852a36617b59870ea15e32   local
adguard_adguard-confdir                                            local
adguard_adguard-workdir                                            local
ae127367f71c43b662b16c8232a135c59f2a873dcdf606dfa01967fad1ac915e   local
beszel-esh-vm-docker_beszel_agent_data                             local
beszel-vm-esh-nas_beszel_agent_data                                local
c7a5978e1b811c4d5b15404e405c0ec32a541f8a921a054b0f725a3010a76684   local
dockge_dockge_data                                                 local
dozzle-agent_dozzle_agent_data                                     local
homeassistant_homeassistant_data                                   local
mosquitto_mosquitto_data                                           local
mosquitto_mosquitto_log                                            local
paperless-ngx_data                                                 local
paperless-ngx_media                                                local
paperless-ngx_redisdata                                            local
pgadmin_pgadmin-data                                               local
portainer_data                                                     local
uptimekuma_uptime-kuma                                             local

----- compose projects currently running -----
adguard
beszel-esh-vm-docker
calibre
calibre-web
cloudflare-ddns-esh
dockge
dozzle-agent
drawio
esphome
homeassistant
homepage
mosquitto
paperless-ngx
pgadmin
traefik
uptimekuma

===== COMPOSE FILES (/opt/docker/compose/) =====


>>> /opt/docker/compose/adguard/docker-compose.yml
#version: "3"
services:
  adguardhome:
    image: adguard/adguardhome
    container_name: adguardhome
    ports:
      - 53:53/tcp
      - 53:53/udp
      - 784:784/udp
      - 853:853/tcp
      - 3000:3000/tcp
      - 8080:80/tcp
      - 8443:443/tcp
    volumes:
      - adguard-workdir:/opt/adguardhome/work
      - adguard-confdir:/opt/adguardhome/conf
    restart: unless-stopped
    labels:
      # This means the container will be stopped during backup to ensure
      # backup integrity. You can omit this label if stopping during backup
      # not required.  Can be omitted if false.
      - docker-volume-backup.stop-during-backup=false
      - homepage.group=ESH
      - homepage.name=AdGuard Home
      - homepage.icon=si-adguard
      - homepage.description=DNS
      - homepage.href=http://10.0.50.45:8080
      - homepage.widget.type=adguard
      - homepage.widget.url=http://10.0.50.45:8080
      - homepage.widget.username=lkraven
      - homepage.widget.password=${ADGUARD_WIDGET_PASSWORD}
    networks:
      - tnet

volumes:
  adguard-workdir: null
  adguard-confdir: null
networks:
  tnet:
    name: traefik-net
    external: true

>>> /opt/docker/compose/beszel-esh-vm-docker/compose.yaml
# Beszel — lightweight server/container monitoring.
#
# Hub: single web UI with the SQLite store. Agents: per-host metric collectors
# that the hub pulls from over SSH.
#
# Multi-host layout via compose profiles:
#   COMPOSE_PROFILES=hub          → hub only        (ana-docker)
#   COMPOSE_PROFILES=hub,agent    → hub + local agent on the same host
#   COMPOSE_PROFILES=agent        → agent only      (ana-ml2)
#
# The agent uses network_mode: host so it sees real host CPU/mem/net/disk
# counters rather than container-scoped ones — that's why it can't share
# the tnet network with the hub.
#
# All tunables live in .env — edit that, not this file.

services:
  beszel:
    image: henrygd/beszel:${BESZEL_VERSION}
    container_name: beszel
    profiles: [hub]
    restart: unless-stopped
    ports:
      - "${BESZEL_PORT}:8090"
    volumes:
      - beszel_data:/beszel_data
    healthcheck:
      test: ["CMD", "wget", "-qO-", "http://localhost:8090/api/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 15s
    networks:
      - tnet
    labels:
      - homepage.group=PFI-ANA
      - homepage.name=Beszel
      - homepage.icon=mdi-chart-line
      - homepage.description=Server + container monitoring
      - homepage.href=http://10.250.50.70:${BESZEL_PORT}

  beszel-agent:
    image: henrygd/beszel-agent:${BESZEL_VERSION}
    container_name: beszel-agent
    profiles: [agent]
    restart: unless-stopped
    network_mode: host
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - beszel_agent_data:/var/lib/beszel-agent
    environment:
      - PORT=${BESZEL_AGENT_PORT:-45876}
      - KEY=${BESZEL_HUB_KEY}
      - HUB_URL=${HUB_URL}
      - TOKEN=${BESZEL_TOKEN}
      - EXTRA_FILESYSTEMS=${BESZEL_EXTRA_FS:-}

volumes:
  beszel_data:
  beszel_agent_data:

networks:
  tnet:
    name: traefik-net
    external: true
>>> /opt/docker/compose/calibre/compose.yaml
version: "2.1"
services:
  calibre:
    image: lscr.io/linuxserver/calibre:latest
    container_name: calibre
    security_opt:
      - seccomp:unconfined #optional
    environment:
      - PUID=2000
      - PGID=2000
      - TZ=America/Los_Angeles
      - PASSWORD= #optional
      - CLI_ARGS= #optional
    volumes:
      - /mnt/books/calibre:/config
    ports:
      - 8082:8080
      - 8181:8181
      - 8281:8081
    restart: unless-stopped
    labels:
      - homepage.group=Media
      - homepage.name=Calibre
      - homepage.icon=mdi-bookshelf
      - homepage.description=EBook Server (esh)
      - homepage.href=http://10.0.50.45:8082
    networks:
      - tnet
networks:
  tnet:
    name: traefik-net
    external: true

>>> /opt/docker/compose/calibre-web/compose.yaml
services:
  calibre-web:
    image: lscr.io/linuxserver/calibre-web:latest
    container_name: calibre-web
    environment:
      - PUID=2000
      - PGID=2000
      - TZ=Etc/UTC
      - DOCKER_MODS=linuxserver/mods:universal-calibre #optional
      - OAUTHLIB_RELAX_TOKEN_SCOPE=1 #optional
    volumes:
      - /opt/docker/conf/calibre-web:/config
      - /mnt/books/calibre/calibre_library:/books
    labels:
      - homepage.group=Media
      - homepage.name=Calibre-Web
      - homepage.icon=si-calibreweb
      - homepage.description=EBook Server (esh)
      - homepage.href=http://10.0.50.45:8083
    ports:
      - 8083:8083
    restart: unless-stopped
networks: {}

>>> /opt/docker/compose/cloudflare-ddns-esh/compose.yaml
services:
  cloudflare-ddns:
    image: timothyjmiller/cloudflare-ddns:latest
    container_name: cloudflare-ddns
    volumes:
      - /opt/docker/conf/cloudflare-ddns/config.json:/config.json
    restart: unless-stopped
networks: {}

>>> /opt/docker/compose/dockge/compose.yaml
services:
  dockge:
    image: louislam/dockge:latest
    restart: unless-stopped
    ports:
      # Host Port : Container Port
      - 5001:5001
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dockge_data:/app/data
      - /opt/docker/compose:/opt/docker/compose
    labels:
      - homepage.group=ESH
      - homepage.name=Dockge
      - homepage.icon=si-portainer
      - homepage.description=Docker
      - homepage.href=http://10.0.50.45:5001
    environment:
      # Tell Dockge where is your stacks directory
      - DOCKGE_STACKS_DIR=/opt/docker/compose
    networks:
      - tnet

volumes:
  dockge_data: null
networks:
  tnet:
    name: traefik-net
    external: true

>>> /opt/docker/compose/dozzle-agent/compose.yaml
# Dozzle — container log viewer.
#
# Multi-host layout via compose profiles:
#   COMPOSE_PROFILES=hub   → runs the web UI (deploy on ana-docker)
#   COMPOSE_PROFILES=agent → runs the remote agent (deploy on ana-ml2)
#
# Same compose.yaml on both servers; per-host `.env` picks the profile.
#
# All tunables live in .env — edit that, not this file.

services:
  dozzle:
    image: amir20/dozzle:${DOZZLE_VERSION}
    container_name: dozzle
    profiles:
      - hub
    restart: unless-stopped
    ports:
      - ${DOZZLE_PORT}:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - dozzle_data:/data
    environment:
      - DOZZLE_HOSTNAME=${DOZZLE_HOSTNAME}
      - DOZZLE_REMOTE_AGENT=${DOZZLE_REMOTE_AGENT:-}
      - DOZZLE_AUTH_PROVIDER=${DOZZLE_AUTH_PROVIDER:-none}
      - DOZZLE_USERNAME=${DOZZLE_USERNAME:-}
      - DOZZLE_PASSWORD=${DOZZLE_PASSWORD:-}
    healthcheck:
      test:
        - CMD
        - /dozzle
        - healthcheck
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 15s
    networks:
      - tnet
    labels:
      - homepage.group=PFI-ANA
      - homepage.name=Dozzle
      - homepage.icon=mdi-text-box-search
      - homepage.description=Container logs (ana-docker + ana-ml2)
      - homepage.href=http://10.250.50.70:${DOZZLE_PORT}
  dozzle-agent:
    image: amir20/dozzle:${DOZZLE_VERSION}
    container_name: dozzle-agent
    profiles:
      - agent
    restart: unless-stopped
    command: agent
    ports:
      - ${DOZZLE_AGENT_BIND:-0.0.0.0}:${DOZZLE_AGENT_PORT}:7007
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - dozzle_agent_data:/data
    environment:
      - DOZZLE_HOSTNAME=${DOZZLE_HOSTNAME}
    networks:
      - tnet
volumes:
  dozzle_data: null
  dozzle_agent_data: null
networks:
  tnet:
    name: traefik-net
    external: true

>>> /opt/docker/compose/drawio/compose.yaml
services:
  drawio:
    image: jgraph/drawio
    container_name: drawio
    restart: unless-stopped
    ports:
      - 8087:8080
      - 8447:8443
    healthcheck:
      test:
        - CMD-SHELL
        - curl -f http://127.0.0.1:8080 || exit 1
      interval: 1m30s
      timeout: 10s
      retries: 5
      start_period: 10s
    labels:
      - homepage.group=Apps
      - homepage.name=draw.io
      - homepage.icon=mdi-pencil
      - homepage.description=Draw.IO Graphing (esh)
      - homepage.href=http://10.0.50.45:8087
    networks:
      - tnet
networks:
  tnet:
    name: traefik-net
    external: true

>>> /opt/docker/compose/esphome/compose.yaml
version: '3'
services:
  esphome:
    container_name: esphome
    image: ghcr.io/esphome/esphome
    volumes:
      - /path/to/esphome/config:/config
      - /etc/localtime:/etc/localtime:ro
    restart: always
    privileged: true
    network_mode: host
    environment:
      - USERNAME=test
      - PASSWORD=ChangeMe
>>> /opt/docker/compose/homeassistant/compose.yaml
services:
  homeassistant:
    image: homeassistant/home-assistant:latest
    container_name: homeassistant
    environment:
      - PUID=2000
      - PGID=2000
      - TZ=America/Los_Angeles
    volumes:
      - homeassistant_data:/config
    restart: unless-stopped
    env_file:
      - .env
    networks:
      macvlan_net:
        ipv4_address: 10.0.50.46
    labels:
      - homepage.group=Apps
      - homepage.name=Home Assistant
      - homepage.icon=si-homeassistant
      - homepage.description=Home Automation (esh)
      - homepage.href=http://10.0.50.46:8123
networks:
  macvlan_net:
    driver: macvlan
    driver_opts:
      parent: ens18
    ipam:
      config:
        - subnet: 10.0.50.0/24
volumes:
  homeassistant_data: null

>>> /opt/docker/compose/homepage/compose.yaml
services:
  homepage:
    image: ghcr.io/gethomepage/homepage:latest
    container_name: homepage
    environment:
      PUID: 1000
      PGID: 1000
    ports:
      - 5100:3000
    volumes:
      - /opt/docker/conf/homepage:/app/config # Make sure your local config directory exists
      - /var/run/docker.sock:/var/run/docker.sock:ro # optional, for docker integrations
    restart: unless-stopped
    networks:
      - tnet
    labels:
      - traefik.enable=true
      - traefik.http.routers.homepage.rule=host(`eshhome`) || host(`10.0.50.45`)
        || host (`eshhome.esteban.net`)
      - traefik.http.services.homepage.loadbalancer.server.port=3000
      - traefik.http.routers.homepage.priority=1
    env_file:
      - .env
networks:
  tnet:
    name: traefik-net
    external: true

>>> /opt/docker/compose/mosquitto/compose.yaml
services:
  mosquitto:
    container_name: mosquitto
    image: eclipse-mosquitto:latest
    restart: unless-stopped
    ports:
      - 1883:1883/tcp
    volumes:
      - /opt/docker/conf/mosquitto:/mosquitto/config
      - mosquitto_data:/mosquitto/data
      - mosquitto_log:/mosquitto/log
    networks:
      - tnet
    labels:
      - homepage.group=Apps
      - homepage.name=Mosquitto
      - homepage.icon=mdi-bug
      - homepage.description=MQQT Broker port 1883
networks:
  tnet:
    name: traefik-net
    external: true
volumes:
  mosquitto_data: null
  mosquitto_log: null

>>> /opt/docker/compose/paperless-ngx/compose.yaml
#version: "3.4"
services:
  broker:
    image: docker.io/library/redis:7
    restart: unless-stopped
    volumes:
      - redisdata:/data
    networks:
      - tnet
  webserver:
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    restart: unless-stopped
    depends_on:
      - broker
    ports:
      - 8200:8000
    healthcheck:
      test:
        - CMD
        - curl
        - -fs
        - -S
        - --max-time
        - "2"
        - http://localhost:8000
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - data:/usr/src/paperless/data
      - media:/usr/src/paperless/media
      - /mnt/documents/paperless/export:/usr/src/paperless/export
      - /mnt/documents/paperless/consume:/usr/src/paperless/consume
    # env_file: docker-compose.env
    environment:
      PAPERLESS_REDIS: redis://broker:6379
      PAPERLESS_DBHOST: 10.0.50.60
      PAPERLESS_DBPORT: 5432
      PAPERLESS_DBNAME: paperless-ng
      PAPERLESS_DBUSER: paperless-ng
      PAPERLESS_DBPASS: paperless-ng
      # PAPERLESS_MEDIA_ROOT=/data/media
      PAPERLESS_CONSUMPTION_DIR: /usr/src/paperless/consume
      PAPERLESS_EXPORT_DIR: /usr/src/paperless/export
      PAPERLESS_CONSUMER_POLLING: 30
      # PAPERLESS_DATA_DIR=/config
    labels:
      - homepage.group=Media
      - homepage.name=PaperlessNGX
      - homepage.icon=mdi-file-cabinet
      - homepage.description=Document Store (esh)
      - homepage.href=http://10.0.50.45:8200
      - homepage.sitemonitor=http://10.0.50.45:8200
      - homepage.widget.type=paperlessngx
      - homepage.widget.url=http://10.0.50.45:8200
      - homepage.widget.key=${API_KEY}
    networks:
      - tnet
    env_file:
      - .env
  backup:
    image: offen/docker-volume-backup:latest
    restart: always
    volumes:
      # volumes to backup.
      - data:/backup/paperless-data:ro
      - media:/backup/paperless-media:ro
      - redisdata:/backup/paperless-redisdata:ro
      - /mnt/backup/docker/esh-vm-docker/paperless:/archive
      # can omit below if not stopping service.
      # - /var/run/docker.sock:/var/run/docker.sock:ro
    env_file:
      - .env
    networks:
      - tnet
networks:
  tnet:
    name: traefik-net
    external: true
volumes:
  data: null
  media: null
  redisdata: null

>>> /opt/docker/compose/pgadmin/compose.yaml
# version: "3.8"
services:
  pgadmin:
    image: dpage/pgadmin4
    container_name: pgadmin4_container
    restart: always
    ports:
      - 5050:80
    environment:
      PGADMIN_DEFAULT_EMAIL: ${DEFAULT_EMAIL}
      PGADMIN_DEFAULT_PASSWORD: ${DEFAULT_PASSWORD}
    volumes:
      - pgadmin-data:/var/lib/pgadmin
    labels:
      - homepage.group=Apps
      - homepage.name=PGAdmin
      - homepage.icon=mdi-database
      - homepage.description=pgsql Manager (esh)
      - homepage.href=http://10.0.50.45:5050
    networks:
      - tnet
    env_file:
      - .env
  backup:
    image: offen/docker-volume-backup:latest
    restart: always
    volumes:
      # volumes to backup.
      - pgadmin-data:/backup/pgadmin-data:ro
      - /mnt/backup/docker/esh-vm-docker/pgadmin:/archive
      # can omit below if not stopping service.
      # - /var/run/docker.sock:/var/run/docker.sock:ro
    env_file:
      - .env
networks:
  tnet:
    name: traefik-net
    external: true
volumes:
  pgadmin-data: null

>>> /opt/docker/compose/traefik/docker-compose.yml
#version: "3.3"

services:
  traefik:
    image: traefik:latest
    container_name: traefik
    command:
      - --log.level=DEBUG
      - --configFile=/etc/traefik/traefik.yml
      - --api.insecure=true
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
      - --experimental.plugins.bouncer.modulename=github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin
      - --experimental.plugins.bouncer.version=v1.6.0
    environment:
      - AWS_ACCESS_KEY_ID=${AWS_KEY}
      - AWS_SECRET_ACCESS_KEY=${AWS_SECRET}
      - AWS_REGION=${AWS_REGION}
      - AWS_HOSTED_ZONE_ID=${AWS_ZONEID}
    ports:
      - 80:80
      - 8380:8080
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /opt/docker/conf/traefik-esh:/etc/traefik
    labels:
      - homepage.group=ESH
      - homepage.name=traefik
      - homepage.icon=si-traefikproxy
      - homepage.sitemonitor=http://10.0.50.45:8380
      - homepage.href=http://10.0.50.45:8380
      - homepage.widget.type=traefik
      - homepage.widget.url=http://10.0.50.45:8380
      - traefik.http.middlewares.crowdsec.plugin.bouncer.enabled=true
      - traefik.http.middlewares.crowdsec.plugin.bouncer.crowdseclapikey=${CROWDSEC_KEY}
      - traefik.http.middlewares.crowdsec.plugin.bouncer.crowdseclapihost=crowdsec:8080
      - traefik.http.middlewares.crowdsec.plugin.bouncer.crowdseclapischeme=http
      - traefik.http.middlewares.crowdsec.plugin.bouncer.crowdsecMode=live
      - traefik.http.middlewares.crowdsec.plugin.bouncer.defaultDecisionSeconds=60
    networks:
      - tnet
    env_file:
      - .env
networks:
  tnet:
    name: traefik-net
    external: true

>>> /opt/docker/compose/uptimekuma/compose.yaml
services:
  uptime-kuma:
    restart: always
    ports:
      - 3001:3001
    volumes:
      - uptime-kuma:/app/data
    container_name: uptime-kuma
    image: louislam/uptime-kuma:latest
    labels:
      - homepage.group=Apps
      - homepage.name=Uptime Kuma
      - homepage.icon=mdi-arrow-up-bold-circle
      - homepage.description=Service Monitoring (esh)
      - homepage.href=http://10.0.50.45:3001
      - homepage.widget.type=uptimekuma
      - homepage.widget.url=http://10.0.50.45:3001
      - homepage.widget.slug=nethealth
    networks:
      - tnet
volumes:
  uptime-kuma: {}
networks:
  tnet:
    name: traefik-net
    external: true

===== CONFIG LAYOUT (/opt/docker/conf/ — top 200 entries) =====

/opt/docker/conf
/opt/docker/conf/calibre-web
/opt/docker/conf/calibre-web/app.db
/opt/docker/conf/calibre-web/.CALIBRE_RELEASE
/opt/docker/conf/calibre-web/calibre-web.log
/opt/docker/conf/calibre-web/calibre-web.log.1
/opt/docker/conf/calibre-web/calibre-web.log.2
/opt/docker/conf/calibre-web/client_secrets.json
/opt/docker/conf/calibre-web/gdrive.db
/opt/docker/conf/calibre-web/.key
/opt/docker/conf/cloudflare-ddns
/opt/docker/conf/cloudflare-ddns/config.json
/opt/docker/conf/homepage
/opt/docker/conf/homepage/bookmarks.yaml
/opt/docker/conf/homepage/custom.css
/opt/docker/conf/homepage/custom.js
/opt/docker/conf/homepage/docker.yaml
/opt/docker/conf/homepage/imgs
/opt/docker/conf/homepage/imgs/bg1.jpg
/opt/docker/conf/homepage/imgs/Thumbs.db
/opt/docker/conf/homepage/kubernetes.yaml
/opt/docker/conf/homepage/logs
/opt/docker/conf/homepage/logs/homepage.log
/opt/docker/conf/homepage/nas-tls
/opt/docker/conf/homepage/nas-tls/ca.pem
/opt/docker/conf/homepage/nas-tls/cert.pem
/opt/docker/conf/homepage/nas-tls/key.pem
/opt/docker/conf/homepage/proxmox.yaml
/opt/docker/conf/homepage/services.yaml
/opt/docker/conf/homepage/settings.yaml
/opt/docker/conf/homepage/widgets.yaml
/opt/docker/conf/mosquitto
/opt/docker/conf/mosquitto/mosquitto.conf
/opt/docker/conf/mosquitto/mosquitto.log
/opt/docker/conf/mosquitto/mosquitto.passwd
/opt/docker/conf/traefik-esh
/opt/docker/conf/traefik-esh/certs
/opt/docker/conf/traefik-esh/certs/acme.json
/opt/docker/conf/traefik-esh/traefik.yml

===== LISTENING PORTS =====

0.0.0.0:111
0.0.0.0:1883
0.0.0.0:22
0.0.0.0:3000
0.0.0.0:3001
0.0.0.0:443
0.0.0.0:5001
0.0.0.0:5050
0.0.0.0:5100
0.0.0.0:53
0.0.0.0:6052
0.0.0.0:7007
0.0.0.0:80
0.0.0.0:8000
0.0.0.0:8080
0.0.0.0:8082
0.0.0.0:8083
0.0.0.0:8087
0.0.0.0:8181
0.0.0.0:8200
0.0.0.0:8281
0.0.0.0:8380
0.0.0.0:8443
0.0.0.0:8447
0.0.0.0:853
0.0.0.0:9001
0.0.0.0:9443
[::]:111
127.0.0.1:35469
[::]:1883
[::]:22
*:2375
[::]:3000
[::]:3001
[::]:443
[::]:5001
[::]:5050
[::]:5100
[::]:53
[::]:80
[::]:8000
[::]:8080
[::]:8082
[::]:8083
[::]:8087
[::]:8181
[::]:8200
[::]:8281
[::]:8380
[::]:8443
[::]:8447
[::]:853
[::]:9001
[::]:9443

===== MODEL / HUGGINGFACE CACHES =====


===== DOCKER-ADJACENT SYSTEMD SERVICES =====

containerd.service running
docker.service running

===== DONE =====

Paste the above back into the chat, or pass a path as argv[1] to save.
