# Quadlet unit: Marreta content-cleaning proxy (rootless, boot-persistent). # # Install path on dankclaw: ~/.config/containers/systemd/marreta.container # Unit name: marreta.service (container name: marreta) # # Marreta is a Laravel app (serversideup/php:8.4-fpm-nginx) that strips # paywalls/tracking from a fetched page. It reuses gluetun's network # namespace (Network=gluetun.container) so ALL of its outbound fetches exit # the same WireGuard tunnel as SearXNG — the curl strategy AND, because the # browser companion shares the same netns, the Lightpanda fetches too # (marreta's PROXY_URL does NOT cover the browser: the CDP connection passes # no proxy, so netns sharing is the only way to keep the browser's egress on # the tunnel). # # Port: the shared netns already has SearXNG on 8080, so marreta must NOT # bind 8080. NGINX_HTTP_PORT=8085 relocates it (the fpm-nginx image does # not bake conf.d/*.conf; the site config is envsubst'd from # ${NGINX_HTTP_PORT} at container start). Gluetun publishes host 8082 -> # 8085 so Caddy can reach it; see dankclaw/searxng/quadlet/gluetun.container. # The app reaches its browser companion over loopback (same netns): # ws://127.0.0.1:9222. # # Secrets (APP_KEY, admin creds) live in /home/dank/Containers/marreta/env # (mode 0600, dank-owned so the rootless unit can read it); this file holds # none. See serverAppConfigs-docs/Dankclaw/Marreta.md. [Unit] Description=Marreta content-cleaning proxy container Wants=gluetun.service marreta-browser.service After=gluetun.service marreta-browser.service network.target [Container] ContainerName=marreta Network=gluetun.container Image=ghcr.io/manualdousuario/marreta:latest # Relocate off SearXNG's 8080 inside the shared netns. Environment=NGINX_HTTP_PORT=8085 Environment=APP_NAME=Marreta Environment=APP_ENV=production Environment=APP_DEBUG=false Environment=APP_URL=https://marreta.franksdank.cloud Environment=APP_LOCALE=en Environment="APP_DESCRIPTION=Paywall-free reading" Environment=BROWSER_WS_ENDPOINT=ws://127.0.0.1:9222 Environment=DISABLE_CACHE=false # Secrets expanded from the EnvironmentFile below. Environment=APP_KEY=${MARRETA_APP_KEY} Environment=ADMIN_EMAIL=${MARRETA_ADMIN_EMAIL} Environment=ADMIN_PASSWORD=${MARRETA_ADMIN_PASSWORD} # Named volume: podman auto-creates it and copyups the image's storage/app # ownership (www-data), so the app can write its SQLite DB + cache. Volume=marreta_storage:/var/www/html/storage/app HealthCmd=["curl","-fsS","-o","/dev/null","http://127.0.0.1:8085/up"] HealthInterval=30s HealthTimeout=10s HealthRetries=5 HealthStartPeriod=120s [Service] EnvironmentFile=/home/dank/Containers/marreta/env TimeoutStartSec=900 Restart=always RestartSec=10 [Install] WantedBy=default.target