841 lines
84 KiB
Plaintext
841 lines
84 KiB
Plaintext
task-21-news-triage evidence
|
|
==============================
|
|
|
|
Protected files: BEFORE stats
|
|
------------------------------
|
|
File: /home/connor/compose.yml
|
|
Size: 45902 Blocks: 96 IO Block: 4096 regular file
|
|
Device: 253,0 Inode: 3456331 Links: 1
|
|
Access: (0644/-rw-r--r--) Uid: ( 1000/ connor) Gid: ( 1000/ connor)
|
|
Access: 2026-09-01 13:31:00.127897473 -0400
|
|
Modify: 2026-09-01 13:31:00.123329809 -0400
|
|
Change: 2026-09-01 13:31:00.123329809 -0400
|
|
Birth: 2026-09-01 09:59:16.224683093 -0400
|
|
File: /home/connor/Caddyfile
|
|
Size: 15394 Blocks: 32 IO Block: 4096 regular file
|
|
Device: 253,0 Inode: 3456314 Links: 1
|
|
Access: (0644/-rw-r--r--) Uid: ( 1000/ connor) Gid: ( 1000/ connor)
|
|
Access: 2026-09-01 09:51:56.598569747 -0400
|
|
Modify: 2026-08-28 15:51:59.475726235 -0400
|
|
Change: 2026-08-28 15:51:59.475726235 -0400
|
|
Birth: 2026-08-26 22:10:30.165466997 -0400
|
|
File: /home/connor/data/ntfy/etc/server.yml
|
|
Size: 506 Blocks: 8 IO Block: 4096 regular file
|
|
Device: 253,0 Inode: 7224774 Links: 1
|
|
Access: (0644/-rw-r--r--) Uid: ( 1000/ connor) Gid: ( 0/ root)
|
|
Access: 2026-09-01 17:21:22.759598097 -0400
|
|
Modify: 2026-08-20 17:25:40.623346035 -0400
|
|
Change: 2026-08-20 17:25:40.623346035 -0400
|
|
Birth: 2026-02-27 16:47:40.215201274 -0500
|
|
File: /home/connor/config/prometheus/prometheus.yml
|
|
Size: 877 Blocks: 8 IO Block: 4096 regular file
|
|
Device: 253,0 Inode: 10486193 Links: 1
|
|
Access: (0644/-rw-r--r--) Uid: ( 1000/ connor) Gid: ( 1000/ connor)
|
|
Access: 2026-09-01 17:21:22.714596100 -0400
|
|
Modify: 2026-08-25 22:21:00.811095356 -0400
|
|
Change: 2026-08-25 22:21:00.811095356 -0400
|
|
Birth: 2026-08-25 22:21:00.810402344 -0400
|
|
|
|
QA: scratch compose.yml validation
|
|
-----------------------------------
|
|
Command: podman-compose -f /tmp/opencode/compose.yml config
|
|
networks:
|
|
default: null
|
|
internal: null
|
|
llm: null
|
|
services:
|
|
alloy:
|
|
command:
|
|
- run
|
|
- --server.http.listen-addr=0.0.0.0:12345
|
|
- --storage.path=/var/lib/alloy/data
|
|
- /etc/alloy/config.alloy
|
|
depends_on:
|
|
loki:
|
|
condition: service_started
|
|
image: docker.io/grafana/alloy:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
user: 0:0
|
|
volumes:
|
|
- ./config/alloy/config.alloy:/etc/alloy/config.alloy:ro
|
|
- ./data/alloy:/var/lib/alloy/data
|
|
- ./data/caddy/logs:/var/log/caddy:ro
|
|
authelia:
|
|
environment:
|
|
AUTHELIA_IDENTITY_PROVIDERS_OIDC_HMAC_SECRET: ''
|
|
AUTHELIA_IDENTITY_VALIDATION_RESET_PASSWORD_JWT_SECRET: ''
|
|
AUTHELIA_SESSION_SECRET: ''
|
|
AUTHELIA_STORAGE_ENCRYPTION_KEY: ''
|
|
TZ: America/Louisville
|
|
X_AUTHELIA_CONFIG_FILTERS: template
|
|
healthcheck:
|
|
interval: 30s
|
|
retries: 3
|
|
start_period: 20s
|
|
test:
|
|
- CMD
|
|
- /app/healthcheck.sh
|
|
timeout: 5s
|
|
image: docker.io/authelia/authelia:4.39
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/authelia:/config
|
|
baikal:
|
|
image: ckulka/baikal:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/baikal:/var/www/baikal/config
|
|
- ./data/baikal:/var/www/baikal/Specific
|
|
bitwarden:
|
|
environment:
|
|
DOMAIN: https://bw.rcjohnstone.com
|
|
SIGNUPS_ALLOWED: 'false'
|
|
image: vaultwarden/server:latest-alpine
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./data/bitwarden:/data
|
|
caddy:
|
|
environment:
|
|
BACKEND_API_URL: https://runway.rcjohnstone.com/api
|
|
image: caddy:latest
|
|
networks:
|
|
default: null
|
|
internal: null
|
|
llm: null
|
|
ports:
|
|
- 80:80
|
|
- 443:443
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./Caddyfile:/etc/caddy/Caddyfile
|
|
- ./config/caddy:/config
|
|
- ./data/caddy:/data
|
|
- ./data/website/dist:/srv/www:ro
|
|
- ./data/runway/web:/srv/runway:ro
|
|
- ./data/news/web:/srv/news:ro
|
|
- ./data/ssl:/certbot
|
|
- ./data/flexio/dist:/srv/flexio:ro
|
|
- ./data/caddy/logs:/var/log/caddy
|
|
croc:
|
|
environment:
|
|
CROC_PASS: ''
|
|
image: docker.io/schollz/croc
|
|
ports:
|
|
- 9009-9013:9009-9013
|
|
restart: unless-stopped
|
|
crowdsec:
|
|
environment:
|
|
COLLECTIONS: crowdsecurity/caddy crowdsecurity/http-cve crowdsecurity/base-http-scenarios
|
|
crowdsecurity/whitelist-good-actors
|
|
TZ: America/Louisville
|
|
image: docker.io/crowdsecurity/crowdsec:latest
|
|
networks:
|
|
- internal
|
|
ports:
|
|
- 127.0.0.1:8099:8080
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/crowdsec:/etc/crowdsec
|
|
- ./data/crowdsec:/var/lib/crowdsec/data
|
|
- ./data/caddy/logs:/var/log/caddy:ro
|
|
flexio-api:
|
|
environment:
|
|
AI_HOST: ai.rcjohnstone.com
|
|
FLEXIO_MODEL: gemma3-12b
|
|
OPENWEBUI_KEY: ''
|
|
OWNER_KEY: ''
|
|
TRAGGO_HOST: time.rcjohnstone.com
|
|
TRAGGO_TOKEN: ''
|
|
image: git.rcjohnstone.com/connor/flexio:latest
|
|
networks:
|
|
- internal
|
|
- llm
|
|
restart: unless-stopped
|
|
gitea:
|
|
environment:
|
|
USER: connor
|
|
USER_GID: '1000'
|
|
USER_UID: '1000'
|
|
image: docker.gitea.com/gitea:latest
|
|
networks:
|
|
- internal
|
|
ports:
|
|
- 2222:2222
|
|
restart: always
|
|
volumes:
|
|
- ./data/gitea:/data
|
|
- /etc/localtime:/etc/localtime:ro
|
|
grafana:
|
|
depends_on:
|
|
loki:
|
|
condition: service_started
|
|
prometheus:
|
|
condition: service_started
|
|
environment:
|
|
GF_ANALYTICS_CHECK_FOR_UPDATES: 'false'
|
|
GF_ANALYTICS_REPORTING_ENABLED: 'false'
|
|
GF_SECURITY_ADMIN_PASSWORD: ''
|
|
GF_SERVER_ROOT_URL: https://grafana.rcjohnstone.com
|
|
GF_USERS_ALLOW_SIGN_UP: 'false'
|
|
TZ: America/Louisville
|
|
image: docker.io/grafana/grafana:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/grafana/provisioning:/etc/grafana/provisioning:ro
|
|
- ./data/grafana-dashboards:/var/lib/grafana/dashboards:ro
|
|
- ./data/grafana:/var/lib/grafana
|
|
hedgedoc:
|
|
environment:
|
|
CMD_ALLOW_EMAIL_REGISTER: 'false'
|
|
CMD_DB_DIALECT: mariadb
|
|
CMD_DOMAIN: md.rcjohnstone.com
|
|
CMD_PORT: '3000'
|
|
CMD_PROTOCOL_USESSL: 'true'
|
|
CMD_URL_ADDPORT: 'false'
|
|
DB_HOST: hedgedocdb
|
|
DB_NAME: hedgedoc
|
|
DB_PASS: ''
|
|
DB_PORT: '3306'
|
|
DB_USER: hedgedoc
|
|
PGID: '1000'
|
|
PUID: '1000'
|
|
TZ: America/Louisville
|
|
image: lscr.io/linuxserver/hedgedoc:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/hedgedoc:/config
|
|
hedgedocdb:
|
|
environment:
|
|
MARIADB_DATABASE: hedgedoc
|
|
MARIADB_PASSWORD: ''
|
|
MARIADB_ROOT_PASSWORD: ''
|
|
MARIADB_USER: hedgedoc
|
|
image: docker.io/mariadb
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./data/hedgedoc:/var/lib/mysql
|
|
homeassistant:
|
|
image: ghcr.io/home-assistant/home-assistant:stable
|
|
network_mode: host
|
|
privileged: true
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/homeassistant:/config
|
|
- /etc/localtime:/etc/localtime:ro
|
|
- /run/dbus:/run/dbus:ro
|
|
immich:
|
|
depends_on:
|
|
immich_cache:
|
|
condition: service_started
|
|
immich_db:
|
|
condition: service_started
|
|
environment:
|
|
DB_DATABASE_NAME: ''
|
|
DB_HOSTNAME: immich_db
|
|
DB_PASSWORD: ''
|
|
DB_USERNAME: ''
|
|
IMMICH_VERSION: ''
|
|
MACHINE_LEARNING_DEVICE_IDS: 0,1
|
|
MACHINE_LEARNING_WORKERS: '2'
|
|
REDIS_HOSTNAME: immich_cache
|
|
image: ghcr.io/immich-app/immich-server:release
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- /home/connor/photo/immich:/data
|
|
- /etc/localtime:/etc/localtime:ro
|
|
immich_cache:
|
|
healthcheck:
|
|
test: redis-cli ping || exit 1
|
|
image: docker.io/valkey/valkey:8-bookworm@sha256:fea8b3e67b15729d4bb70589eb03367bab9ad1ee89c876f54327fc7c6e618571
|
|
networks:
|
|
- internal
|
|
restart: always
|
|
volumes:
|
|
- ./data/immich/valkey:/data/
|
|
immich_db:
|
|
environment:
|
|
POSTGRES_DB: ''
|
|
POSTGRES_INITDB_ARGS: --data-checksums
|
|
POSTGRES_PASSWORD: ''
|
|
POSTGRES_USER: ''
|
|
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:41eacbe83eca995561fe43814fd4891e16e39632806253848efaf04d3c8a8b84
|
|
networks:
|
|
- internal
|
|
restart: always
|
|
shm_size: 128mb
|
|
volumes:
|
|
- ./data/immich/postgres:/var/lib/postgresql/data
|
|
immich_machine_learning:
|
|
devices:
|
|
- nvidia.com/gpu=all
|
|
environment:
|
|
DB_DATABASE_NAME: ''
|
|
DB_HOSTNAME: immich_db
|
|
DB_PASSWORD: ''
|
|
DB_USERNAME: ''
|
|
IMMICH_VERSION: ''
|
|
MACHINE_LEARNING_DEVICE_IDS: 0,1
|
|
MACHINE_LEARNING_WORKERS: '2'
|
|
REDIS_HOSTNAME: immich_cache
|
|
healthcheck:
|
|
disable: false
|
|
image: ghcr.io/immich-app/immich-machine-learning:release-cuda
|
|
networks:
|
|
- internal
|
|
restart: always
|
|
volumes:
|
|
- model-cache:/cache
|
|
jellyfin:
|
|
devices:
|
|
- /dev/dri:/dev/dri
|
|
environment:
|
|
JELLYFIN_PublishedServerUrl: jellyfin.rcjohnstone.com
|
|
PGID: '1000'
|
|
PUID: '1000'
|
|
TZ: America/Louisville
|
|
group_add:
|
|
- '989'
|
|
image: lscr.io/linuxserver/jellyfin:latest
|
|
networks:
|
|
- internal
|
|
ports:
|
|
- 7359:7359/udp
|
|
- 1900:1900/udp
|
|
- 8020:8096
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/jellyfin:/config
|
|
- ./data/jellyfin:/cache
|
|
- /home/connor/video:/video
|
|
- /home/connor/audio:/audio
|
|
- /home/connor/books:/books
|
|
jellyseerr:
|
|
environment:
|
|
LOG_LEVEL: debug
|
|
TZ: America/Louisville
|
|
image: fallenbagel/jellyseerr:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/jellyseer:/app/config
|
|
- /home/connor/video:/video
|
|
- /home/connor/audio:/audio
|
|
- /home/connor/books:/books
|
|
lazylibrarian:
|
|
environment:
|
|
DOCKER_MODS: linuxserver/mods:universal-calibre|linuxserver/mods:lazylibrarian-ffmpeg
|
|
PGID: '1000'
|
|
PUID: '1000'
|
|
TZ: America/Louisville
|
|
image: lscr.io/linuxserver/lazylibrarian:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/lazylibrarian:/config
|
|
- /home/connor/downloads:/downloads
|
|
- /home/connor/books:/books
|
|
lidarr:
|
|
environment:
|
|
PGID: '1000'
|
|
PUID: '1000'
|
|
TZ: America/Louisville
|
|
image: lscr.io/linuxserver/lidarr:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/lidarr:/config
|
|
- /home/connor/downloads:/data
|
|
- /home/connor/video:/video
|
|
- /home/connor/audio:/audio
|
|
- /home/connor/books:/books
|
|
litellm:
|
|
command:
|
|
- --config
|
|
- /app/config.yaml
|
|
- --port
|
|
- '4000'
|
|
depends_on:
|
|
litellm-db:
|
|
condition: service_healthy
|
|
environment:
|
|
ANTHROPIC_API_KEY: ''
|
|
DATABASE_URL: postgresql://litellm:@litellm-db:5432/litellm
|
|
GENERIC_AUTHORIZATION_ENDPOINT: https://auth.rcjohnstone.com/api/oidc/authorization
|
|
GENERIC_CLIENT_ID: litellm
|
|
GENERIC_CLIENT_SECRET: ''
|
|
GENERIC_SCOPE: openid email profile groups
|
|
GENERIC_TOKEN_ENDPOINT: https://auth.rcjohnstone.com/api/oidc/token
|
|
GENERIC_USERINFO_ENDPOINT: https://auth.rcjohnstone.com/api/oidc/userinfo
|
|
LITELLM_MASTER_KEY: ''
|
|
MOONSHOT_API_KEY: ''
|
|
OPENAI_API_KEY: ''
|
|
OPENCODE_ZEN_API_KEY: ''
|
|
PROXY_ADMIN_ID: connor
|
|
PROXY_BASE_URL: https://llm.rcjohnstone.com
|
|
STORE_MODEL_IN_DB: 'False'
|
|
UI_PASSWORD: ''
|
|
UI_USERNAME: ''
|
|
healthcheck:
|
|
interval: 60s
|
|
retries: 3
|
|
start_period: 90s
|
|
test:
|
|
- CMD-SHELL
|
|
- /app/.venv/bin/python3 -c "import urllib.request as u,sys; sys.exit(0 if u.urlopen('http://127.0.0.1:4000/health/liveliness',timeout=4).status==200
|
|
and u.urlopen('http://llama-swap:8080/v1/models',timeout=4).status==200 else
|
|
1)"
|
|
timeout: 5s
|
|
image: ghcr.io/berriai/litellm:main-stable
|
|
networks:
|
|
- internal
|
|
- llm
|
|
ports:
|
|
- 127.0.0.1:4000:4000
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/litellm/config.yaml:/app/config.yaml:ro
|
|
litellm-db:
|
|
environment:
|
|
POSTGRES_DB: litellm
|
|
POSTGRES_INITDB_ARGS: --data-checksums
|
|
POSTGRES_PASSWORD: ''
|
|
POSTGRES_USER: litellm
|
|
healthcheck:
|
|
interval: 30s
|
|
retries: 5
|
|
start_period: 300s
|
|
test:
|
|
- CMD-SHELL
|
|
- pg_isready -U litellm -d litellm
|
|
timeout: 5s
|
|
image: docker.io/library/postgres:16-alpine
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./data/litellm-db:/var/lib/postgresql/data
|
|
llama-swap:
|
|
command:
|
|
- --config
|
|
- /app/config.yaml
|
|
- --listen
|
|
- :8080
|
|
cpuset: 0-7
|
|
devices:
|
|
- nvidia.com/gpu=all
|
|
image: ghcr.io/mostlygeek/llama-swap:cuda
|
|
networks:
|
|
- internal
|
|
- llm
|
|
ports:
|
|
- 127.0.0.1:8188:8080
|
|
restart: unless-stopped
|
|
volumes:
|
|
- /opt/llama-models:/models:ro
|
|
- ./config/llama-swap/config.yaml:/app/config.yaml:ro
|
|
loki:
|
|
command:
|
|
- -config.file=/etc/loki/loki.yaml
|
|
image: docker.io/grafana/loki:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/loki/loki.yaml:/etc/loki/loki.yaml:ro
|
|
- ./data/loki:/loki
|
|
news-backend:
|
|
environment:
|
|
NEWS_DATABASE_URL: sqlite:///db/news.db
|
|
NTFY_PASS: ''
|
|
NTFY_URL: ''
|
|
NTFY_USER: ''
|
|
TZ: America/Louisville
|
|
healthcheck:
|
|
interval: 30s
|
|
retries: 3
|
|
start_period: 5s
|
|
test:
|
|
- CMD
|
|
- curl
|
|
- -f
|
|
- http://localhost:3000/healthz
|
|
timeout: 5s
|
|
image: git.rcjohnstone.com/connor/news:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./data/news/db:/db
|
|
- ./config/news:/config:ro
|
|
node-exporter:
|
|
command:
|
|
- --path.rootfs=/host
|
|
- --collector.systemd
|
|
image: quay.io/prometheus/node-exporter:latest
|
|
network_mode: host
|
|
pid: host
|
|
restart: unless-stopped
|
|
volumes:
|
|
- /:/host:ro,rslave
|
|
ntfy:
|
|
command:
|
|
- serve
|
|
environment:
|
|
TZ: America/Louisville
|
|
healthcheck:
|
|
interval: 60s
|
|
retries: 3
|
|
start_period: 40s
|
|
test:
|
|
- CMD-SHELL
|
|
- wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '"healthy"\s*:\s*true'
|
|
|| exit 1
|
|
timeout: 10s
|
|
image: binwiederhier/ntfy
|
|
init: true
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./data/ntfy/cache:/var/cache/ntfy
|
|
- ./data/ntfy/etc:/etc/ntfy
|
|
- ./data/ntfy/lib:/var/lib/ntfy
|
|
ollama-webui:
|
|
depends_on:
|
|
litellm:
|
|
condition: service_started
|
|
environment:
|
|
DEFAULT_MODELS: gpt-oss-20b
|
|
ENABLE_OLLAMA_API: 'False'
|
|
ENV: prod
|
|
OPENAI_API_BASE_URLS: http://litellm:4000/v1
|
|
OPENAI_API_KEYS: ''
|
|
TASK_MODEL_EXTERNAL: gpt-oss-20b
|
|
WEBUI_AUTH: 'True'
|
|
WEBUI_NAME: Connor Johnstone AI
|
|
WEBUI_SECRET_KEY: ''
|
|
WEBUI_URL: https://ai.rcjohnstone.com
|
|
image: ghcr.io/open-webui/open-webui:main
|
|
networks:
|
|
- llm
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./data/ollama-webui:/app/backend/data
|
|
personal_site_backend:
|
|
environment:
|
|
SMTP_PASSWORD: ''
|
|
SMTP_USERNAME: ''
|
|
image: git.rcjohnstone.com/connor/personal-site/backend:latest
|
|
networks:
|
|
- internal
|
|
ports:
|
|
- 127.0.0.1:8001:8080
|
|
restart: unless-stopped
|
|
personal_site_frontend:
|
|
environment:
|
|
BACKEND_URL: http://personal_site_backend:8080/email
|
|
image: git.rcjohnstone.com/connor/personal-site/frontend:latest
|
|
networks:
|
|
- internal
|
|
volumes:
|
|
- ./data/website/dist:/srv/app/dist
|
|
- ./data/website/static:/srv/app/static
|
|
prometheus:
|
|
command:
|
|
- --config.file=/etc/prometheus/prometheus.yml
|
|
- --storage.tsdb.path=/prometheus
|
|
- --storage.tsdb.retention.time=90d
|
|
- --web.enable-lifecycle
|
|
extra_hosts:
|
|
- host.containers.internal:host-gateway
|
|
image: docker.io/prom/prometheus:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
user: 0:0
|
|
volumes:
|
|
- ./config/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
|
|
- ./data/prometheus:/prometheus
|
|
prowlarr:
|
|
environment:
|
|
PGID: '1000'
|
|
PUID: '1000'
|
|
TZ: America/Louisville
|
|
image: lscr.io/linuxserver/prowlarr:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/prowlarr:/config
|
|
- /home/connor/downloads:/data
|
|
- /home/connor/video:/video
|
|
- /home/connor/audio:/audio
|
|
- /home/connor/books:/books
|
|
radarr:
|
|
environment:
|
|
PGID: '1000'
|
|
PUID: '1000'
|
|
TZ: America/Louisville
|
|
image: lscr.io/linuxserver/radarr:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/radarr:/config
|
|
- /home/connor/downloads:/data
|
|
- /home/connor/video:/video
|
|
- /home/connor/audio:/audio
|
|
- /home/connor/books:/books
|
|
runway-backend:
|
|
environment:
|
|
RUNWAY_DATABASE_URL: sqlite:///db/runway.db
|
|
RUNWAY_SECRET_KEY: ''
|
|
TZ: America/Louisville
|
|
image: git.rcjohnstone.com/connor/runway:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./data/runway/db:/db
|
|
searxng-core:
|
|
image: docker.io/searxng/searxng:latest
|
|
networks:
|
|
- internal
|
|
restart: always
|
|
volumes:
|
|
- ./config/searxng:/etc/searxng/:Z
|
|
- core-data:/var/cache/searxng/
|
|
searxng-valkey:
|
|
command:
|
|
- valkey-server
|
|
- --save
|
|
- '30'
|
|
- '1'
|
|
- --loglevel
|
|
- warning
|
|
image: docker.io/valkey/valkey:9-alpine
|
|
networks:
|
|
- internal
|
|
restart: always
|
|
volumes:
|
|
- valkey-data:/data/
|
|
sftpgo:
|
|
environment:
|
|
SFTPGO_WEBDAVD__BINDINGS__0__PORT: '10080'
|
|
image: drakkan/sftpgo:latest
|
|
networks:
|
|
- internal
|
|
ports:
|
|
- 2022:2022
|
|
restart: unless-stopped
|
|
volumes:
|
|
- /home/connor/video:/srv/sftpgo/data/video
|
|
- /home/connor/audio:/srv/sftpgo/data/audio
|
|
- /home/connor/docs:/var/lib/sftpgo
|
|
- ./data/sftpgo_backups:/srv/sftpgo/backups
|
|
shanty:
|
|
environment:
|
|
SHANTY_FANART_API_KEY: ''
|
|
SHANTY_LASTFM_API_KEY: ''
|
|
SHANTY_LASTFM_API_SECRET: ''
|
|
SHANTY_WEB_BIND: 0.0.0.0
|
|
image: git.rcjohnstone.com/connor/shanty:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/shanty:/config
|
|
- /usr/local/shanty:/data
|
|
- /home/connor/audio/shanty:/music
|
|
sonarr:
|
|
environment:
|
|
PGID: '1000'
|
|
PUID: '1000'
|
|
TZ: America/Louisville
|
|
image: lscr.io/linuxserver/sonarr:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/sonarr:/config
|
|
- /home/connor/downloads:/data
|
|
- /home/connor/video:/video
|
|
- /home/connor/audio:/audio
|
|
- /home/connor/books:/books
|
|
syncthing:
|
|
image: syncthing/syncthing
|
|
networks:
|
|
- internal
|
|
ports:
|
|
- 22000:22000/tcp
|
|
- 22000:22000/udp
|
|
- 21027:21027/udp
|
|
restart: unless-stopped
|
|
volumes:
|
|
- syncthing-home:/var/syncthing
|
|
- /home/connor/docs:/var/syncthing/Sync
|
|
- ./config/syncthing:/var/syncthing/config
|
|
traggo:
|
|
environment:
|
|
TRAGGO_DATABASE_CONNECTION: data/traggo.db
|
|
TRAGGO_DATABASE_DIALECT: sqlite3
|
|
TRAGGO_DEFAULT_USER_NAME: ''
|
|
TRAGGO_DEFAULT_USER_PASS: ''
|
|
TRAGGO_LOG_LEVEL: info
|
|
TRAGGO_PORT: '3030'
|
|
TZ: America/Louisville
|
|
image: docker.io/traggo/server:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./data/traggo:/opt/traggo/data
|
|
transmission:
|
|
cap_add:
|
|
- NET_ADMIN
|
|
- MKNOD
|
|
devices:
|
|
- /dev/net/tun
|
|
environment:
|
|
GLOBAL_APPLY_PERMISSIONS: 'false'
|
|
LOCAL_NETWORK: 192.168.0.0/16
|
|
OPENVPN_CONFIG: ca_vancouver
|
|
OPENVPN_PASSWORD: ''
|
|
OPENVPN_PROVIDER: PIA
|
|
OPENVPN_USERNAME: ''
|
|
PGID: '1000'
|
|
PUID: '1000'
|
|
TRANSMISSION_RPC_AUTHENTICATION_REQUIRED: 'true'
|
|
TRANSMISSION_RPC_PASSWORD: ''
|
|
TRANSMISSION_RPC_USERNAME: ''
|
|
TRANSMISSION_WEBUI: combustion
|
|
image: haugene/transmission-openvpn
|
|
logging:
|
|
driver: json-file
|
|
options:
|
|
max-size: 10m
|
|
networks:
|
|
default: null
|
|
internal: null
|
|
ports:
|
|
- 21028:21028
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/transmission:/config
|
|
- /home/connor/downloads:/data
|
|
viseron:
|
|
devices:
|
|
- nvidia.com/gpu=all
|
|
image: roflcoopter/amd64-cuda-viseron:latest
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
shm_size: 1024mb
|
|
volumes:
|
|
- /home/connor/video/viseron/segments:/segments
|
|
- /home/connor/video/viseron/snapshots:/snapshots
|
|
- /home/connor/video/viseron/thumbnails:/thumbnails
|
|
- /home/connor/video/viseron/event_clips:/event_clips
|
|
- /home/connor/video/viseron/timelapse:/timelapse
|
|
- ./config/viseron:/config
|
|
- ./config/viseron-init/10-adduser:/etc/cont-init.d/10-adduser:ro
|
|
- /etc/localtime:/etc/localtime:ro
|
|
whisparr:
|
|
environment:
|
|
PGID: '1000'
|
|
PUID: '1000'
|
|
TZ: America/Louisville
|
|
WEBUI_PORTS: 6969/tcp
|
|
image: ghcr.io/hotio/whisparr
|
|
networks:
|
|
- internal
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./config/whisparr:/config
|
|
- /home/connor/downloads:/data
|
|
- /home/connor/video:/video
|
|
- /home/connor/audio:/audio
|
|
- /home/connor/books:/books
|
|
volumes:
|
|
core-data: null
|
|
model-cache: null
|
|
syncthing-home: null
|
|
valkey-data: null
|
|
|
|
EXIT: 0
|
|
|
|
QA: scratch Caddyfile validation
|
|
---------------------------------
|
|
Command (non-root): caddy validate --config /tmp/opencode/Caddyfile
|
|
{"level":"info","ts":1788297896.0972424,"msg":"using config from file","file":"/tmp/opencode/Caddyfile"}
|
|
{"level":"info","ts":1788297896.1206155,"msg":"adapted config to JSON","adapter":"caddyfile"}
|
|
Error: setting up custom log 'log15': opening log writer using &logging.FileWriter{Filename:"/var/log/caddy/access.log", Mode:0x0, DirMode:"", Roll:(*bool)(nil), RollSizeMB:20, RollInterval:0, RollAtMinutes:[]int(nil), RollAt:[]string(nil), RollCompress:(*bool)(nil), RollCompression:"", RollLocalTime:false, RollKeep:10, RollKeepDays:0, BackupTimeFormat:""}: open /var/log/caddy/access.log: permission denied
|
|
EXIT: 1
|
|
Command (root, because /var/log/caddy is owned by caddy:caddy): sudo caddy validate --config /tmp/opencode/Caddyfile
|
|
{"level":"info","ts":1788297896.2967246,"msg":"using config from file","file":"/tmp/opencode/Caddyfile"}
|
|
{"level":"info","ts":1788297896.3153973,"msg":"adapted config to JSON","adapter":"caddyfile"}
|
|
2026/09/01 21:24:56.319 [34mINFO[0m http.auto_https enabling automatic HTTP->HTTPS redirects {"server_name": "srv0"}
|
|
2026/09/01 21:24:56.319 [34mINFO[0m tls.cache.maintenance started background certificate maintenance {"cache": "0x1e8126d7de00"}
|
|
2026/09/01 21:24:56.319 [33mWARN[0m http.auto_https server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server {"server_name": "srv1", "http_port": 80}
|
|
2026/09/01 21:24:56.333 [34mINFO[0m tls.cache.maintenance stopped background certificate maintenance {"cache": "0x1e8126d7de00"}
|
|
2026/09/01 21:24:56.333 [34mINFO[0m http servers shutting down with eternal grace period
|
|
Valid configuration
|
|
EXIT: 0
|
|
Command (non-root parse proof): caddy adapt --config /tmp/opencode/Caddyfile
|
|
{"logging":{"logs":{"default":{"writer":{"output":"stderr"},"encoder":{"format":"console"},"exclude":["http.log.access","http.log.access.log0","http.log.access.log1","http.log.access.log10","http.log.access.log11","http.log.access.log12","http.log.access.log13","http.log.access.log14","http.log.access.log15","http.log.access.log16","http.log.access.log17","http.log.access.log18","http.log.access.log19","http.log.access.log2","http.log.access.log20","http.log.access.log21","http.log.access.log22","http.log.access.log23","http.log.access.log24","http.log.access.log25","http.log.access.log26","http.log.access.log27","http.log.access.log28","http.log.access.log29","http.log.access.log3","http.log.access.log30","http.log.access.log31","http.log.access.log32","http.log.access.log4","http.log.access.log5","http.log.access.log6","http.log.access.log7","http.log.access.log8","http.log.access.log9"]},"log0":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log0"]},"log1":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log1"]},"log10":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log10"]},"log11":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log11"]},"log12":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log12"]},"log13":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log13"]},"log14":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log14"]},"log15":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log15"]},"log16":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log16"]},"log17":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log17"]},"log18":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log18"]},"log19":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log19"]},"log2":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log2"]},"log20":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log20"]},"log21":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log21"]},"log22":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log22"]},"log23":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log23"]},"log24":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log24"]},"log25":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log25"]},"log26":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log26"]},"log27":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log27"]},"log28":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log28"]},"log29":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log29"]},"log3":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log3"]},"log30":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log30"]},"log31":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log31"]},"log32":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log32"]},"log4":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log4"]},"log5":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log5"]},"log6":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log6"]},"log7":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log7"]},"log8":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log8"]},"log9":{"writer":{"filename":"/var/log/caddy/access.log","output":"file","roll_keep":10,"roll_size_mb":20},"encoder":{"fields":{"request\u003euri":{"actions":[{"parameter":"p","type":"replace","value":"REDACTED"},{"parameter":"t","type":"replace","value":"REDACTED"},{"parameter":"s","type":"replace","value":"REDACTED"},{"parameter":"password","type":"replace","value":"REDACTED"},{"parameter":"token","type":"replace","value":"REDACTED"},{"parameter":"access_token","type":"replace","value":"REDACTED"},{"parameter":"apikey","type":"replace","value":"REDACTED"},{"parameter":"api_key","type":"replace","value":"REDACTED"}],"filter":"query"}},"format":"filter","wrap":{"format":"json"}},"include":["http.log.access.log9"]}}},"apps":{"http":{"servers":{"srv0":{"listen":[":443"],"routes":[{"match":[{"host":["lazylibrarian.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}}]},{"handle":[{"abort":true,"handler":"static_response"}],"match":[{"not":[{"remote_ip":{"ranges":["10.0.0.0/24","10.0.1.0/24","10.89.0.0/16","127.0.0.1/32"]}}]}]},{"handle":[{"handler":"reverse_proxy","upstreams":[{"dial":"lazylibrarian:5299"}]}]}]}],"terminal":true},{"match":[{"host":["transmission.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}}]},{"handle":[{"abort":true,"handler":"static_response"}],"match":[{"not":[{"remote_ip":{"ranges":["10.0.0.0/24","10.0.1.0/24","10.89.0.0/16","127.0.0.1/32"]}}]}]},{"handle":[{"handler":"reverse_proxy","upstreams":[{"dial":"transmission:9091"}]}]}]}],"terminal":true},{"match":[{"host":["jellyseerr.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handle_response":[{"match":{"status_code":[2]},"routes":[{"handle":[{"handler":"vars"}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Email"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Email":["{http.reverse_proxy.header.Remote-Email}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Email}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Groups"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Groups":["{http.reverse_proxy.header.Remote-Groups}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Groups}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Name"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Name":["{http.reverse_proxy.header.Remote-Name}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Name}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-User"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-User":["{http.reverse_proxy.header.Remote-User}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-User}":[""]}}]}]}]}],"handler":"reverse_proxy","headers":{"request":{"set":{"X-Forwarded-Method":["{http.request.method}"],"X-Forwarded-Uri":["{http.request.uri}"]}}},"rewrite":{"method":"GET","uri":"/api/authz/forward-auth"},"upstreams":[{"dial":"authelia:9091"}]},{"handler":"reverse_proxy","upstreams":[{"dial":"jellyseerr:5055"}]}]}]}],"terminal":true},{"match":[{"host":["llama-swap.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}}]},{"handle":[{"abort":true,"handler":"static_response"}],"match":[{"not":[{"remote_ip":{"ranges":["10.0.0.0/24","10.0.1.0/24","10.89.0.0/16","127.0.0.1/32"]}}]}]},{"handle":[{"flush_interval":-1,"handler":"reverse_proxy","transport":{"dial_timeout":10000000000,"protocol":"http","read_timeout":900000000000,"write_timeout":900000000000},"upstreams":[{"dial":"llama-swap:8080"}]}]}]}],"terminal":true},{"match":[{"host":["jellyfin.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handler":"reverse_proxy","upstreams":[{"dial":"jellyfin:8096"}]}]}]}],"terminal":true},{"match":[{"host":["prowlarr.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}}]},{"handle":[{"abort":true,"handler":"static_response"}],"match":[{"not":[{"remote_ip":{"ranges":["10.0.0.0/24","10.0.1.0/24","10.89.0.0/16","127.0.0.1/32"]}}]}]},{"handle":[{"handler":"reverse_proxy","upstreams":[{"dial":"prowlarr:9696"}]}]}]}],"terminal":true},{"match":[{"host":["whisparr.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}}]},{"handle":[{"abort":true,"handler":"static_response"}],"match":[{"not":[{"remote_ip":{"ranges":["10.0.0.0/24","10.0.1.0/24","10.89.0.0/16","127.0.0.1/32"]}}]}]},{"handle":[{"handler":"reverse_proxy","upstreams":[{"dial":"whisparr:6969"}]}]}]}],"terminal":true},{"match":[{"host":["backend.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handler":"reverse_proxy","upstreams":[{"dial":"personal_site_backend:8080"}]}]}]}],"terminal":true},{"match":[{"host":["grafana.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}}]},{"handle":[{"abort":true,"handler":"static_response"}],"match":[{"not":[{"remote_ip":{"ranges":["10.0.0.0/24","10.0.1.0/24","10.89.0.0/16","127.0.0.1/32"]}}]}]},{"handle":[{"handler":"reverse_proxy","upstreams":[{"dial":"grafana:3000"}]}]}]}],"terminal":true},{"match":[{"host":["runway.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handle_response":[{"match":{"status_code":[2]},"routes":[{"handle":[{"handler":"vars"}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Email"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Email":["{http.reverse_proxy.header.Remote-Email}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Email}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Groups"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Groups":["{http.reverse_proxy.header.Remote-Groups}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Groups}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Name"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Name":["{http.reverse_proxy.header.Remote-Name}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Name}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-User"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-User":["{http.reverse_proxy.header.Remote-User}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-User}":[""]}}]}]}]}],"handler":"reverse_proxy","headers":{"request":{"set":{"X-Forwarded-Method":["{http.request.method}"],"X-Forwarded-Uri":["{http.request.uri}"]}}},"rewrite":{"method":"GET","uri":"/api/authz/forward-auth"},"upstreams":[{"dial":"authelia:9091"}]}]},{"group":"group19","handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"reverse_proxy","upstreams":[{"dial":"runway-backend:3000"}]}]}]}],"match":[{"path":["/api","/api/*"]}]},{"group":"group19","handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"vars","root":"/srv/runway/dist"}]},{"handle":[{"handler":"rewrite","uri":"{http.matchers.file.relative}"}],"match":[{"file":{"try_files":["{http.request.uri.path}","/index.html"]}}]},{"handle":[{"handler":"file_server","hide":["/tmp/opencode/Caddyfile"]}]}]}]}]}],"terminal":true},{"match":[{"host":["baikal.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handler":"reverse_proxy","upstreams":[{"dial":"baikal:80"}]}]}]}],"terminal":true},{"match":[{"host":["shanty.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}}]},{"group":"group22","handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"reverse_proxy","upstreams":[{"dial":"shanty:8085"}]}]}]}],"match":[{"path":["/rest/*"]}]},{"group":"group22","handle":[{"handler":"subroute","routes":[{"handle":[{"handle_response":[{"match":{"status_code":[2]},"routes":[{"handle":[{"handler":"vars"}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Email"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Email":["{http.reverse_proxy.header.Remote-Email}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Email}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Groups"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Groups":["{http.reverse_proxy.header.Remote-Groups}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Groups}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Name"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Name":["{http.reverse_proxy.header.Remote-Name}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Name}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-User"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-User":["{http.reverse_proxy.header.Remote-User}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-User}":[""]}}]}]}]}],"handler":"reverse_proxy","headers":{"request":{"set":{"X-Forwarded-Method":["{http.request.method}"],"X-Forwarded-Uri":["{http.request.uri}"]}}},"rewrite":{"method":"GET","uri":"/api/authz/forward-auth"},"upstreams":[{"dial":"authelia:9091"}]},{"handler":"reverse_proxy","upstreams":[{"dial":"shanty:8085"}]}]}]}]}]}],"terminal":true},{"match":[{"host":["flexio.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}}]},{"group":"group24","handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"reverse_proxy","upstreams":[{"dial":"flexio-api:8080"}]}]}]}],"match":[{"path":["/api/*"]}]},{"group":"group24","handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"vars","root":"/srv/flexio"}]},{"handle":[{"handler":"rewrite","uri":"{http.matchers.file.relative}"}],"match":[{"file":{"try_files":["{http.request.uri.path}","/index.html"]}}]},{"handle":[{"encodings":{"gzip":{},"zstd":{}},"handler":"encode","prefer":["gzip","zstd"]},{"handler":"file_server","hide":["/tmp/opencode/Caddyfile"]}]}]}]}]}],"terminal":true},{"match":[{"host":["radarr.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}}]},{"handle":[{"abort":true,"handler":"static_response"}],"match":[{"not":[{"remote_ip":{"ranges":["10.0.0.0/24","10.0.1.0/24","10.89.0.0/16","127.0.0.1/32"]}}]}]},{"handle":[{"handler":"reverse_proxy","upstreams":[{"dial":"radarr:7878"}]}]}]}],"terminal":true},{"match":[{"host":["sonarr.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}}]},{"handle":[{"abort":true,"handler":"static_response"}],"match":[{"not":[{"remote_ip":{"ranges":["10.0.0.0/24","10.0.1.0/24","10.89.0.0/16","127.0.0.1/32"]}}]}]},{"handle":[{"handler":"reverse_proxy","upstreams":[{"dial":"sonarr:8989"}]}]}]}],"terminal":true},{"match":[{"host":["lidarr.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}}]},{"handle":[{"abort":true,"handler":"static_response"}],"match":[{"not":[{"remote_ip":{"ranges":["10.0.0.0/24","10.0.1.0/24","10.89.0.0/16","127.0.0.1/32"]}}]}]},{"handle":[{"handler":"reverse_proxy","upstreams":[{"dial":"lidarr:8686"}]}]}]}],"terminal":true},{"match":[{"host":["search.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}}]},{"handle":[{"abort":true,"handler":"static_response"}],"match":[{"not":[{"remote_ip":{"ranges":["10.0.0.0/24","10.0.1.0/24","10.89.0.0/16","127.0.0.1/32"]}}]}]},{"handle":[{"handler":"reverse_proxy","upstreams":[{"dial":"searxng-core:8080"}]}]}]}],"terminal":true},{"match":[{"host":["camera.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handle_response":[{"match":{"status_code":[2]},"routes":[{"handle":[{"handler":"vars"}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Email"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Email":["{http.reverse_proxy.header.Remote-Email}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Email}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Groups"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Groups":["{http.reverse_proxy.header.Remote-Groups}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Groups}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Name"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Name":["{http.reverse_proxy.header.Remote-Name}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Name}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-User"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-User":["{http.reverse_proxy.header.Remote-User}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-User}":[""]}}]}]}]}],"handler":"reverse_proxy","headers":{"request":{"set":{"X-Forwarded-Method":["{http.request.method}"],"X-Forwarded-Uri":["{http.request.uri}"]}}},"rewrite":{"method":"GET","uri":"/api/authz/forward-auth"},"upstreams":[{"dial":"authelia:9091"}]},{"handler":"reverse_proxy","upstreams":[{"dial":"viseron:8888"}]}]}]}],"terminal":true},{"match":[{"host":["photo.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handler":"reverse_proxy","upstreams":[{"dial":"immich:2283"}]}]}]}],"terminal":true},{"match":[{"host":["files.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handler":"reverse_proxy","upstreams":[{"dial":"sftpgo:10080"}]}]}]}],"terminal":true},{"match":[{"host":["auth.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handler":"reverse_proxy","upstreams":[{"dial":"authelia:9091"}]}]}]}],"terminal":true},{"match":[{"host":["ntfy.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handler":"reverse_proxy","upstreams":[{"dial":"ntfy:80"}]}]}]}],"terminal":true},{"match":[{"host":["time.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}}]},{"group":"group35","handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"reverse_proxy","upstreams":[{"dial":"traggo:3030"}]}]}]}],"match":[{"path":["/graphql"],"remote_ip":{"ranges":["10.0.0.0/24","10.0.1.0/24","10.89.0.0/16"]}}]},{"group":"group35","handle":[{"handler":"subroute","routes":[{"handle":[{"handle_response":[{"match":{"status_code":[2]},"routes":[{"handle":[{"handler":"vars"}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Email"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Email":["{http.reverse_proxy.header.Remote-Email}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Email}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Groups"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Groups":["{http.reverse_proxy.header.Remote-Groups}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Groups}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Name"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Name":["{http.reverse_proxy.header.Remote-Name}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Name}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-User"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-User":["{http.reverse_proxy.header.Remote-User}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-User}":[""]}}]}]}]}],"handler":"reverse_proxy","headers":{"request":{"set":{"X-Forwarded-Method":["{http.request.method}"],"X-Forwarded-Uri":["{http.request.uri}"]}}},"rewrite":{"method":"GET","uri":"/api/authz/forward-auth"},"upstreams":[{"dial":"authelia:9091"}]},{"handler":"reverse_proxy","upstreams":[{"dial":"traggo:3030"}]}]}]}]}]}],"terminal":true},{"match":[{"host":["sftp.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handle_response":[{"match":{"status_code":[2]},"routes":[{"handle":[{"handler":"vars"}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Email"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Email":["{http.reverse_proxy.header.Remote-Email}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Email}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Groups"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Groups":["{http.reverse_proxy.header.Remote-Groups}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Groups}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Name"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Name":["{http.reverse_proxy.header.Remote-Name}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Name}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-User"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-User":["{http.reverse_proxy.header.Remote-User}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-User}":[""]}}]}]}]}],"handler":"reverse_proxy","headers":{"request":{"set":{"X-Forwarded-Method":["{http.request.method}"],"X-Forwarded-Uri":["{http.request.uri}"]}}},"rewrite":{"method":"GET","uri":"/api/authz/forward-auth"},"upstreams":[{"dial":"authelia:9091"}]},{"handler":"reverse_proxy","upstreams":[{"dial":"sftpgo:8080"}]}]}]}],"terminal":true},{"match":[{"host":["sync.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}}]},{"handle":[{"abort":true,"handler":"static_response"}],"match":[{"not":[{"remote_ip":{"ranges":["10.0.0.0/24","10.0.1.0/24","10.89.0.0/16","127.0.0.1/32"]}}]}]},{"handle":[{"handler":"reverse_proxy","upstreams":[{"dial":"syncthing:8384"}]}]}]}],"terminal":true},{"match":[{"host":["news.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}}]},{"group":"group39","handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"reverse_proxy","upstreams":[{"dial":"news-backend:3000"}]}]}]}],"match":[{"path":["/api","/api/*"]}]},{"group":"group39","handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"vars","root":"/srv/news/dist"}]},{"handle":[{"handler":"rewrite","uri":"{http.matchers.file.relative}"}],"match":[{"file":{"try_files":["{http.request.uri.path}","/index.html"]}}]},{"handle":[{"handler":"file_server","hide":["/tmp/opencode/Caddyfile"]}]}]}]},{"handle":[{"abort":true,"handler":"static_response"}],"match":[{"not":[{"remote_ip":{"ranges":["10.0.0.0/24","10.0.1.0/24","10.89.0.0/16","127.0.0.1/32"]}}]}]}]}],"terminal":true},{"match":[{"host":["git.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handler":"reverse_proxy","upstreams":[{"dial":"gitea:3000"}]}]}]}],"terminal":true},{"match":[{"host":["llm.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}}]},{"handle":[{"abort":true,"handler":"static_response"}],"match":[{"not":[{"remote_ip":{"ranges":["10.0.0.0/24","10.0.1.0/24","10.89.0.0/16","127.0.0.1/32"]}}]}]},{"handle":[{"flush_interval":-1,"handler":"reverse_proxy","transport":{"dial_timeout":10000000000,"protocol":"http","read_timeout":900000000000,"write_timeout":900000000000},"upstreams":[{"dial":"litellm:4000"}]}]}]}],"terminal":true},{"match":[{"host":["bw.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handler":"reverse_proxy","upstreams":[{"dial":"bitwarden:80"}]}]}]}],"terminal":true},{"match":[{"host":["md.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handle_response":[{"match":{"status_code":[2]},"routes":[{"handle":[{"handler":"vars"}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Email"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Email":["{http.reverse_proxy.header.Remote-Email}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Email}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Groups"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Groups":["{http.reverse_proxy.header.Remote-Groups}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Groups}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Name"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Name":["{http.reverse_proxy.header.Remote-Name}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Name}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-User"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-User":["{http.reverse_proxy.header.Remote-User}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-User}":[""]}}]}]}]}],"handler":"reverse_proxy","headers":{"request":{"set":{"X-Forwarded-Method":["{http.request.method}"],"X-Forwarded-Uri":["{http.request.uri}"]}}},"rewrite":{"method":"GET","uri":"/api/authz/forward-auth"},"upstreams":[{"dial":"authelia:9091"}]},{"handler":"reverse_proxy","upstreams":[{"dial":"hedgedoc:3000"}]}]}]}],"terminal":true},{"match":[{"host":["ai.rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handle_response":[{"match":{"status_code":[2]},"routes":[{"handle":[{"handler":"vars"}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Email"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Email":["{http.reverse_proxy.header.Remote-Email}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Email}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Groups"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Groups":["{http.reverse_proxy.header.Remote-Groups}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Groups}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-Name"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-Name":["{http.reverse_proxy.header.Remote-Name}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-Name}":[""]}}]}]},{"handle":[{"handler":"headers","request":{"delete":["Remote-User"]}}]},{"handle":[{"handler":"headers","request":{"set":{"Remote-User":["{http.reverse_proxy.header.Remote-User}"]}}}],"match":[{"not":[{"vars":{"{http.reverse_proxy.header.Remote-User}":[""]}}]}]}]}],"handler":"reverse_proxy","headers":{"request":{"set":{"X-Forwarded-Method":["{http.request.method}"],"X-Forwarded-Uri":["{http.request.uri}"]}}},"rewrite":{"method":"GET","uri":"/api/authz/forward-auth"},"upstreams":[{"dial":"authelia:9091"}]},{"handler":"reverse_proxy","upstreams":[{"dial":"ollama-webui:8080"}]}]}]}],"terminal":true},{"match":[{"host":["rcjohnstone.com"]}],"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"vars","root":"/srv/www"},{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handler":"file_server","hide":["/tmp/opencode/Caddyfile"]}]}]}],"terminal":true},{"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"vars","root":"/srv/www"},{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handler":"file_server","hide":["/tmp/opencode/Caddyfile"]}]}]}],"terminal":true}],"tls_connection_policies":[{"default_sni":"rconnorjohnstone.com"}],"logs":{"default_logger_name":"log32","logger_names":{"ai.rcjohnstone.com":["log14"],"auth.rcjohnstone.com":["log0"],"backend.rcjohnstone.com":["log2"],"baikal.rcjohnstone.com":["log10"],"bw.rcjohnstone.com":["log3"],"camera.rcjohnstone.com":["log31"],"files.rcjohnstone.com":["log16"],"flexio.rcjohnstone.com":["log17"],"git.rcjohnstone.com":["log7"],"grafana.rcjohnstone.com":["log29"],"jellyfin.rcjohnstone.com":["log6"],"jellyseerr.rcjohnstone.com":["log8"],"lazylibrarian.rcjohnstone.com":["log24"],"lidarr.rcjohnstone.com":["log22"],"llama-swap.rcjohnstone.com":["log28"],"llm.rcjohnstone.com":["log27"],"md.rcjohnstone.com":["log11"],"news.rcjohnstone.com":["log30"],"ntfy.rcjohnstone.com":["log4"],"photo.rcjohnstone.com":["log5"],"prowlarr.rcjohnstone.com":["log19"],"radarr.rcjohnstone.com":["log20"],"rcjohnstone.com":["log1"],"runway.rcjohnstone.com":["log9"],"search.rcjohnstone.com":["log26"],"sftp.rcjohnstone.com":["log15"],"shanty.rcjohnstone.com":["log13"],"sonarr.rcjohnstone.com":["log21"],"sync.rcjohnstone.com":["log25"],"time.rcjohnstone.com":["log12"],"transmission.rcjohnstone.com":["log18"],"whisparr.rcjohnstone.com":["log23"]}}},"srv1":{"listen":[":80"],"routes":[{"handle":[{"handler":"vars","root":"/srv/www"},{"handler":"headers","response":{"require":{"headers":{"Referrer-Policy":null,"Strict-Transport-Security":null,"X-Content-Type-Options":null,"X-Frame-Options":null}},"set":{"Referrer-Policy":["strict-origin-when-cross-origin"],"Strict-Transport-Security":["max-age=31536000; includeSubDomains"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"]}}},{"handler":"file_server","hide":["/tmp/opencode/Caddyfile"]}]}],"logs":{"default_logger_name":"log32"}},"srv2":{"listen":[":9010"],"routes":[{"match":[{"path":["/metrics"]}],"handle":[{"handler":"metrics"}]}]}},"metrics":{}},"tls":{"automation":{"policies":[{"subjects":["lazylibrarian.rcjohnstone.com","llama-swap.rcjohnstone.com","grafana.rcjohnstone.com","news.rcjohnstone.com","llm.rcjohnstone.com"],"issuers":[{"module":"internal"}],"key_type":"rsa4096"},{"issuers":[{"email":"c@rcjohnstone.com","module":"acme"},{"ca":"https://acme.zerossl.com/v2/DV90","email":"c@rcjohnstone.com","module":"acme"}],"key_type":"rsa4096"}]}}}}
|
|
EXIT: 0
|
|
|
|
Protected files: AFTER stats
|
|
-----------------------------
|
|
File: /home/connor/compose.yml
|
|
Size: 45902 Blocks: 96 IO Block: 4096 regular file
|
|
Device: 253,0 Inode: 3456331 Links: 1
|
|
Access: (0644/-rw-r--r--) Uid: ( 1000/ connor) Gid: ( 1000/ connor)
|
|
Access: 2026-09-01 13:31:00.127897473 -0400
|
|
Modify: 2026-09-01 13:31:00.123329809 -0400
|
|
Change: 2026-09-01 13:31:00.123329809 -0400
|
|
Birth: 2026-09-01 09:59:16.224683093 -0400
|
|
File: /home/connor/Caddyfile
|
|
Size: 15394 Blocks: 32 IO Block: 4096 regular file
|
|
Device: 253,0 Inode: 3456314 Links: 1
|
|
Access: (0644/-rw-r--r--) Uid: ( 1000/ connor) Gid: ( 1000/ connor)
|
|
Access: 2026-09-01 09:51:56.598569747 -0400
|
|
Modify: 2026-08-28 15:51:59.475726235 -0400
|
|
Change: 2026-08-28 15:51:59.475726235 -0400
|
|
Birth: 2026-08-26 22:10:30.165466997 -0400
|
|
File: /home/connor/data/ntfy/etc/server.yml
|
|
Size: 506 Blocks: 8 IO Block: 4096 regular file
|
|
Device: 253,0 Inode: 7224774 Links: 1
|
|
Access: (0644/-rw-r--r--) Uid: ( 1000/ connor) Gid: ( 0/ root)
|
|
Access: 2026-09-01 17:21:22.759598097 -0400
|
|
Modify: 2026-08-20 17:25:40.623346035 -0400
|
|
Change: 2026-08-20 17:25:40.623346035 -0400
|
|
Birth: 2026-02-27 16:47:40.215201274 -0500
|
|
File: /home/connor/config/prometheus/prometheus.yml
|
|
Size: 877 Blocks: 8 IO Block: 4096 regular file
|
|
Device: 253,0 Inode: 10486193 Links: 1
|
|
Access: (0644/-rw-r--r--) Uid: ( 1000/ connor) Gid: ( 1000/ connor)
|
|
Access: 2026-09-01 17:21:22.714596100 -0400
|
|
Modify: 2026-08-25 22:21:00.811095356 -0400
|
|
Change: 2026-08-25 22:21:00.811095356 -0400
|
|
Birth: 2026-08-25 22:21:00.810402344 -0400
|