Compare commits

..
Author SHA1 Message Date
Mauricio SiuandClaude Fable 5 571fa42323 Add OpenStatus template
Self-hosted OpenStatus (status pages + uptime monitoring) following the
official docker-compose.github-packages.yaml setup: local libSQL database,
one-shot migration runner built from the pinned upstream commit, workflows,
API server, dashboard, status-page, and the private-location ingest server.
All app images pinned to upstream commit e1a9825; Tinybird analytics run in
no-op mode by default.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 14:03:32 -06:00
Ghazi Ben DahmaneandGitHub b87d9a9a8a feat: add Rustrak SQLite full-stack template (#1115) 2026-08-30 17:46:06 -06:00
Ghazi Ben DahmaneandGitHub a9aa64ee51 feat: add FalkorDB template (#1116) 2026-08-30 17:45:24 -06:00
Ghazi Ben DahmaneandGitHub 8ac27a0f89 fix: update Pocket ID template to v2.14.0 (#1113) 2026-08-30 17:44:43 -06:00
614e4fef12 fix(odoo_17, odoo_18): provide odoo.conf via config mount and enable proxy_mode (#1124)
Same root cause as odoo_19 (#1108, fixed in #1110): the compose file
bind-mounts ../files/config over /etc/odoo, but with mounts = [] the
directory is empty, hiding the image's /etc/odoo/odoo.conf. As a result
wait-for-psql.py crashes with configparser.NoSectionError: No section:
'options' and the web container never starts.

Ship odoo.conf through the template config mount instead, with
proxy_mode enabled so websocket/POS/livechat work behind Traefik.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 16:45:14 -06:00
c784f9b9c8 feat: add Silo object storage service with Docker Compose setup (#1112)
* feat: add Silo object storage service with Docker Compose setup

* update version to match docker image

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-08-30 16:35:58 -06:00
Steven TranandGitHub 698ab85f6d feat(template): add Quire Ink (#1117) 2026-08-30 16:35:18 -06:00
egedemirkaranandGitHub 6284bbc74f fix: Update outdated website URL (#1120) 2026-08-30 16:34:37 -06:00
7b1cf99803 fix(postiz): pass all social provider env vars and fix Temporal healthcheck (#1121)
* fix(postiz): pass all social provider env vars and fix Temporal healthcheck

* fix(postiz): drop env vars Postiz does not read, unset NOT_SECURED

- GOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRET are not read by Postiz:
  the Google auth provider and GMB both use YOUTUBE_CLIENT_ID
  (google.provider.ts, gmb.provider.ts).
- NEXT_PUBLIC_FRONTEND_URL does not exist in the Postiz codebase.
- Postiz checks NOT_SECURED for truthiness only, so the string
  "false" still enables insecure mode; remove the variable so
  secure cookies are actually on for the HTTPS deployment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Mauricio Siu <mauricio@dokploy.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 16:33:41 -06:00
1aa2d74f4e data permission right & Traefik configuration (#1110)
* data permission right & Traefik configuration

Permession to write on data directory is mandatory for odoo server to run
Added Traefik configuration to allow POS and live chat to run

* fix(odoo_19): provide odoo.conf via config mount and enable proxy_mode

The empty ../files/config bind mount was hiding the image's
/etc/odoo/odoo.conf, crashing wait-for-psql.py (NoSectionError:
'options') in a restart loop. Ship odoo.conf through the template
mount instead, with proxy_mode enabled so websocket/POS/livechat
work behind Traefik (threaded mode serves /websocket on 8069, so
no extra routing is needed). Revert the manual Traefik labels
(invalid compose: labels must be a mapping; Dokploy generates
routing from template.toml) and the chown command (the named
volume already gets odoo ownership from the image).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Mauricio Siu <mauricio@dokploy.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 16:33:00 -06:00
JavierandGitHub b35349963e feat(wupnext): add new env vars for mcp server (#1100)
* feat(wupnext): add new env vars for mcp server

* fix: set explicit docker image version tag
2026-08-30 16:21:07 -06:00
Bora GökçeandGitHub 127b607d76 feat: add BlogFactory template (#1111) 2026-08-30 16:20:26 -06:00
Manan SantokiandGitHub c974384957 feat: make Firecrawl template production-ready (#1118)
* feat: make Firecrawl template production-ready

* fix: generate valid Firecrawl API keys
2026-08-30 16:03:35 -06:00
b05ce42a12 chore(plausible): update to v3.2.1 (#1123)
- ghcr.io/plausible/community-edition v2.1.5 -> v3.2.1 (latest stable release)
- clickhouse-server 24.3.3.102-alpine -> 24.12-alpine, matching the official
  CE v3.2.1 compose.yml
- CLICKHOUSE_SKIP_USER_SETUP=1 on the events db: required by ClickHouse
  24.11+ images so Plausible can connect as the passwordless default user
  (without it the app crash-loops with AUTHENTICATION_FAILED)
- plausible-data volume + TMPDIR per the official v3 compose

Deploy-verified on a Dokploy instance: fresh import, all 3 containers
running, HTTP 200 on the domain with the Plausible login page.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 15:04:31 -06:00
Mauricio SiuandGitHub f29a0b7340 Merge pull request #1103 from jmaxdev/canary
feat: add Kotonoba template
2026-08-25 11:46:44 -06:00
Mauricio SiuandGitHub b5b37264a4 Merge pull request #1109 from Dokploy/chore/sync-main-into-canary
chore: sync main into canary (OpenSEO #1107)
2026-08-25 00:15:48 -06:00
Mauricio SiuandClaude Fable 5 bf8322317c chore: sync main into canary (brings OpenSEO #1107, merged to main by mistake)
#1107 targeted main instead of canary and was squash-merged there. This merge
brings blueprints/openseo into canary and keeps both histories converged so
the next canary->main release stays conflict-free.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-25 00:14:27 -06:00
a9d21b63b7 Add OpenSEO template (#1107)
* Add OpenSEO template

OpenSEO is an open source, self-hosted alternative to Semrush and
Ahrefs (keyword research, rank tracking, backlinks, site audits).
Requires a DataForSEO API key, which the template leaves blank for
the user to fill in via the Dokploy UI.

* openseo: pin image to v0.1.6 and set ALLOWED_HOST so Vite preview accepts the Dokploy domain

---------

Co-authored-by: Mauricio Siu <mauricio@dokploy.com>
2026-08-25 00:09:45 -06:00
c322999417 Fix Appwrite Function API requests behind HTTPS redirects (#1087)
* fix(appwrite): enable HTTPS for function API endpoint

* appwrite: document that _APP_OPTIONS_FORCE_HTTPS=enabled requires an HTTPS domain

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Mauricio Siu <mauricio@dokploy.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 23:21:42 -06:00
8deda67f4c update Calcom image version and add QOL Env Var for public signup and Email SMTP (#1091)
* feat: update calcom image version and add QOL Env Var for public signup

* fix: add quotes to env var definition

* fix: add more information for selfhosting

* feat: add env vars and config for Email SMTP Creds

* chore(calcom): bump meta.json version to v6.2.0 and fix ARM comment line reference

---------

Co-authored-by: Mauricio Siu <mauricio@dokploy.com>
2026-08-24 22:56:50 -06:00
0bb292dad3 feat: add Instatic template (#1093)
* feat: add Instatic template

Instatic is a self-hosted, open-source visual CMS combining a canvas
editor, content engine, and static site publisher. Deployed as a
single container backed by SQLite, with uploads and DB on one
persistent volume.

Signed-off-by: Tekena Solomon <tekena157@gmail.com>

* fix: add init container to fix Instatic storage volume permissions

Signed-off-by: Tekena Solomon <tekena157@gmail.com>

* fix(instatic): accept both https and http public origins so the setup wizard works before HTTPS is enabled

---------

Signed-off-by: Tekena Solomon <tekena157@gmail.com>
Co-authored-by: Mauricio Siu <mauricio@dokploy.com>
2026-08-24 22:56:29 -06:00
Abbas AgaandGitHub 63635b1ff6 feat(openanalytics): add Open Analytics blueprint (#1094) 2026-08-24 21:20:43 -06:00
Vitaliy KukharikandGitHub 6621a29d54 Autobase: bump to v2.10.0 (#1088)
Update Autobase Docker image from 2.7.2 to 2.10.0 in docker-compose.yml and sync the blueprint meta.json version to match.
2026-08-24 20:58:32 -06:00
e4cd30c15a Add MyLinks template (#1089)
* feat: add MyLinks template

* fix: correct postgres volume mount path

* fix: add compose version key required by Dokploy

* fix(my-links): healthcheck via 127.0.0.1 (localhost resolves to ::1 on Alpine, app listens on IPv4 only)

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Mauricio Siu <mauricio@dokploy.com>
2026-08-24 20:57:54 -06:00
Sadiq Al-AboudiandGitHub 73d257ec11 feat(GoatCounter): Add GoatCounter template (#1096)
* init

* fix(goatcounter): error on deployment
2026-08-24 20:44:44 -06:00
Sadiq Al-AboudiandGitHub b456667931 feat(Kanbn): add Kanbn template (#1098)
* feat(Kan): add and test kan template

* chore(Rename): change from kan to kanbn
2026-08-24 20:44:08 -06:00
Torikul IslamandGitHub fee40dba4c feat: add freellmapi template (#1099)
* feat: add freellmapi template

* fix: align meta.json version with pinned image tag

* fix: use hex helper for ENCRYPTION_KEY
2026-08-24 20:43:32 -06:00
aa60cb637a fix(rustrak-full): bind UI to 0.0.0.0; chore(trmnl-larapaper): bump to 0.40.0 (#1105)
- rustrak-full: the Next.js standalone UI bound to $HOSTNAME (container id),
  so Traefik got connection refused and the UI domain returned 502 (pre-existing
  on canary, confirmed by deploying both #1102 and canary). HOSTNAME=0.0.0.0
  was deploy-verified: UI 200 "Rustrak - Error Tracking System".
- trmnl-larapaper: #1101 bumped to 0.33.0 (Apr 2026); upstream is at 0.40.0.
  0.40.0 was deploy-verified on the same template: healthy, /, /login,
  /register, /up all 200.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 20:40:55 -06:00
Benjamin NussbaumandGitHub f343ceb15f feat(blueprint): update trmnl-larapaper template (#1101) 2026-08-24 20:39:44 -06:00
Abian SuarezandGitHub 72491787d4 fix(rustrak): point templates at the official images and current metadata (#1102)
Both Rustrak blueprints shipped abians7/* images pinned to v0.2.1, twelve
minor versions behind the current release, and linked to the old personal
repo. Updated to the official rustrak/* images on latest, refreshed the
metadata, and replaced the logo with the current mark.

The memory figure in the description is now measured rather than estimated:
32 MB resident at idle with SQLite, from docker stats on these images.
2026-08-24 20:39:06 -06:00
9c784b723e feat: add postgres-pgadmin template (#1104)
* feat: add postgres-pgadmin template

* feat: expose postgres via second domain

Add postgres_domain variable and second [[config.domains]] for
postgres:5432 alongside pgadmin:80, so both the DB and the web UI
are reachable via Dokploy domains.

* fix(postgres-pgadmin): drop HTTP domain on postgres:5432, pre-register server in pgAdmin, bump pgAdmin to 9.17

- Remove the second [[config.domains]] pointing an HTTP host at postgres:5432 (Traefik returned 502).
- Mount servers.json + pgpass via config.mounts so pgAdmin comes with the bundled PostgreSQL pre-registered and connects without a password prompt (pgpass is copied to the data volume with 0600 for uid 5050).
- Bump dpage/pgadmin4 8.13 -> 9.17.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Mauricio Siu <mauricio@dokploy.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 20:34:46 -06:00
Stefan ErnstandGitHub a307ed4720 chore: update Windshift to v0.8.5 (#1090) 2026-08-24 20:30:56 -06:00
Mauricio SiuandClaude Fable 5 39ce5301b4 fix(kotonoba): pin image to 1.0.19, ADMIN_DOMAIN as hostname
- ghcr.io/trixtylab/kotonoba:latest -> 1.0.19 (same digest as latest today); meta.json version 1.0.19.
- ADMIN_DOMAIN is documented upstream as a bare hostname, pass ${main_domain} without scheme.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 20:30:35 -06:00
Zakher MasriandGitHub b7ca428d92 fix: update 20+ broken links in templates (#1084)
* fix: update 20+ broken links in templates

* fix: evolution-api links
2026-08-24 20:30:20 -06:00
jmaxdev d5d374ad72 feat: add Kotonoba template 2026-08-22 13:23:56 -03:00
Mauricio SiuandGitHub bf8ca3fb35 Merge pull request #1085 from zaaakher/ui-improvements-1
fix: search input icons and scrollbar shift from mode-toggle dropdown
2026-08-18 14:57:06 -06:00
zakher 350e44ff95 fix: search input icons and scrollbar shift from mode-toggle dropdown 2026-08-15 17:04:27 +03:00
Mauricio SiuandGitHub a0d6ed1527 Merge pull request #1083 from Dokploy/canary
New release
2026-08-14 10:18:29 -06:00
7a343aa1b8 feat: add DockRoute template (#1079)
* feat: add DockRoute template

* fix: pass template env vars through to the dockroute container

The compose file had no environment block, so the DOCKROUTE_*/CLOUDFLARE_*
variables defined in template.toml never reached the container - switching
the provider to cloudflare from the Dokploy environment tab would have
silently stayed in the log dry-run mode.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Mauricio Siu <mauricio@dokploy.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 09:09:48 -06:00
Loan TALVATandGitHub cd446e9f25 feat: add Louez template (#1081)
Louez is an open-source equipment rental platform (AGPL-3.0): a booking
storefront with live availability plus a back office for reservations,
customers, PDF contracts and statistics.

The blueprint brings up the app, MySQL 8.4 and a private MinIO bucket for
product images. Louez installs its own database schema on first boot.
2026-08-14 09:06:13 -06:00
VA360 LABS S.L.andGitHub f4bf271183 Add Didacta template (#1080)
Didacta is a fair-code self-hosted LMS. The blueprint ships the app image
alongside a pgvector-enabled Postgres (the baseline migration runs
CREATE EXTENSION "vector", so a plain postgres image fails on first boot)
and Redis.

A single domain is enough: the container runs the API on :4000 and the web
on :3000, and Next.js rewrites /api/*, /healthz and /readyz to the internal
API, so the domain only targets port 3000.
2026-08-14 09:03:43 -06:00
Mauricio SiuandGitHub 443976641c Merge pull request #1077 from Dokploy/canary
New version
2026-08-14 08:54:57 -06:00
Mauricio Siu 64073b5ec2 chore: tie main history into canary 2026-08-14 08:52:47 -06:00
Mauricio SiuandGitHub fcac3882ca Change website and docs URLs in meta.json (#1078)
Updated website and documentation links for Drizzle Gateway.
2026-08-09 23:22:40 -06:00
taqinandGitHub 979eadc06a Change website and docs URLs in meta.json
Updated website and documentation links for Drizzle Gateway.
2026-08-09 20:48:59 +07:00
a7339677c9 Reef chain (#776)
* feat: reef chain bootstrap

* fix: missing doc field

* feat: reef rpc

* fix: meta

* feat: toml changes

* fix: var in rpc

* feat: minimal rpc

* feat: default envs

* bootnode toml

* feat: icon

* feat: icon

* feat: old icons

* Update template.toml

* Update template.toml

* fix: service name

* feat: reef-faucet

* feat: reef-keygen

* feat: meta added

* fix: node_name unused var

* fix: service name

* feat: add platform

* feat: dokploy compatible

* force: platform

* feat: linux

* feat: linux-2

* feat: eth-rpc

* fix: image

* fix: variables

* feat: bootnode update

* feat: spec generator running

* feat: validator

* fix: meta.json for validator

* fix: exec binary for reef-validator

* feat: validator start

* feat: remove container name

* fix: env var for eth-rpc

* feat: custom spec generator

* fix: image for reef-spec

* feat: dev cluster

* fix: name

* fix: meta.json

* fix: wget

* feat: reef-* removed

* feat: reef-dev cluster

* Update docker-compose.yml

* feat: close rpc ports for reef-dev-cluster

* feat: removed rpc ports from validator

* feat: rpc node seperate

* feat: rpc node

* feat: reef-rpc

* fix: meta

* feat: removed version from docker-compose bootstrap

* feat: expose 9944 for dev cluster

* fix: start-rpc script

* feat: eth-rpc rpc host

* fix: flag for eth-rpc external rpc connections

* feat: cors for all

* fix: meta.json missing ]

* feat:process meta

* feat: removed container_name from docker-compose

* feat: port and p2p port must be string for bootnode

* feat: ports for reef dev cluster

* fix: ports for reef-dev-cluster

* feat: all ports to strings

* Wire Reef templates to external scripts repo

* fix: align reef templates with dokploy rules

* chore: process meta.json

* fix: route reef spec generator via subdomain

* feat: make reef dev cluster self-contained

* fix: make reef templates amd64 compatible

* chore: update reef images to latest tags

* fix: make reef dev cluster bootstrap portable

* fix: bootstrap reef dev cluster from pinned assets

* fix: make reef dev cluster zero-config

* fix: pin reef dev cluster bootstrap

* feat: add eth rpc to reef dev cluster

* fix: pin reef dev cluster eth rpc assets

* fix: align reef traefik routing

* fix: pin reef dev cluster traefik updates

* feat: add reef faucet frontend

* fix: pin reef faucet frontend assets

* fix: make reef dev cluster eth rpc dokploy-safe

* fix: gate reef dev cluster eth rpc on health

* fix: restore reef dev cluster ws rpc

* fix: pin reef dev cluster ws assets

* fix: proxy reef dev cluster ws host headers

* fix: pin reef dev cluster host proxy assets

* fix: raise reef faucet drip amount

* fix: pin reef faucet amount assets

* Update docker-compose.yml

* chore: scope Reef PR to one-click viable templates (dev-cluster + keygen)

Remove reef-bootnode, reef-rpc, reef-validator, reef-spec-gen,
reef-eth-rpc and reef-faucet: their defaults depend on external
infrastructure (*.reef.host / 72.60.35.83) that is offline, or on
manually wiring values between deployments, so they cannot work as
one-click templates. reef-dev-cluster and reef-keygen are fully
self-contained and verified working.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Mauricio Siu <mauricio@dokploy.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-09 00:06:41 -06:00
bbd0817b9d Add Langfuse template (#1072)
* Add Langfuse template

Open-source LLM engineering platform: tracing, prompt management,
evaluation and cost/usage analytics for LLM apps.

Stack: langfuse-web + langfuse-worker (image tag 4), Postgres 17,
ClickHouse 25.12, Redis 7, MinIO. Adapted from the official
docker-compose.yml at https://github.com/langfuse/langfuse/blob/main/docker-compose.yml,
with all secrets generated via Dokploy's template.toml helpers instead
of the upstream hardcoded defaults.

MinIO gets its own domain because Langfuse's web UI issues presigned
S3 URLs that the browser fetches directly (media attached to traces),
so that endpoint has to be reachable from outside the internal network.

Validated locally with build-scripts/validate-template.ts,
validate-docker-compose.ts and generate-meta.js --check (all pass),
plus `docker compose config` with sample secrets to confirm the
langfuse-web override of LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT resolves
correctly. Not yet deployed on a live Dokploy instance.

* fix: bind langfuse-web to 0.0.0.0 so Traefik can reach it

Docker sets HOSTNAME to the container id, and Next.js standalone binds to
it, which resolves to a single network's IP. With Dokploy's proxy network
attached as a second network, Traefik got connection refused (502).
Setting HOSTNAME=0.0.0.0 fixes routing; verified with a live deploy.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Mauricio Siu <mauricio@dokploy.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-09 00:01:50 -06:00
c4398d281f feat: add Waxum template (#1074)
* feat: add Waxum template

* fix(waxum): pin SQLITE_PATH inside the mounted session volume

Waxum's default SQLite path already resolves inside
WHATSAPP_STORAGE_PATH, so this was already persisted, but make it
explicit so it doesn't depend on undocumented default derivation
surviving a redeploy.

Addresses: https://github.com/Dokploy/templates/pull/1074#pullrequestreview-4883962555

---------

Co-authored-by: fdciabdul <taqin2731@gmail.com>
2026-08-08 23:45:50 -06:00
7b4af4c234 fix(supabase): generate the new API keys and wire up JWKS verification (#1069)
* fix(supabase): generate the new API keys and wire up JWKS verification

The template has carried the plumbing for Supabase's new opaque API keys
since #872 — kong-entrypoint.sh builds the Lua translation expressions and
kong.yml registers the keys as key-auth credentials — and #1068 added the
studio/kong compose references while aligning with upstream.

But four of the variables that plumbing reads have never been declared in
template.toml, so they never reached the Environment tab:

  SUPABASE_PUBLISHABLE_KEY, SUPABASE_SECRET_KEY,
  ANON_KEY_ASYMMETRIC, SERVICE_ROLE_KEY_ASYMMETRIC

kong-entrypoint.sh gates on the first two being non-empty, so every deploy
silently took the legacy-only branch and users had no field to fill in.

Generate them from [variables] instead:

- SUPABASE_PUBLISHABLE_KEY / SUPABASE_SECRET_KEY as opaque sb_* strings
- ANON_KEY / SERVICE_ROLE_KEY move to [variables] so ANON_KEY_ASYMMETRIC
  and SERVICE_ROLE_KEY_ASYMMETRIC can reuse the same JWT

Kong substitutes whatever token those hold and every backend already
verifies HS256 with JWT_SECRET, so the opaque keys work without an EC
keypair (which the dokploy helpers cannot generate). Clients still only
ever hold an opaque string. JWT_KEYS / JWT_JWKS stay empty as a
documented opt-in for real ES256.

Also fixed while in here:

- JWT_JWKS was missing entirely. GOTRUE_JWT_KEYS was already enabled, so
  anyone setting a real JWKS got Auth signing ES256 tokens that PostgREST,
  Storage, Realtime and Functions had no way to verify. Wire it into all
  four verifiers.
- Restore two routes kong.yml dropped: /realtime/v1/api/tenants and
  /realtime/v1/api/openapi were reachable with the anon key, and the
  PostgREST OpenAPI root at /rest/v1/ was anon-readable (supabase#42949).
  Needs KONG_ROUTER_FLAVOR: expressions, as upstream sets.
- graphql-v1 had key-auth hide_credentials: true. key-auth runs before
  request-transformer, so the apikey header was stripped before the Lua
  expression could read it and service_role GraphQL requests were
  silently downgraded to anon.
- DB_ENC_KEY was hardcoded to the well-known "supabaserealtime" default;
  generate REALTIME_DB_ENC_KEY instead.
- functions/main/index.ts was the old remote-JWKS version pinned to
  deno.land/x/jose@4.14.4; sync with upstream (jsr:@panva/jose@6 and
  local SUPABASE_JWKS).

Verified against all 11 services running locally: an RLS-protected table
confirms anon and publishable keys are blocked while service_role and
secret keys read the row, so the opaque keys really are translated and
not downgraded. Storage and Realtime still verify HS256 with JWT_JWKS
empty. 21/22 end-to-end checks pass; the last was the test not following
Studio's redirect.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(supabase): match dokploy hash helper semantics (length = chars, not bytes)

Dokploy's generateHash(length) returns exactly `length` hex characters,
not `length` random bytes hex-encoded. Realtime requires DB_ENC_KEY to be
exactly 16 characters (AES-128), so ${hash:8} produced an 8-char key and
the realtime container crash-looped. Bump to ${hash:16}, and bump the
opaque API key segments to ${hash:22}/${hash:8} to match the intended
sb_<role>_<22>_<8> shape.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Mauricio Siu <mauricio@dokploy.com>
2026-08-07 00:13:27 -06:00
62a418ee4f feat: add NaviMusic template (#1059)
* feat: add NaviMusic blueprint template with docker-compose and configuration support for NaviMusic #1058

* fix: align NaviMusic blueprint metadata

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: remove invalid NaviMusic env comment

* fix: pin NaviMusic to 4.1.0 and keep container alive without credentials

4.1.1+ throws at startup unless a valid YouTube OAuth2 refresh token
(interactive device-code flow) is provided, so no placeholder config can
ever boot those tags. 4.1.0 is the newest release that boots without it.

Also wrap the entrypoint so a clean exit (empty/invalid DISCORD_TOKEN is
logged, not thrown) idles with instructions in the logs instead of
restart-looping; non-zero exits still hit the restart policy.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Mauricio Siu <mauricio@dokploy.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-06 23:50:28 -06:00
740981d044 fix: bring remaining blueprints in line with the port conventions (audit green) (#1070)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-06 23:20:50 -06:00
ba60abbcf3 feat: add Novu self-hosted notification template (#1056)
* feat: add Novu self-hosted notification template

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat: enhance Novu template with comprehensive environment variable configuration

Added a detailed environment variable section to the Novu template, including secrets, feature flags, service URLs, and database configurations. This update improves clarity and usability for self-hosted deployments.

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-06 22:59:35 -06:00
eec3b3d510 Update forgejo template; bumps Forgejo version to 15; fixes git push over ssh (#880)
* Update forgejo template; bumps Forgejo version to 15; fixes git push over ssh

* updates template compose and toml to use internal port mapping

* fix: bump Forgejo to 16, use expose per repo convention, drop HTTP domain on SSH port

- codeberg.org/forgejo/forgejo:15 -> :16 (current stable, 16.0.2)
- ports -> expose (repo convention since #1053; Traefik reaches the
  container over the docker network, no host port publishing needed)
- remove the [[config.domains]] entry on port 22: Dokploy domains are
  Traefik HTTP routers and cannot proxy SSH (returned 500 in testing)
- drop empty FORGEJO__server__SSH_PORT= and SSH_LISTEN_PORT overrides
  (image defaults already listen on 22)
- clean comment/blank entries from template.toml env array

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Mauricio Siu <mauricio@dokploy.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-06 13:50:26 -06:00
1d47fa16e4 fix: normalize template.toml mounts across all 502 blueprints (#1063)
* fix: normalize template.toml mounts across all blueprints (closes #1047)

- 79 blueprints declared a bare [[config.mounts]] header (one empty array
  element in TOML) -> replaced with the repo idiom 'mounts = []'
- 38 blueprints carried doc-style mount blocks (name/mountPath/description)
  that don't match the schema (filePath/content) and are inert in Dokploy's
  template processor -> removed; their named volumes already live in each
  docker-compose.yml
- penpot: duplicate 'expose' map key made its docker-compose.yml invalid
  YAML -> merged into one expose list

After this, validate-template.ts passes for all 502 blueprints. The
remaining validate-docker-compose.ts flags are the intentional host-port
templates (mail/game/streaming protocols: poste.io, mailu, oryx, fivem,
lodestone, etc.) which the validator does not yet model as exceptions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: validator opt-out marker for intentional host ports + annotate rustdesk

The validate-docker-compose CI on this PR was failing on rustdesk's
hbbs/hbbr port mappings (21115-21119) — intentional host-published ports
for the RustDesk relay/rendezvous protocol, which Traefik cannot route.

Adds a '# dokploy: allow-host-ports' top-of-file marker that downgrades
the port-mapping errors to warnings for such protocol templates
(mail/game/streaming/VPN/remote-desktop), and annotates rustdesk.
Other exception templates (poste.io, mailu, oryx, fivem...) can be
annotated case-by-case as the weekly audit (#1049) surfaces them.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-06 01:25:48 -06:00
8ad0f9134e fix(supabase): upgrade database to Postgres 17 (#1068)
Align the template with the current upstream self-hosted stack
(supabase/postgres 17.6.1.136, studio 2026.08.03, kong 3.9.3),
remove the deprecated analytics/vector services and switch
Studio/pg-meta to the postgres role per upstream guidance.

Closes #1067

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-06 01:11:35 -06:00
01930d7a71 Add Yuvomi template (#1065)
* Add Yuvomi template

Privacy-first, self-hosted family planner.
- Image pinned to 0.71.10 (latest stable GHCR tag)
- 4 named volumes (data/backups/modules/documents)
- SESSION_SECRET via ${password:64} helper
- Single domain on port 3000
- Healthcheck wired

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* chore(yuvomi): bump image to 1.85.0

The PR pinned ghcr.io/ulsklyc/yuvomi:0.71.10, but upstream's latest
stable release is v1.85.0. Bump the compose image tag and meta.json
version to match.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-06 01:06:22 -06:00
Szymon BludnikandGitHub ebeeb58dee Add Creed self-host template (#1043)
* feat(templates): add Creed self-host template

Adds a Dokploy blueprint for Creed (creed.md), built from source since
no official Docker image exists yet. Requires an external Supabase
project (schema pushed via the Supabase CLI), so only what can be
generated locally (CREED_ENCRYPTION_SECRET) is auto-filled; Supabase,
Stripe, OpenRouter, Resend, and GitHub OAuth vars are left blank with
setup steps documented in the mounted README.

NEXT_PUBLIC_* vars are threaded through as Docker build args (not just
runtime env), since Next.js inlines them at build time and the app
hard-fails the build if NEXT_PUBLIC_SITE_URL is unset — this was
caught by an actual `docker compose build` run against the upstream
repo, not just template validation.

Verified with docker compose build/up: image builds cleanly, container
boots, / returns 200, and /api/health correctly reports "degraded"
with Supabase unconfigured as expected.

* Pin creed build context and refactor env

- Pin creed docker-compose build context to a specific commit
  hash to ensure reproducible builds
- Expose port 3000 in docker-compose (use expose instead of ports)
- Update meta.json version from latest to the pinned hash e9b096d
- Convert template.toml env block from [config.env] to a single env
  array
- Keep the README.md mount in place

* Modify docker-compose build context URL

Updated the build context URL to the main branch.

* fix(creed): pin build context and move env under [config]

Restore the commit pin so the inline Dockerfile matches the pre-monorepo
layout, and place env under [config] before domains so Dokploy imports
the environment correctly.
2026-08-06 01:06:00 -06:00
ce2864aa12 chore: update stalwart named volumes for v0.16 (#1066)
Co-authored-by: rowupstream <259214402+rowupstream@users.noreply.github.com>
2026-08-05 08:54:26 -06:00
rowupstream b258e9f774 chore: update stalwart named volumes for v0.16 2026-08-04 10:07:09 -05:00
755c7c5c50 Add Open Design template (#966)
* Add Open Design template

Open Design is a local-first, open-source design tool that ships as a
single self-contained container (no external DB or cache). Adds the
blueprint (docker-compose.yml + template.toml + logo) and a meta.json entry.

* Use node-based healthcheck for Open Design template (matches upstream; verified locally)

* Pin Open Design image to 0.16.1 for reproducible deploys

Replace :latest with the immutable released tag ghcr.io/nexu-io/od:0.16.1
in docker-compose.yml and set the matching version in meta.json, per the
repo pinning convention (AGENTS.md). Tag 0.16.1 verified: /api/health
returns 200 and the node-based healthcheck passes.

* Allow both http and https origins for Open Design template

Dokploy's auto-generated domain is served over plain HTTP by default (no
cert), so OD_ALLOWED_ORIGINS=https://${main_domain} alone made the daemon
reject the browser's http origin with 403, breaking the app after the
onboarding shell loaded. List both schemes so the template works on the
default HTTP domain and after a user adds an HTTPS certificate. Verified
against a live deploy: listed origin -> 200, unlisted -> 403; the daemon
supports comma-separated multi-origin per deploy/README.md.

* Disable daemon API auth so the Open Design web UI loads

The daemon token-gates its API when bound to 0.0.0.0 (every container),
and a browser has no way to present that bearer token, so the web UI's
bootstrap calls all returned 401 and the app failed to load. Set
OD_DISABLE_API_AUTH=1 (the daemon's documented escape hatch) so the UI
works on deploy. Add a README noting the instance is then open (front it
with auth/HTTPS if internet-facing) and how to enable AI features.
Verified end to end against a live deploy on a real domain.

---------

Co-authored-by: Abhiigg <abhi@incrediblegoodguys.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
2026-08-03 05:02:23 -06:00
025ae61c2c feat: add Whatomate template (#1064)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-03 05:01:17 -06:00
Marios AntonoudiouandGitHub 0b731157ce Chatto latest (#1060)
* Switch to latest channel for chatto

* Update meta.json too

* Switch to 0.4 series
2026-08-03 04:46:41 -06:00
Juan VargasandGitHub 0eae107272 Update SendDock template: track latest image, drop deprecated env vars (#1057)
- Point the image at ghcr.io/arkhe-systems/senddock:latest so fresh
  deploys always get the current release without a per-release PR.
- Remove DEPLOYMENT_MODE (self-host is the default now; the cloud flag
  became the boolean CLOUD).
- Remove SENDDOCK_LICENSE_KEY (Pro license is activated from the
  dashboard in 0.8; the env var is removed in 0.9).
2026-08-03 04:46:16 -06:00
Jiho LeeandGitHub de726de736 feat: add 9Router template (#1046)
* feat: add 9Router template (#1040)

* fix: pin the headroom sidecar instead of :latest

* fix: use http for BASE_URL per the repo URL convention

* fix: set NEXT_PUBLIC_BASE_URL so the browser hits the deployed domain
2026-08-03 04:39:57 -06:00
a73e4928f2 feat: bump fmd-server to 0.16.0 for compatibility with Open Street Map (#1052)
* feat(fmd-server): bump to version 0.16.0

* fix: use expose instead of ports

* fix: fmd-server image tag is 0.16.0 (upstream dropped the v prefix)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-03 04:39:40 -06:00
Yusuf GündoğduandGitHub 1dc9c36216 libredb-studio: bump version to 0.9.59 (#1039) 2026-08-03 04:37:04 -06:00
Khiet Tam NguyenandGitHub 5aba7908a2 chore: remove conduwuit in favour of tuwunel (#1054) 2026-08-03 04:36:59 -06:00
Jiho LeeandGitHub a49f00fd7b ci: audit every blueprint on a schedule (#1049)
* ci: audit every blueprint on a schedule (#1047)

* ci: use RUNNER_TEMP and gate the fail step on the dispatch event

* ci: bound the step summary and publish the full report as an artifact

* ci: treat a missing file as a finding, and never truncate mid-fence
2026-08-03 04:36:31 -06:00
Finley Crawford-McQuillanandGitHub 292877b370 feat: Add Fluxer template (#1045)
* feat: Add Fluxer template

* fix: populate config.env in template.toml

* fix: syntax in template.toml for config.env

* fix: use multiline string for config.env in template.toml

* fix: format config.env as valid string array in template.toml

* fix: update template.toml format to match standard env array structure

* add: template.toml with optional env vars and http guidance

* fix: change wording to avoid confusion

* fix: add more missing instructions

* fix: more wording changes

* fix: final wording improvements

* fix: comma missing from previous commit
2026-08-03 04:36:10 -06:00
a176ba3e16 Blueprints/portabase (#1055)
* feat(blueprints): add portabase

* feat(blueprints): add portabase

---------

Co-authored-by: Théo LAGACHE <theo.lagache@soluce-technologies.com>
2026-08-03 04:18:15 -06:00
Khiet Tam NguyenandGitHub 69e731eda1 fix: change "ports" -> "expose" for multiple services (#1053)
* fix: change "ports" -> "expose" for multiple services

* chore: remove helper script
2026-08-03 04:12:26 -06:00
Andre Carbajal VargasandGitHub c1ccb27359 feat: add NaviServer template (#1062)
* feat: add NaviServer template

* fix: address NaviServer template review comments

* fix: align NaviServer template env format

* fix: publish NaviServer Minecraft ports
2026-08-03 04:12:23 -06:00
JavierandGitHub 4de48c2a73 Add WupNext blueprint (#1051) 2026-08-03 04:09:10 -06:00
Jiho LeeandGitHub 0c33668267 fix: bring scrutiny, stack-auth and vault in line with the compose conventions (#1048)
* fix: drop no-op container_name from three blueprints (#1047)

* fix: drop the empty [[config.mounts]] block from vault

* fix: pin vault and scrutiny images, add the missing version header
2026-08-03 04:02:30 -06:00
Stefan ErnstandGitHub 285e667c68 chore: update Windshift to v0.8.2 (#1041) 2026-07-21 21:56:19 -06:00
+4 a14bab01ad New release (#1038)
* fix: meta.json of Poke blueprint

The current github/docs links was broken

before:
https://codeberg.org/ashley/poke
after:
https://codeberg.org/ashleyirispuppy/poke

* fix: broken links in some blueprints

* Add openhabittracker blueprint

* fix(affinepro): update to current AFFiNE images

The template pinned ghcr.io/toeverything/affine-graphql:stable-780dd83,
an ephemeral per-commit tag on the old image name that has since been
removed from GHCR, so the template could no longer pull and deploy.

- Switch both app and migration services to ghcr.io/toeverything/affine:stable,
  the rolling stable tag recommended by the official self-host compose,
  so the template no longer rots when per-commit tags are garbage-collected
- Move postgres to pgvector/pgvector:pg16 and set AFFINE_INDEXER_ENABLED=false,
  matching the current upstream self-host compose requirements
- Add postgres/redis healthchecks and proper depends_on conditions so the
  self-host-predeploy migration job runs only once the database is ready,
  and the server starts only after migrations complete successfully

Closes #777

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(cockpit): persist config and storage volumes per upstream docs

The template mounted `html:/var/www/html` (freezing the app code from the
first deploy) and `data:/var/www/html/storage/data`, which misses uploaded
assets (stored under `storage/uploads`) and cache. Per the official Cockpit
persistent-storage docs, mount `config:/var/www/html/config` and
`storage:/var/www/html/storage` instead.

Closes #549

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(kener): define REDIS_URL and drop unused databases

Kener v4 requires Redis for its BullMQ queues, caching and scheduler,
so the app crashed on startup with "REDIS_URL is not defined in
environment variables" right after printing that it was running
(issue #976). The template also spun up both a postgres and a mariadb
container while DATABASE_URL pointed at SQLite, so neither database
was ever used (issue #282).

Changes, aligned with the upstream docker-compose.yml
(rajnandan1/kener):

- Add a redis:7-alpine service with a healthcheck and persistent
  volume, wire REDIS_URL=redis://redis:6379 and make kener depend on
  redis being healthy
- Remove the unused postgres and mysql services plus their env vars
  and generated passwords; keep SQLite (upstream default) persisted
  in the kener_db volume
- Set ORIGIN to https://<domain> instead of http://localhost:3000 so
  CSRF protection works behind the generated domain
- Drop the stale /app/uploads bind mount (kener v4 only persists
  /app/database) and the obsolete compose version key

Deploy-tested on a Dokploy instance: migrations and seed complete,
schedulers start, "Kener version 4.1.2 is running!", HTTP 200 on the
generated domain, both containers stable.

Closes #976
Closes #282

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(homarr): use named volume for /appdata and hex encryption key

- Replace the relative bind mount `../homarr/appdata:/appdata` with a
  named volume `homarr_appdata:/appdata` so the data survives cleanups
  and can be backed up through Dokploy volume backups.
- Generate SECRET_ENCRYPTION_KEY with `${hash:64}` instead of
  `${password:64}`: homarr requires a 64-character hex string
  (`openssl rand -hex 32`) and the password helper emits non-hex
  characters (g-z).

Closes #738

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(logto): fix postgres role error and update to 1.41.0

The postgres healthcheck ran pg_isready without -U while POSTGRES_USER
was set to logto, so every probe attempted to connect as role
"postgres" and spammed FATAL: role "postgres" does not exist.
Pass -U logto -d logto explicitly and set POSTGRES_DB.

Also fix LOGTO_ENDPOINT pointing at the admin domain instead of the
main domain, update Logto 1.27.0 -> 1.41.0, use ${password:32} for the
generated password, drop the ephemeral host port publishing and add
restart policies.

Closes #130

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(gitlab-ce): serve on the generated domain (remove removed unicorn config, pin omnibus)

The template set unicorn['worker_processes'] / unicorn['worker_timeout'] in
GITLAB_OMNIBUS_CONFIG. Unicorn was removed in GitLab 14.0, so on current
gitlab-ce images `gitlab-ctl reconfigure` aborts with "Removed configurations
found in gitlab.rb" and GitLab never starts serving — the generated domain
returned 502 Bad Gateway (issue #380).

Rewrite the template as the official all-in-one Omnibus setup:
- pin gitlab/gitlab-ce:19.1.2-ce.0 instead of :latest
- external_url http://<domain> with nginx listen_port 80 / listen_https false
  (TLS terminates at Traefik)
- set gitlab_rails['initial_root_password'] from a generated template password
- puma single mode + prometheus monitoring off to keep memory reasonable
- drop the external postgres/redis containers (Omnibus bundles and manages
  its own) and the broken ports entries ("2224" published a random host port
  while sshd listens on 22)

Verified on a live Dokploy instance: domain serves the GitLab sign-in page
and root login with the generated password works.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(zitadel): wire EXTERNALDOMAIN/PORT/SECURE to the generated domain

Zitadel resolves its instance from the external domain/port/scheme, so the
template's ZITADEL_EXTERNALPORT=8080 made every generated URL (OIDC issuer,
login redirects) point at http://<domain>:8080 instead of the domain served
by Traefik, ending in {"code":5,"message":"Not Found"} (#516).

- Expose ZITADEL_EXTERNALDOMAIN / ZITADEL_EXTERNALPORT / ZITADEL_EXTERNALSECURE
  as template env vars, defaulting to the generated domain over HTTP
  (port 80, secure=false) so the routed domain and Zitadel's external config
  always match; HTTPS users flip them to 443/true in the Env tab.
- Pin image to v4.16.0 (was latest) and keep the built-in login v1 via
  ZITADEL_DEFAULTINSTANCE_FEATURES_LOGINV2_REQUIRED=false so no separate
  login-v2 container is needed.
- Add the official readiness healthcheck, drop the unused /app/data volume,
  bogus SMTP env keys, published port and obsolete compose version key.

Closes #516

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(immich): update to v3.0.2

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(automatisch): switch to official image and wire up DOMAIN to fix Bad Gateway

- Replace unofficial dockeriddonuts/automatisch:2.0 mirror (stale since Nov 2024)
  with the official automatischio/automatisch:0.15.0 image
- Define DOMAIN in template.toml [config.env]: the compose referenced ${DOMAIN}
  but it was never provided, so HOST resolved empty and the app generated
  localhost URLs for the web app and webhooks
- Set API_URL/WEB_APP_URL so generated URLs don't carry the internal :3000 port
  behind Traefik
- Add postgres healthcheck and gate the app on service_healthy to avoid the
  boot-time migration race; worker now starts after main (official compose order)
- Drop unnecessary published port and no-op REDIS_* env on the redis service
- Bump meta.json version to 0.15.0

Closes #97

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(signoz): fix ClickHouse hostname resolution and IPv6 binding

- Override the ClickHouse image's config.d/docker_related_config.xml,
  which listens on the IPv6 wildcard address ([::]) first and fails to
  bind on hosts without IPv6 support; listen on 0.0.0.0 (IPv4) only and
  disable the internal DNS cache so transient startup DNS failures for
  zookeeper-1/clickhouse are not cached (issue #534).
- Set hostname: clickhouse (instead of container_name) so the server
  identifies itself as the cluster host declared in cluster.xml.
- Remove the explicit signoz-net network: Dokploy attaches its own
  networks automatically and the repo validator rejects explicit
  networks; a fixed-name shared network also breaks service DNS across
  deployments.
- Fix mount mismatch: template.toml created files/signoz/prometheus.xml
  while the compose mounts ../files/signoz/prometheus.yml, so Docker
  silently mounted a directory as the signoz prometheus config.
- Give the otel-collector domain its own generated host: both domains
  previously shared the same host and path "/", creating two conflicting
  Traefik routers where one service randomly won.

Closes #534

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(infisical): update to v0.162.6

- Bump image from v0.135.0-postgres to v0.162.6 (upstream dropped the
  -postgres tag suffix after v0.146.0; plain tags are the postgres build)
- Remove the db-migration service: the standalone image runs database
  migrations automatically on boot (auto-start-migrations), matching the
  official docker-compose.prod.yml which no longer ships that service
- Generate ENCRYPTION_KEY (${hash:32}) and AUTH_SECRET (${base64:32})
  per deployment instead of shipping hardcoded example secrets
- Fix SITE_URL to http://${main_domain} (no :8080; the domain is proxied)
- Refresh SMTP env names (SMTP_FROM_ADDRESS/SMTP_FROM_NAME; SMTP_SECURE
  was removed upstream) and drop unused CLIENT_* env placeholders that
  were never passed to the container

Closes #215

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix: add databasus (postgresus renamed upstream)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(evolutionapi): enable integration flags and update version

Adds the integration enable env flags introduced in Evolution API v2.3.x
(N8N_ENABLED, OPENAI_ENABLED, EVOAI_ENABLED, DIFY_ENABLED, TYPEBOT_ENABLED,
CHATWOOT_ENABLED) so integrations no longer fail with 'N8n is disabled',
and pins the image to v2.3.7 instead of latest.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(rybbit): update to v2.7.0

The template shipped rybbit v1.5.1, which is no longer supported and is
vulnerable to known React2Shell exploits (see #659). Update to the
latest stable release v2.7.0 and align the stack with the upstream
docker-compose:

- Pin ghcr.io/rybbit-io/rybbit-backend and rybbit-client to v2.7.0
- Add the redis service now required by the backend (session tracking
  and BullMQ queues), with password auth, AOF persistence and
  noeviction policy per upstream
- Drop the DOMAIN_NAME env var (only used by the upstream Caddy
  webserver, which Dokploy replaces with Traefik)
- Add DISABLE_TELEMETRY env and generate BETTER_AUTH_SECRET as base64

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(phpmyadmin): raise PHP upload limit so SQL imports over 2MB work

Without UPLOAD_LIMIT the phpMyAdmin image keeps PHP's default 2M
post_max_size/upload_max_filesize, so importing any SQL file larger
than 2MB fails with 'POST Content-Length exceeds the limit of
2097152 bytes' followed by a session_start error page.

- Add UPLOAD_LIMIT (512M) and MAX_EXECUTION_TIME (600) env vars,
  configurable from the template env
- Wire the previously unused MYSQL_DATABASE env var into the compose
  file, replacing the hardcoded 'tu_base_de_datos' placeholder, and
  default it to 'phpmyadmin' instead of the system 'mysql' schema

Closes #236

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(openpanel): pin verified 2.2.1 images and fix ClickHouse interserver host

- Pin lindesvard/openpanel-api|dashboard|worker to 2.2.1 (verified working
  end-to-end on a Dokploy instance) instead of the mutable :2 tag, so a
  future broken 2.x release cannot silently break the template again —
  which is how #615 originated when 2.0.0 shipped.
- Fix interserver_http_host to match the actual service name (op-ch),
  aligning with upstream self-hosting config.
- Set meta.json version to the pinned 2.2.1.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(wordpress): route loopback requests through Traefik to fix cURL error 28

WordPress resolves its own public domain to the server's public IP from
inside the container, so REST API / WP-Cron / Site Health loopback
requests depend on hairpin NAT, which times out (cURL error 28) on many
hosts. Pin the site domain to the dokploy-traefik container IP in
/etc/hosts at startup (with retries, since Traefik joins the compose
network shortly after the container starts) so loopback traffic stays
inside the Docker network for both HTTP and HTTPS. No-op fallback when
dokploy-traefik is not resolvable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(minio): migrate to pgsty/minio community fork (upstream is source-only and archived)

MinIO Inc. stopped publishing Docker images and pre-built binaries in
October 2025 and archived the minio/minio repository in February 2026.
The official minio/minio image is frozen at RELEASE.2025-09-07T16-13-09Z
and no longer receives security fixes (the fix for CVE-2025-62506 was
never published as an image).

- Switch image to pgsty/minio:RELEASE.2026-06-18T00-00-00Z, the actively
  maintained community fork (drop-in replacement, AGPLv3, same env vars,
  same /data on-disk format, restores the full web console)
- Route the S3 API (port 9000) through its own generated domain instead
  of publishing host port 9000, per repo conventions
- Update meta.json links/description to point at the maintained fork

Closes #469

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(nextcloud-aio): drop AIO branding, keep template id, pin nextcloud 33.0.6

The template ships plain nextcloud + mariadb + redis + cron, not the
nextcloud/all-in-one mastercontainer. Display name and description no
longer claim AIO; folder id is kept as nextcloud-aio to avoid breaking
existing installs. Image pinned to the current stable tag (33.0.6).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add MailCatcher NG template

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: add per-template setup instructions (supabase, trigger.dev)

Adds instructions.md files for the Supabase and Trigger.dev templates and
renders them in the template browser as a new Instructions tab in the
template dialog (fetched from blueprints/<id>/instructions.md, rendered
with a small dependency-free markdown component).

Also removes the placeholder blueprints/ackee/instructions.md so it does
not surface as an empty Instructions tab.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add Weblate template

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add Synapse (Matrix homeserver) template

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add Dify template

Dify 1.15.0 (open-source LLM app development platform): api + worker +
worker_beat + web + pgvector PostgreSQL (also used as the vector store) +
redis + sandbox + ssrf_proxy (squid) + plugin_daemon, fronted by an
internal nginx gateway that mirrors the upstream path routing.

Closes #88

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add Sim Studio template

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add Steedos template

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add Silex template

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add SpacetimeDB template

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add CertMate template

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add PostHog template

Based on the official hobby deployment, trimmed to run on a single
server: Django web + Celery worker, Node plugin-server (CDP, ingestion,
session replay, recording API), Rust capture/replay-capture/
feature-flags/hypercache, livestream, Caddy path router, Postgres,
Redis, Redpanda (Kafka), ZooKeeper, ClickHouse and MinIO.

Images are pinned to a tested master commit (PostHog no longer
publishes tagged releases); an init container fetches the matching
ClickHouse configuration, Kafka table schemas, funnel UDF binaries and
the GeoIP database at the same pinned ref.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add Markup template

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add Frappe LMS template

Adds a Frappe LMS (Frappe Learning) template based on the erpnext-v16
blueprint pattern (configurator + create-site + workers + scheduler +
websocket + mariadb + 3x redis).

Pins ghcr.io/frappe/lms:v2.52.0, the latest upstream image that ships
the lms app (v2.52.1+ images are currently published without any apps
baked in). The image does not bundle the payments app, so create-site
clears lms's required_apps before install; paid-course checkout is
unavailable, everything else works. The backend is gated on a
create-site completion marker so gunicorn workers never serve (and
cache) a half-installed site during the 3-6 minute first boot.

Closes #517

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add TREK template

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add Oryx (SRS) media streaming template

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix: stop plugins service crash loop (logs-redis TLS default)

In production images LOGS_REDIS_TLS/TRACES_REDIS_TLS default to true, so
the logs-ingestion consumer (part of the plugin-server default mode) kept
attempting a TLS handshake against the plaintext Redis, timed out every
~11s and killed the process after 10 errors (restart loop every ~2.5 min).

Constrain the plugins service to the capability groups this template
ships (cdp_workflows, realtime_cohorts, feature_flags) and pin the redis
TLS flags to false as belt-and-braces.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add n8n queue mode template

n8n running in queue mode (EXECUTIONS_MODE=queue): main instance for the
editor/webhooks, a scalable pool of workers (deploy.replicas driven by the
N8N_WORKER_REPLICAS env var), Redis (Bull) as the queue broker and
PostgreSQL as the database. Pinned to the current stable n8nio/n8n:2.30.4.

Closes #455

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add bonfire template

Bonfire (social flavour) — federated social networking toolkit.
App + PostGIS + Meilisearch, mirroring upstream's reference deployments.

Closes #125

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add dagu blueprint

Dagu is a self-contained workflow engine with a Web UI for scheduling and
orchestrating jobs as DAGs defined in declarative YAML.

- Pin ghcr.io/dagucloud/dagu:2.10.7 and expose the Web UI on port 8080
- Set DAGU_HOST=0.0.0.0 so the service is reachable through the proxy
- Enable basic auth with a generated per-deploy admin password
- Persist /var/lib/dagu (DAGs, logs, run history) in a named volume

Claude-Session: https://claude.ai/code/session_01CRNT6sa2q2P9rUTokeoGhQ

* feat: add OneUptime template

Adds OneUptime (open-source observability platform: uptime monitoring,
status pages, incident management, on-call, logs/traces/metrics) as a
template, following upstream's current single-app architecture
(app + nginx ingress + postgres + redis + clickhouse + probe).

Closes #514

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: add Mailu template

Mailu 2024.06 mail server: front (nginx), admin, imap (dovecot),
smtp (postfix), antispam (rspamd), Roundcube webmail and redis.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(templates): add systemprompt (#1032)

* feat(templates): add systemprompt

* fix header comment: accurate in both repos

* chore: normalize template tags to kebab-case (#987)

* feat: adds `check-links.js` to find broken links (#983)

* feat: add struxa template (#1037)

* feat: add struxa template

Adds a Dokploy blueprint for Struxa (github.com/struxadotcloud/struxa),
a self-hosted, open-source server management panel. Deploys the
published GHCR images (dashboard, watchkeeper, migrate) plus MySQL
and MinIO sidecars. The web service generates its RS256 JWT keypair
at startup via Node's built-in crypto module, since no Dokploy
template helper covers RSA key generation.

* fix: pin struxa images to latest floating tag

struxa's release workflow pushes a latest floating tag alongside
version tags on every stable release, matching the convention used
by ~44% of existing blueprints (version: "latest" in meta.json).

* fix: generate a 64-char DATABASE_ENCRYPTION_KEY

Dokploy's runtime \${hash:N} helper produces N hex characters, not N
bytes (the templates repo's local preview helpers.ts models it as
byte count, which is inconsistent with the platform). struxa's env
schema requires DATABASE_ENCRYPTION_KEY to be >=64 chars (it's hex
decoded to a 32-byte AES-256 key), so \${hash:32} only produced half
the required length. Confirmed against other blueprints (sim,
chatwoot, outline) which all use \${hash:64} for 64-char secrets.

* fix: address Copilot review comments

- Add explicit \`version: "3.8"\` to docker-compose.yml, matching the
  documented template format.
- Pin minio/minio to a specific RELEASE tag (used elsewhere in the
  repo: plane, posthog) instead of the floating latest tag.
- Default BETTER_AUTH_URL/APP_URL/CORS_ORIGIN to http://, matching
  repo convention for Dokploy-fronted apps (TLS terminates at the
  proxy).

* fix: rename web service to struxa

AGENTS.md convention: the primary Docker service name should match
the blueprint folder name. Renamed the web/dashboard service from
"web" to "struxa" in docker-compose.yml and updated
template.toml's config.domains.serviceName to match.

* Add PodFetch template (#1035)

* Add PodFetch template

* Use env array syntax in template.toml

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Address review: match version to image tag, expose admin_username variable, dark-mode friendly logo

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix(docker): share plugins and themes volumes across containers (#990)

* feat(directus): upgrade template to Directus 12.1.1 (#986)

* feat(directus): upgrade template to Directus 12.1.1

* feat(directus): add commented S3 env variables to template.toml

---------

Co-authored-by: Zakher Masri <46135573+zaaakher@users.noreply.github.com>
Co-authored-by: zakher <zakhermasri@gmail.com>
Co-authored-by: Jinjinov <dzindzinovic@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Stephan Fitzpatrick <stephan@knowsuchagency.com>
Co-authored-by: Mauricio Siu <mauricio@dokploy.com>
Co-authored-by: Edward Burton <ejb503@gmail.com>
Co-authored-by: Marko Kostich <markokosticdev@gmail.com>
Co-authored-by: Jakub Krzyżanowski <jakubkrzyz.kontakt@gmail.com>
Co-authored-by: SamTV12345 <40429738+SamTV12345@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Mafly <110502739+Nekoplii@users.noreply.github.com>
2026-07-20 01:20:53 -06:00
Mauricio SiuandGitHub c33d499975 Merge branch 'main' into canary 2026-07-20 00:34:19 -06:00
Marko KostichandGitHub b4542d82f8 feat(directus): upgrade template to Directus 12.1.1 (#986)
* feat(directus): upgrade template to Directus 12.1.1

* feat(directus): add commented S3 env variables to template.toml
2026-07-19 19:25:33 -06:00
MaflyandGitHub ceb65b216f fix(docker): share plugins and themes volumes across containers (#990) 2026-07-19 19:24:15 -06:00
8daff07700 Add PodFetch template (#1035)
* Add PodFetch template

* Use env array syntax in template.toml

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Address review: match version to image tag, expose admin_username variable, dark-mode friendly logo

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-19 19:20:01 -06:00
Jakub KrzyżanowskiandGitHub 08d87d8a90 feat: add struxa template (#1037)
* feat: add struxa template

Adds a Dokploy blueprint for Struxa (github.com/struxadotcloud/struxa),
a self-hosted, open-source server management panel. Deploys the
published GHCR images (dashboard, watchkeeper, migrate) plus MySQL
and MinIO sidecars. The web service generates its RS256 JWT keypair
at startup via Node's built-in crypto module, since no Dokploy
template helper covers RSA key generation.

* fix: pin struxa images to latest floating tag

struxa's release workflow pushes a latest floating tag alongside
version tags on every stable release, matching the convention used
by ~44% of existing blueprints (version: "latest" in meta.json).

* fix: generate a 64-char DATABASE_ENCRYPTION_KEY

Dokploy's runtime \${hash:N} helper produces N hex characters, not N
bytes (the templates repo's local preview helpers.ts models it as
byte count, which is inconsistent with the platform). struxa's env
schema requires DATABASE_ENCRYPTION_KEY to be >=64 chars (it's hex
decoded to a 32-byte AES-256 key), so \${hash:32} only produced half
the required length. Confirmed against other blueprints (sim,
chatwoot, outline) which all use \${hash:64} for 64-char secrets.

* fix: address Copilot review comments

- Add explicit \`version: "3.8"\` to docker-compose.yml, matching the
  documented template format.
- Pin minio/minio to a specific RELEASE tag (used elsewhere in the
  repo: plane, posthog) instead of the floating latest tag.
- Default BETTER_AUTH_URL/APP_URL/CORS_ORIGIN to http://, matching
  repo convention for Dokploy-fronted apps (TLS terminates at the
  proxy).

* fix: rename web service to struxa

AGENTS.md convention: the primary Docker service name should match
the blueprint folder name. Renamed the web/dashboard service from
"web" to "struxa" in docker-compose.yml and updated
template.toml's config.domains.serviceName to match.
2026-07-19 19:19:42 -06:00
Zakher MasriandGitHub 8ca2bf9393 feat: adds check-links.js to find broken links (#983) 2026-07-19 19:11:43 -06:00
Marko KostichandGitHub 7aee585368 chore: normalize template tags to kebab-case (#987) 2026-07-19 19:11:40 -06:00
Edward BurtonandGitHub 34f3577b81 feat(templates): add systemprompt (#1032)
* feat(templates): add systemprompt

* fix header comment: accurate in both repos
2026-07-19 19:09:19 -06:00
Mauricio SiuandGitHub fff1708ebd Merge pull request #1033 from Dokploy/feat/mailu
feat: add Mailu mail server template
2026-07-19 19:06:25 -06:00
Mauricio SiuandGitHub c66a1df3cf Merge pull request #1027 from Dokploy/feat/oryx
feat: add Oryx (SRS) media streaming template
2026-07-19 19:05:32 -06:00
Mauricio SiuandGitHub dd12762085 Merge pull request #994 from Jinjinov/add-openhabittracker
Add openhabittracker template
2026-07-19 19:05:24 -06:00
Mauricio SiuandGitHub d6b842c275 Merge pull request #1034 from Dokploy/feat/oneuptime
feat: add OneUptime template
2026-07-17 13:37:12 -06:00
Mauricio SiuandClaude Fable 5 f6245f84dc feat: add Mailu template
Mailu 2024.06 mail server: front (nginx), admin, imap (dovecot),
smtp (postfix), antispam (rspamd), Roundcube webmail and redis.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 17:50:39 -06:00
Mauricio SiuandClaude Fable 5 6683685dae feat: add OneUptime template
Adds OneUptime (open-source observability platform: uptime monitoring,
status pages, incident management, on-call, logs/traces/metrics) as a
template, following upstream's current single-app architecture
(app + nginx ingress + postgres + redis + clickhouse + probe).

Closes #514

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 17:46:15 -06:00
Mauricio SiuandGitHub a3f2655baa Merge pull request #1028 from Dokploy/feat/posthog
feat: add PostHog template
2026-07-14 23:38:37 -06:00
Mauricio SiuandGitHub 13d03f9a92 Merge pull request #1030 from Dokploy/feat/bonfire
feat: add Bonfire template
2026-07-14 23:38:14 -06:00
Mauricio SiuandGitHub 51922e71b6 Merge pull request #1031 from knowsuchagency/add-dagu-template
Add Dagu template
2026-07-14 23:37:53 -06:00
Mauricio SiuandGitHub 3a6f9d709a Merge pull request #1029 from Dokploy/feat/n8n-queue
feat: add n8n queue mode template (scalable workers)
2026-07-14 23:36:47 -06:00
Stephan Fitzpatrick 0beb68a228 feat: add dagu blueprint
Dagu is a self-contained workflow engine with a Web UI for scheduling and
orchestrating jobs as DAGs defined in declarative YAML.

- Pin ghcr.io/dagucloud/dagu:2.10.7 and expose the Web UI on port 8080
- Set DAGU_HOST=0.0.0.0 so the service is reachable through the proxy
- Enable basic auth with a generated per-deploy admin password
- Persist /var/lib/dagu (DAGs, logs, run history) in a named volume

Claude-Session: https://claude.ai/code/session_01CRNT6sa2q2P9rUTokeoGhQ
2026-07-14 16:41:48 -07:00
Mauricio SiuandClaude Fable 5 7d252ead5c feat: add bonfire template
Bonfire (social flavour) — federated social networking toolkit.
App + PostGIS + Meilisearch, mirroring upstream's reference deployments.

Closes #125

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 16:24:32 -06:00
Mauricio SiuandClaude Fable 5 fe94f4ce0b feat: add n8n queue mode template
n8n running in queue mode (EXECUTIONS_MODE=queue): main instance for the
editor/webhooks, a scalable pool of workers (deploy.replicas driven by the
N8N_WORKER_REPLICAS env var), Redis (Bull) as the queue broker and
PostgreSQL as the database. Pinned to the current stable n8nio/n8n:2.30.4.

Closes #455

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 16:15:50 -06:00
Mauricio SiuandClaude Fable 5 3eb1d3b7bd fix: stop plugins service crash loop (logs-redis TLS default)
In production images LOGS_REDIS_TLS/TRACES_REDIS_TLS default to true, so
the logs-ingestion consumer (part of the plugin-server default mode) kept
attempting a TLS handshake against the plaintext Redis, timed out every
~11s and killed the process after 10 errors (restart loop every ~2.5 min).

Constrain the plugins service to the capability groups this template
ships (cdp_workflows, realtime_cohorts, feature_flags) and pin the redis
TLS flags to false as belt-and-braces.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 15:50:16 -06:00
Mauricio SiuandClaude Fable 5 af8b535d34 feat: add Oryx (SRS) media streaming template
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 14:06:04 -06:00
Mauricio SiuandGitHub 15db93df3b Merge pull request #1026 from Dokploy/feat/trek
feat: add TREK template
2026-07-14 14:00:35 -06:00
Mauricio SiuandGitHub cc3b93518b Merge pull request #1025 from Dokploy/feat/frappe-lms
feat: add Frappe LMS template
2026-07-14 14:00:26 -06:00
Mauricio SiuandGitHub e7285cea05 Merge pull request #1023 from Dokploy/feat/certmate
feat: add CertMate template
2026-07-14 14:00:22 -06:00
Mauricio SiuandGitHub a80a073389 Merge pull request #1020 from Dokploy/feat/steedos
feat: add Steedos template
2026-07-14 14:00:01 -06:00
Mauricio SiuandGitHub 77b078faf3 Merge pull request #1019 from Dokploy/feat/sim
feat: add Sim Studio template
2026-07-14 13:59:56 -06:00
Mauricio SiuandGitHub 31f95474d6 Merge pull request #1018 from Dokploy/feat/dify
feat: add Dify template
2026-07-14 13:59:47 -06:00
Mauricio SiuandGitHub fabecbe728 Merge pull request #1017 from Dokploy/feat/synapse
feat: add Synapse (Matrix homeserver) template
2026-07-14 13:59:37 -06:00
Mauricio SiuandGitHub 4159d3a9f0 Merge pull request #1016 from Dokploy/feat/weblate
feat: add Weblate template
2026-07-14 13:59:29 -06:00
Mauricio SiuandGitHub abe36ad330 Merge pull request #1015 from Dokploy/docs/template-instructions
docs: per-template setup instructions for Supabase and Trigger.dev
2026-07-14 13:59:20 -06:00
Mauricio SiuandGitHub 89505f0b54 Merge pull request #1014 from Dokploy/feat/mailcatcher-ng
feat: add MailCatcher NG template
2026-07-14 13:59:11 -06:00
Mauricio SiuandGitHub 981811f55f Merge pull request #1013 from Dokploy/fix/nextcloud-naming
fix(nextcloud-aio): drop AIO branding, pin nextcloud 33.0.6
2026-07-14 13:59:03 -06:00
Mauricio SiuandGitHub ffeaca14af Merge pull request #1012 from Dokploy/fix/minio-source-only
fix(minio): migrate to pgsty/minio community fork (upstream is source-only and archived)
2026-07-14 13:58:55 -06:00
Mauricio SiuandGitHub 77145ad581 Merge pull request #1011 from Dokploy/fix/wordpress-loopback
fix(wordpress): route loopback requests through Traefik to fix cURL error 28 timeouts
2026-07-14 13:58:48 -06:00
Mauricio SiuandGitHub c60bfa8c72 Merge pull request #1010 from Dokploy/fix/openpanel
fix(openpanel): pin verified 2.2.1 images to prevent broken-release breakage
2026-07-14 13:58:40 -06:00
Mauricio SiuandGitHub dd986039a7 Merge pull request #1009 from Dokploy/fix/phpmyadmin
fix(phpmyadmin): raise PHP upload limit so SQL imports over 2MB work
2026-07-14 13:58:32 -06:00
Mauricio SiuandGitHub 0633b987d5 Merge pull request #1008 from Dokploy/fix/rybbit-update
fix(rybbit): update to current version (v2.7.0)
2026-07-14 13:58:05 -06:00
Mauricio SiuandGitHub 5d6afe20a6 Merge pull request #1007 from Dokploy/fix/evolutionapi
fix(evolutionapi): enable integration env flags (n8n/openai/evoai) and update
2026-07-14 13:57:56 -06:00
Mauricio SiuandGitHub 618cda2366 Merge pull request #1006 from Dokploy/fix/databasus-rename
fix: add Databasus template (Postgresus was renamed upstream)
2026-07-14 13:57:48 -06:00
Mauricio SiuandGitHub 74cec8f74f Merge pull request #1004 from Dokploy/fix/signoz-clickhouse
fix(signoz): fix ClickHouse hostname resolution and IPv6 binding
2026-07-14 13:57:40 -06:00
Mauricio SiuandGitHub 64fb0f6573 Merge pull request #1003 from Dokploy/fix/automatisch
fix(automatisch): switch to official image and wire up DOMAIN to fix Bad Gateway
2026-07-14 13:57:31 -06:00
Mauricio SiuandGitHub 9e02e96e3a Merge pull request #1002 from Dokploy/fix/immich-update
fix(immich): update to v3.0.2
2026-07-14 13:57:22 -06:00
Mauricio SiuandClaude Fable 5 59e323483c feat: add TREK template
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 13:57:21 -06:00
Mauricio SiuandGitHub 33c3fcdadb Merge pull request #998 from Dokploy/fix/homarr-volumes
fix(homarr): use named volume for /appdata and 64-char hex encryption key
2026-07-14 13:57:07 -06:00
Mauricio SiuandGitHub 493e824f70 Merge pull request #996 from Dokploy/fix/cockpit-volumes
fix(cockpit): persist config and storage volumes per upstream docs
2026-07-14 13:56:58 -06:00
Mauricio SiuandGitHub 6f27a9427c Merge pull request #995 from Dokploy/fix/affinepro-update
fix(affinepro): update to current AFFiNE images
2026-07-14 13:56:48 -06:00
Mauricio SiuandGitHub f76c31ef89 Merge pull request #1024 from Dokploy/feat/markup
feat: add Markup template
2026-07-14 13:56:16 -06:00
Mauricio SiuandGitHub 478c5197b2 Merge pull request #1021 from Dokploy/feat/silex
feat: add Silex template
2026-07-14 13:53:56 -06:00
Mauricio SiuandClaude Fable 5 8c15db8a2c feat: add Frappe LMS template
Adds a Frappe LMS (Frappe Learning) template based on the erpnext-v16
blueprint pattern (configurator + create-site + workers + scheduler +
websocket + mariadb + 3x redis).

Pins ghcr.io/frappe/lms:v2.52.0, the latest upstream image that ships
the lms app (v2.52.1+ images are currently published without any apps
baked in). The image does not bundle the payments app, so create-site
clears lms's required_apps before install; paid-course checkout is
unavailable, everything else works. The backend is gated on a
create-site completion marker so gunicorn workers never serve (and
cache) a half-installed site during the 3-6 minute first boot.

Closes #517

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 13:53:41 -06:00
Mauricio SiuandGitHub a837539398 Merge pull request #999 from Dokploy/fix/logto-update
fix(logto): fix postgres role error and update to current version
2026-07-14 13:53:28 -06:00
Mauricio SiuandGitHub c33f72b32a Merge pull request #997 from Dokploy/fix/kener-issues
fix(kener): define REDIS_URL and drop unused databases
2026-07-14 13:53:19 -06:00
Mauricio SiuandGitHub 1c2921417d Merge pull request #1001 from Dokploy/fix/zitadel-domain
fix(zitadel): wire EXTERNALDOMAIN to the generated domain
2026-07-14 13:53:00 -06:00
Mauricio SiuandGitHub 6f1b083c57 Merge pull request #1005 from Dokploy/fix/infisical-update
fix(infisical): update to v0.162.6
2026-07-14 13:52:47 -06:00
Mauricio SiuandGitHub bd457e0310 Merge pull request #1022 from Dokploy/feat/spacetimedb
feat: add SpacetimeDB template
2026-07-14 13:52:36 -06:00
Mauricio SiuandGitHub 311faa1ea9 Merge pull request #1000 from Dokploy/fix/gitlab-ce
fix(gitlab-ce): serve on the generated domain (external_url/nginx config)
2026-07-14 13:51:56 -06:00
Mauricio SiuandClaude Fable 5 ee35ed1a42 feat: add Markup template
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 13:47:42 -06:00
Mauricio SiuandClaude Fable 5 7f3a08eb00 feat: add PostHog template
Based on the official hobby deployment, trimmed to run on a single
server: Django web + Celery worker, Node plugin-server (CDP, ingestion,
session replay, recording API), Rust capture/replay-capture/
feature-flags/hypercache, livestream, Caddy path router, Postgres,
Redis, Redpanda (Kafka), ZooKeeper, ClickHouse and MinIO.

Images are pinned to a tested master commit (PostHog no longer
publishes tagged releases); an init container fetches the matching
ClickHouse configuration, Kafka table schemas, funnel UDF binaries and
the GeoIP database at the same pinned ref.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 13:43:38 -06:00
Mauricio SiuandClaude Fable 5 a266e36a4d feat: add CertMate template
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 13:37:16 -06:00
Mauricio SiuandClaude Fable 5 3ddbdde081 feat: add SpacetimeDB template
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 13:30:17 -06:00
Mauricio SiuandClaude Fable 5 0bfb50d62f feat: add Silex template
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 13:19:16 -06:00
Mauricio SiuandClaude Fable 5 62850c3696 feat: add Steedos template
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 13:10:56 -06:00
Mauricio SiuandClaude Fable 5 d1ef9333a3 feat: add Sim Studio template
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 12:41:18 -06:00
Mauricio SiuandClaude Fable 5 1c2dea39c3 feat: add Dify template
Dify 1.15.0 (open-source LLM app development platform): api + worker +
worker_beat + web + pgvector PostgreSQL (also used as the vector store) +
redis + sandbox + ssrf_proxy (squid) + plugin_daemon, fronted by an
internal nginx gateway that mirrors the upstream path routing.

Closes #88

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 12:29:15 -06:00
Mauricio SiuandClaude Fable 5 b23ddd0b98 feat: add Synapse (Matrix homeserver) template
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 12:12:24 -06:00
Mauricio SiuandClaude Fable 5 7683947842 feat: add Weblate template
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 12:07:41 -06:00
Mauricio SiuandClaude Fable 5 03a60bb417 docs: add per-template setup instructions (supabase, trigger.dev)
Adds instructions.md files for the Supabase and Trigger.dev templates and
renders them in the template browser as a new Instructions tab in the
template dialog (fetched from blueprints/<id>/instructions.md, rendered
with a small dependency-free markdown component).

Also removes the placeholder blueprints/ackee/instructions.md so it does
not surface as an empty Instructions tab.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 12:04:30 -06:00
Mauricio SiuandClaude Fable 5 b7c2d6c35d feat: add MailCatcher NG template
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 12:03:04 -06:00
Mauricio SiuandClaude Fable 5 f036ddae92 fix(nextcloud-aio): drop AIO branding, keep template id, pin nextcloud 33.0.6
The template ships plain nextcloud + mariadb + redis + cron, not the
nextcloud/all-in-one mastercontainer. Display name and description no
longer claim AIO; folder id is kept as nextcloud-aio to avoid breaking
existing installs. Image pinned to the current stable tag (33.0.6).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:58:34 -06:00
Mauricio SiuandClaude Fable 5 030d9d1089 fix(minio): migrate to pgsty/minio community fork (upstream is source-only and archived)
MinIO Inc. stopped publishing Docker images and pre-built binaries in
October 2025 and archived the minio/minio repository in February 2026.
The official minio/minio image is frozen at RELEASE.2025-09-07T16-13-09Z
and no longer receives security fixes (the fix for CVE-2025-62506 was
never published as an image).

- Switch image to pgsty/minio:RELEASE.2026-06-18T00-00-00Z, the actively
  maintained community fork (drop-in replacement, AGPLv3, same env vars,
  same /data on-disk format, restores the full web console)
- Route the S3 API (port 9000) through its own generated domain instead
  of publishing host port 9000, per repo conventions
- Update meta.json links/description to point at the maintained fork

Closes #469

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:55:53 -06:00
Mauricio SiuandClaude Fable 5 af16250561 fix(wordpress): route loopback requests through Traefik to fix cURL error 28
WordPress resolves its own public domain to the server's public IP from
inside the container, so REST API / WP-Cron / Site Health loopback
requests depend on hairpin NAT, which times out (cURL error 28) on many
hosts. Pin the site domain to the dokploy-traefik container IP in
/etc/hosts at startup (with retries, since Traefik joins the compose
network shortly after the container starts) so loopback traffic stays
inside the Docker network for both HTTP and HTTPS. No-op fallback when
dokploy-traefik is not resolvable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:55:19 -06:00
Mauricio SiuandClaude Fable 5 f946051a6c fix(openpanel): pin verified 2.2.1 images and fix ClickHouse interserver host
- Pin lindesvard/openpanel-api|dashboard|worker to 2.2.1 (verified working
  end-to-end on a Dokploy instance) instead of the mutable :2 tag, so a
  future broken 2.x release cannot silently break the template again —
  which is how #615 originated when 2.0.0 shipped.
- Fix interserver_http_host to match the actual service name (op-ch),
  aligning with upstream self-hosting config.
- Set meta.json version to the pinned 2.2.1.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:53:37 -06:00
Mauricio SiuandClaude Fable 5 9bdbe266e5 fix(phpmyadmin): raise PHP upload limit so SQL imports over 2MB work
Without UPLOAD_LIMIT the phpMyAdmin image keeps PHP's default 2M
post_max_size/upload_max_filesize, so importing any SQL file larger
than 2MB fails with 'POST Content-Length exceeds the limit of
2097152 bytes' followed by a session_start error page.

- Add UPLOAD_LIMIT (512M) and MAX_EXECUTION_TIME (600) env vars,
  configurable from the template env
- Wire the previously unused MYSQL_DATABASE env var into the compose
  file, replacing the hardcoded 'tu_base_de_datos' placeholder, and
  default it to 'phpmyadmin' instead of the system 'mysql' schema

Closes #236

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:47:20 -06:00
Mauricio SiuandClaude Fable 5 25563213f2 fix(rybbit): update to v2.7.0
The template shipped rybbit v1.5.1, which is no longer supported and is
vulnerable to known React2Shell exploits (see #659). Update to the
latest stable release v2.7.0 and align the stack with the upstream
docker-compose:

- Pin ghcr.io/rybbit-io/rybbit-backend and rybbit-client to v2.7.0
- Add the redis service now required by the backend (session tracking
  and BullMQ queues), with password auth, AOF persistence and
  noeviction policy per upstream
- Drop the DOMAIN_NAME env var (only used by the upstream Caddy
  webserver, which Dokploy replaces with Traefik)
- Add DISABLE_TELEMETRY env and generate BETTER_AUTH_SECRET as base64

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:39:58 -06:00
Mauricio SiuandClaude Fable 5 fb64197738 fix(evolutionapi): enable integration flags and update version
Adds the integration enable env flags introduced in Evolution API v2.3.x
(N8N_ENABLED, OPENAI_ENABLED, EVOAI_ENABLED, DIFY_ENABLED, TYPEBOT_ENABLED,
CHATWOOT_ENABLED) so integrations no longer fail with 'N8n is disabled',
and pins the image to v2.3.7 instead of latest.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:38:27 -06:00
Mauricio SiuandClaude Fable 5 cd16441901 fix: add databasus (postgresus renamed upstream)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:36:03 -06:00
Mauricio SiuandClaude Fable 5 29a7970397 fix(infisical): update to v0.162.6
- Bump image from v0.135.0-postgres to v0.162.6 (upstream dropped the
  -postgres tag suffix after v0.146.0; plain tags are the postgres build)
- Remove the db-migration service: the standalone image runs database
  migrations automatically on boot (auto-start-migrations), matching the
  official docker-compose.prod.yml which no longer ships that service
- Generate ENCRYPTION_KEY (${hash:32}) and AUTH_SECRET (${base64:32})
  per deployment instead of shipping hardcoded example secrets
- Fix SITE_URL to http://${main_domain} (no :8080; the domain is proxied)
- Refresh SMTP env names (SMTP_FROM_ADDRESS/SMTP_FROM_NAME; SMTP_SECURE
  was removed upstream) and drop unused CLIENT_* env placeholders that
  were never passed to the container

Closes #215

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:30:46 -06:00
Mauricio SiuandClaude Fable 5 1e486813b4 fix(signoz): fix ClickHouse hostname resolution and IPv6 binding
- Override the ClickHouse image's config.d/docker_related_config.xml,
  which listens on the IPv6 wildcard address ([::]) first and fails to
  bind on hosts without IPv6 support; listen on 0.0.0.0 (IPv4) only and
  disable the internal DNS cache so transient startup DNS failures for
  zookeeper-1/clickhouse are not cached (issue #534).
- Set hostname: clickhouse (instead of container_name) so the server
  identifies itself as the cluster host declared in cluster.xml.
- Remove the explicit signoz-net network: Dokploy attaches its own
  networks automatically and the repo validator rejects explicit
  networks; a fixed-name shared network also breaks service DNS across
  deployments.
- Fix mount mismatch: template.toml created files/signoz/prometheus.xml
  while the compose mounts ../files/signoz/prometheus.yml, so Docker
  silently mounted a directory as the signoz prometheus config.
- Give the otel-collector domain its own generated host: both domains
  previously shared the same host and path "/", creating two conflicting
  Traefik routers where one service randomly won.

Closes #534

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:30:07 -06:00
Mauricio SiuandClaude Fable 5 3c416eaba3 fix(automatisch): switch to official image and wire up DOMAIN to fix Bad Gateway
- Replace unofficial dockeriddonuts/automatisch:2.0 mirror (stale since Nov 2024)
  with the official automatischio/automatisch:0.15.0 image
- Define DOMAIN in template.toml [config.env]: the compose referenced ${DOMAIN}
  but it was never provided, so HOST resolved empty and the app generated
  localhost URLs for the web app and webhooks
- Set API_URL/WEB_APP_URL so generated URLs don't carry the internal :3000 port
  behind Traefik
- Add postgres healthcheck and gate the app on service_healthy to avoid the
  boot-time migration race; worker now starts after main (official compose order)
- Drop unnecessary published port and no-op REDIS_* env on the redis service
- Bump meta.json version to 0.15.0

Closes #97

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:28:22 -06:00
Mauricio SiuandClaude Fable 5 31158e2340 fix(immich): update to v3.0.2
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:19:38 -06:00
Mauricio SiuandClaude Fable 5 6786237720 fix(zitadel): wire EXTERNALDOMAIN/PORT/SECURE to the generated domain
Zitadel resolves its instance from the external domain/port/scheme, so the
template's ZITADEL_EXTERNALPORT=8080 made every generated URL (OIDC issuer,
login redirects) point at http://<domain>:8080 instead of the domain served
by Traefik, ending in {"code":5,"message":"Not Found"} (#516).

- Expose ZITADEL_EXTERNALDOMAIN / ZITADEL_EXTERNALPORT / ZITADEL_EXTERNALSECURE
  as template env vars, defaulting to the generated domain over HTTP
  (port 80, secure=false) so the routed domain and Zitadel's external config
  always match; HTTPS users flip them to 443/true in the Env tab.
- Pin image to v4.16.0 (was latest) and keep the built-in login v1 via
  ZITADEL_DEFAULTINSTANCE_FEATURES_LOGINV2_REQUIRED=false so no separate
  login-v2 container is needed.
- Add the official readiness healthcheck, drop the unused /app/data volume,
  bogus SMTP env keys, published port and obsolete compose version key.

Closes #516

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:12:30 -06:00
Mauricio SiuandClaude Fable 5 8f84a52855 fix(gitlab-ce): serve on the generated domain (remove removed unicorn config, pin omnibus)
The template set unicorn['worker_processes'] / unicorn['worker_timeout'] in
GITLAB_OMNIBUS_CONFIG. Unicorn was removed in GitLab 14.0, so on current
gitlab-ce images `gitlab-ctl reconfigure` aborts with "Removed configurations
found in gitlab.rb" and GitLab never starts serving — the generated domain
returned 502 Bad Gateway (issue #380).

Rewrite the template as the official all-in-one Omnibus setup:
- pin gitlab/gitlab-ce:19.1.2-ce.0 instead of :latest
- external_url http://<domain> with nginx listen_port 80 / listen_https false
  (TLS terminates at Traefik)
- set gitlab_rails['initial_root_password'] from a generated template password
- puma single mode + prometheus monitoring off to keep memory reasonable
- drop the external postgres/redis containers (Omnibus bundles and manages
  its own) and the broken ports entries ("2224" published a random host port
  while sshd listens on 22)

Verified on a live Dokploy instance: domain serves the GitLab sign-in page
and root login with the generated password works.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:11:25 -06:00
Mauricio SiuandClaude Fable 5 7ed8450cf8 fix(logto): fix postgres role error and update to 1.41.0
The postgres healthcheck ran pg_isready without -U while POSTGRES_USER
was set to logto, so every probe attempted to connect as role
"postgres" and spammed FATAL: role "postgres" does not exist.
Pass -U logto -d logto explicitly and set POSTGRES_DB.

Also fix LOGTO_ENDPOINT pointing at the admin domain instead of the
main domain, update Logto 1.27.0 -> 1.41.0, use ${password:32} for the
generated password, drop the ephemeral host port publishing and add
restart policies.

Closes #130

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:04:17 -06:00
Mauricio SiuandClaude Fable 5 c6a0b1b1b5 fix(homarr): use named volume for /appdata and hex encryption key
- Replace the relative bind mount `../homarr/appdata:/appdata` with a
  named volume `homarr_appdata:/appdata` so the data survives cleanups
  and can be backed up through Dokploy volume backups.
- Generate SECRET_ENCRYPTION_KEY with `${hash:64}` instead of
  `${password:64}`: homarr requires a 64-character hex string
  (`openssl rand -hex 32`) and the password helper emits non-hex
  characters (g-z).

Closes #738

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 10:58:33 -06:00
Mauricio SiuandClaude Fable 5 744ff52770 fix(kener): define REDIS_URL and drop unused databases
Kener v4 requires Redis for its BullMQ queues, caching and scheduler,
so the app crashed on startup with "REDIS_URL is not defined in
environment variables" right after printing that it was running
(issue #976). The template also spun up both a postgres and a mariadb
container while DATABASE_URL pointed at SQLite, so neither database
was ever used (issue #282).

Changes, aligned with the upstream docker-compose.yml
(rajnandan1/kener):

- Add a redis:7-alpine service with a healthcheck and persistent
  volume, wire REDIS_URL=redis://redis:6379 and make kener depend on
  redis being healthy
- Remove the unused postgres and mysql services plus their env vars
  and generated passwords; keep SQLite (upstream default) persisted
  in the kener_db volume
- Set ORIGIN to https://<domain> instead of http://localhost:3000 so
  CSRF protection works behind the generated domain
- Drop the stale /app/uploads bind mount (kener v4 only persists
  /app/database) and the obsolete compose version key

Deploy-tested on a Dokploy instance: migrations and seed complete,
schedulers start, "Kener version 4.1.2 is running!", HTTP 200 on the
generated domain, both containers stable.

Closes #976
Closes #282

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 10:56:19 -06:00
Mauricio SiuandClaude Fable 5 55aa82489d fix(cockpit): persist config and storage volumes per upstream docs
The template mounted `html:/var/www/html` (freezing the app code from the
first deploy) and `data:/var/www/html/storage/data`, which misses uploaded
assets (stored under `storage/uploads`) and cache. Per the official Cockpit
persistent-storage docs, mount `config:/var/www/html/config` and
`storage:/var/www/html/storage` instead.

Closes #549

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 10:55:57 -06:00
Mauricio SiuandClaude Fable 5 59770d4ae8 fix(affinepro): update to current AFFiNE images
The template pinned ghcr.io/toeverything/affine-graphql:stable-780dd83,
an ephemeral per-commit tag on the old image name that has since been
removed from GHCR, so the template could no longer pull and deploy.

- Switch both app and migration services to ghcr.io/toeverything/affine:stable,
  the rolling stable tag recommended by the official self-host compose,
  so the template no longer rots when per-commit tags are garbage-collected
- Move postgres to pgvector/pgvector:pg16 and set AFFINE_INDEXER_ENABLED=false,
  matching the current upstream self-host compose requirements
- Add postgres/redis healthchecks and proper depends_on conditions so the
  self-host-predeploy migration job runs only once the database is ready,
  and the server starts only after migrations complete successfully

Closes #777

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 10:55:42 -06:00
Jinjinov 6d56faf0ed Add openhabittracker blueprint 2026-07-13 23:25:21 +02:00
Mauricio SiuandGitHub a34def7060 Merge pull request #985 from H3xKatana/fix/kener-add-redis
fix(kener): add required Redis service to fix REDIS_URL crash
2026-07-08 14:12:11 -06:00
0xkatana c345475d68 fix: add required Redis service to Kener template
Kener v4 requires Redis for BullMQ background queues. Without it, the
application crashes on startup with 'REDIS_URL is not defined' error.

Changes:
- Add Redis 7 Alpine service with healthcheck
- Pin Kener image to v4.1.1 (was 'latest')
- Add REDIS_URL env var pointing to redis://redis:6379
- Remove unused postgres and mysql services (SQLite is the default)
- Remove unused env vars for removed DB services
- Use expose instead of ports (Dokploy convention)
- Add depends_on with service_healthy condition for Redis

Fixes https://github.com/Dokploy/templates/issues/976
2026-07-08 20:07:23 +01:00
Mauricio SiuandGitHub 17efd705a4 Merge pull request #984 from zaaakher/fix-broken-links
fix: broken links in some blueprints
2026-07-08 12:36:31 -06:00
Mauricio SiuandGitHub 3e942a5a05 Merge pull request #982 from zaaakher/patch-1
fix: meta.json of Poke blueprint
2026-07-08 12:06:03 -06:00
zakher d7b9ac33dc fix: broken links in some blueprints 2026-07-08 21:04:58 +03:00
Zakher MasriandGitHub ea23fb658c fix: meta.json of Poke blueprint
The current github/docs links was broken

before:
https://codeberg.org/ashley/poke
after:
https://codeberg.org/ashleyirispuppy/poke
2026-07-08 20:09:23 +03:00
Mauricio SiuandGitHub decfac62c9 Merge pull request #980 from Dokploy/canary
New 85 Templates
2026-07-08 11:04:02 -06:00
Mauricio SiuandGitHub c7c84ffbf0 Merge pull request #981 from Dokploy/fix/sync-main-into-canary
fix: sync main into canary (unblocks the #980 release PR)
2026-07-08 11:01:52 -06:00
Mauricio Siu 54c2d66ef5 Merge remote-tracking branch 'origin/main' into fix/sync-main-into-canary
# Conflicts:
#	meta.json
2026-07-08 11:00:56 -06:00
Mauricio SiuandGitHub cdfa328443 Merge pull request #979 from Dokploy/docs/readme-per-template-meta
docs: fix remaining README references to the removed root meta.json
2026-07-08 10:52:50 -06:00
Mauricio SiuandGitHub cdee0c3e2b Merge pull request #726 from feba33/patch-1 2026-07-07 19:09:35 -06:00
Paulo LinderandGitHub 3f5b738738 feat: add Velix API one-click template (#793)
* feat: add Velix API one-click template

Self-hosted WhatsApp API with multi-instance support, webhooks, n8n
node, and Chatwoot integration. Includes PostgreSQL 16 and Redis 7.

* fix: use standard port integer literal
2026-07-07 15:03:20 -06:00
shandGitHub 9708d34ce1 Add SMTP_PORT environment variable to docker-compose (#806) 2026-07-07 14:34:04 -06:00
+60 d1ef07fbd2 New release (#975)
* feat(librechat): add LibreChat blueprint with compose, toml, metadata, links and tags

* fix: rename templates to template.toml

* fix(librechat): rename api service to librechat in docker-compose.yml

* Update blueprints/librechat/template.toml

* Update blueprints/librechat/template.toml

* fix(librechat): add version under [config] and remove stray [config.mounts] header

* fix(librechat): remove predefined persistent volume mounts from template.toml

* docs(librechat): add authentication reference link to docker-compose.yml

* feat: add Rote template

- Add Rote deployment template with frontend, backend, and PostgreSQL services
- Configure domain routing for frontend (port 80) and backend (port 3000)
- Set up automatic password generation and environment variables
- Use latest image tag by default
- Add logo and metadata to meta.json

* fix: process meta.json to fix formatting and sorting

* Update GitHub workflows to target 'canary' branch for meta validation

* Update pnpm-lock.yaml to upgrade various dependencies, including '@codemirror/autocomplete', '@radix-ui/react-dialog', and React packages to their latest versions. This includes updates to '@types/react' and '@types/react-dom' for improved compatibility and performance.

* Enhance GitHub workflows: add production deployment configuration and target 'canary' branch for pull requests.

* Refactor GitHub workflow: comment out build preview steps for clarity and future modifications.

* Remove unnecessary blank line in deploy-preview.yml for improved readability.

* Refactor GitHub workflow: uncomment build preview steps for improved deployment process and clarity.

* Update template.toml (#555)

* Update template.toml

* Update template.toml

* Update template.toml

* fix: change VITE_API_BASE to http:// for traefik.me compatibility

* changed image from sknnr/enshrouded-dedicated-server to mornedhels/enshrouded-server for autoupdate and easier config

* Add Openinary Template (#567)

* feat: add Openinary template

* feat: update Openinary configuration to support ALLOWED_ORIGIN and refactor domain variable

* fix: correct DEFAULT_DOMAIN environment variable reference in docker-compose.yml (#562)

* add rustfs template (#568)

* feat: add pull request template for improved contribution guidelines

* fix: update pull request template to clarify issue closing keywords

* feat: add validation scripts and configuration for Docker Compose and template files

- Introduced a GitHub Actions workflow to validate Docker Compose files and template.toml on pull requests.
- Added helper functions for generating random values and processing variables in templates.
- Implemented validation scripts for checking the structure, syntax, and best practices of Docker Compose and template files.
- Created necessary TypeScript types and configuration files for the build scripts.

* Add Passbolt template blueprint to Dokploy templates (#376)

* feat(templates): add Passbolt blueprint for Dokploy
- Add docker-compose.yml defining services for Passbolt and MariaDB
- Create template.toml with configurable domain, email, and database credentials
- Add meta.json with metadata, tags, and link to logo

* fix(meta): sort meta.json entries

* fix: passbolt template had several issues that broke deployment

- env variables were using old array format, changed to new table format
- mariadb healthcheck was broken (wrong command for mariadb 11)
- missing volume mounts for gpg keys, jwt tokens, and database
- setup instructions weren't visible to users, moved to docker-compose
- email config had circular references causing warnings
- tested admin user creation and confirmed working

everything works now, fully tested

* Update blueprints/passbolt/template.toml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat: Add Kokoro TTS FastAPI template (#353) (#403)

* feat: Add Kokoro TTS FastAPI template (#353)  - Add CPU-optimized docker-compose.yml with source build - Add GPU-optimized docker-compose-gpu.yml for NVIDIA support - Add comprehensive template.toml with OpenAI-compatible API docs - Add kokoro-tts.svg logo and meta.json entry - Support streaming audio, timestamps, and multi-language TTS - Resolves #353

* updated the meta.json for the build errors

* removed the docker-compose-gpu.yml file

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* chore: remove package-lock.json file from the app directory

* chore: update Tolgee to latest version and fix SMTP config typo (#432)

* chore: update Tolgee to latest version and fix SMTP config typo

* Update docker-compose.yml

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* fix: improve Docker Compose validation workflow to handle subshell issues

- Converted the handling of COMPOSE_FILES from a pipe to an array to ensure error propagation in the parent shell.
- Updated the loop to iterate over the array for better reliability in the validation process.

* refactor: enhance Docker Compose validation workflow to improve error handling

- Replaced the pipe with an array to handle directory names, ensuring that errors within the loop propagate correctly to the parent shell.
- Updated the loop structure for better reliability in processing the directories.

* Feat: Add parseable (#460)

* Add parseable

* Update docker-compose.yml

* Update docker-compose.yml

* Update blueprints/parseable/template.toml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>

* feat: add ChirpStack LoRaWAN Network Server template (#486)

* feat: add ChirpStack LoRaWAN Network Server template

  Add complete ChirpStack v4 template with:
  - Main ChirpStack server with web UI
  - UDP and Basics Station gateway bridges
  - REST API interface
  - PostgreSQL database with PostGIS extensions
  - Redis cache
  - Mosquitto MQTT broker

Default configuration for EU868 region with secure random credentials. Supports all LoRaWAN frequency bands globally.

* fix(chirpstack): use original configurations from chirpstack-docker repo

Update template.toml to use exact configuration files from the
chirpstack-docker repository instead of simplified versions:

- Use original chirpstack.toml with all 15 enabled regions
- Use original gateway bridge configuration with documentation links
- Use complete Basics Station EU868 config with frequency plans
- Keep original Mosquitto and PostgreSQL initialization scripts

Template size increased from 131 to 219 lines (4.7KB) to include
comprehensive default configurations that match the official setup.

* feat: add all 38 region configuration files

* fix(chirpstack): add volume mounts to expose config files to containers

* fix(chirpstack): remove read-only flag

* fix(chirpstack): correct file paths for configuration mounts in docker-compose and template files

* fix: update volume paths to be on correct directory level

* fix: configure template for dokploy-network with proper DNS resolution

- Add dokploy-network configuration to docker-compose.yml
- Replace environment variable placeholders with actual service hostnames
- Change PostgreSQL DSN from $POSTGRESQL_HOST to postgres
- Change Redis server from $REDIS_HOST to redis
- Replace $MQTT_BROKER_HOST with mosquitto in all 39 region configurations

These changes ensure Docker DNS resolution works correctly by:
- Using dokploy-network (overlay) instead of bridge network
- Using service names directly in TOML config files (TOML doesn't expand env vars)
- Enabling proper service discovery between containers

This resolves DNS resolution failures that caused ChirpStack to fail connecting
to PostgreSQL and MQTT services during deployment.

* fix: add missing network configurations for all services in docker-compose

* feat: add internal services to config.domains for proper network configuration

* Update docker-compose.yml

* fix: enhance domain validation in template validator

- Updated the TemplateValidator to ensure that if the 'host' field is provided, it must be a valid string.
- Added comments to clarify that 'host' is optional for internal services.

* refactor: remove redundant host validation in template validator

- Removed the validation for the 'host' field in the TemplateValidator, as it is optional for internal services and does not require a type check if not provided.

* refactor: remove internal service domain configurations from template

- Eliminated the domain configurations for internal services (Postgres, Redis, Mosquitto) from the template.toml file, streamlining the configuration for better clarity and maintainability.

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>

* Update section title from 'Suggestions' to 'Requirements'

* Feat : Add MCSManager template support (#521) (#522)

* feat: Add MCSManager template support (#521)

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat: Add MediaCMS template (#524)

* Feat : Add Quant-Ux template -#173 (#525)

* Feat : Add Quant-Ux template -#173

* Remove extra newline in docker-compose.yml

* Update blueprints/quant-ux/docker-compose.yml

* Update blueprints/quant-ux/docker-compose.yml

* Update blueprints/quant-ux/docker-compose.yml

* Update blueprints/quant-ux/docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* fix(rustdesk): use explicit ports, use port 21118 on hbbs instead of hbbr (#526)

* fix: use explicit ports, use port 21118 on hbbs instead of hbbr

* fix: whitespace character in rustdesk

* feat: Add anytype template (#527)

* add anytype template

* sort

* Update name field for Anytype in meta.json

* Update meta.json

* Update docker-compose.yml

* Update blueprints/anytype/docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* refactor: remove dokploy-network configurations from multiple docker-compose files

- Removed the external dokploy-network configuration from various services' docker-compose.yml files to streamline network management.
- This change simplifies the setup and ensures consistency across blueprints.

* chore: upgrade Infisical from v0.90.1 to v0.135.0 (#529)

* chore: upgrade Infisical from v0.90.1 to v0.135.0

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* fix: update pull request template link for clarity

- Changed the link in the pull request template from 'general suggestions' to 'general requirements' to better reflect the content and ensure users follow the correct guidelines when creating templates.

* chore: add section for screenshots or videos in pull request template

- Introduced a new section in the pull request template to encourage contributors to include screenshots or videos, enhancing the clarity and context of their submissions.

* Feat : Add MuleSoft ESB Runtime  Template (#498)

* added the mulesoft esb template

* updated the compose and the meta.json

* feat(mulesoft-esb): update image and add dynamic env configuration  - Updated image to hari1367709/mule-esb:latest - Added dynamic HTTP_PORT for runtime port configuration - Added MULE_VERSION environment variable for Mule ESB version selection

* updated the meta.json to use the version as latest

* added a comment line to the template file

* updated the mule runtime image

* fix(mulesoft-esb): update ports configuration to follow guidelines

* updated the port to use the env(HTTP_PORT)

* Update docker-compose.yml

* Update docker-compose.yml

* Update blueprints/mulesoft-esb/docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat(blueprint): update trmnl-byos-laravel template (#533)

* feat(blueprint): update trmnl-byos-laravel template

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat(blueprint): peerdb template (#579)

* feat(blueprint): initial attempt at peerdb template

* fix: entrypoint and healthcheck

* fix: entrypoint

* fix: temporarily remove network

* fix: temporal port

* chore: remove 36987 for minio

* fix: remove peerdb 9900 port exposure

* fix: port for console

* fix: minio env fix

* fix: expose peerdb and minio to dokploy network

* fix(peerdb): add defaults

* fix: remove extra hosts

* fix: remove network entries

* fix: use consistent environment variables

* feat: add Bluesky PDS template (#542)

* feat: Bluesky PDS template

* chore: add bluesky pds svg

* chore: metadata for bluesky pds

* yaml > yml

* pnpm lock

* fix: correct rotation key config

* fix volumes

* fix: volumes in the pds compose

* define volumes in compose

* fix: 32 bit rotation key

* create pds.env correctly

* some extra fixes

* more extra fixes

* a blank line

* update pnpm lock

* Add dokploy-prom-monitoring-extension template with comprehensive tests and documentation (#548)

* Add dokploy-prom-monitoring-extension template with comprehensive tests and documentation

* Fix METRICS_CONFIG environment variable: use single-line JSON format

* Fix template.toml: use correct [config.env] syntax for environment variables

* Fix docker-compose.yml: add env_file reference to load environment variables

* Delete blueprints/dokploy-prom-monitoring-extension/README.md

* Delete test-dokploy-prom-monitoring-extension.sh

---------

Co-authored-by: Sanjeevi Subramani <ssanjeevi.ss@gmail.com>
Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat: improve RustDesk template configuration (#571)

* feat: improve RustDesk template configuration

- Add comprehensive environment variables for RustDesk server
- Add RELAY_HOST, API_SERVER, ID_SERVER, and ENCRYPTION_KEY variables
- Follow Dokploy best practices (no container_name, proper port format)
- Use restart: unless-stopped policy
- Add encryption key generation with password helper

* fix: use explicit port mapping for RustDesk services

RustDesk requires explicit port bindings (host:container format) to function properly. The service uses specific ports for:
- 21115-21116 (TCP/UDP): hbbs service for ID and NAT traversal
- 21117-21119 (TCP): hbbr relay service

Without explicit port mapping, RustDesk clients cannot establish connections to the server.

This is an exception to Dokploy's general port guidelines due to RustDesk's specific networking requirements.

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat: add Mumble voice chat server template (#572)

* feat: add Mumble voice chat server template

- Add Mumble VoIP server blueprint with docker-compose.yml
- Configure environment variables for superuser password, welcome text, and max users
- Add template.toml with auto-generated secure password
- Follow Dokploy best practices (no container_name, proper port format)
- Add Mumble metadata to meta.json with proper tags
- Support for TCP and UDP on port 64738

* Update template.toml

* fix: correct JSON formatting in meta.json for Mumble template entry

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>

* fix: update WireGuard Easy template for proper functionality (#573)

* fix: update WireGuard Easy template for proper functionality

- Changed to named volume (etc_wireguard) instead of host path mount
- Added explicit port mappings (51820:51820/udp, 51821:51821/tcp) required for WireGuard
- Updated environment variables to use correct WG_HOST and PASSWORD format
- Added all required WireGuard environment variables:
  - WG_PORT, PORT, WG_MTU, WG_DEFAULT_DNS, WG_ALLOWED_IPS
  - WG_POST_UP/WG_POST_DOWN for iptables rules
- Added NET_RAW capability for proper network operations
- Simplified template.toml to use WIREGUARD_HOST and WIREGUARD_PASSWORD
- Removed explicit networks config to enable Dokploy's isolated deployment
- Template now works with Dokploy's automatic network isolation

This configuration has been tested and confirmed working with isolated deployment enabled.

* Update template.toml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* add: restart policy to MinIO service (#576)

restart: unless-stopped is a Docker restart policy that automatically restarts a container if it stops due to an error or Docker daemon restart

* Updating copilot instructions.md and AGENTS.md (#452)

* docs: add copilot instructions for project development

Added comprehensive documentation file (.github/copilot-instructions.md) that provides detailed guidance on the Dokploy Open Source Templates project structure, development workflow, and conventions. The document covers the project overview, key files and directories, development workflow for adding/updating templates, local development setup, CI/CD processes, and established conventions and patterns. This documentation will help onboard new contributors and ensure consistent development practices across the project.

* docs(copilot-instructions): enhance project overview and development guide

Updated copilot instructions to reflect expanded app capabilities (200+ apps, TypeScript integration, Fuse.js search) and detailed processes for templates, local dev, and CI/CD for improved clarity and accuracy.

* refactor: remove frontend development instructions from AGENTS.md and update contributing guidelines

- Removed frontend development commands from AGENTS.md to streamline the document.
- Updated CONTRIBUTING.md by removing the recommendation to set `restart: unless-stopped` for services.

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>

* Add trailbase template (#590)

* Add trailbase

* Add comment on mounting local directory

* Update meta.json

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix: openpanel and migrate to v2 (#594)

* refactor: update docker-compose.yml to include version and restart policy (#599)

* feat(blueprint): mage ai template (#601)

* feat(blueprint): template for mage-ai

* fix: add healthcheck for mage-ai

* docs: update copilot instructions to emphasize version pinning in docker-compose.yml

Clarified the importance of pinning image versions in docker-compose.yml and explicitly stated to avoid using the `latest` tag to prevent potential issues with template functionality when upstream images change.

* refactor: enhance Docker Compose validation workflow

Updated the GitHub Actions workflow for validating Docker Compose files by streamlining the detection of changed blueprints and improving the validation process. Removed redundant steps and consolidated the validation of docker-compose.yml and template.toml files into a more efficient structure. Added clearer output messages for validation results and ensured that best practices are checked for each blueprint. This refactor aims to improve maintainability and clarity in the CI/CD process.

* fix: update zitadel default instance features (#544)

* Add Reactive Resume template (#603)

* Initial plan

* Add Reactive Resume template with docker-compose, template.toml, and meta.json entry

Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>

* Fix MinIO storage path alignment between template.toml and docker-compose.yml

Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>

* Update docker-compose.yml

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>

* [WIP] Fix mounted prometheus.yml file not working (#605)

* Initial plan

* Fix Prometheus mounted prometheus.yml file by adding volume mount

Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>

* Update blueprints/prometheus/template.toml

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* docs: update copilot instructions to enforce open source requirement

Added a clear requirement stating that all services must be open source and only applications with open-source licenses (e.g., MIT, Apache, GPL, AGPL) are allowed. This update aims to ensure compliance and maintain the integrity of the project.

* Fix Cap.so template MinIO deployment failure (#604)

* Initial plan

* Fix Cap.so MinIO image to use official quay.io image

Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>

* Fix MinIO healthcheck to use curl instead of mc

Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>

* Update .gitignore

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>

* Fix Discourse template manifest error - update to bitnamilegacy/discourse:3.5.0 (#606)

* Initial plan

* Fix Discourse template by updating to bitnamilegacy/discourse:3.5.0

Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>

* Remove pull request trigger from deploy-preview workflow

* Enhance copilot instructions by adding verification steps for Docker images and clarifying URL variable usage. Emphasize the importance of verifying image existence before committing to prevent deployment failures.

* Add Easy!Appointments template (#608)

* Initial plan

* Add Easyappointments template with docker-compose, template.toml, and meta.json entry

Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>

* Update blueprints/easyappointments/template.toml

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update template.toml

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Add Dolibarr ERP & CRM template (#610)

* Initial plan

* Add Dolibarr ERP & CRM template

Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>

* Update template.toml

* Update blueprints/dolibarr/docker-compose.yml

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* feat: add Syncthing Template (#636)

* Adiciona template do Syncthing com arquivos de configuração e ícone

* Remove versão do Docker Compose do template do Syncthing

* Update Umami to version v2.20.2 (#641)

* Feat : Add InstantDB template (#224) (#530)

* feat: add InstantDB template

* added the server service also

* removed the external network

* Update docker-compose.yml

* Update blueprints/instantdb/docker-compose.yml

* Update blueprints/instantdb/docker-compose.yml

* Update docker-compose.yml

* Update blueprints/instantdb/template.toml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* [New Template] Added Lavalink template for dokploy (#535)

* Add initial Lavalink configuration template

* Added lavalink.svg logo

* Create docker-compose.yml for Lavalink setup

Add Docker Compose configuration for Lavalink service.

* Modify healthcheck interval in docker-compose.yml

Increased healthcheck interval from 10s to 100s.

* Add Lavalink metadata to meta.json

Added metadata for Lavalink audio sending node.

* Update server_port variable to use ${port}

* Change server port variable to randomPort

* Change port variable to randomPort in template.toml

* Change port variable in template.toml

* Update server port in template.toml

* Fix formatting in template.toml for server config

* style: Reformat lavalink entry in meta.json.

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* chore(blueprint): update Appwrite services to v1.8 (#383)

* Update Appwrite version docker images and environment variables

* Add separate domains for functions and sites, update environment variables, replace insecure default passwords

* Update Appwrite version from 1.6.1 to 1.7.4 in `meta.json`

* Fix envs and update domains

* Add missing volume mounts for sites

* Fix config file syntax

* Update runtimes network configuration in template.toml

* Update Appwrite to 1.8

* Update appwrite image version to 1.8.0

* Add logging configuration to docker-compose

* New Templates (#586)

* feat(librechat): add LibreChat blueprint with compose, toml, metadata, links and tags

* fix: rename templates to template.toml

* fix(librechat): rename api service to librechat in docker-compose.yml

* Update blueprints/librechat/template.toml

* Update blueprints/librechat/template.toml

* fix(librechat): add version under [config] and remove stray [config.mounts] header

* fix(librechat): remove predefined persistent volume mounts from template.toml

* docs(librechat): add authentication reference link to docker-compose.yml

* feat: add Rote template

- Add Rote deployment template with frontend, backend, and PostgreSQL services
- Configure domain routing for frontend (port 80) and backend (port 3000)
- Set up automatic password generation and environment variables
- Use latest image tag by default
- Add logo and metadata to meta.json

* fix: process meta.json to fix formatting and sorting

* Update GitHub workflows to target 'canary' branch for meta validation

* Update pnpm-lock.yaml to upgrade various dependencies, including '@codemirror/autocomplete', '@radix-ui/react-dialog', and React packages to their latest versions. This includes updates to '@types/react' and '@types/react-dom' for improved compatibility and performance.

* Enhance GitHub workflows: add production deployment configuration and target 'canary' branch for pull requests.

* Refactor GitHub workflow: comment out build preview steps for clarity and future modifications.

* Remove unnecessary blank line in deploy-preview.yml for improved readability.

* Refactor GitHub workflow: uncomment build preview steps for improved deployment process and clarity.

* Update template.toml (#555)

* Update template.toml

* Update template.toml

* Update template.toml

* fix: change VITE_API_BASE to http:// for traefik.me compatibility

* changed image from sknnr/enshrouded-dedicated-server to mornedhels/enshrouded-server for autoupdate and easier config

* Add Openinary Template (#567)

* feat: add Openinary template

* feat: update Openinary configuration to support ALLOWED_ORIGIN and refactor domain variable

* fix: correct DEFAULT_DOMAIN environment variable reference in docker-compose.yml (#562)

* add rustfs template (#568)

* feat: add pull request template for improved contribution guidelines

* fix: update pull request template to clarify issue closing keywords

* feat: add validation scripts and configuration for Docker Compose and template files

- Introduced a GitHub Actions workflow to validate Docker Compose files and template.toml on pull requests.
- Added helper functions for generating random values and processing variables in templates.
- Implemented validation scripts for checking the structure, syntax, and best practices of Docker Compose and template files.
- Created necessary TypeScript types and configuration files for the build scripts.

* Add Passbolt template blueprint to Dokploy templates (#376)

* feat(templates): add Passbolt blueprint for Dokploy
- Add docker-compose.yml defining services for Passbolt and MariaDB
- Create template.toml with configurable domain, email, and database credentials
- Add meta.json with metadata, tags, and link to logo

* fix(meta): sort meta.json entries

* fix: passbolt template had several issues that broke deployment

- env variables were using old array format, changed to new table format
- mariadb healthcheck was broken (wrong command for mariadb 11)
- missing volume mounts for gpg keys, jwt tokens, and database
- setup instructions weren't visible to users, moved to docker-compose
- email config had circular references causing warnings
- tested admin user creation and confirmed working

everything works now, fully tested

* Update blueprints/passbolt/template.toml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat: Add Kokoro TTS FastAPI template (#353) (#403)

* feat: Add Kokoro TTS FastAPI template (#353)  - Add CPU-optimized docker-compose.yml with source build - Add GPU-optimized docker-compose-gpu.yml for NVIDIA support - Add comprehensive template.toml with OpenAI-compatible API docs - Add kokoro-tts.svg logo and meta.json entry - Support streaming audio, timestamps, and multi-language TTS - Resolves #353

* updated the meta.json for the build errors

* removed the docker-compose-gpu.yml file

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* chore: remove package-lock.json file from the app directory

* chore: update Tolgee to latest version and fix SMTP config typo (#432)

* chore: update Tolgee to latest version and fix SMTP config typo

* Update docker-compose.yml

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* fix: improve Docker Compose validation workflow to handle subshell issues

- Converted the handling of COMPOSE_FILES from a pipe to an array to ensure error propagation in the parent shell.
- Updated the loop to iterate over the array for better reliability in the validation process.

* refactor: enhance Docker Compose validation workflow to improve error handling

- Replaced the pipe with an array to handle directory names, ensuring that errors within the loop propagate correctly to the parent shell.
- Updated the loop structure for better reliability in processing the directories.

* Feat: Add parseable (#460)

* Add parseable

* Update docker-compose.yml

* Update docker-compose.yml

* Update blueprints/parseable/template.toml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>

* feat: add ChirpStack LoRaWAN Network Server template (#486)

* feat: add ChirpStack LoRaWAN Network Server template

  Add complete ChirpStack v4 template with:
  - Main ChirpStack server with web UI
  - UDP and Basics Station gateway bridges
  - REST API interface
  - PostgreSQL database with PostGIS extensions
  - Redis cache
  - Mosquitto MQTT broker

Default configuration for EU868 region with secure random credentials. Supports all LoRaWAN frequency bands globally.

* fix(chirpstack): use original configurations from chirpstack-docker repo

Update template.toml to use exact configuration files from the
chirpstack-docker repository instead of simplified versions:

- Use original chirpstack.toml with all 15 enabled regions
- Use original gateway bridge configuration with documentation links
- Use complete Basics Station EU868 config with frequency plans
- Keep original Mosquitto and PostgreSQL initialization scripts

Template size increased from 131 to 219 lines (4.7KB) to include
comprehensive default configurations that match the official setup.

* feat: add all 38 region configuration files

* fix(chirpstack): add volume mounts to expose config files to containers

* fix(chirpstack): remove read-only flag

* fix(chirpstack): correct file paths for configuration mounts in docker-compose and template files

* fix: update volume paths to be on correct directory level

* fix: configure template for dokploy-network with proper DNS resolution

- Add dokploy-network configuration to docker-compose.yml
- Replace environment variable placeholders with actual service hostnames
- Change PostgreSQL DSN from $POSTGRESQL_HOST to postgres
- Change Redis server from $REDIS_HOST to redis
- Replace $MQTT_BROKER_HOST with mosquitto in all 39 region configurations

These changes ensure Docker DNS resolution works correctly by:
- Using dokploy-network (overlay) instead of bridge network
- Using service names directly in TOML config files (TOML doesn't expand env vars)
- Enabling proper service discovery between containers

This resolves DNS resolution failures that caused ChirpStack to fail connecting
to PostgreSQL and MQTT services during deployment.

* fix: add missing network configurations for all services in docker-compose

* feat: add internal services to config.domains for proper network configuration

* Update docker-compose.yml

* fix: enhance domain validation in template validator

- Updated the TemplateValidator to ensure that if the 'host' field is provided, it must be a valid string.
- Added comments to clarify that 'host' is optional for internal services.

* refactor: remove redundant host validation in template validator

- Removed the validation for the 'host' field in the TemplateValidator, as it is optional for internal services and does not require a type check if not provided.

* refactor: remove internal service domain configurations from template

- Eliminated the domain configurations for internal services (Postgres, Redis, Mosquitto) from the template.toml file, streamlining the configuration for better clarity and maintainability.

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>

* Update section title from 'Suggestions' to 'Requirements'

* Feat : Add MCSManager template support (#521) (#522)

* feat: Add MCSManager template support (#521)

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat: Add MediaCMS template (#524)

* Feat : Add Quant-Ux template -#173 (#525)

* Feat : Add Quant-Ux template -#173

* Remove extra newline in docker-compose.yml

* Update blueprints/quant-ux/docker-compose.yml

* Update blueprints/quant-ux/docker-compose.yml

* Update blueprints/quant-ux/docker-compose.yml

* Update blueprints/quant-ux/docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* fix(rustdesk): use explicit ports, use port 21118 on hbbs instead of hbbr (#526)

* fix: use explicit ports, use port 21118 on hbbs instead of hbbr

* fix: whitespace character in rustdesk

* feat: Add anytype template (#527)

* add anytype template

* sort

* Update name field for Anytype in meta.json

* Update meta.json

* Update docker-compose.yml

* Update blueprints/anytype/docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* refactor: remove dokploy-network configurations from multiple docker-compose files

- Removed the external dokploy-network configuration from various services' docker-compose.yml files to streamline network management.
- This change simplifies the setup and ensures consistency across blueprints.

* chore: upgrade Infisical from v0.90.1 to v0.135.0 (#529)

* chore: upgrade Infisical from v0.90.1 to v0.135.0

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* fix: update pull request template link for clarity

- Changed the link in the pull request template from 'general suggestions' to 'general requirements' to better reflect the content and ensure users follow the correct guidelines when creating templates.

* chore: add section for screenshots or videos in pull request template

- Introduced a new section in the pull request template to encourage contributors to include screenshots or videos, enhancing the clarity and context of their submissions.

* Feat : Add MuleSoft ESB Runtime  Template (#498)

* added the mulesoft esb template

* updated the compose and the meta.json

* feat(mulesoft-esb): update image and add dynamic env configuration  - Updated image to hari1367709/mule-esb:latest - Added dynamic HTTP_PORT for runtime port configuration - Added MULE_VERSION environment variable for Mule ESB version selection

* updated the meta.json to use the version as latest

* added a comment line to the template file

* updated the mule runtime image

* fix(mulesoft-esb): update ports configuration to follow guidelines

* updated the port to use the env(HTTP_PORT)

* Update docker-compose.yml

* Update docker-compose.yml

* Update blueprints/mulesoft-esb/docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat(blueprint): update trmnl-byos-laravel template (#533)

* feat(blueprint): update trmnl-byos-laravel template

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat(blueprint): peerdb template (#579)

* feat(blueprint): initial attempt at peerdb template

* fix: entrypoint and healthcheck

* fix: entrypoint

* fix: temporarily remove network

* fix: temporal port

* chore: remove 36987 for minio

* fix: remove peerdb 9900 port exposure

* fix: port for console

* fix: minio env fix

* fix: expose peerdb and minio to dokploy network

* fix(peerdb): add defaults

* fix: remove extra hosts

* fix: remove network entries

* fix: use consistent environment variables

* feat: add Bluesky PDS template (#542)

* feat: Bluesky PDS template

* chore: add bluesky pds svg

* chore: metadata for bluesky pds

* yaml > yml

* pnpm lock

* fix: correct rotation key config

* fix volumes

* fix: volumes in the pds compose

* define volumes in compose

* fix: 32 bit rotation key

* create pds.env correctly

* some extra fixes

* more extra fixes

* a blank line

* update pnpm lock

* Add dokploy-prom-monitoring-extension template with comprehensive tests and documentation (#548)

* Add dokploy-prom-monitoring-extension template with comprehensive tests and documentation

* Fix METRICS_CONFIG environment variable: use single-line JSON format

* Fix template.toml: use correct [config.env] syntax for environment variables

* Fix docker-compose.yml: add env_file reference to load environment variables

* Delete blueprints/dokploy-prom-monitoring-extension/README.md

* Delete test-dokploy-prom-monitoring-extension.sh

---------

Co-authored-by: Sanjeevi Subramani <ssanjeevi.ss@gmail.com>
Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat: improve RustDesk template configuration (#571)

* feat: improve RustDesk template configuration

- Add comprehensive environment variables for RustDesk server
- Add RELAY_HOST, API_SERVER, ID_SERVER, and ENCRYPTION_KEY variables
- Follow Dokploy best practices (no container_name, proper port format)
- Use restart: unless-stopped policy
- Add encryption key generation with password helper

* fix: use explicit port mapping for RustDesk services

RustDesk requires explicit port bindings (host:container format) to function properly. The service uses specific ports for:
- 21115-21116 (TCP/UDP): hbbs service for ID and NAT traversal
- 21117-21119 (TCP): hbbr relay service

Without explicit port mapping, RustDesk clients cannot establish connections to the server.

This is an exception to Dokploy's general port guidelines due to RustDesk's specific networking requirements.

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat: add Mumble voice chat server template (#572)

* feat: add Mumble voice chat server template

- Add Mumble VoIP server blueprint with docker-compose.yml
- Configure environment variables for superuser password, welcome text, and max users
- Add template.toml with auto-generated secure password
- Follow Dokploy best practices (no container_name, proper port format)
- Add Mumble metadata to meta.json with proper tags
- Support for TCP and UDP on port 64738

* Update template.toml

* fix: correct JSON formatting in meta.json for Mumble template entry

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>

* fix: update WireGuard Easy template for proper functionality (#573)

* fix: update WireGuard Easy template for proper functionality

- Changed to named volume (etc_wireguard) instead of host path mount
- Added explicit port mappings (51820:51820/udp, 51821:51821/tcp) required for WireGuard
- Updated environment variables to use correct WG_HOST and PASSWORD format
- Added all required WireGuard environment variables:
  - WG_PORT, PORT, WG_MTU, WG_DEFAULT_DNS, WG_ALLOWED_IPS
  - WG_POST_UP/WG_POST_DOWN for iptables rules
- Added NET_RAW capability for proper network operations
- Simplified template.toml to use WIREGUARD_HOST and WIREGUARD_PASSWORD
- Removed explicit networks config to enable Dokploy's isolated deployment
- Template now works with Dokploy's automatic network isolation

This configuration has been tested and confirmed working with isolated deployment enabled.

* Update template.toml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* add: restart policy to MinIO service (#576)

restart: unless-stopped is a Docker restart policy that automatically restarts a container if it stops due to an error or Docker daemon restart

---------

Co-authored-by: Sunil Shrestha <sunil.shrestha@tekkon.com.np>
Co-authored-by: Rabithua <rabithua@gmail.com>
Co-authored-by: Mauricio Siu <siumauricio@hotmail.com>
Co-authored-by: Scan <103391616+scanash00@users.noreply.github.com>
Co-authored-by: Crackvignoule <kiki.kalagan@gmail.com>
Co-authored-by: florianheysen <39408021+florianheysen@users.noreply.github.com>
Co-authored-by: Thiago MadPin <madpin@gmail.com>
Co-authored-by: BlinkStrike <18644035+BlinkStrike@users.noreply.github.com>
Co-authored-by: M Jupri Amin <127651222+Juupeee@users.noreply.github.com>
Co-authored-by: Harikrishnan Dhanasekaran <harikrishnan@mulecraft.in>
Co-authored-by: Kamil Dzieniszewski <kamil.dzieniszewski@gmail.com>
Co-authored-by: Nick Anderson <nbrookie@gmail.com>
Co-authored-by: lefolalan <alan.lefol@omirion.com>
Co-authored-by: Chris <31969757+ChrisvanChip@users.noreply.github.com>
Co-authored-by: kipavy <88386090+kipavy@users.noreply.github.com>
Co-authored-by: Benjamin Nussbaum <bnussbau@users.noreply.github.com>
Co-authored-by: Khiet Tam Nguyen <86177399+nktnet1@users.noreply.github.com>
Co-authored-by: Vidhya LKG for IT <24915474+VidhyaSanjeevi@users.noreply.github.com>
Co-authored-by: Sanjeevi Subramani <ssanjeevi.ss@gmail.com>
Co-authored-by: Muzaffer Kadir YILMAZ <34358176+muzafferkadir@users.noreply.github.com>
Co-authored-by: Jemg <murksopps@gmail.com>

* Remove `container_name` from all containers

* Remove expliced networks

* Update blueprints/appwrite/docker-compose.yml

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update password variables to use 32-character length

* Update Appwrite description and tags in meta.json

* Fix JSON formatting in meta.json by adding missing closing bracket

* Fix formatting in meta.json by removing trailing spaces in tags array

* Add missing SMS and Backblaze storage configuration options in template.toml

* Update docker-compose.yml

---------

Co-authored-by: Pascal Oberbeck <pascal.oberbeck@paperlesswork.de>
Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Sunil Shrestha <sunil.shrestha@tekkon.com.np>
Co-authored-by: Rabithua <rabithua@gmail.com>
Co-authored-by: Mauricio Siu <siumauricio@hotmail.com>
Co-authored-by: Scan <103391616+scanash00@users.noreply.github.com>
Co-authored-by: Crackvignoule <kiki.kalagan@gmail.com>
Co-authored-by: florianheysen <39408021+florianheysen@users.noreply.github.com>
Co-authored-by: Thiago MadPin <madpin@gmail.com>
Co-authored-by: BlinkStrike <18644035+BlinkStrike@users.noreply.github.com>
Co-authored-by: M Jupri Amin <127651222+Juupeee@users.noreply.github.com>
Co-authored-by: Harikrishnan Dhanasekaran <harikrishnan@mulecraft.in>
Co-authored-by: Kamil Dzieniszewski <kamil.dzieniszewski@gmail.com>
Co-authored-by: Nick Anderson <nbrookie@gmail.com>
Co-authored-by: lefolalan <alan.lefol@omirion.com>
Co-authored-by: Chris <31969757+ChrisvanChip@users.noreply.github.com>
Co-authored-by: kipavy <88386090+kipavy@users.noreply.github.com>
Co-authored-by: Benjamin Nussbaum <bnussbau@users.noreply.github.com>
Co-authored-by: Khiet Tam Nguyen <86177399+nktnet1@users.noreply.github.com>
Co-authored-by: Vidhya LKG for IT <24915474+VidhyaSanjeevi@users.noreply.github.com>
Co-authored-by: Sanjeevi Subramani <ssanjeevi.ss@gmail.com>
Co-authored-by: Muzaffer Kadir YILMAZ <34358176+muzafferkadir@users.noreply.github.com>
Co-authored-by: Jemg <murksopps@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>

* feat: emqx template (MQTT Broker) (#556)

* feat: template for emqx

* chore: process meta

* fix: use websocket on port 443 instead of 8084

* docs: improve comments for emqx template

* fix: use emqx service name

* fix: use dummy domain instead of traefik

* fix: explicitly list dokplok-network

* fix(emqx): restart unless stopped

* fix(emqx): add healthcheck

* Dokploy Deployment for Mautic 5 (#564)

* first draft

* second

* try 3

* 4

* Update docker-compose.yml

* Update template.toml

* Enhance healthchecks and service dependencies in Docker Compose

Updated healthcheck configurations for Mautic and MySQL services to improve service reliability. Added conditions to ensure services wait for dependencies to be healthy before starting.

* Update Mautic docker-compose with health checks and roles

* fix: searxng template (#651)

* fix: use major version for openpanel (#680)

* Feat/minepanel template (#657)

* feat: add Minepanel template

* fix: pin images to v1.7.1 and use http for URLs

* fix: remove explicit ports, Dokploy handles proxying

* chore: process and sort meta.json

* fix: consolidate domain variables to main_domain

* fix: add version field to docker-compose.yml

* Add Komari Monitor template with Docker Compose, icon, and metadata (#XXX) (#623)

* Introduce Komari Monitor, a self-hosted server monitoring tool, with its corresponding Docker Compose configuration, icon, and metadata entry.

* Add template.toml for configuration and environment variables.

* Include necessary links for GitHub and documentation.

* Add Misaka Danmu Server template with Docker Compose, icon, and metadata (#624)

* Introduce Misaka Danmu Server, a self-hosted danmaku server for live streaming, with its corresponding Docker Compose configuration, icon, and metadata entry.

* Add template.toml for configuration and environment variables.

* Include necessary links for GitHub and documentation.

* fix: pyrodactyl no longer uses main tag for it's latest release (#626)

* fix: pyrodactyl no longer uses main tag for it's latest release

* Remove custom network settings from docker-compose

Removed custom network configuration from docker-compose.

* Update MariaDB and Pyrodactyl images in Docker Compose

* Add Jenkins blueprint template configuration (#634)

- Created a new TOML configuration file for Jenkins blueprint.
- Defined main domain variable and service configuration for Jenkins.
- Set serviceName to "jenkins" with port 8080 and host as the main domain.

* Update Autobase to version 2.5 (#647)

* Update Autobase to version 2.5

Bump the autobase-console Docker image from version 2.2.0 to 2.5.2 in docker-compose.yml to use the latest features and fixes.

* Update docker-compose.yml

* Update docker-compose.yml

* Update meta.json

* Update Autobase description in meta.json

Revised the Autobase package description to clarify it as a self-hosted DBaaS alternative to cloud-managed databases.

* Add Cloudreve template (#649)

Self-hosted file management and sharing system with multi-cloud storage support.
Includes PostgreSQL and Redis for database and caching.

* Update to Umami 3.0.3 (#668)

* Update Umami version from v2.20.2 to v3.0.3

* Update Umami Docker image to version 3.0.3

* fix: tailscale exitnode authkey env (#669)

* Add qbitwebui (#675)

* Add qBittorrent Web UI template

* Fix healthcheck bug

* Create INSTRUCTIONS.md

* Rename INSTRUCTIONS.md to instructions.md

* feat: add Moltbot template (#683)

* feat: add Moltbot template

Add template for Moltbot - a WhatsApp gateway CLI with Pi RPC agent.

- Uses official ghcr.io/moltbot/moltbot:latest image
- Exposes ports 18789 (gateway) and 18790 (bridge)
- Includes persistent volumes for config and workspace
- Auto-generates gateway token
- Optional Claude AI integration support

Co-Authored-By: Claude <noreply@anthropic.com>

* Update docker-compose.yml

* Enhance Moltbot configuration in docker-compose and template files

- Added CLAWDBOT_GATEWAY_URL and OPENROUTER_API_KEY to docker-compose.yml
- Updated service binding to 'auto' and added init: true for improved service management
- Defined CLAWDBOT_GATEWAY_PORT and CLAWDBOT_BRIDGE_PORT in template.toml
- Included CLAWDBOT_PLUGINS for plugin configuration in template.toml

* Add Moltbot entry to meta.json

- Introduced a new entry for Moltbot, a WhatsApp gateway CLI with Pi RPC agent.
- Included details such as version, description, logo, links, and relevant tags for better discoverability and integration.

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>

* feat: add Openclaw template (#694)

* feat: rename Moltbot to Openclaw and update related configurations

* fix: update Openclaw image version to 2026.1.29 in docker-compose.yml

* fix: correct environment variable name for Openclaw gateway

* fix: correct volume path for Openclaw workspace in docker-compose.yml

* feat: rename Moltbot to Openclaw and update metadata

* fix: moving 'openclaw' entry below so the file looks sorted

* fix: add missing newline at end of meta.json

* fix: update docker-compose.yml to use 'expose' instead of 'ports' and change bind option to 'lan'

* feat: update Openclaw service configuration in docker-compose.yml and template.toml

- Changed service name from 'openclaw-gateway' to 'openclaw' and updated image version.
- Enhanced environment variables for better configuration management.
- Added a new 'browser' service with health checks and updated volume paths.

* refactor: update environment variable configuration in docker-compose.yml for Openclaw service

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>

* fix: cloudflared documentation links & env variables (#699)

* feat(blueprint): Cloudflare DDNS (#689)

* feat: added Cloudflare DDNS template

* fix: make CLOUDFLARE_API_TOKEN and DOMAINS mandatory env

* Fix realtime service name resolution (#563)

Expose the CONTAINER_PREFIX environment variable to kong service, then utilize it to format the URL of realtime service.

* fix(habitica): add user to mongodb replicaset to enable Dokploy DB backups (#574)

* fix: use environment variables from configuration in habitica-server

* feat: add users to mongodb replicaSet

This commit adds admin and habitica users + enables replicaSet auth by
introducing a keyfile.

Dokploy DB backups require specifying an user and password, so this
enables that feature for Habitica app.

* chore: less retries

* chore: do not start server until mongo is healthy

* fix: ensure habitica user exists for habitica db

* fix: remove BASE_URL to prevent infinite redirects

* fix: add missing ADMIN_EMAIL

---------

Co-authored-by: Jorge Gómez Zarzosa <jorgegomez@bmat.com>

* Refactor wg-easy service configuration to work with latest wg-easy v15 (#598)

* New Templates (#586)

* feat(librechat): add LibreChat blueprint with compose, toml, metadata, links and tags

* fix: rename templates to template.toml

* fix(librechat): rename api service to librechat in docker-compose.yml

* Update blueprints/librechat/template.toml

* Update blueprints/librechat/template.toml

* fix(librechat): add version under [config] and remove stray [config.mounts] header

* fix(librechat): remove predefined persistent volume mounts from template.toml

* docs(librechat): add authentication reference link to docker-compose.yml

* feat: add Rote template

- Add Rote deployment template with frontend, backend, and PostgreSQL services
- Configure domain routing for frontend (port 80) and backend (port 3000)
- Set up automatic password generation and environment variables
- Use latest image tag by default
- Add logo and metadata to meta.json

* fix: process meta.json to fix formatting and sorting

* Update GitHub workflows to target 'canary' branch for meta validation

* Update pnpm-lock.yaml to upgrade various dependencies, including '@codemirror/autocomplete', '@radix-ui/react-dialog', and React packages to their latest versions. This includes updates to '@types/react' and '@types/react-dom' for improved compatibility and performance.

* Enhance GitHub workflows: add production deployment configuration and target 'canary' branch for pull requests.

* Refactor GitHub workflow: comment out build preview steps for clarity and future modifications.

* Remove unnecessary blank line in deploy-preview.yml for improved readability.

* Refactor GitHub workflow: uncomment build preview steps for improved deployment process and clarity.

* Update template.toml (#555)

* Update template.toml

* Update template.toml

* Update template.toml

* fix: change VITE_API_BASE to http:// for traefik.me compatibility

* changed image from sknnr/enshrouded-dedicated-server to mornedhels/enshrouded-server for autoupdate and easier config

* Add Openinary Template (#567)

* feat: add Openinary template

* feat: update Openinary configuration to support ALLOWED_ORIGIN and refactor domain variable

* fix: correct DEFAULT_DOMAIN environment variable reference in docker-compose.yml (#562)

* add rustfs template (#568)

* feat: add pull request template for improved contribution guidelines

* fix: update pull request template to clarify issue closing keywords

* feat: add validation scripts and configuration for Docker Compose and template files

- Introduced a GitHub Actions workflow to validate Docker Compose files and template.toml on pull requests.
- Added helper functions for generating random values and processing variables in templates.
- Implemented validation scripts for checking the structure, syntax, and best practices of Docker Compose and template files.
- Created necessary TypeScript types and configuration files for the build scripts.

* Add Passbolt template blueprint to Dokploy templates (#376)

* feat(templates): add Passbolt blueprint for Dokploy
- Add docker-compose.yml defining services for Passbolt and MariaDB
- Create template.toml with configurable domain, email, and database credentials
- Add meta.json with metadata, tags, and link to logo

* fix(meta): sort meta.json entries

* fix: passbolt template had several issues that broke deployment

- env variables were using old array format, changed to new table format
- mariadb healthcheck was broken (wrong command for mariadb 11)
- missing volume mounts for gpg keys, jwt tokens, and database
- setup instructions weren't visible to users, moved to docker-compose
- email config had circular references causing warnings
- tested admin user creation and confirmed working

everything works now, fully tested

* Update blueprints/passbolt/template.toml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat: Add Kokoro TTS FastAPI template (#353) (#403)

* feat: Add Kokoro TTS FastAPI template (#353)  - Add CPU-optimized docker-compose.yml with source build - Add GPU-optimized docker-compose-gpu.yml for NVIDIA support - Add comprehensive template.toml with OpenAI-compatible API docs - Add kokoro-tts.svg logo and meta.json entry - Support streaming audio, timestamps, and multi-language TTS - Resolves #353

* updated the meta.json for the build errors

* removed the docker-compose-gpu.yml file

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* chore: remove package-lock.json file from the app directory

* chore: update Tolgee to latest version and fix SMTP config typo (#432)

* chore: update Tolgee to latest version and fix SMTP config typo

* Update docker-compose.yml

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* fix: improve Docker Compose validation workflow to handle subshell issues

- Converted the handling of COMPOSE_FILES from a pipe to an array to ensure error propagation in the parent shell.
- Updated the loop to iterate over the array for better reliability in the validation process.

* refactor: enhance Docker Compose validation workflow to improve error handling

- Replaced the pipe with an array to handle directory names, ensuring that errors within the loop propagate correctly to the parent shell.
- Updated the loop structure for better reliability in processing the directories.

* Feat: Add parseable (#460)

* Add parseable

* Update docker-compose.yml

* Update docker-compose.yml

* Update blueprints/parseable/template.toml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>

* feat: add ChirpStack LoRaWAN Network Server template (#486)

* feat: add ChirpStack LoRaWAN Network Server template

  Add complete ChirpStack v4 template with:
  - Main ChirpStack server with web UI
  - UDP and Basics Station gateway bridges
  - REST API interface
  - PostgreSQL database with PostGIS extensions
  - Redis cache
  - Mosquitto MQTT broker

Default configuration for EU868 region with secure random credentials. Supports all LoRaWAN frequency bands globally.

* fix(chirpstack): use original configurations from chirpstack-docker repo

Update template.toml to use exact configuration files from the
chirpstack-docker repository instead of simplified versions:

- Use original chirpstack.toml with all 15 enabled regions
- Use original gateway bridge configuration with documentation links
- Use complete Basics Station EU868 config with frequency plans
- Keep original Mosquitto and PostgreSQL initialization scripts

Template size increased from 131 to 219 lines (4.7KB) to include
comprehensive default configurations that match the official setup.

* feat: add all 38 region configuration files

* fix(chirpstack): add volume mounts to expose config files to containers

* fix(chirpstack): remove read-only flag

* fix(chirpstack): correct file paths for configuration mounts in docker-compose and template files

* fix: update volume paths to be on correct directory level

* fix: configure template for dokploy-network with proper DNS resolution

- Add dokploy-network configuration to docker-compose.yml
- Replace environment variable placeholders with actual service hostnames
- Change PostgreSQL DSN from $POSTGRESQL_HOST to postgres
- Change Redis server from $REDIS_HOST to redis
- Replace $MQTT_BROKER_HOST with mosquitto in all 39 region configurations

These changes ensure Docker DNS resolution works correctly by:
- Using dokploy-network (overlay) instead of bridge network
- Using service names directly in TOML config files (TOML doesn't expand env vars)
- Enabling proper service discovery between containers

This resolves DNS resolution failures that caused ChirpStack to fail connecting
to PostgreSQL and MQTT services during deployment.

* fix: add missing network configurations for all services in docker-compose

* feat: add internal services to config.domains for proper network configuration

* Update docker-compose.yml

* fix: enhance domain validation in template validator

- Updated the TemplateValidator to ensure that if the 'host' field is provided, it must be a valid string.
- Added comments to clarify that 'host' is optional for internal services.

* refactor: remove redundant host validation in template validator

- Removed the validation for the 'host' field in the TemplateValidator, as it is optional for internal services and does not require a type check if not provided.

* refactor: remove internal service domain configurations from template

- Eliminated the domain configurations for internal services (Postgres, Redis, Mosquitto) from the template.toml file, streamlining the configuration for better clarity and maintainability.

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>

* Update section title from 'Suggestions' to 'Requirements'

* Feat : Add MCSManager template support (#521) (#522)

* feat: Add MCSManager template support (#521)

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat: Add MediaCMS template (#524)

* Feat : Add Quant-Ux template -#173 (#525)

* Feat : Add Quant-Ux template -#173

* Remove extra newline in docker-compose.yml

* Update blueprints/quant-ux/docker-compose.yml

* Update blueprints/quant-ux/docker-compose.yml

* Update blueprints/quant-ux/docker-compose.yml

* Update blueprints/quant-ux/docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* fix(rustdesk): use explicit ports, use port 21118 on hbbs instead of hbbr (#526)

* fix: use explicit ports, use port 21118 on hbbs instead of hbbr

* fix: whitespace character in rustdesk

* feat: Add anytype template (#527)

* add anytype template

* sort

* Update name field for Anytype in meta.json

* Update meta.json

* Update docker-compose.yml

* Update blueprints/anytype/docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* refactor: remove dokploy-network configurations from multiple docker-compose files

- Removed the external dokploy-network configuration from various services' docker-compose.yml files to streamline network management.
- This change simplifies the setup and ensures consistency across blueprints.

* chore: upgrade Infisical from v0.90.1 to v0.135.0 (#529)

* chore: upgrade Infisical from v0.90.1 to v0.135.0

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* fix: update pull request template link for clarity

- Changed the link in the pull request template from 'general suggestions' to 'general requirements' to better reflect the content and ensure users follow the correct guidelines when creating templates.

* chore: add section for screenshots or videos in pull request template

- Introduced a new section in the pull request template to encourage contributors to include screenshots or videos, enhancing the clarity and context of their submissions.

* Feat : Add MuleSoft ESB Runtime  Template (#498)

* added the mulesoft esb template

* updated the compose and the meta.json

* feat(mulesoft-esb): update image and add dynamic env configuration  - Updated image to hari1367709/mule-esb:latest - Added dynamic HTTP_PORT for runtime port configuration - Added MULE_VERSION environment variable for Mule ESB version selection

* updated the meta.json to use the version as latest

* added a comment line to the template file

* updated the mule runtime image

* fix(mulesoft-esb): update ports configuration to follow guidelines

* updated the port to use the env(HTTP_PORT)

* Update docker-compose.yml

* Update docker-compose.yml

* Update blueprints/mulesoft-esb/docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat(blueprint): update trmnl-byos-laravel template (#533)

* feat(blueprint): update trmnl-byos-laravel template

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat(blueprint): peerdb template (#579)

* feat(blueprint): initial attempt at peerdb template

* fix: entrypoint and healthcheck

* fix: entrypoint

* fix: temporarily remove network

* fix: temporal port

* chore: remove 36987 for minio

* fix: remove peerdb 9900 port exposure

* fix: port for console

* fix: minio env fix

* fix: expose peerdb and minio to dokploy network

* fix(peerdb): add defaults

* fix: remove extra hosts

* fix: remove network entries

* fix: use consistent environment variables

* feat: add Bluesky PDS template (#542)

* feat: Bluesky PDS template

* chore: add bluesky pds svg

* chore: metadata for bluesky pds

* yaml > yml

* pnpm lock

* fix: correct rotation key config

* fix volumes

* fix: volumes in the pds compose

* define volumes in compose

* fix: 32 bit rotation key

* create pds.env correctly

* some extra fixes

* more extra fixes

* a blank line

* update pnpm lock

* Add dokploy-prom-monitoring-extension template with comprehensive tests and documentation (#548)

* Add dokploy-prom-monitoring-extension template with comprehensive tests and documentation

* Fix METRICS_CONFIG environment variable: use single-line JSON format

* Fix template.toml: use correct [config.env] syntax for environment variables

* Fix docker-compose.yml: add env_file reference to load environment variables

* Delete blueprints/dokploy-prom-monitoring-extension/README.md

* Delete test-dokploy-prom-monitoring-extension.sh

---------

Co-authored-by: Sanjeevi Subramani <ssanjeevi.ss@gmail.com>
Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat: improve RustDesk template configuration (#571)

* feat: improve RustDesk template configuration

- Add comprehensive environment variables for RustDesk server
- Add RELAY_HOST, API_SERVER, ID_SERVER, and ENCRYPTION_KEY variables
- Follow Dokploy best practices (no container_name, proper port format)
- Use restart: unless-stopped policy
- Add encryption key generation with password helper

* fix: use explicit port mapping for RustDesk services

RustDesk requires explicit port bindings (host:container format) to function properly. The service uses specific ports for:
- 21115-21116 (TCP/UDP): hbbs service for ID and NAT traversal
- 21117-21119 (TCP): hbbr relay service

Without explicit port mapping, RustDesk clients cannot establish connections to the server.

This is an exception to Dokploy's general port guidelines due to RustDesk's specific networking requirements.

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat: add Mumble voice chat server template (#572)

* feat: add Mumble voice chat server template

- Add Mumble VoIP server blueprint with docker-compose.yml
- Configure environment variables for superuser password, welcome text, and max users
- Add template.toml with auto-generated secure password
- Follow Dokploy best practices (no container_name, proper port format)
- Add Mumble metadata to meta.json with proper tags
- Support for TCP and UDP on port 64738

* Update template.toml

* fix: correct JSON formatting in meta.json for Mumble template entry

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>

* fix: update WireGuard Easy template for proper functionality (#573)

* fix: update WireGuard Easy template for proper functionality

- Changed to named volume (etc_wireguard) instead of host path mount
- Added explicit port mappings (51820:51820/udp, 51821:51821/tcp) required for WireGuard
- Updated environment variables to use correct WG_HOST and PASSWORD format
- Added all required WireGuard environment variables:
  - WG_PORT, PORT, WG_MTU, WG_DEFAULT_DNS, WG_ALLOWED_IPS
  - WG_POST_UP/WG_POST_DOWN for iptables rules
- Added NET_RAW capability for proper network operations
- Simplified template.toml to use WIREGUARD_HOST and WIREGUARD_PASSWORD
- Removed explicit networks config to enable Dokploy's isolated deployment
- Template now works with Dokploy's automatic network isolation

This configuration has been tested and confirmed working with isolated deployment enabled.

* Update template.toml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* add: restart policy to MinIO service (#576)

restart: unless-stopped is a Docker restart policy that automatically restarts a container if it stops due to an error or Docker daemon restart

---------

Co-authored-by: Sunil Shrestha <sunil.shrestha@tekkon.com.np>
Co-authored-by: Rabithua <rabithua@gmail.com>
Co-authored-by: Mauricio Siu <siumauricio@hotmail.com>
Co-authored-by: Scan <103391616+scanash00@users.noreply.github.com>
Co-authored-by: Crackvignoule <kiki.kalagan@gmail.com>
Co-authored-by: florianheysen <39408021+florianheysen@users.noreply.github.com>
Co-authored-by: Thiago MadPin <madpin@gmail.com>
Co-authored-by: BlinkStrike <18644035+BlinkStrike@users.noreply.github.com>
Co-authored-by: M Jupri Amin <127651222+Juupeee@users.noreply.github.com>
Co-authored-by: Harikrishnan Dhanasekaran <harikrishnan@mulecraft.in>
Co-authored-by: Kamil Dzieniszewski <kamil.dzieniszewski@gmail.com>
Co-authored-by: Nick Anderson <nbrookie@gmail.com>
Co-authored-by: lefolalan <alan.lefol@omirion.com>
Co-authored-by: Chris <31969757+ChrisvanChip@users.noreply.github.com>
Co-authored-by: kipavy <88386090+kipavy@users.noreply.github.com>
Co-authored-by: Benjamin Nussbaum <bnussbau@users.noreply.github.com>
Co-authored-by: Khiet Tam Nguyen <86177399+nktnet1@users.noreply.github.com>
Co-authored-by: Vidhya LKG for IT <24915474+VidhyaSanjeevi@users.noreply.github.com>
Co-authored-by: Sanjeevi Subramani <ssanjeevi.ss@gmail.com>
Co-authored-by: Muzaffer Kadir YILMAZ <34358176+muzafferkadir@users.noreply.github.com>
Co-authored-by: Jemg <murksopps@gmail.com>

* Refactor wg-easy service configuration in docker-compose

Updated environment variables for wg-easy v15

* Refactor wg-easy service configuration in docker-compose

Updated environment variables for wg-easy v15

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Sunil Shrestha <sunil.shrestha@tekkon.com.np>
Co-authored-by: Rabithua <rabithua@gmail.com>
Co-authored-by: Mauricio Siu <siumauricio@hotmail.com>
Co-authored-by: Scan <103391616+scanash00@users.noreply.github.com>
Co-authored-by: Crackvignoule <kiki.kalagan@gmail.com>
Co-authored-by: florianheysen <39408021+florianheysen@users.noreply.github.com>
Co-authored-by: Thiago MadPin <madpin@gmail.com>
Co-authored-by: BlinkStrike <18644035+BlinkStrike@users.noreply.github.com>
Co-authored-by: M Jupri Amin <127651222+Juupeee@users.noreply.github.com>
Co-authored-by: Harikrishnan Dhanasekaran <harikrishnan@mulecraft.in>
Co-authored-by: Kamil Dzieniszewski <kamil.dzieniszewski@gmail.com>
Co-authored-by: Nick Anderson <nbrookie@gmail.com>
Co-authored-by: lefolalan <alan.lefol@omirion.com>
Co-authored-by: Chris <31969757+ChrisvanChip@users.noreply.github.com>
Co-authored-by: kipavy <88386090+kipavy@users.noreply.github.com>
Co-authored-by: Benjamin Nussbaum <bnussbau@users.noreply.github.com>
Co-authored-by: Khiet Tam Nguyen <86177399+nktnet1@users.noreply.github.com>
Co-authored-by: Vidhya LKG for IT <24915474+VidhyaSanjeevi@users.noreply.github.com>
Co-authored-by: Sanjeevi Subramani <ssanjeevi.ss@gmail.com>
Co-authored-by: Muzaffer Kadir YILMAZ <34358176+muzafferkadir@users.noreply.github.com>
Co-authored-by: Jemg <murksopps@gmail.com>

* feat(blueprint): strapi template (#616)

* feat(blueprint): strapi template

* feat: strapi meta.json

* fix: strapi extra colon

* fix: docker syntax for expose and depends_on

* fix: change image base

* fix: strapi healthcheck

* fix: add jwt secret and admin jwt secret to strapi

* fix: strapi healthcheck start interval

* fix(template): strapi v5.33.0

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>

* feat: Add Pulse monitoring template (#617)

* feat: Add Pulse monitoring template

- Add docker-compose.yml with healthcheck and Docker socket access
- Add template.toml with domain and authentication variables
- Add pulse.svg logo
- Add meta.json entry with monitoring, proxmox, docker tags
- Supports Proxmox VE, PBS, and Docker monitoring with real-time metrics

* fix: Update Pulse docs link to GitHub repository

- Replace non-existent docs.pulse.rcourtman.com with GitHub docs path
- Use canonical documentation location in Pulse repository

* update pulse links

* Update blueprints/pulse/docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* Fix Obsidian LiveSync template links pointing to CouchDB instead of plugin (#621)

* Initial plan

* Fix Obsidian LiveSync template links to point to correct project

Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>

* feat: add SeaweedFS template (#630)

* feat: add SeaweedFS template

* chore: add specific seaweedfs version

* Update image versions in docker-compose for AList, Appsmith, and Budibase (#639)

* Update image versions in the docker-compose and meta.json files for AList, Appsmith, and Budibase.

* Update MinIO image version in docker-compose

Pins a specific MinIO image version RELEASE.2025-09-07T16-13-09Z

* refactor: add

* docs: update CONTRIBUTING.md with pull request guidelines

- Added guidelines for keeping pull requests small and focused.
- Emphasized the importance of testing contributions before submission to maintain a tidy PR queue.

* Add/trilium next (#671)

* feat/add trilium next template

* fix: test verify to pr

* fix: fix validation error in docker-compose

* fix: static version to trilium image

---------

Co-authored-by: jbello <jbello@raodsystem.com>

* feat: add wuzapi template (#679)

* feat: add wuzapi template

* chore: remove temporary meta_entry.json

* fix(wuzapi): remove explicit networks and simplify depends_on for Dokploy compatibility

* fix(wuzapi): remove invalid config.mounts from template.toml

* Update Docker images for wuzapi and PostgreSQL

fixed the version of the wuzapi docker image.

* feat: add PostgreSQL with PgDog template (#681)

* feat: add PostgreSQL with PgDog template

Add postgres-pgdog template providing PostgreSQL database with PgDog connection pooler, load balancer, and horizontal scaling proxy. Modern alternative to PgBouncer with multi-threading support.

- Configurable PostgreSQL (default: 18-alpine) and PgDog (default: v0.1.26) images
- Optional admin interface on port 6433
- Includes healthcheck and dependency management

* 🐛 fix(postgres-pgdog): add config mounts and fix postgres volume path

- Add [[config.mounts]] for pgdog.toml and users.toml
- Mount config files from ../files/ in docker-compose
- Change postgres volume to /var/lib/postgresql (postgres 18+ standard)
- Add explicit command with config paths to prevent warnings

* 🐛 fix(postgres-pgdog): correct binary path and use default config locations

- Mount configs to /pgdog/ (default WorkingDir) instead of /etc/pgdog/
- Remove explicit command (binary is /usr/local/bin/pgdog, not /pgdog/pgdog)
- Use image's default CMD with default config paths

* 🐛 fix(postgres-pgdog): remove invalid admin_port config field

- Remove admin_port from [general] section (not a valid field)
- Admin DB uses same port 6432 with special database name
- Remove commented admin domain config

* 🐛 fix(postgres-pgdog): enable external access via fixed port mapping

- Add fixed port 6432:6432 to postgres-pgdog service
- Remove HTTP domain config (incompatible with TCP protocol)
- Add comment for internal-only option

Fixes UnsupportedStartup errors when using domain config for PostgreSQL protocol access.

* 🐛 fix(postgres-pgdog): use standard port format per convention

- Change port mapping from '6432:6432' to '6432' format
- Follows Dokploy template convention for port declarations
- External access requires checking Dokploy UI for assigned host port

* 📝 docs(postgres-pgdog): clarify port settings comment

* 🐛 fix(postgres-pgdog): default to internal access with opt-in external port

- Remove obsolete version field
- Port mapping commented by default for security
- Users uncomment to enable external access on port 6432

* Add IPFS Kubo template (#703)

* Add IPFS Kubo template

* Update init cmds

* Remove port forwarding

* uptime-kuma: Bump version to 2.1.0 (#706)

* Bump version to 2.1.0

* Update meta.json with new version number

* feat(blueprint): update trmnl-byos-laravel template (#704)

* upgrade nextcloud img version (#705)

* fix docker-compose variables and update github link (#701)

Co-authored-by: Aaron McGuire <git.figment276@passmail.net>

* Update InvoiceShelf compose to suit new changes (#693)

https://github.com/InvoiceShelf/docker/blob/89bf78cec6fae54db76f84e0a4dc6255a8da710e/upgrade-guide.md

* fix: superset template fixed versions, postgres volume mount and network instructions (#595)

* fix: superset version fixed, tweak network instructions

* chore: simplify mapbox key

* fix: volume mount

* deps: bump superset to 6.0.0

* feat: Add imgproxy template (#714)

* feat: Add imgproxy template

* fix: Configure docker-compose to match requirements

* fix: Process meta

* fix: Change logo name

* fix: Remove incorrect mounts

* fix: Expose 80 port instead of direct mapping

* fix: Change nginx cache keys default zone size and correct format negotiation

* fix: Escaping

* feat: update to new Evolution API image source and pin it to the latest version (#644)

* feat: Enhanced Nextcloud template with Redis, automated config, and improved setup (#672)

* Update docker-compose.yml

* fix: stable nextcloud, add redis, auto config, fixed mariadb

* fix: meta nextcloud

* fix: vars

* fix: non capital

* fix: template.toml

* fix: env vars

* fix: var naming

* fix: command

* fix: command

* another try

* keep it simple

* fix toml

* retry classic

* add: admin user

* no aito install

* feat: automated fixes

* fix  file pasth

* fix: manual script

* fix: script

* fix: png logo

* fix: meta logo data

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* feat: add MediaFetch template (#688)

* feat: add MediaFetch template

* Corrected .toml

* .toml

* feat: add unleash template (#691)

* feat: add unleash template

* feat: update unleash template to version 7.4.0 and fix formatting

* feat: update database user in unleash template from postgres to unleash

* Update Notifuse template: replace PASETO with SECRET_KEY auth (#696)

* Update Notifuse template: replace PASETO with SECRET_KEY auth

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>

* Change convex port mapping to expose and bump version (#730)

* chore: update convex backend and dashboard images, switch from port mapping to expose in docker-compose.yml

* fix: set default value for DISABLE_BEACON in docker-compose.yml

* Update grafana 12.4 (#731)

* Update grafana 12.4

* Update meta.json

* feat(blueprint): add Verdaccio - private node.js package registry (#735)

* feat: add tuwunel template for matrix (re-made) (#733)

* feat: add tuwunel template for matrix

* fix: replace HTML placeholder with actual SVG logo for tuwunel

* fix: remove enforcement and rename logo

* fix(cloudflared): opt-out of isolated deployment (#856)

Cloudflared requires network_mode: host which is mutually exclusive
with Docker networks. Setting isolated = false prevents Dokploy from
injecting networks into this compose.

Fixes https://github.com/Dokploy/dokploy/issues/4366

* Update Plunk template to use next version (#622)

* Update Plunk template to use next version

* Add domain configuration to config.env

* Remove NTFY from Plunk

* Added the frappe lending template (#665)

* added the frappe lending template

* removed the external network

* Add go2rtc (#720)

* Add go2rtc

* Update blueprints/go2rtc/docker-compose.yml

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update blueprints/go2rtc/template.toml

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Apply suggestion from @greptile-apps[bot]

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update docker-compose.yml

* Update template.toml

* Update docker-compose.yml

* Update docker-compose.yml

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update Meilisearch 1.35.1 and fix Cyberchef logo (#722)

* fix: update CyberChef logo from SVG to PNG and remove old SVG file

* fix: update Meilisearch version to v1.35.1

---------

Co-authored-by: Sunil Shrestha <sunil.shrestha@tekkon.com.np>
Co-authored-by: Rabithua <rabithua@gmail.com>
Co-authored-by: Mauricio Siu <siumauricio@hotmail.com>
Co-authored-by: Scan <103391616+scanash00@users.noreply.github.com>
Co-authored-by: Crackvignoule <kiki.kalagan@gmail.com>
Co-authored-by: florianheysen <39408021+florianheysen@users.noreply.github.com>
Co-authored-by: Thiago MadPin <madpin@gmail.com>
Co-authored-by: BlinkStrike <18644035+BlinkStrike@users.noreply.github.com>
Co-authored-by: M Jupri Amin <127651222+Juupeee@users.noreply.github.com>
Co-authored-by: Harikrishnan Dhanasekaran <harikrishnan@mulecraft.in>
Co-authored-by: Kamil Dzieniszewski <kamil.dzieniszewski@gmail.com>
Co-authored-by: Nick Anderson <nbrookie@gmail.com>
Co-authored-by: lefolalan <alan.lefol@omirion.com>
Co-authored-by: Chris <31969757+ChrisvanChip@users.noreply.github.com>
Co-authored-by: kipavy <88386090+kipavy@users.noreply.github.com>
Co-authored-by: Benjamin Nussbaum <bnussbau@users.noreply.github.com>
Co-authored-by: Khiet Tam Nguyen <86177399+nktnet1@users.noreply.github.com>
Co-authored-by: Vidhya LKG for IT <24915474+VidhyaSanjeevi@users.noreply.github.com>
Co-authored-by: Sanjeevi Subramani <ssanjeevi.ss@gmail.com>
Co-authored-by: Muzaffer Kadir YILMAZ <34358176+muzafferkadir@users.noreply.github.com>
Co-authored-by: Jemg <murksopps@gmail.com>
Co-authored-by: Jainil Prajapati <86187588+jaainil@users.noreply.github.com>
Co-authored-by: Ye Liu <yeliu84@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Carl-Gerhard Lindesvärd <1987198+lindesvard@users.noreply.github.com>
Co-authored-by: Huy Pham <quochuy.dev@gmail.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Louan Fontenele <louanbastos61@gmail.com>
Co-authored-by: Alexey Fedorov <fedorov2505@yandex.com>
Co-authored-by: 0zul <26915998+0zul@users.noreply.github.com>
Co-authored-by: Pascal Oberbeck <35005267+poberbeck@users.noreply.github.com>
Co-authored-by: Pascal Oberbeck <pascal.oberbeck@paperlesswork.de>
Co-authored-by: Christus Vincent <chrisspeakseh@gmail.com>
Co-authored-by: Huba Tuba <57007485+floxay@users.noreply.github.com>
Co-authored-by: Pablo Moraga Sandoval <72164630+Ketbome@users.noreply.github.com>
Co-authored-by: Firefly <77047823+Yuri-NagaSaki@users.noreply.github.com>
Co-authored-by: Naterfute <106989409+naterfute@users.noreply.github.com>
Co-authored-by: Vitaliy Kukharik <37010174+vitabaks@users.noreply.github.com>
Co-authored-by: aurorarissime <github.delta813@passfwd.com>
Co-authored-by: фырат ёздэн <31664778+fir4tozden@users.noreply.github.com>
Co-authored-by: JoshuaRileyDev <59296334+JoshuaRileyDev@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: vabs <njoy.today@gmail.com>
Co-authored-by: Jorge Gómez Zarzosa <34076979+jorgegomzar@users.noreply.github.com>
Co-authored-by: Jorge Gómez Zarzosa <jorgegomez@bmat.com>
Co-authored-by: Benjamin Robinet <benjaminrobinet@users.noreply.github.com>
Co-authored-by: Naim Hasim <ainadanaim@gmail.com>
Co-authored-by: kadma <lolocruser@gmail.com>
Co-authored-by: José F. Bello <45277800+bellolongart@users.noreply.github.com>
Co-authored-by: jbello <jbello@raodsystem.com>
Co-authored-by: Harshal Rathore <76205196+HarshalRathore@users.noreply.github.com>
Co-authored-by: Vinicios Lugli <vinicioslugli@gmail.com>
Co-authored-by: Kien Ngo <github@kien.ngo>
Co-authored-by: Simon <97951171+SimonSchroffner@users.noreply.github.com>
Co-authored-by: Aaron McGuire <89317236+Aaron-McGuire@users.noreply.github.com>
Co-authored-by: Aaron McGuire <git.figment276@passmail.net>
Co-authored-by: Andrew Wong <andrew12345@live.com>
Co-authored-by: Vladyslav Prosolupov <vladyslavprosolupov@gmail.com>
Co-authored-by: Matheus Felipe <matheusfelipeog@gmail.com>
Co-authored-by: Sina Sebastian Eetezadi <code@eetezadi.com>
Co-authored-by: Luke Dunsmore <lukedunsmoto@gmail.com>
Co-authored-by: Dipanda Aser <aserdipanda@gmail.com>
Co-authored-by: Pierre <pierre@bazoge.com>
Co-authored-by: marcbodea <marcbodea@gmail.com>
Co-authored-by: Wladi <wladiarce@gmail.com>
Co-authored-by: Adrian Alfred C. Bonpin <adrianbonpin@gmail.com>
Co-authored-by: Dries Augustyns <augustyns.dries@gmail.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-07-07 09:51:58 -06:00
febaandGitHub 5faf1b8579 Update volume path in docker-compose.yml
For persistent node
2026-02-26 14:41:45 -06:00
728 changed files with 14246 additions and 2293 deletions
+163
View File
@@ -0,0 +1,163 @@
name: Audit All Blueprints
# The per-PR validators only look at blueprints a PR touches, which is the right
# call for CI cost but means a template is checked when it lands and then never
# again. When a rule is added or tightened, every existing blueprint that breaks
# it stays broken with nothing surfacing it (see #1047).
#
# This job runs the same validators over ALL blueprints on a schedule, so drift
# is reported instead of accumulating. It never runs on pull_request, so it
# cannot block a contributor for a pre-existing problem they did not introduce.
on:
schedule:
# Mondays, 04:00 UTC
- cron: "0 4 * * 1"
workflow_dispatch:
inputs:
fail_on_findings:
description: "Exit non-zero when findings exist (default: report only)"
type: boolean
default: false
permissions:
contents: read
jobs:
audit:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20.16.0
- name: Set up pnpm
uses: pnpm/action-setup@v4
with:
version: 8
- name: Install dependencies
run: cd build-scripts && pnpm install
- name: Validate per-template metadata
run: node build-scripts/generate-meta.js --check
- name: Audit every blueprint
id: audit
run: |
# $RUNNER_TEMP is per-job; also cleared explicitly so a re-run or a
# partially-executed earlier step can never leak into the summary.
WORK="${RUNNER_TEMP:-/tmp}"
OUT="$WORK/validator-out.txt"
REPORT="$WORK/audit-report.md"
SUMMARY="$WORK/audit-summary.md"
rm -f "$OUT" "$REPORT" "$SUMMARY"
COMPOSE_FAILED=""
TOML_FAILED=""
for dir in blueprints/*/; do
id="$(basename "$dir")"
# Run unconditionally: a blueprint with no docker-compose.yml or no
# template.toml is itself a finding, and the validators already
# report a missing file clearly. Skipping them would hide exactly
# the blueprints most likely to be broken.
if ! (cd build-scripts && pnpm exec tsx validate-docker-compose.ts \
--file "../$dir/docker-compose.yml") > "$OUT" 2>&1; then
COMPOSE_FAILED="$COMPOSE_FAILED $id"
{
echo "### \`$id\` — docker-compose.yml"
echo '```'
grep '❌' "$OUT" || cat "$OUT"
echo '```'
} >> "$REPORT"
fi
if ! (cd build-scripts && pnpm exec tsx validate-template.ts \
--dir "../$dir") > "$OUT" 2>&1; then
TOML_FAILED="$TOML_FAILED $id"
{
echo "### \`$id\` — template.toml"
echo '```'
grep '❌' "$OUT" || cat "$OUT"
echo '```'
} >> "$REPORT"
fi
done
COMPOSE_COUNT=$(echo $COMPOSE_FAILED | wc -w | tr -d ' ')
TOML_COUNT=$(echo $TOML_FAILED | wc -w | tr -d ' ')
TOTAL=$(ls -d blueprints/*/ | wc -l | tr -d ' ')
{
echo "## Blueprint audit"
echo ""
echo "| check | failing | of |"
echo "| --- | --- | --- |"
echo "| \`validate-docker-compose.ts\` | $COMPOSE_COUNT | $TOTAL |"
echo "| \`validate-template.ts\` | $TOML_COUNT | $TOTAL |"
echo ""
} > "$SUMMARY"
if [ -f "$REPORT" ]; then
cat "$REPORT" >> "$SUMMARY"
else
echo "No findings." >> "$SUMMARY"
fi
# The step summary caps at ~1MB and truncates silently past it, which
# would hide findings exactly as the backlog grows. Bound what we
# append and point at the artifact for the rest.
SUMMARY_LIMIT=$((512 * 1024))
SUMMARY_BYTES=$(wc -c < "$SUMMARY" | tr -d ' ')
if [ "$SUMMARY_BYTES" -gt "$SUMMARY_LIMIT" ]; then
# Emit the header table only, never a byte-sliced prefix: cutting
# mid-``` leaves an unclosed code fence, which swallows the notice
# below it and makes the truncation invisible in the rendered summary.
{
head -n 7 "$SUMMARY"
echo ""
echo "_Report omitted: $SUMMARY_BYTES bytes exceeds the $SUMMARY_LIMIT byte budget for a job summary._"
echo "_Download the \`blueprint-audit\` artifact for the complete output._"
} >> "$GITHUB_STEP_SUMMARY"
else
cat "$SUMMARY" >> "$GITHUB_STEP_SUMMARY"
fi
# Always published, so the full report survives regardless of size.
cp "$SUMMARY" "$WORK/blueprint-audit.md"
echo "report_path=$WORK/blueprint-audit.md" >> "$GITHUB_OUTPUT"
echo "compose_failed=$COMPOSE_COUNT" >> "$GITHUB_OUTPUT"
echo "toml_failed=$TOML_COUNT" >> "$GITHUB_OUTPUT"
if [ "$COMPOSE_COUNT" != "0" ] || [ "$TOML_COUNT" != "0" ]; then
echo "::warning::$COMPOSE_COUNT compose and $TOML_COUNT template.toml findings across $TOTAL blueprints"
fi
- name: Upload the full report
if: always() && steps.audit.outputs.report_path != ''
uses: actions/upload-artifact@v4
with:
name: blueprint-audit
path: ${{ steps.audit.outputs.report_path }}
retention-days: 30
- name: Fail if requested
# `inputs` is only populated for workflow_dispatch; on a schedule run it
# is not available, so gate on the event first and read the value through
# github.event.inputs, which is an empty string when absent.
if: >-
github.event_name == 'workflow_dispatch' &&
github.event.inputs.fail_on_findings == 'true' &&
(steps.audit.outputs.compose_failed != '0' || steps.audit.outputs.toml_failed != '0')
run: |
echo "❌ Findings present and fail_on_findings was requested."
exit 1
+1 -1
View File
@@ -183,7 +183,7 @@ services:
- 3000:3000
# Instead use this way:
ports:
expose:
- 3000
```
+17 -15
View File
@@ -109,20 +109,22 @@ const Search = () => {
</div>
</div>
<Input
type="text"
placeholder="Search templates..."
value={searchQuery}
onChange={handleSearchChange}
className="w-full p-6"
/>
{searchQuery.length > 0 ? (
<div className="cursor-pointer" onClick={handleClearSearch}>
<XIcon className="absolute end-3 translate-y-3.5 top-1/2 h-5 w-5 text-gray-400" />
</div>
) : (
<SearchIcon className="absolute end-3 translate-y-2 top-1/2 lg:size-5 size-4 text-gray-400" />
)}
<div className="relative">
<Input
type="text"
placeholder="Search templates..."
value={searchQuery}
onChange={handleSearchChange}
className="w-full"
/>
{searchQuery.length > 0 ? (
<div className="cursor-pointer" onClick={handleClearSearch}>
<XIcon className="absolute end-3 top-1/2 -translate-y-1/2 h-5 w-5 text-gray-400" />
</div>
) : (
<SearchIcon className="absolute end-3 top-1/2 -translate-y-1/2 lg:size-5 size-4 text-gray-400" />
)}
</div>
</div>
<div className="flex flex-row gap-2 justify-between">
@@ -154,7 +156,7 @@ const Search = () => {
<ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
</Button>
</PopoverTrigger>
<PopoverContent className="w-[200px] p-0">
<PopoverContent className="w-50 p-0">
<Command shouldFilter={false}>
<CommandInput
placeholder="Search tags...."
+36 -1
View File
@@ -14,6 +14,7 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from "./ui/tabs";
import { Label } from "./ui/label";
import { Clipboard } from "lucide-react";
import { Input } from "./ui/input";
import Markdown from "./ui/markdown";
interface Template {
id: string;
@@ -32,6 +33,7 @@ interface Template {
interface TemplateFiles {
dockerCompose: string | null;
config: string | null;
instructions: string | null;
}
interface TemplateDialogProps {
@@ -169,8 +171,23 @@ const TemplateDialog: React.FC<TemplateDialogProps> = ({
</div>
</div>
)}
<Tabs defaultValue="docker-compose" className="w-full">
<Tabs
defaultValue={
templateFiles?.instructions
? "instructions"
: "docker-compose"
}
className="w-full"
>
<TabsList className="w-full justify-start">
{templateFiles?.instructions && (
<TabsTrigger
value="instructions"
className="data-[state=active]:font-bold"
>
Instructions
</TabsTrigger>
)}
<TabsTrigger
value="docker-compose"
className="data-[state=active]:font-bold"
@@ -184,6 +201,24 @@ const TemplateDialog: React.FC<TemplateDialogProps> = ({
Configuration
</TabsTrigger>
</TabsList>
{templateFiles?.instructions && (
<TabsContent value="instructions" className="mt-4">
<div className="space-y-2">
<Label className="flex flex-col items-start w-fit justify-start gap-1">
<span className="leading-tight text-xl font-semibold">
Setup Instructions
</span>
<span className="leading-tight text-sm text-gray-500">
instructions.md
</span>
</Label>
<div className="rounded-md border p-4">
<Markdown content={templateFiles.instructions} />
</div>
</div>
</TabsContent>
)}
<TabsContent value="docker-compose" className="mt-4">
{templateFiles?.dockerCompose && (
<div className="space-y-2">
+21 -6
View File
@@ -28,6 +28,7 @@ interface Template {
interface TemplateFiles {
dockerCompose: string | null;
config: string | null;
instructions: string | null;
}
interface TemplateGridProps {
@@ -80,20 +81,34 @@ const TemplateGrid: React.FC<TemplateGridProps> = ({ view }) => {
const fetchTemplateFiles = async (templateId: string) => {
setModalLoading(true);
try {
const [dockerComposeRes, configRes] = await Promise.all([
fetch(`/blueprints/${templateId}/docker-compose.yml`),
fetch(`/blueprints/${templateId}/template.toml`),
]);
const [dockerComposeRes, configRes, instructionsRes] = await Promise.all(
[
fetch(`/blueprints/${templateId}/docker-compose.yml`),
fetch(`/blueprints/${templateId}/template.toml`),
fetch(`/blueprints/${templateId}/instructions.md`),
]
);
const dockerCompose = dockerComposeRes.ok
? await dockerComposeRes.text()
: null;
const config = configRes.ok ? await configRes.text() : null;
setTemplateFiles({ dockerCompose, config });
// Guard against SPA fallbacks that return index.html with a 200 status
// for templates that don't have an instructions.md file.
const instructionsIsMarkdown =
instructionsRes.ok &&
!(instructionsRes.headers.get("content-type") || "").includes(
"text/html"
);
const instructions = instructionsIsMarkdown
? await instructionsRes.text()
: null;
setTemplateFiles({ dockerCompose, config, instructions });
} catch (err) {
console.error("Error fetching template files:", err);
setTemplateFiles({ dockerCompose: null, config: null });
setTemplateFiles({ dockerCompose: null, config: null, instructions: null });
} finally {
setModalLoading(false);
}
+177
View File
@@ -0,0 +1,177 @@
import React from "react";
// Minimal markdown renderer (no external dependencies) for the per-template
// instructions.md files. Supports headings, paragraphs, fenced code blocks,
// ordered/unordered lists, and inline code / bold / links.
const INLINE_PATTERN =
/(`[^`]+`)|(\*\*[^*]+\*\*)|(\[[^\]]+\]\([^)\s]+\))/g;
const renderInline = (text: string): React.ReactNode[] => {
const nodes: React.ReactNode[] = [];
let lastIndex = 0;
let key = 0;
let match: RegExpExecArray | null;
INLINE_PATTERN.lastIndex = 0;
while ((match = INLINE_PATTERN.exec(text)) !== null) {
if (match.index > lastIndex) {
nodes.push(text.slice(lastIndex, match.index));
}
const token = match[0];
if (token.startsWith("`")) {
nodes.push(
<code
key={key++}
className="px-1.5 py-0.5 rounded bg-muted font-mono text-[0.85em]"
>
{token.slice(1, -1)}
</code>
);
} else if (token.startsWith("**")) {
nodes.push(<strong key={key++}>{token.slice(2, -2)}</strong>);
} else {
const link = /^\[([^\]]+)\]\(([^)\s]+)\)$/.exec(token);
if (link) {
nodes.push(
<a
key={key++}
href={link[2]}
target="_blank"
rel="noopener noreferrer"
className="text-blue-600 dark:text-blue-400 underline underline-offset-2"
>
{link[1]}
</a>
);
} else {
nodes.push(token);
}
}
lastIndex = match.index + token.length;
}
if (lastIndex < text.length) {
nodes.push(text.slice(lastIndex));
}
return nodes;
};
const HEADING_CLASSES: Record<number, string> = {
1: "text-2xl font-bold mt-2",
2: "text-xl font-semibold mt-6 border-b pb-1",
3: "text-lg font-semibold mt-4",
4: "text-base font-semibold mt-3",
};
interface MarkdownProps {
content: string;
}
const Markdown: React.FC<MarkdownProps> = ({ content }) => {
const lines = content.replace(/\r\n/g, "\n").split("\n");
const blocks: React.ReactNode[] = [];
let key = 0;
let i = 0;
while (i < lines.length) {
const line = lines[i];
// Blank line
if (line.trim() === "") {
i++;
continue;
}
// Fenced code block
if (line.trim().startsWith("```")) {
const code: string[] = [];
i++;
while (i < lines.length && !lines[i].trim().startsWith("```")) {
code.push(lines[i]);
i++;
}
i++; // skip closing fence
blocks.push(
<pre
key={key++}
className="bg-muted rounded-md p-4 overflow-x-auto text-sm font-mono whitespace-pre"
>
<code>{code.join("\n")}</code>
</pre>
);
continue;
}
// Heading
const heading = /^(#{1,4})\s+(.*)$/.exec(line);
if (heading) {
const level = heading[1].length;
const Tag = `h${Math.min(level + 1, 6)}` as keyof React.JSX.IntrinsicElements;
blocks.push(
<Tag key={key++} className={HEADING_CLASSES[level]}>
{renderInline(heading[2])}
</Tag>
);
i++;
continue;
}
// Unordered list
if (/^[-*]\s+/.test(line)) {
const items: string[] = [];
while (i < lines.length && /^[-*]\s+/.test(lines[i])) {
items.push(lines[i].replace(/^[-*]\s+/, ""));
i++;
}
blocks.push(
<ul key={key++} className="list-disc pl-6 space-y-1">
{items.map((item, idx) => (
<li key={idx}>{renderInline(item)}</li>
))}
</ul>
);
continue;
}
// Ordered list
if (/^\d+\.\s+/.test(line)) {
const items: string[] = [];
while (i < lines.length && /^\d+\.\s+/.test(lines[i])) {
items.push(lines[i].replace(/^\d+\.\s+/, ""));
i++;
}
blocks.push(
<ol key={key++} className="list-decimal pl-6 space-y-1">
{items.map((item, idx) => (
<li key={idx}>{renderInline(item)}</li>
))}
</ol>
);
continue;
}
// Paragraph: consume consecutive plain lines
const paragraph: string[] = [line];
i++;
while (
i < lines.length &&
lines[i].trim() !== "" &&
!/^(#{1,4})\s+/.test(lines[i]) &&
!/^[-*]\s+/.test(lines[i]) &&
!/^\d+\.\s+/.test(lines[i]) &&
!lines[i].trim().startsWith("```")
) {
paragraph.push(lines[i]);
i++;
}
blocks.push(
<p key={key++} className="leading-relaxed">
{renderInline(paragraph.join(" "))}
</p>
);
}
return <div className="space-y-3 text-sm">{blocks}</div>;
};
export default Markdown;
+2 -2
View File
@@ -5,7 +5,7 @@ import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
DropdownMenuTrigger,
} from "./components/ui/dropdown-menu"
import { useTheme } from "./theme-provider"
@@ -13,7 +13,7 @@ export function ModeToggle() {
const { setTheme } = useTheme()
return (
<DropdownMenu>
<DropdownMenu modal={false}>
<DropdownMenuTrigger asChild>
<Button variant="outline" size="icon">
<Sun className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

+32
View File
@@ -0,0 +1,32 @@
version: "3.8"
services:
9router:
image: decolua/9router:0.5.40
restart: unless-stopped
environment:
DATA_DIR: /app/data
PORT: "20128"
HOSTNAME: "0.0.0.0"
NODE_ENV: production
JWT_SECRET: ${JWT_SECRET}
INITIAL_PASSWORD: ${INITIAL_PASSWORD}
API_KEY_SECRET: ${API_KEY_SECRET}
MACHINE_ID_SALT: ${MACHINE_ID_SALT}
BASE_URL: http://${ROUTER_HOST}
NEXT_PUBLIC_BASE_URL: http://${ROUTER_HOST}
HEADROOM_URL: http://headroom:8787
AUTH_COOKIE_SECURE: "false"
volumes:
- 9router-data:/app/data
depends_on:
- headroom
# Optional token-reduction proxy that 9Router calls through HEADROOM_URL.
# Shipped as a sidecar because the 9Router image does not bundle it.
headroom:
image: ghcr.io/chopratejas/headroom:0.6.7
restart: unless-stopped
volumes:
9router-data:
+17
View File
@@ -0,0 +1,17 @@
{
"id": "9router",
"name": "9Router",
"version": "0.5.40",
"description": "Self-hosted AI model router that rotates requests across 40+ providers with automatic fallback, exposing an OpenAI-compatible endpoint for coding agents.",
"logo": "9router.png",
"links": {
"github": "https://github.com/decolua/9router",
"website": "https://9router.com",
"docs": "https://github.com/decolua/9router/blob/master/DOCKER.md"
},
"tags": [
"ai",
"proxy",
"developer-tools"
]
}
+21
View File
@@ -0,0 +1,21 @@
[variables]
main_domain = "${domain}"
jwt_secret = "${password:64}"
initial_password = "${password:32}"
api_key_secret = "${password:64}"
machine_id_salt = "${password:32}"
[config]
env = [
"ROUTER_HOST=${main_domain}",
"JWT_SECRET=${jwt_secret}",
"INITIAL_PASSWORD=${initial_password}",
"API_KEY_SECRET=${api_key_secret}",
"MACHINE_ID_SALT=${machine_id_salt}",
]
mounts = []
[[config.domains]]
serviceName = "9router"
port = 20128
host = "${main_domain}"
+1 -1
View File
@@ -3,7 +3,7 @@ version: "3"
services:
ackee:
image: electerious/ackee:3.4.2
ports:
expose:
- "3000"
environment:
- ACKEE_USERNAME=${ACKEE_USERNAME}
-4
View File
@@ -1,4 +0,0 @@
## Instructions
We don't have nothing to show here....
+1 -1
View File
@@ -61,4 +61,4 @@ services:
volumes:
postgres_data:
redis_data:
redis_data:
+4 -2
View File
@@ -1,3 +1,4 @@
# dokploy: allow-host-ports — DNS (53/tcp+udp), DHCP (67/68) and DNS-over-TLS/QUIC (853) are not HTTP protocols; clients must reach them directly on the host, Traefik cannot route them.
version: "3.8"
services:
adguardhome:
@@ -10,11 +11,12 @@ services:
- "68:68/tcp" # DHCP Client
- "853:853/tcp" # DNS over TLS, DNS-over-QUIC
- "853:853/udp" # DNS over TLS, DNS-over-QUIC
- "6060:6060/tcp" # HTTP (pprof)
expose:
- 6060 # HTTP (pprof) — debug endpoint, no need to publish it on the host
volumes:
- adguardhome-work:/opt/adguardhome/work
- adguardhome-conf:/opt/adguardhome/conf
volumes:
adguardhome-work: {}
adguardhome-conf: {}
adguardhome-conf: {}
+2 -2
View File
@@ -3,5 +3,5 @@ services:
adminer:
image: adminer:4.8.1
restart: unless-stopped
ports:
- 8080
expose:
- 8080
+1 -1
View File
@@ -7,7 +7,7 @@
"links": {
"github": "https://github.com/seanmorley15/adventurelog",
"website": "https://adventurelog.app/",
"docs": "https://adventurelog.app/docs/"
"docs": "https://adventurelog.app/docs/intro/adventurelog_overview.html"
},
"tags": [
"activity",
+29 -10
View File
@@ -1,9 +1,9 @@
version: "3.8"
services:
affinepro:
image: ghcr.io/toeverything/affine-graphql:stable-780dd83
image: ghcr.io/toeverything/affine:stable
restart: unless-stopped
ports:
expose:
- 3010
volumes:
- affine-storage:/root/.affine/storage
@@ -12,6 +12,7 @@ services:
- REDIS_SERVER_HOST=redis
- REDIS_SERVER_PASSWORD=${REDIS_PASSWORD}
- DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@db:5432/affinepro
- AFFINE_INDEXER_ENABLED=false
- AFFINE_SERVER_HOST=${DOMAIN}
- MAILER_HOST=${MAILER_HOST}
- MAILER_PORT=${MAILER_PORT}
@@ -19,16 +20,21 @@ services:
- MAILER_PASSWORD=${MAILER_PASSWORD}
- MAILER_SENDER=${MAILER_SENDER}
depends_on:
- db
- redis
db:
condition: service_healthy
redis:
condition: service_healthy
migration:
condition: service_completed_successfully
migration:
image: ghcr.io/toeverything/affine-graphql:stable-780dd83
command: node ./scripts/self-host-predeploy.js
image: ghcr.io/toeverything/affine:stable
command: ["sh", "-c", "node ./scripts/self-host-predeploy.js"]
environment:
- REDIS_SERVER_HOST=redis
- REDIS_SERVER_PASSWORD=${REDIS_PASSWORD}
- DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@db:5432/affinepro
- AFFINE_INDEXER_ENABLED=false
- AFFINE_SERVER_HOST=${DOMAIN}
- MAILER_HOST=${MAILER_HOST}
- MAILER_PORT=${MAILER_PORT}
@@ -39,17 +45,25 @@ services:
- affine-storage:/root/.affine/storage
- affine-config:/root/.affine/config
depends_on:
- db
- redis
db:
condition: service_healthy
redis:
condition: service_healthy
db:
image: postgres:15-alpine
image: pgvector/pgvector:pg16
restart: unless-stopped
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=affinepro
- POSTGRES_INITDB_ARGS=--data-checksums
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres", "-d", "affinepro"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
@@ -57,9 +71,14 @@ services:
command: redis-server --requirepass ${REDIS_PASSWORD}
volumes:
- redis-data:/data
healthcheck:
test: ["CMD-SHELL", "redis-cli -a '${REDIS_PASSWORD}' ping | grep PONG"]
interval: 10s
timeout: 5s
retries: 5
volumes:
affine-storage: {}
affine-config: {}
postgres-data: {}
redis-data: {}
redis-data: {}
+2 -2
View File
@@ -1,13 +1,13 @@
{
"id": "affinepro",
"name": "Affine Pro",
"version": "stable-780dd83",
"version": "stable",
"description": "Affine Pro is a modern, self-hosted platform designed for collaborative content creation and project management. It offers an intuitive interface, seamless real-time collaboration, and powerful tools for organizing tasks, notes, and ideas.",
"logo": "logo.png",
"links": {
"github": "https://github.com/toeverything/Affine",
"website": "https://affine.pro/",
"docs": "https://affine.pro/docs"
"docs": "https://docs.affine.pro/"
},
"tags": [
"collaboration",
+1 -1
View File
@@ -11,4 +11,4 @@ services:
volumes:
- agent-zero-data:/a0/usr
volumes:
agent-zero-data:
agent-zero-data:
+2 -3
View File
@@ -11,12 +11,11 @@ services:
- agentdvr-config:/AgentDVR/Media/XML/
- agentdvr-media:/AgentDVR/Media/WebServerRoot/Media/
- agentdvr-commands:/AgentDVR/Commands/
ports:
expose:
- 8090
- 3478/udp
- 50000-50100/udp
volumes:
agentdvr-config: {}
agentdvr-media: {}
agentdvr-commands: {}
agentdvr-commands: {}
+1 -2
View File
@@ -3,6 +3,7 @@ main_domain = "${domain}"
timezone = "America/New_York"
[config]
mounts = []
[[config.domains]]
serviceName = "agentdvr"
port = 8090
@@ -10,5 +11,3 @@ host = "${main_domain}"
[config.env]
TIMEZONE = "${timezone}"
[[config.mounts]]
+2 -2
View File
@@ -24,6 +24,7 @@ port = 80
host = "${main_domain}"
[config]
mounts = []
env = [
# App
"APP_URL=${main_domain}",
@@ -50,5 +51,4 @@ env = [
"MYSQL_RANDOM_ROOT_PASSWORD=yes"
]
# No custom mounts needed; volumes are already defined in compose.
[[config.mounts]]
# No custom mounts needed; volumes are already defined in compose.
+1 -1
View File
@@ -11,4 +11,4 @@ services:
restart: unless-stopped
volumes:
alist-data:
alist-data:
+2 -2
View File
@@ -3,10 +3,10 @@ services:
alltube:
image: dnomd343/alltube:latest
restart: unless-stopped
ports:
expose:
- 80
environment:
- TITLE=${TITLE}
- CONVERT=${CONVERT}
- STREAM=${STREAM}
- REMUX=${REMUX}
- REMUX=${REMUX}
+2 -2
View File
@@ -3,7 +3,7 @@ services:
ampache:
image: ampache/ampache:latest
restart: unless-stopped
ports:
expose:
- 80
volumes:
- config:/var/www/config
@@ -14,4 +14,4 @@ services:
volumes:
config: {}
log: {}
mysql: {}
mysql: {}
+2 -2
View File
@@ -3,7 +3,7 @@ services:
anonupload:
image: ghcr.io/supernova3339/anonfiles:1
restart: unless-stopped
ports:
expose:
- 80
environment:
- ADMIN_EMAIL=${ADMIN_EMAIL}
@@ -13,4 +13,4 @@ services:
- uploads:/var/www/html/uploads
volumes:
uploads: {}
uploads: {}
+1 -1
View File
@@ -1,7 +1,7 @@
services:
answer:
image: apache/answer:1.4.1
ports:
expose:
- '80'
restart: on-failure
volumes:
+1 -1
View File
@@ -10,7 +10,7 @@
"docs": "https://answer.apache.org/docs"
},
"tags": [
"q&a",
"q-and-a",
"self-hosted"
]
}
+1 -1
View File
@@ -3,7 +3,7 @@ services:
anubis:
image: ghcr.io/techarohq/anubis:latest
restart: unless-stopped
ports:
expose:
- "8923" # Anubis default port
environment:
# Required: Point to your frontend service locally
+2 -2
View File
@@ -3,7 +3,7 @@ services:
anythingllm:
image: mintplexlabs/anythingllm:latest
restart: unless-stopped
ports:
expose:
- 3001
environment:
- STORAGE_DIR=/app/server/storage
@@ -13,4 +13,4 @@ services:
- SYS_ADMIN
volumes:
storage: {}
storage: {}
+2 -2
View File
@@ -6,8 +6,8 @@
"logo": "logo.png",
"links": {
"github": "https://github.com/Mintplex-Labs/anything-llm",
"website": "https://useanything.com",
"docs": "https://github.com/Mintplex-Labs/anything-llm/tree/master/docs"
"website": "https://anythingllm.com/",
"docs": "https://docs.anythingllm.com/"
},
"tags": [
"ai",
+2 -1
View File
@@ -1,3 +1,4 @@
# dokploy: allow-host-ports — Anytype clients speak the any-sync protocol (TCP 33010, UDP/QUIC 33020) directly against the server; it is not HTTP, so Traefik cannot route it.
# Example: Any-Sync-Bundle with embedded MongoDB and Redis (all-in-one image)
#
# Usage:
@@ -13,7 +14,7 @@ services:
- "33010:33010"
- "33020:33020/udp"
volumes:
- ./data:/data
- ../files/anytype-data:/data
environment:
# Advertise addresses clients should use. Replace with your server hostname/IP.
ANY_SYNC_BUNDLE_INIT_EXTERNAL_ADDRS: "192.168.100.9"
+2 -2
View File
@@ -3,7 +3,7 @@ services:
apprise-api:
image: linuxserver/apprise-api:latest
restart: unless-stopped
ports:
expose:
- 8000
environment:
- PUID=1000
@@ -13,4 +13,4 @@ services:
- config:/config
volumes:
config: {}
config: {}
+1 -1
View File
@@ -7,4 +7,4 @@ services:
restart: unless-stopped
volumes:
appsmith-data:
appsmith-data:
+4 -1
View File
@@ -15,7 +15,10 @@ env = [
"_APP_POOL_ADAPTER=stack",
"_APP_WORKER_PER_CORE=6",
"_APP_OPTIONS_ABUSE=enabled",
"_APP_OPTIONS_FORCE_HTTPS=disabled",
# Requires HTTPS to be enabled on the main domain in Dokploy (Domains tab).
# Makes Appwrite generate https:// URLs (e.g. APPWRITE_FUNCTION_API_ENDPOINT for
# Functions) and reject plain-HTTP API calls; over plain HTTP the console cannot log in.
"_APP_OPTIONS_FORCE_HTTPS=enabled",
"_APP_OPTIONS_ROUTER_FORCE_HTTPS=disabled",
"_APP_OPTIONS_ROUTER_PROTECTION=disabled",
"_APP_OPENSSL_KEY_V1=${openssl_key}",
+2 -2
View File
@@ -3,7 +3,7 @@ services:
arangodb:
image: arangodb:3.12.4
restart: unless-stopped
ports:
expose:
- 8529
environment:
- ARANGO_ROOT_PASSWORD=${ARANGO_PASSWORD}
@@ -11,4 +11,4 @@ services:
- data:/var/lib/arangodb3
volumes:
data: {}
data: {}
+1 -2
View File
@@ -9,8 +9,7 @@ services:
PUBLIC_SNAPSHOTS: ${PUBLIC_SNAPSHOTS}
volumes:
- archivebox_data:/data
ports:
expose:
- "8000"
volumes:
archivebox_data:
+2 -2
View File
@@ -3,7 +3,7 @@ services:
argilla-web:
image: argilla/argilla-server:latest
restart: unless-stopped
ports:
expose:
- 6900
environment:
- ARGILLA_HOME_PATH=/var/lib/argilla
@@ -74,4 +74,4 @@ volumes:
argilladata: {}
elasticdata: {}
dbdata: {}
redisdata: {}
redisdata: {}
+2 -2
View File
@@ -3,7 +3,7 @@ services:
audiobookshelf:
image: ghcr.io/advplyr/audiobookshelf:2.19.4
restart: unless-stopped
ports:
expose:
- 80
environment:
- TZ=UTC
@@ -14,4 +14,4 @@ services:
volumes:
config: {}
metadata: {}
metadata: {}
+2 -3
View File
@@ -16,9 +16,8 @@ services:
condition: service_healthy
postgres:
condition: service_healthy
ports:
expose:
- 9091
redis:
image: redis:7-alpine
restart: unless-stopped
@@ -52,4 +51,4 @@ services:
volumes:
authelia_config:
redis_data:
postgres_data:
postgres_data:
+2 -2
View File
@@ -3,7 +3,7 @@ services:
authorizer:
image: lakhansamani/authorizer:1.4.4
restart: unless-stopped
ports:
expose:
- 8080
environment:
- DATABASE_TYPE=postgres
@@ -37,4 +37,4 @@ services:
volumes:
db_data: {}
redis_data: {}
redis_data: {}
+2 -2
View File
@@ -1,8 +1,8 @@
services:
autobase-console:
image: autobase/console:2.7.2
image: autobase/console:2.10.0
restart: unless-stopped
ports:
expose:
- "80"
- "8080"
environment:
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "autobase",
"name": "Autobase",
"version": "2.7.2",
"version": "2.10.0",
"description": "Autobase for PostgreSQL® is an open-source alternative to cloud-managed databases (self-hosted DBaaS).",
"links": {
"github": "https://github.com/vitabaks/autobase",
+15 -14
View File
@@ -1,17 +1,15 @@
version: "3.8"
services:
automatisch:
image: dockeriddonuts/automatisch:2.0
image: automatischio/automatisch:0.15.0
restart: unless-stopped
ports:
- 3000
environment:
- HOST=${DOMAIN}
- PROTOCOL=http
- PORT=3000
- API_URL=http://${DOMAIN}
- WEB_APP_URL=http://${DOMAIN}
- APP_ENV=production
- REDIS_HOST=automatisch-redis
- REDIS_USERNAME=default
- REDIS_PASSWORD=${REDIS_PASSWORD}
- POSTGRES_HOST=automatisch-postgres
- POSTGRES_DATABASE=automatisch
@@ -23,11 +21,13 @@ services:
volumes:
- storage:/automatisch/storage
depends_on:
- automatisch-postgres
- automatisch-redis
automatisch-postgres:
condition: service_healthy
automatisch-redis:
condition: service_started
automatisch-worker:
image: dockeriddonuts/automatisch:2.0
image: automatischio/automatisch:0.15.0
restart: unless-stopped
environment:
- APP_ENV=production
@@ -44,8 +44,7 @@ services:
volumes:
- storage:/automatisch/storage
depends_on:
- automatisch-postgres
- automatisch-redis
- automatisch
automatisch-postgres:
image: postgres:15-alpine
@@ -56,18 +55,20 @@ services:
- POSTGRES_DB=automatisch
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d automatisch"]
interval: 10s
timeout: 5s
retries: 5
automatisch-redis:
image: redis:7-alpine
restart: unless-stopped
command: redis-server --requirepass ${REDIS_PASSWORD}
environment:
- REDIS_USERNAME=default
- REDIS_PASSWORD=${REDIS_PASSWORD}
volumes:
- redis_data:/data
volumes:
storage: {}
postgres_data: {}
redis_data: {}
redis_data: {}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "automatisch",
"name": "Automatisch",
"version": "2.0",
"version": "0.15.0",
"description": "Automatisch is a powerful, self-hosted workflow automation tool designed for connecting your apps and automating repetitive tasks. With Automatisch, you can create workflows to sync data, send notifications, and perform various actions seamlessly across different services.",
"logo": "logo.png",
"links": {
+1
View File
@@ -13,6 +13,7 @@ port = 3000
host = "${main_domain}"
[config.env]
DOMAIN = "${main_domain}"
DB_PASSWORD = "${db_password}"
REDIS_PASSWORD = "${redis_password}"
ENCRYPTION_KEY = "${encryption_key}"
+2 -2
View File
@@ -2,7 +2,7 @@ services:
azuracast:
image: ghcr.io/azuracast/azuracast:latest
restart: unless-stopped
ports:
expose:
- 80
volumes:
- azuracast-station-data:/var/azuracast/stations
@@ -36,4 +36,4 @@ volumes:
azuracast-data: {}
azuracast-uploads: {}
azuracast-backups: {}
mariadb-data: {}
mariadb-data: {}
+1 -2
View File
@@ -4,6 +4,7 @@ mysql_root_password = "${password:32}"
mysql_password = "${password:16}"
[config]
mounts = []
[[config.domains]]
serviceName = "azuracast"
port = 80
@@ -27,5 +28,3 @@ NGINX_RADIO_PORTS = "8000,8010,8020,8030,8040,8050"
PREFER_RELEASE_BUILDS = "true"
COMPOSER_PLUGIN_MODE = "false"
ADDITIONAL_MEDIA_SYNC_WORKER_COUNT = "0"
[[config.mounts]]
+2 -2
View File
@@ -3,7 +3,7 @@ services:
babybuddy:
image: linuxserver/babybuddy:2.7.0
restart: unless-stopped
ports:
expose:
- 8000
environment:
- PUID=1000
@@ -16,4 +16,4 @@ services:
- config:/config
volumes:
config: {}
config: {}
+1 -1
View File
@@ -7,7 +7,7 @@
"links": {
"github": "https://github.com/babybuddy/babybuddy",
"website": "https://babybuddy.app",
"docs": "https://docs.babybuddy.app"
"docs": "https://docs.baby-buddy.net/"
},
"tags": [
"parenting",
+1 -1
View File
@@ -2,7 +2,7 @@ services:
backrest:
image: garethgeorge/backrest:v1.7.3
restart: unless-stopped
ports:
expose:
- 9898
environment:
- BACKREST_PORT=9898
+2 -2
View File
@@ -3,7 +3,7 @@ services:
baikal:
image: ckulka/baikal:nginx-php8.2
restart: unless-stopped
ports:
expose:
- 80
environment:
- TZ=UTC
@@ -13,4 +13,4 @@ services:
volumes:
config: {}
data: {}
data: {}
+2 -2
View File
@@ -3,11 +3,11 @@ services:
barrage:
image: maulik9898/barrage:0.3.0
restart: unless-stopped
ports:
expose:
- 3000
environment:
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
- NEXTAUTH_URL=http://${DOMAIN}
- DELUGE_URL=${DELUGE_URL}
- DELUGE_PASSWORD=${DELUGE_PASSWORD}
- BARRAGE_PASSWORD=${BARRAGE_PASSWORD}
- BARRAGE_PASSWORD=${BARRAGE_PASSWORD}
+2 -2
View File
@@ -3,7 +3,7 @@ services:
bazarr:
image: lscr.io/linuxserver/bazarr:1.5.1
restart: unless-stopped
ports:
expose:
- 6767
environment:
- PUID=1000
@@ -15,4 +15,4 @@ services:
- ${TV_PATH}:/tv
volumes:
config: {}
config: {}
+1 -1
View File
@@ -7,7 +7,7 @@
"links": {
"github": "https://github.com/morpheus65535/bazarr",
"website": "https://www.bazarr.media/",
"docs": "https://www.bazarr.media/docs"
"docs": "https://wiki.bazarr.media/"
},
"tags": [
"subtitles",
+2 -2
View File
@@ -5,9 +5,9 @@
"description": "BentoPDF is a lightweight PDF conversion microservice that exposes a simple HTTP API for generating PDFs.",
"logo": "image.png",
"links": {
"github": "https://github.com/bentopdf/bentopdf",
"github": "https://github.com/alam00000/bentopdf/",
"website": "https://bentopdf.com/",
"docs": "https://github.com/bentopdf/bentopdf#readme"
"docs": "https://www.bentopdf.com/docs/"
},
"tags": [
"pdf",
+2 -2
View File
@@ -3,11 +3,11 @@ services:
beszel:
image: henrygd/beszel:0.10.2
restart: unless-stopped
ports:
expose:
- 8090
volumes:
- beszel_data:/beszel_data
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
beszel_data: {}
beszel_data: {}
+6 -12
View File
@@ -4,10 +4,8 @@ services:
restart: unless-stopped
depends_on:
- server
ports:
expose:
- '80'
server:
image: bigcapitalhq/server:latest
restart: unless-stopped
@@ -18,9 +16,8 @@ services:
condition: service_started
redis:
condition: service_started
ports:
expose:
- '3000'
environment:
# Mail
- MAIL_HOST=${MAIL_HOST}
@@ -97,9 +94,8 @@ services:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
volumes:
- mysql:/var/lib/mysql
ports:
expose:
- '3306'
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost -u root -p$$MYSQL_ROOT_PASSWORD || exit 1"]
interval: 10s
@@ -110,7 +106,7 @@ services:
mongo:
image: mongo:7
restart: unless-stopped
ports:
expose:
- '27017'
volumes:
- mongo:/data/db
@@ -119,7 +115,7 @@ services:
redis:
image: redis:7-alpine
restart: unless-stopped
ports:
expose:
- '6379'
volumes:
- redis:/data
@@ -133,10 +129,8 @@ services:
gotenberg:
image: gotenberg/gotenberg:7
restart: unless-stopped
ports:
expose:
- '9000'
volumes:
mysql:
name: bigcapital_mysql
+1 -4
View File
@@ -72,7 +72,7 @@ s3_endpoint = ""
s3_bucket = ""
[config]
mounts = []
[[config.domains]]
serviceName = "webapp"
port = 80
@@ -165,6 +165,3 @@ MYSQL_DATABASE = "${system_db_name}"
MYSQL_USER = "${db_user}"
MYSQL_PASSWORD = "${db_password}"
MYSQL_ROOT_PASSWORD = "${db_root_password}"
[[config.mounts]]
+12
View File
@@ -28,6 +28,9 @@ services:
- AUTORUN_LARAVEL_STORAGE_LINK=true
volumes:
- billmora-storage:/var/www/html/storage
- billmora-plugins:/var/www/html/plugin
- billmora-themes-resources:/var/www/html/resources/themes
- billmora-themes-public:/var/www/html/public/themes
depends_on:
billmora-db:
condition: service_healthy
@@ -58,6 +61,9 @@ services:
- AUTORUN_ENABLED=false
volumes:
- billmora-storage:/var/www/html/storage
- billmora-plugins:/var/www/html/plugin
- billmora-themes-resources:/var/www/html/resources/themes
- billmora-themes-public:/var/www/html/public/themes
depends_on:
billmora-db:
condition: service_healthy
@@ -88,6 +94,9 @@ services:
- AUTORUN_ENABLED=false
volumes:
- billmora-storage:/var/www/html/storage
- billmora-plugins:/var/www/html/plugin
- billmora-themes-resources:/var/www/html/resources/themes
- billmora-themes-public:/var/www/html/public/themes
depends_on:
billmora-db:
condition: service_healthy
@@ -126,5 +135,8 @@ services:
volumes:
billmora-storage:
billmora-plugins:
billmora-themes-resources:
billmora-themes-public:
billmora-db-data:
billmora-redis-data:
+1 -1
View File
@@ -19,7 +19,7 @@ services:
- PGID=1000
- TZ=Etc/UTC
- SUBFOLDER=/ #optional
ports:
expose:
- 3000
- 3001
restart: unless-stopped
+1 -2
View File
@@ -16,9 +16,8 @@ services:
options:
max-size: "10m"
max-file: "3"
ports:
expose:
- 1111
blinko-postgres:
image: postgres:14
restart: always
+12
View File
@@ -0,0 +1,12 @@
# BlogFactory on Dokploy
Dokploy creates independent database, storage, JWT, encryption, and scheduler secrets during import. Only the `web` service receives a public domain; the API, scheduler, PostgreSQL, and MinIO remain private.
## First administrator
1. Open the Compose service's environment settings and copy the generated `ADMIN_EMAILS` value.
2. Open the generated BlogFactory domain and register with that exact email address.
3. Return to the Compose environment settings, change `BLOGFACTORY_ALLOW_SIGNUP` to `false`, and redeploy.
4. Add OpenRouter, CMS, or Google Search Console credentials from BlogFactory only when you need those optional integrations.
BlogFactory sends reviewed content to connected CMS providers as drafts. The template does not grant live-publish or delete authority.
+8
View File
@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
<rect width="64" height="64" rx="8" fill="#fff"/>
<rect x="1" y="1" width="62" height="62" rx="7" fill="none" stroke="#d7d8d4" stroke-width="2"/>
<circle cx="50" cy="14" r="5" fill="#ff5a1f"/>
<rect x="13" y="31" width="10" height="18" fill="#202224"/>
<rect x="27" y="20" width="10" height="29" fill="#202224"/>
<rect x="41" y="26" width="10" height="23" fill="#202224"/>
</svg>

After

Width:  |  Height:  |  Size: 453 B

+102
View File
@@ -0,0 +1,102 @@
version: "3.8"
services:
postgres:
image: postgres:17.6-alpine3.22
restart: unless-stopped
environment:
POSTGRES_DB: blogfactory
POSTGRES_USER: blogfactory
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U blogfactory -d blogfactory"]
interval: 5s
timeout: 5s
retries: 20
minio:
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
restart: unless-stopped
command: server /data --console-address :9001
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
volumes:
- minio-data:/data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 5s
timeout: 5s
retries: 20
api:
image: ghcr.io/blogfactoryhq/blogfactory-api:v0.1.0
restart: unless-stopped
command: >-
sh -c "bun run src/init-s3-bucket.ts && bun run src/db/migrate.ts && exec bun run src/index.ts"
depends_on:
postgres:
condition: service_healthy
minio:
condition: service_healthy
expose:
- 3000
environment:
NODE_ENV: production
PORT: 3000
BLOGFACTORY_SELF_HOSTED: "true"
DATABASE_URL: postgresql://blogfactory:${POSTGRES_PASSWORD}@postgres:5432/blogfactory
JWT_SECRET: ${JWT_SECRET}
API_KEY_ENCRYPTION_SECRET: ${API_KEY_ENCRYPTION_SECRET}
ADMIN_EMAILS: ${ADMIN_EMAILS}
BLOGFACTORY_ALLOW_SIGNUP: ${BLOGFACTORY_ALLOW_SIGNUP}
CRON_SECRET: ${CRON_SECRET}
WEB_APP_URL: ${BLOGFACTORY_URL}
MCP_APP_URL: http://web/mcp-review.html
MCP_ALLOWED_ORIGINS: ${BLOGFACTORY_URL}
S3_ENDPOINT: http://minio:9000
S3_ACCESS_KEY_ID: ${MINIO_ROOT_USER}
S3_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD}
S3_BUCKET: blogfactory
S3_REGION: us-east-1
healthcheck:
test: ["CMD", "bun", "-e", "fetch('http://localhost:3000/api/ready').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))"]
interval: 10s
timeout: 5s
retries: 20
web:
image: ghcr.io/blogfactoryhq/blogfactory-web:v0.1.0
restart: unless-stopped
depends_on:
api:
condition: service_healthy
expose:
- 80
environment:
API_UPSTREAM: http://api:3000
healthcheck:
test: ["CMD-SHELL", "nginx -t >/dev/null 2>&1 && wget -q -O /dev/null http://api:3000/api/ready"]
interval: 10s
timeout: 5s
retries: 20
scheduler:
image: curlimages/curl:8.15.0
restart: unless-stopped
depends_on:
api:
condition: service_healthy
environment:
CRON_SECRET: ${CRON_SECRET}
CRON_INTERVAL_SECONDS: 21600
entrypoint: ["/bin/sh", "-c"]
command:
- >-
while true; do curl --fail --silent --show-error --output /dev/null -H "Authorization: Bearer $${CRON_SECRET}" http://api:3000/api/cron/drain && echo "Scheduler drain completed"; sleep "$${CRON_INTERVAL_SECONDS}"; done
volumes:
postgres-data:
minio-data:
+13
View File
@@ -0,0 +1,13 @@
{
"id": "blogfactory",
"name": "BlogFactory",
"version": "v0.1.0",
"description": "Self-hosted control plane for AI-assisted content operations and human-approved CMS draft delivery.",
"logo": "blogfactory.svg",
"links": {
"github": "https://github.com/BlogFactoryHQ/blogfactory",
"website": "https://blogfactory.io/",
"docs": "https://github.com/BlogFactoryHQ/blogfactory/blob/main/docs/self-hosting.md"
},
"tags": ["ai", "automation", "content-management"]
}
+28
View File
@@ -0,0 +1,28 @@
[variables]
main_domain = "${domain}"
postgres_password = "${password:48}"
minio_root_user = "blogfactory"
minio_root_password = "${password:48}"
jwt_secret = "${base64:48}"
encryption_secret = "${base64:48}"
cron_secret = "${base64:48}"
admin_email = "${email}"
[config]
env = [
"POSTGRES_PASSWORD=${postgres_password}",
"MINIO_ROOT_USER=${minio_root_user}",
"MINIO_ROOT_PASSWORD=${minio_root_password}",
"JWT_SECRET=${jwt_secret}",
"API_KEY_ENCRYPTION_SECRET=${encryption_secret}",
"CRON_SECRET=${cron_secret}",
"ADMIN_EMAILS=${admin_email}",
"BLOGFACTORY_ALLOW_SIGNUP=true",
"BLOGFACTORY_URL=https://${main_domain}",
]
mounts = []
[[config.domains]]
serviceName = "web"
port = 80
host = "${main_domain}"
+1 -1
View File
@@ -45,4 +45,4 @@ services:
timeout: 10s
retries: 10
volumes:
pds-data:
pds-data:
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 72 KiB

+84
View File
@@ -0,0 +1,84 @@
version: "3.8"
services:
bonfire:
image: bonfirenetworks/bonfire:1.0.5-social-amd64
restart: unless-stopped
depends_on:
db:
condition: service_healthy
search:
condition: service_started
environment:
# Instance
- HOSTNAME=${BONFIRE_HOSTNAME}
- PUBLIC_PORT=${PUBLIC_PORT:-80}
- SERVER_PORT=4000
- APP_NAME=${APP_NAME:-Bonfire}
- LANG=en_US.UTF-8
# Secrets
- SECRET_KEY_BASE=${SECRET_KEY_BASE}
- SIGNING_SALT=${SIGNING_SALT}
- ENCRYPTION_SALT=${ENCRYPTION_SALT}
- RELEASE_COOKIE=${RELEASE_COOKIE}
# Database (migrations run automatically on startup)
- POSTGRES_HOST=db
- POSTGRES_USER=postgres
- POSTGRES_DB=bonfire_db
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
# Must stay false for the initial migrations; can be set to true
# after the first deployment to speed up future upgrades
- DB_MIGRATE_INDEXES_CONCURRENTLY=${DB_MIGRATE_INDEXES_CONCURRENTLY:-false}
# Search (Meilisearch)
- SEARCH_ADAPTER=meili
- SEARCH_MEILI_INSTANCE=http://search:7700
- MEILI_MASTER_KEY=${MEILI_MASTER_KEY}
# Email (the first account to sign up becomes admin and needs no
# confirmation email; configure a mail backend for further signups)
- MAIL_BACKEND=${MAIL_BACKEND:-none}
- MAIL_SERVER=${MAIL_SERVER:-}
- MAIL_PORT=${MAIL_PORT:-}
- MAIL_USER=${MAIL_USER:-}
- MAIL_PASSWORD=${MAIL_PASSWORD:-}
- MAIL_DOMAIN=${MAIL_DOMAIN:-}
- MAIL_FROM=${MAIL_FROM:-}
- MAIL_KEY=${MAIL_KEY:-}
# Max upload size in megabytes
- UPLOAD_LIMIT=${UPLOAD_LIMIT:-20}
volumes:
- bonfire-uploads:/opt/app/data/uploads
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:4000"]
interval: 30s
timeout: 10s
retries: 15
start_period: 120s
db:
image: postgis/postgis:17-3.5-alpine
restart: unless-stopped
environment:
- POSTGRES_USER=postgres
- POSTGRES_DB=bonfire_db
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d bonfire_db"]
interval: 10s
timeout: 5s
retries: 10
search:
image: getmeili/meilisearch:v1.11
restart: unless-stopped
environment:
- MEILI_MASTER_KEY=${MEILI_MASTER_KEY}
- MEILI_ENV=production
- MEILI_NO_ANALYTICS=true
volumes:
- search-data:/meili_data
volumes:
bonfire-uploads:
db-data:
search-data:
+17
View File
@@ -0,0 +1,17 @@
{
"id": "bonfire",
"name": "Bonfire",
"version": "1.0.5",
"description": "Federated social networking toolkit for communities: customizable digital spaces with ActivityPub federation, flexible boundaries and moderation tools.",
"logo": "bonfire.svg",
"links": {
"github": "https://github.com/bonfire-networks/bonfire-app",
"website": "https://bonfirenetworks.org",
"docs": "https://docs.bonfirenetworks.org"
},
"tags": [
"social",
"fediverse",
"activitypub"
]
}
+55
View File
@@ -0,0 +1,55 @@
[variables]
main_domain = "${domain}"
secret_key_base = "${password:64}"
signing_salt = "${password:32}"
encryption_salt = "${password:32}"
release_cookie = "${password:32}"
postgres_password = "${password:32}"
meili_master_key = "${password:32}"
[config]
[[config.domains]]
serviceName = "bonfire"
port = 4000
host = "${main_domain}"
[config.env]
# Domain of your Bonfire instance (must match the domain above)
"BONFIRE_HOSTNAME" = "${main_domain}"
# Port used to build public URLs: keep 80 while the domain is plain HTTP,
# and change to 443 once you enable HTTPS on the domain
# (HTTPS is required for federation with other fediverse instances)
"PUBLIC_PORT" = "80"
# Display name of your instance
"APP_NAME" = "Bonfire"
# Max upload size in megabytes
"UPLOAD_LIMIT" = "20"
# Secrets (auto-generated)
"SECRET_KEY_BASE" = "${secret_key_base}"
"SIGNING_SALT" = "${signing_salt}"
"ENCRYPTION_SALT" = "${encryption_salt}"
"RELEASE_COOKIE" = "${release_cookie}"
"POSTGRES_PASSWORD" = "${postgres_password}"
"MEILI_MASTER_KEY" = "${meili_master_key}"
# Optional: set to true only AFTER the first deployment finished its initial
# database migrations (speeds up index creation during future upgrades)
# "DB_MIGRATE_INDEXES_CONCURRENTLY" = "true"
# --- Email ---
# The first account to sign up becomes the instance admin and does not need
# a confirmation email. Further signups are invite-only by default (the admin
# can create invite links or open up signups in the instance settings), and
# require a working mail backend to confirm their email address.
# Supported backends include smtp, mailgun, brevo, postmark, ses and more:
# https://docs.bonfirenetworks.org/deploy.html
# "MAIL_BACKEND" = "smtp"
# "MAIL_SERVER" = "smtp.example.com"
# "MAIL_PORT" = "587"
# "MAIL_USER" = "postmaster@example.com"
# "MAIL_PASSWORD" = ""
# "MAIL_DOMAIN" = "example.com"
# "MAIL_FROM" = "bonfire@example.com"
# For API-based backends (e.g. mailgun) set the API key instead:
# "MAIL_KEY" = ""
+1 -1
View File
@@ -8,7 +8,7 @@ services:
depends_on:
mariadb:
condition: service_healthy
ports:
expose:
- 6060
volumes:
- booklore-data:/app/data
+1 -2
View File
@@ -4,6 +4,7 @@ app_password = "${password:32}"
db_root_password = "${password:32}"
[config]
mounts = []
[[config.domains]]
serviceName = "booklore"
port = 6060
@@ -20,5 +21,3 @@ MYSQL_USER = "booklore"
MYSQL_PASSWORD = "${app_password}"
# API Key
MYSQL_ROOT_PASSWORD = "${db_root_password}"
[[config.mounts]]
+2 -2
View File
@@ -3,7 +3,7 @@ services:
bookstack:
image: lscr.io/linuxserver/bookstack:24.12.1
restart: unless-stopped
ports:
expose:
- 80
environment:
- PUID=1000
@@ -32,4 +32,4 @@ services:
volumes:
config: {}
db_data: {}
db_data: {}
+1 -15
View File
@@ -2,24 +2,10 @@
main_domain = "${domain}"
[config]
mounts = []
[[config.domains]]
serviceName = "borgitory"
port = 8000
host = "${main_domain}"
[config.env]
[[config.mounts]]
name = "borgitory-data"
mountPath = "/app/data"
description = "Database and encryption key storage"
[[config.mounts]]
name = "borgitory-sources"
mountPath = "/mnt/sources"
description = "Sources to back up (read-only)"
[[config.mounts]]
name = "borgitory-repos"
mountPath = "/mnt/repos"
description = "Borg repositories (read-only)"
+2 -2
View File
@@ -3,7 +3,7 @@ services:
botpress:
image: botpress/server:12.31.9
restart: unless-stopped
ports:
expose:
- 81
environment:
- BP_HOST=0.0.0.0
@@ -31,4 +31,4 @@ services:
volumes:
data: {}
db_data: {}
db_data: {}
+1 -1
View File
@@ -22,7 +22,7 @@ services:
environment:
VITE_API_URL: http://budget-board-server
PORT: 6253
ports:
expose:
- 6253
depends_on:
- budget-board-server
+1 -7
View File
@@ -3,18 +3,12 @@ main_domain = "${domain}"
postgres_password = "${password:32}"
[config]
mounts = []
[[config.domains]]
serviceName = "budget-board-client"
port = 6253
host = "${main_domain}"
path = "/"
[config.env]
POSTGRES_PASSWORD = "${postgres_password}"
[[config.mounts]]
source = "../files/db-data"
target = "/var/lib/postgresql/data"
type = "bind"
+2 -2
View File
@@ -3,7 +3,7 @@ services:
bytebase:
image: bytebase/bytebase:3.3.0
restart: unless-stopped
ports:
expose:
- 8080
environment:
- PG_URL=postgres://postgres:${DB_PASSWORD}@bytebase-db:5432/bytebase
@@ -24,4 +24,4 @@ services:
volumes:
data: {}
db_data: {}
db_data: {}
+2 -2
View File
@@ -4,7 +4,7 @@ services:
bytestash:
image: ghcr.io/jordan-dalby/bytestash:1.5.6
restart: unless-stopped
ports:
expose:
- "5000"
environment:
- BASE_PATH=
@@ -24,4 +24,4 @@ services:
- snippets:/data/snippets
volumes:
snippets:
snippets:
+16 -1
View File
@@ -1,3 +1,8 @@
# If you are on a machine with ARM architecture, please add a "-arm" suffix to the calcom image on line 19.
# For example, `calcom/cal.com:v6.2.0` will become `calcom/cal.com:v6.2.0-arm`
# If serving the instance on https, change `NEXT_PUBLIC_WEBAPP_URL` (Line 28) and `NEXTAUTH_URL` (Line 30) to https
services:
postgres:
image: postgres:16-alpine
@@ -11,15 +16,25 @@ services:
- DATABASE_URL=postgres://postgres:password@postgres:5432/db
calcom:
image: calcom/cal.com:v2.7.6
image: calcom/cal.com:v6.2.0
depends_on:
- postgres
environment:
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
- CALENDSO_ENCRYPTION_KEY=${CALENDSO_ENCRYPTION_KEY}
- DATABASE_URL=postgres://postgres:password@postgres:5432/db
- DATABASE_DIRECT_URL=postgres://postgres:password@postgres:5432/db
- DATABASE_HOST=postgres:5432
- NEXT_PUBLIC_WEBAPP_URL=http://${CALCOM_HOST}
- ALLOWED_HOSTNAMES="${CALCOM_HOST}"
- NEXTAUTH_URL=http://${CALCOM_HOST}/api/auth
- NEXT_PUBLIC_DISABLE_SIGNUP=${DISABLE_SIGNUP}
- EMAIL_SERVER_HOST=${SMTP_SERVER}
- EMAIL_SERVER_PORT=${SMTP_PORT}
- EMAIL_SERVER_USER=${EMAIL_SERVER_USER}
- EMAIL_SERVER_PASSWORD=${SMTP_PASSWORD}
- EMAIL_FROM=${EMAIL_FROM}
volumes:
calcom-data:
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "calcom",
"name": "Calcom",
"version": "v2.7.6",
"version": "v6.2.0",
"description": "Calcom is a open source alternative to Calendly that allows to create scheduling and booking services.",
"links": {
"github": "https://github.com/calcom/cal.com",
+6
View File
@@ -8,6 +8,12 @@ env = [
"CALCOM_HOST=${main_domain}",
"NEXTAUTH_SECRET=${nextauth_secret}",
"CALENDSO_ENCRYPTION_KEY=${calcom_encryption_key}",
"DISABLE_SIGNUP=true",
"SMTP_SERVER=",
"SMTP_PORT=",
"SMTP_PASSWORD=",
"EMAIL_SERVER_USER=",
"EMAIL_FROM=",
]
mounts = []
+2 -2
View File
@@ -9,7 +9,7 @@ services:
- TZ=Etc/UTC
- PUID=1000
- PGID=1000
ports:
expose:
- 8080
volumes:
- books:/books
@@ -17,4 +17,4 @@ services:
volumes:
books:
data:
data:
+2 -2
View File
@@ -10,7 +10,7 @@
"docs": "https://manual.calibre-ebook.com/"
},
"tags": [
"Documents",
"E-Commerce"
"documents",
"e-commerce"
]
}
+2 -2
View File
@@ -7,10 +7,10 @@ services:
environment:
- CARBONE_EE_LICENSE=${CARBONE_KEY}
- CARBONE_EE_STUDIO=true
ports:
expose:
- 4000
volumes:
- template:/app/template
volumes:
template:
template:
+4 -4
View File
@@ -10,9 +10,9 @@
"docs": "https://carbone.io/documentation/design/overview/getting-started.html"
},
"tags": [
"Document Generation",
"Automation",
"Reporting",
"Productivity"
"document-generation",
"automation",
"reporting",
"productivity"
]
}
+1 -1
View File
@@ -30,4 +30,4 @@ services:
volumes:
casdoor-postgres-data:
casdoor-data:
casdoor-data:
+33
View File
@@ -0,0 +1,33 @@
version: "3.8"
services:
certmate:
image: fabriziosalmi/certmate:2.21.3
environment:
- FLASK_ENV=production
- SECRET_KEY=${SECRET_KEY} # 🔐 Flask session secret
- API_BEARER_TOKEN=${API_BEARER_TOKEN} # 🔐 API / web UI token
- BEHIND_PROXY=${BEHIND_PROXY}
- CLOUDFLARE_TOKEN=${CLOUDFLARE_TOKEN}
- LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
- LOG_LEVEL=${LOG_LEVEL}
expose:
- 8000
volumes:
- certmate_certificates:/app/certificates
- certmate_data:/app/data
- certmate_logs:/app/logs
- certmate_backups:/app/backups
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
volumes:
certmate_certificates:
certmate_data:
certmate_logs:
certmate_backups:
+13
View File
@@ -0,0 +1,13 @@
# CertMate
## Getting started
1. Deploy the template and open the app domain.
2. Log in with the **API bearer token**: it is auto-generated by the template and stored in the `API_BEARER_TOKEN` environment variable (Dokploy → your service → Environment). The same token authenticates REST API requests (`Authorization: Bearer <token>`).
3. In **Settings**, set your Let's Encrypt email and add credentials for your DNS provider (Cloudflare, Route53, etc.) to issue certificates through DNS-01 challenges.
## Notes
- `CLOUDFLARE_TOKEN` can optionally be set as an environment variable instead of configuring it in the UI.
- Certificates, application data and backups are persisted in the `certmate_certificates`, `certmate_data` and `certmate_backups` volumes.
- API documentation is available at `/docs/` (Swagger) and `/redoc/` on your domain.
Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

+18
View File
@@ -0,0 +1,18 @@
{
"id": "certmate",
"name": "CertMate",
"version": "2.21.3",
"description": "CertMate is an SSL certificate management system with a web UI and REST API. It automates issuing and renewing Let's Encrypt certificates via DNS-01 challenges across 20+ DNS providers, with unified backups and multi-account support.",
"logo": "logo.png",
"links": {
"github": "https://github.com/fabriziosalmi/certmate",
"website": "https://www.certmate.org/",
"docs": "https://www.certmate.org/docs/"
},
"tags": [
"ssl",
"certificates",
"security",
"self-hosted"
]
}
+20
View File
@@ -0,0 +1,20 @@
[variables]
main_domain = "${domain}"
SECRET_KEY = "${password:32}"
API_BEARER_TOKEN = "${password:32}"
[config]
mounts = []
[[config.domains]]
serviceName = "certmate"
port = 8000
host = "${main_domain}"
[config.env]
SECRET_KEY = "${SECRET_KEY}" # 🔐 Flask session secret
API_BEARER_TOKEN = "${API_BEARER_TOKEN}" # 🔐 API / web UI token
BEHIND_PROXY = "true"
CLOUDFLARE_TOKEN = ""
LETSENCRYPT_EMAIL = ""
LOG_LEVEL = "INFO"
@@ -4,10 +4,10 @@ services:
changedetection:
image: ghcr.io/dgtlmoon/changedetection.io:0.49
restart: unless-stopped
ports:
expose:
- 5000
volumes:
- datastore:/datastore
volumes:
datastore:
datastore:
+3 -3
View File
@@ -10,8 +10,8 @@
"docs": "https://github.com/dgtlmoon/changedetection.io/wiki"
},
"tags": [
"Monitoring",
"Data",
"Notifications"
"monitoring",
"data",
"notifications"
]
}
+1 -1
View File
@@ -2,7 +2,7 @@ version: "3.8"
services:
chatto:
image: ghcr.io/chattocorp/chatto:0.3.8
image: ghcr.io/chattocorp/chatto:0.4
restart: unless-stopped
expose:
- "4000"
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "chatto",
"name": "Chatto (single binary)",
"version": "0.3.8",
"version": "0.4.x",
"description": "A fully-featured real-time chat application for teams and communities. This template deploys the single Chatto binary with embedded NATS. Note: email/password registration requires SMTP to be configured after deployment; voice/video calls are not included in the single-binary setup.",
"logo": "logo.png",
"links": {
+1 -1
View File
@@ -76,4 +76,4 @@ services:
volumes:
chatwoot-storage:
chatwoot-postgres-data:
chatwoot-redis-data:
chatwoot-redis-data:

Some files were not shown because too many files have changed in this diff Show More