evolutioncrm:
- Point the evo-crm-frontend domain at port 80 instead of 5173: the
community frontend image serves the built app via nginx on port 80
(5173 is the vite dev port), so the domain returned 502.
- Set EVOLUTION_API_ONLY_SERVER=true on evo-crm: the community image
ships without the Rails dashboard views (the UI lives in the separate
evo-crm-frontend service), so the default root route (dashboard#index)
can never render and returned 406 for every request. With the flag the
root serves the API status JSON; all /api routes are unaffected.
- Drop the evolution-go-* volumes that were left over from the other
template.
evolutiongo:
- Evolution GO has no route on "/" and answers 503 (LICENSE_REQUIRED)
on API routes until a license is activated through the bundled
manager UI, so the single domain never responded. Add a small nginx
gateway that redirects "/" to /manager/login and proxies everything
else (WebSockets included) 1:1 to evolution-go:8080, and point the
domain at it.
- Persist /app/dbdata and /app/logs.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The named volume mounted at /home/coder/.config was created root-owned
(the path does not exist in the codercom/code-server image), so
code-server running as uid 1000 failed with
"EACCES: permission denied, mkdir '/home/coder/.config/code-server'"
and restarted in a loop, leaving Traefik returning 404. The .config
directory already lives inside /home/coder, which is persisted by the
code-server-home volume, so the extra volume is unnecessary.
Verified: deploy done, container healthy, domain on port 8080 returns
HTTP 200 with the code-server login page.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The template deployed but returned a persistent HTTP 500: MARIADB_DATABASE
pre-created the wallabag database, so the image entrypoint detected an
existing database, skipped bin/console wallabag:install and left an empty
schema. Only MARIADB_ROOT_PASSWORD is set now, letting the entrypoint
create the database/user and run the installer on first boot (matching the
official wallabag docker-compose).
Also:
- build SYMFONY__ENV__DOMAIN_NAME from the generated domain with the http
scheme so assets/redirects match how the domain is served
- point SYMFONY__ENV__REDIS_HOST at the wallabag-redis service (default is
'redis', which does not resolve here)
- randomize SYMFONY__ENV__SECRET instead of relying on the image's
hardcoded default
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Reword two docker-compose comments so the literal string
"dokploy-network" no longer appears. The compose never declared the
network manually (Dokploy attaches it automatically); the automated
template check was tripping on the comment text alone.
- meta.json: keep canary's richer description and tags
(kanban, project-management), bumping only the version to v1.3.1.
Deploy-verified on a test Dokploy instance: full stack booted in 465s
and proxy:80 answered HTTP 200 with the Plane landing page.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Zulip 12 rejects requests forwarded by an untrusted reverse proxy with
a 500 "Proxy-Misconfiguration: Incorrect reverse proxy IPs set in
Zulip" error page. TRUST_GATEWAY_IP=True only whitelists the
container's default-route gateway IP, but Dokploy's Traefik connects
from its own container IP on the (dynamically-subnetted) compose
network, so it was never trusted.
Replace TRUST_GATEWAY_IP with LOADBALANCER_IPS covering the RFC1918
ranges, which Zulip feeds into nginx set_real_ip_from / its trusted
proxy list, so Traefik is trusted regardless of which Docker subnet it
connects from.
Also align meta.json version with the shipped image tag (12.1-0).
Note: the zulip-server image ships a HEALTHCHECK (/health, 300s start
period) and first boot runs full migrations, so Traefik only exposes
the router once the container turns healthy — expect several minutes
of 404 on the domain right after the first deploy.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
engram `cloud serve` only registers /health, /sync/* and /dashboard/*;
Go's ServeMux answers "404 page not found" at the root path, which is
indistinguishable from a Traefik router miss. The deploy itself was fine
(both containers healthy), but the default domain pointed at `/` and
kept returning 404. Adding `path = "/dashboard"` routes the app's real
browser surface (login page / dashboard).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The previous merge of origin/canary into this branch was committed with
unresolved conflict markers in docker-compose.yml and template.toml,
producing invalid YAML/TOML. It also carried over the old kong
eval-based entrypoint, which made the kong container unhealthy and
failed the deploy (dependency kong failed to start).
This commit restores the known-good template structure from canary
(kong-entrypoint.sh, declarative kong.yml with JWKS/asymmetric key
routes, vector + analytics stack, correct domains) and applies only
the version bumps intended by this PR:
- studio 2026.04.27 -> 2026.06.03-sha-0bca601
- gotrue v2.186.0 -> v2.189.0
- postgrest v14.8 -> v14.12
- realtime v2.76.5 -> v2.102.3
- storage-api v1.48.26 -> v1.60.4
- postgres-meta v0.96.3 -> v0.96.6
- edge-runtime v1.71.2 -> v1.74.0
- postgres 15.8.1.085 -> 17.6.1.136
- supavisor 2.7.4 -> 2.9.5
Deploy-tested on Dokploy: all 13 containers running, kong healthy,
studio dashboard reachable through kong (HTTP 200).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The filerun/filerun image runs as user filerun (1001:1001), but /var/www/html
is created as root in the image, so the named volume inherits root:root
ownership. The entrypoint's first-run installer then fails to download
filerun.zip into /var/www/html (Permission denied) and the container
crash-loops with exit 1.
- Add a busybox init service that chowns the html and user-files volumes to
1001:1001 before filerun starts (gated via service_completed_successfully).
- Drop the user: "99:100" override, which is meant for pre-chowned host bind
mounts in the upstream example, not named volumes.
- Remove the UTF-8 BOM at the start of the file, the legacy links: entry and
the obsolete version: key.
Verified on a live Dokploy deploy: HTTP 200 with page title
"FileRun :: Installation".
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- heyform/community-edition:latest now points at v3.0.0-rc.* which hangs
after Mongoose init and never binds port 8000 (502 behind Traefik).
Pin the last stable release v0.1.0 (boots and serves the UI).
- eqalpha/keydb:6.3.3 does not exist on Docker Hub; use the multi-arch
alpine tag instead.
Deploy-tested on a Dokploy instance: HTTP 200, HeyForm UI renders.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The vabene1111/recipes 2.x image starts gunicorn on unix:/tmp/tandoor.sock
unless TANDOOR_PORT is set, so Traefik got 502. Set TANDOOR_PORT=8080 and
point the domain to 8080 (80 was never listening).
Deploy-tested on a Dokploy instance: HTTP 200, setup page renders.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- move each template's metadata to blueprints/<id>/meta.json (442 files, byte-identical roundtrip with the old root meta.json)
- generate the served meta.json at build time into app/public/meta.json (gitignored); pnpm dev/build run the generator first
- CI validates every blueprints/<id>/meta.json via generate-meta.js --check (required fields, id/folder match, logo exists, folder<->meta bidirectionality) and rejects any committed root meta.json
- remove root meta.json, dedupe-and-sort-meta.js and build-scripts/process-meta.js (obsolete)
- update CONTRIBUTING.md, AGENTS.md and README.md
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>