Compare commits

...
Author SHA1 Message Date
+28 b373a6b7c5 New Version (#1295)
* chore: remove compose version + add checks (#1268)

* fix: reject deprecated Docker Compose version field

* chore: remove deprecated version field in docker compose

* chore(orbit): drop the obsolete compose version key

orbit was merged after this PR was opened and still had version: '3.8' at
the end of the file, which the new validator check rejects.

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

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* Update Calcom Template to add all env vars (#1278)

* feat: add all env variables for calcom image and health checking for postgres + restart config for containers

* feat: add postgres var generators

* cachkey: bump version to 0.2.0 (#1277)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat: add PrivatePaste template (#1276)

* feat: add PrivatePaste template

Self-hosted clipboard sync with an encrypted, searchable history; apps for Windows, macOS, Linux and Android. Image ghcr.io/dynamicsninja/privatepaste:0.2.0 (linux/amd64, linux/arm64).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S7qnD4vNtkFtpTzPq1fw5R

* chore(privatepaste): use image 0.3.1

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

---------

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

* fix(phpmyadmin): migrate to the official phpMyAdmin Docker image (#1275)

* fix(phpmyadmin): migrate to the official phpMyAdmin Docker image

See: https://github.com/phpmyadmin/docker/issues/363
Signed-off-by: William Desportes <williamdes@wdes.fr>

* fix(phpmyadmin): update phpMyAdmin to 5.2.3

Pin the official image to the current release instead of a floating reference.

See: https://github.com/phpmyadmin/docker/issues/363
Signed-off-by: William Desportes <williamdes@wdes.fr>

* fix(phpmyadmin): match meta.json version to the 5.2.3 image

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

---------

Signed-off-by: William Desportes <williamdes@wdes.fr>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* Legejo: update to 1.33.0 (#1273)

Co-authored-by: Markus Rådberg <3110202+jularboolean@users.noreply.github.com>

* Add Uptime kotlin template (#1272)

* feat: add Uptime Kotlin Docker Compose setup

* fix: remove default timezone setting from Docker Compose

* fix: update Docker Compose configuration for uptime-kotlin service

* feat: add mcpspan template (#1270)

* feat: add mcpspan template

* chore(mcpspan): update to 0.13.0, with the dashboard's address for MCP clients signing in

* fix(junctio): update image to 0.2.6 (#1269)

* fix(junctio): update image to 0.2.5

* fix(junctio): update image to 0.2.6

* feat: add PostgreSQL with 80+ extensions (postgres-extensor) template (#1267)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(yuvomi): bump to 2.80.0 and generate DB_ENCRYPTION_KEY (#1266)

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Ulas Kalayci <ulas.kalayci@icloud.com>

* feat: add OpenTodo template (#1265)

* feat: add OpenTodo template

* OpenTodo: update to 0.12.0

* OpenTodo 0.13.0

* fix(ponos): update template to 0.2.0 and move to the hermez-agency image (#1263)

* Add Reelsaw template (#1262)

Signed-off-by: dillonstreator <dillonstreator@gmail.com>

* feat(blueprints): add maintenant template (#1261)

* fix(docuseal): correct PostgreSQL 18 volume mount (#1290)

* feat(blueprints): add Zeqqat template (#1288)

* feat(umami): bump to 3.4.1 (#1287)

* feat(umami): bump to 3.4.1

* feat(umami): bump to 3.4.1

* feat(privatepaste): bump to 0.5.0 (#1286)

* feat(privatepaste): bump to 0.5.0

* feat(privatepaste): bump to 0.5.0

* feat(privatepaste): bump to 0.5.0

* fix(libredb-studio): update the blueprint to 1.2.0 (#1283)

* chore(libredb-studio): bump image to 1.2.0

* fix(libredb-studio): set version to 1.2.0 and update the engine counts

meta.json still pinned 1.0.0 while docker-compose.yml pulls 1.2.0, which the
blueprint rules require to match. The description also carried the 0.18.2
driver and engine counts; 1.2.0 ships 42 drivers reaching 69 named engines.

* Update OpenTodo to 0.19.0 (#1281)

* feat(blueprints): add itsaplan template (#1282)

* Add Calnode template (#1280)

* feat: add calnode template

* feat: add commas to fix template

* feat: replace logo

* fix: add url prefix

* fix: Remove default value for litestream url when unconfigured

* fix(calnode): pin the exact 0.12.0 tag instead of the moving 0.12 tag

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

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat: add Customermates template (#1279)

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>

* feat: update openwa template to 0.25.0 (#1260)

* feat(openwa): bump template to 0.25.0

- Update OpenWA image to 0.25.0
- Add 75s stop grace period for the longer bounded teardown

* feat(openwa): enable the MCP server by default

- Add mcp_enabled and mcp_readonly template variables
- Pass MCP_ENABLED and MCP_READONLY to the container
- Keep the read-only tool tier as the safe default

* feat(openwa): enable Swagger UI by default

Add an enable_swagger variable, wired to ENABLE_SWAGGER, so /api/docs is
served despite the upstream production default.

* chore: update the dossier version and disable germany's BA (#1258)

* chore: update the dossier version and disable germany's BA

* fix(dossier): match meta.json version to the v1.9.0 image

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

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* Add Container Monitoring template (cAdvisor, Prometheus, Grafana) (#1257)

* Add container-monitoring template

* Default container detail dashboard to a single container

* Update SolidPing to 0.41.0 (#1256)

* feat: update appwrite template to 2.7.0 (#1259)

* feat(appwrite): bump template to 2.6.1

- Update appwrite/appwrite images to 2.6.1 and console to 1.2.97
- Add ExifTool service for image metadata stripping
- Add S3 path-style, VCS Entire, and maintenance queue variables
- Add maintenance scheduler interval and worker pool sizing
- Harden healthcheck with readiness marker and raise PostgreSQL shm
- Bump orchestrator to 2.2.4
- Remove duplicate _APP_CONSOLE_HOSTNAMES entry

* feat(appwrite): bump template to 2.6.2

* fix(appwrite): keep wildcard routers below console

Dokploy generates the console/API routers without a priority, so Traefik
falls back to rule length. A Sites/Functions HostRegexp rooted at the apex
also matches the console host and is longer, so it 404s the console.

The generated router names include a per-domain serial, so the template
cannot set their priority. Pin the template-owned wildcard routers to the
lowest priority instead, for both web and websecure.

* feat(appwrite): bump template to 2.7.0

- appwrite/appwrite 2.6.2 -> 2.7.0 across all services
- Console 1.2.108 -> 1.2.138 (and fix VITE_APPWRITE_VERSION default)
- browser 0.3.8 -> 0.3.10
- orchestrator 2.2.4 -> 4.0.0
- add server key rotation vars (V2, CURRENT, OLDEST)
- add realtime limits, DNS_EXTERNAL, ALLOWED_INTERNAL_ADDRESSES, DB_MAX_CONNECTIONS
- add alert config, APNs push and DOMAIN_FUNCTIONS_FALLBACK
- add the optional appwrite-hansi code review service
- raise worker max coroutines from 79 to 83

* fix(appwrite): ship the reviews worker disabled by default

The self-hosted console profile keeps features.reviews off, so the Reviews
screen only shows up behind the internal debug flag. Running appwrite-hansi
without it means a container that cannot be configured from the UI, so keep
the service and its _APP_REVIEWS_* variables commented out and document the
three steps to opt in.

* Update Uptime Kuma image to 'next' version (#1264)

* Update Uptime Kuma image to 'next' version

Uptime Kuma "latest" status is stuck at older version and the official resource recommends to use the "next" tag to get the latest version.

* fix(uptime-kuma): pin 2.5.8 instead of the moving next tag

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

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat: add Puppetflow with Postgres template (#1271)

* feat: add Puppetflow with Postgres template

* chore: bump Puppetflow templates to v2026.10.25

* feat: add second Puppetflow queue worker

* fix: send Puppetflow logs to stderr

* fix: harden Puppetflow Dokploy deployments

* fix: keep Dokploy default certificate handling

* fix: use Dokploy default HTTP domains

* chore: bump Puppetflow templates to v2026.10.26

* fix: configure Puppetflow locale and connection timeout

* chore: bump Puppetflow templates to v2026.10.27

* chore: bump Puppetflow templates to v2026.10.28

* chore: bump Puppetflow templates to v2026.10.29

* chore: bump Puppetflow templates to 2026.10.30

* chore: bump Puppetflow templates to 2026.10.32

* fix: align Pinokio production browser config

* chore: bump Puppetflow templates to v2026.11.1

* chore: bump Puppetflow templates to v2026.11.3

* chore: bump Puppetflow templates to v2026.11.4

* chore: bump Puppetflow templates to v2026.11.5

* chore: bump Puppetflow templates to v2026.11.6

* chore: bump Puppetflow templates to v2026.11.7

* fix(puppetflow): use service names instead of container_name

Templates must not set container_name; Compose service names already
resolve inside the project, so REDIS_HOST, PINOKIO_HOST, DB_HOST and the
internal URLs now point at them.

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

* fix(puppetflow): pinokio has no v2026.11.7 image, use v2026.11.1

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

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* Update NaviMusic to version 4.3.0 (#1285)

* fix(navi-music): update to version 4.3.0

* feat(navi-music): update entrypoint for improved startup behavior

* fix(navi-music): pin yt-cipher by digest (it only publishes a moving master tag)

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

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* chore: update Windshift to v0.9.3 (#1254)

* chore: update Windshift to v0.9.1

* chore: update Windshift to v0.9.3

Point the blueprint at the current release instead of v0.9.1.

* fix: updates actions runner to 2.338.2 and maintained Node24 (#1255)

* fix: updates actions runner and selects maintained node runtime

* fix: updates actions runner to 2.338.2

* Add ShopNex (#1284)

* Add ShopNex template

* fix(shopnex): pin v0.13.1 instead of latest

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

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* Bump Dagu to 2.25.4 (#1293)

The template pins 2.10.7, which is fifteen minor releases behind the
current Dagu release. The compose file, basic auth variables, volume,
and port are unchanged and still valid on 2.25.4.

* Add kortix deployment to the list of templates (#1294)

* feat: upgrade Seafile template to 14.0 (#1251)

* feat: upgrade Seafile template to 14.0

* fix(seafile): pin seafile-mc 14.0.9 and sdoc-server 2.0.11 instead of moving -latest tags

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

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(blueprints): add CakePHP 5 template (#1291)

* feat(blueprints): add CakePHP 5 template (themusicdev/php-apache runtime + MariaDB)

* ci: re-trigger build preview (first run hit a transient npm registry failure)

* fix(blueprints/cakephp): env via [config.env] names; pin image to released 1.0.0 (review feedback)

---------

Signed-off-by: William Desportes <williamdes@wdes.fr>
Signed-off-by: dillonstreator <dillonstreator@gmail.com>
Co-authored-by: Khiet Tam Nguyen <86177399+nktnet1@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Madhav Gupta <114633095+M4dhav@users.noreply.github.com>
Co-authored-by: Félicio de SOUZA <feliciodsa.dev@gmail.com>
Co-authored-by: Ivan Ficko <ivan.ficko@outlook.com>
Co-authored-by: William Desportes <williamdes@wdes.fr>
Co-authored-by: Jularbool <markus@radberg.org>
Co-authored-by: Markus Rådberg <3110202+jularboolean@users.noreply.github.com>
Co-authored-by: Théo Meunier <62860058+TheoMeunier@users.noreply.github.com>
Co-authored-by: Kacper <kcprzaton@gmail.com>
Co-authored-by: Web Artisan <ad4ptec@gmail.com>
Co-authored-by: Jose Garcia <47431411+ruxwez@users.noreply.github.com>
Co-authored-by: Ulaş Kalaycı <108589275+ulsklyc@users.noreply.github.com>
Co-authored-by: Ulas Kalayci <ulas.kalayci@icloud.com>
Co-authored-by: Raffaele Pizzari <raffaele.pizzari@gmail.com>
Co-authored-by: Cardona <18017015+SalvadorCardona@users.noreply.github.com>
Co-authored-by: dillonstreator <dillonstreator@gmail.com>
Co-authored-by: Benjamin Touchard <benjamin@kolapsis.com>
Co-authored-by: JRK <jessym.reziga@gmail.com>
Co-authored-by: Perminus Gaita <35493600+Perminus-Gaita@users.noreply.github.com>
Co-authored-by: Lezetho <126505858+lezetho@users.noreply.github.com>
Co-authored-by: Yusuf Gündoğdu <yusufgundogdu555@gmail.com>
Co-authored-by: Waleed <waleedi825@gmail.com>
Co-authored-by: Benjamin Wagner <72468969+benjiwagner@users.noreply.github.com>
Co-authored-by: Carlos Dorneles <duducp2013@gmail.com>
Co-authored-by: Alien <hi@aien.me>
Co-authored-by: Ghazi Ben Dahmane <ghazi.ben.dahmane@gmail.com>
Co-authored-by: Florent Clairambault <florent.clairambault@gmail.com>
Co-authored-by: Thet Hmuu <thethmuueinsoe@gmail.com>
Co-authored-by: Andre Carbajal Vargas <carbajalvargasandre@gmail.com>
Co-authored-by: Stefan Ernst <ernst.stefan@icloud.com>
Co-authored-by: Noah <70114451+zFl4wless@users.noreply.github.com>
Co-authored-by: ArseniyDev <41956571+ArseniyX@users.noreply.github.com>
Co-authored-by: Yota Hamada <yohamta@gmail.com>
Co-authored-by: Kortix SEO <347261315+Kortix-seo@users.noreply.github.com>
Co-authored-by: Angel S. Moreno <angelxmoreno@gmail.com>
2026-11-05 10:20:57 +01:00
Mauricio SiuandGitHub cfce6b69d1 Merge pull request #1253 from Dokploy/canary
New version
2026-10-20 23:26:53 -06:00
hanshs474andGitHub e44418a2fc feat: add Seedance 2.5 Video Generator (emaki) template (#1229)
* add emaki-video-starter docker-compose.yml

* add emaki-video-starter template.toml

* add emaki-video-starter meta.json

* add emaki-video-starter emaki-video-starter.png
2026-10-20 19:58:37 -06:00
9a61776e91 fix(libredb-studio): update image to 1.0.0 (#1230)
* libredb-studio: bump to 1.0.0

* fix(libredb-studio): match meta.json version to the 1.0.0 image

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

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:58:33 -06:00
f9dd6e28ba feat: add Falco template (#1236)
* feat: add Falco template

* fix: verify Falco template in Dokploy

* fix: make Telegram optional in Falco template

* fix(falco): default MONITORED_HOST so the template deploys out of the box

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

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:58:31 -06:00
089933f619 feat: add Legejo template (#1233)
* feat: add Legejo template

* feat(legejo): pass the whole environment and list the optional variables

---------

Co-authored-by: Markus Rådberg <3110202+jularboolean@users.noreply.github.com>
2026-10-20 19:55:31 -06:00
Benjamin NussbaumandGitHub 98799bc962 feat(blueprint): update trmnl-larapaper template (#1235) 2026-10-20 19:53:53 -06:00
NoahandGitHub d89d479bb5 feat: adds GitHub Actions runner template (#1234) 2026-10-20 19:53:05 -06:00
Brahim RizqandGitHub 0de3c52420 feat: add Shoutrrr social media scheduler template (#1238)
* feat: add Shoutrrr social media scheduler template

* docs: record Shoutrrr deployment verification

* docs: clarify Shoutrrr health checks and polling units
2026-10-20 19:50:06 -06:00
38caad0c5d feat: add Dossier template (#1240)
* feat: add Dossier template

* docs: note Dossier dashboard timezone limitation

* fix(dossier): derive the password hash at startup so the template deploys

DOSSIER_PASSWORD must be an argon2id hash and the template shipped it empty
behind a :? guard, so the deploy always failed. The template now generates
DOSSIER_ADMIN_PASSWORD and the container hashes it with the bundled
hash-password tool before starting; a user-provided DOSSIER_PASSWORD hash
still takes precedence.

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

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:47:55 -06:00
Brahim RizqandGitHub ac9a28da53 feat: add TryPost social media scheduler template (#1239)
* feat: add TryPost social media scheduler template

* docs: record TryPost deployment and integration tests
2026-10-20 19:42:51 -06:00
Brahim RizqandGitHub 4b8900972c feat: add WUD monitoring template (#1242)
* feat: add WUD monitoring template

* feat(wud): exclude Dokploy infrastructure by default
2026-10-20 19:31:33 -06:00
58c610dbbe feat: add 3Dokploy template (#1243)
3Dokploy is a live, read-only, isometric 3D view of the Dokploy it runs
on: projects as buildings, services as racks, deploys on carts.

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

Co-authored-by: suleyman <24796754+suleyman@users.noreply.github.com>
2026-10-20 19:31:28 -06:00
276fe60979 fix(convex): GHCR image path and bump version (#1245)
* fix(convex): update GHCR image path from get-convex to convex & bump convex version

* fix(convex): set meta version to the pinned image commit

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

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:29:41 -06:00
Victor LunaandGitHub 1153a9094d Add kuukura template (self-hosted secrets vault) (#1250)
Signed-off-by: Victor Luna <victor.luna.mullisaca@gmail.com>
2026-10-20 19:29:37 -06:00
Angel S. MorenoandGitHub 9663d868a6 feat: add Cypht template (#1244)
Add Cypht 2.13.0 webmail aggregator with MariaDB for accounts and settings and Redis for sessions and cache.
2026-10-20 19:29:08 -06:00
8ce3d7f453 feat: add Harbor 2.15.4 template with Trivy (#1249)
* feat: add standalone Harbor initialization source

* feat: add Harbor Dokploy blueprint and validation

* docs: record GitHub publication and remote build validation

* chore: scope Harbor contribution for upstream review

* chore(harbor): keep the PR inside blueprints/

Drop the repo-level validate-harbor workflow and the .gitignore entry; the
blueprint's own tools/ and tests/ still document how it was validated.

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

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:29:05 -06:00
Khiet Tam NguyenandGitHub 2dbd7aa550 feat(blueprint): add template for eclipse mosquitto MQTT broker (#1247)
* feat(blueprint): add template for eclipse mosquitto MQTT broker

* fix: safely regenerate Mosquitto password file on startup
2026-10-20 19:29:00 -06:00
Khiet Tam NguyenandGitHub a69580f988 feat: add HiveMQ Community Edition broker blueprint (#1248)
* feat: add HiveMQ Community Edition broker blueprint

* refactor: mount HiveMQ CE initialization script

* fix: eliminate HiveMQ CE configuration warnings
2026-10-20 19:22:09 -06:00
eaa6b986a7 fix(wise-mcp): pin image to 1.1.1 instead of latest (#1227)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:26:12 -06:00
Narciso E. Núñez AriasandGitHub 769f9661bc fix(deps): bump source-map-js to 1.2.2 (Dependabot alert #67) (#1228) 2026-10-15 11:25:32 -06:00
9453dcad98 UptimeKit Compose Fixes (#1209)
* fix: remove status-page, no longer in use

* chore: remove unused domain (status-page removed)

* fix(uptimekit): pin dash 5.2.1 and clickhouse 26.8-alpine instead of latest

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

* fix(uptimekit): select the bundled ClickHouse as time-series backend

UptimeKit 5.x defaults TIMESERIES_BACKEND to timescale, which needs the
TimescaleDB extension that postgres:18-alpine doesn't ship, so dash
crash-looped. The template already bundles ClickHouse.

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

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 10:32:52 -06:00
8aaa93c6fb fix(senddock): report the floating image tag in template metadata (#1213)
* fix(senddock): report the floating image tag in template metadata

The compose file tracks ghcr.io/arkhe-systems/senddock:latest, but meta.json still
named 0.8.0 as the version. Nothing derives that field from the image, so the gallery
badge and the softwareVersion in the page metadata froze at 0.8.0 while a fresh
install already pulled 0.8.3, which reads as a template shipping a release with
defects that were fixed since.

Declaring latest matches what the other blueprints do when the image is not pinned to
a fixed tag, and it cannot drift again on the next release.

* fix(senddock): pin image to 0.8.3 and report that version

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

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 10:14:26 -06:00
Alexandru PopaandGitHub 97622faedf feat: add Wise MCP template (#1220)
* feat: add Wise MCP template

* chore(wise-mcp): bump to 1.1.0

* chore(wise-mcp): use the latest image tag
2026-10-15 10:12:44 -06:00
d7b7097fdc libredb-studio: bump version to 0.18.2 (#1210)
0.18.1 fixes GHSA-jwvh-6phv-j9jh, whose affected range this blueprint was
squarely inside: it sets STORAGE_PROVIDER=sqlite, and the advisory covers
every release from 0.8.0 through 0.18.0 on a server store.

The blueprint also seeds two accounts, admin and user. Where those two go
to different people who share a browser profile, that is the shape the
defect needs: the second to sign in received the first one's browser copy
of the workspace, with its saved connection passwords and its query
history. Both passwords come from this template's own generated secrets,
so by default the two logins belong to one deployer and nothing crosses a
privacy boundary; it is handing USER_PASSWORD to someone else that opens
it.

0.18.2 then adds a run of fixes across the PostgreSQL family, the
wire-compatible engines, MySQL, MongoDB, Redis and Oracle.

meta.json also said twenty-six drivers. Databend became a connection type
of its own in 0.18.1, where it had been reached as a relative of the MySQL
type, so the count is twenty-seven. The fifty-four named engines are
unchanged, because Databend only moved from one side of that sum to the
other.

One line is added beside the bump, because testing the upgrade turned up a
lockout the blueprint could not recover from. Since 0.18.0 ADMIN_PASSWORD
seeds the account table only while it is empty, so an operator who edits
it in Dokploy's Environment panel gets 401 on the new password while the
old one, which the panel no longer shows, still works. The app logs the
way out, "set ADMIN_PASSWORD_RESET=true and restart", but the compose
environment list is an allowlist: typing that variable into the same panel
never reached the container, so the advice could not be followed without
editing the blueprint itself. ADMIN_PASSWORD_RESET is now passed through
with an empty default. Measured on 0.18.2 with this file: empty leaves the
container with the variable defined and blank, both accounts sign in
normally and neither reset line appears in the log; with it set to true the
new password returns 200 and the old one 401; with the flag removed again
the new password keeps working. There is no USER equivalent in the
application, which the comment says, so that account is changed from
Studio's own Accounts screen.

Co-authored-by: yusuf-gundogdu <devgundogdu86@gmail.com>
2026-10-15 10:07:28 -06:00
8f816caa2f chore: remove duplicate appwrite-2 template (#1217)
* chore: remove duplicate appwrite-2 template (appwrite already provides this)

* chore: remove duplicate appwrite-2 template

The appwrite template is on 2.x (2.5.0 after #1215), so appwrite-2 is a
duplicate. The original removal was undone by a later merge of main.

Co-Authored-By: Claude Opus 5.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: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 10:05:06 -06:00
061c975a1c feat: update appwrite template to 2.5.0 with MariaDB, node-24/26, console domain (#1215)
* feat: update appwrite template to 2.4.0 with MariaDB, node-24/26, console domain

* feat: enable DocumentsDB and VectorsDB by default in appwrite 2.4.0 template

* feat: update appwrite template to 2.4.0 with MariaDB, node-24/26, console domain

* fix(appwrite): repair 2.4.0 template structure and console setup

- Restore [config] table so config.env/config.isolated parse correctly
  (the env block had been swallowed into config.mounts[0], leaving the
  deployment with no environment variables)
- Add missing mongo-entrypoint.sh mount so the mongodb service can start
- Remove the mariadb [[config.domains]] entry: it exposed the DB on
  main_domain and duplicated the appwrite-console route
- Route the dedicated console domain via config.domains and drop the
  broken HostRegexp Traefik labels; set _APP_CONSOLE_URL/HOSTNAMES
- Bump appwrite-console image to 1.2.55-self-hosted (2.4.0 console)
- Restore the pinned appwrite-builds volume name
- Drop the removed Appwrite Assistant env/service

* feat(appwrite): apply remaining 2.4.0 hardening (clickhouse logs, browser)

- ClickHouse: add the two 2.4.0 config mounts (clickhouse-config.xml for
  system-log retention, clickhouse-init.sh to backfill TTLs on existing
  tables) plus CLICKHOUSE_ALWAYS_RUN_INITDB_SCRIPTS=1; the files are
  generated via [[config.mounts]] and bind-mounted from ../files/
- Browser: bump appwrite/browser 0.3.4 -> 0.3.6, set ALLOWED_HOSTS=appwrite
  and public DNS resolvers to block SSRF to internal services
- Bump appwrite/geo 0.3.1 -> 0.3.2 (matches 2.4.0)

* feat(appwrite): bump template to 2.5.0

Update the Appwrite blueprint to the 2.5.0 release (published
2026-10-13), which only moves images with no new environment
variables:

- appwrite/appwrite 2.4.0 -> 2.5.0 across all services
- appwrite/new console 1.2.55-self-hosted -> 1.2.74-self-hosted
- openruntimes/executor 0.29.0 -> 1.1.2

Brings project passkeys, interval-based function schedules, and
runtime containers that survive executor restarts.

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
2026-10-15 10:04:06 -06:00
Carlos DornelesandGitHub 4d4116312f feat: add OpenWA template (#1218)
* feat: add OpenWA template

* fix(openwa): load dashboard over plain HTTP via CSP_UPGRADE_INSECURE_REQUESTS
2026-10-15 09:55:15 -06:00
CardonaandGitHub e158e5d134 feat: add Ponos template (#1223) 2026-10-15 09:48:37 -06:00
273a36391d Update Umami to v3.4.0 and generate the database password (#1224)
* chore(umami): update to v3.4.0

* fix(umami): generate the database password instead of hardcoding "umami"

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 09:47:12 -06:00
Yash KumarandGitHub 084d1cb15f feat: template SEO titles and descriptions (#1212)
* feat: template SEO titles and descriptions

* feat: add configText for 55 templates

* feat: add newConfig flag to 55 templates
2026-10-15 09:44:11 -06:00
JOYBOY dyandGitHub 802f453b16 feat: add Cachkey template (#1225)
* feat: add Cachkey template

* fix(cachkey): name the public service after the template, env as array

* fix(cachkey): unique internal API service name, APP_URL note
2026-10-15 09:43:55 -06:00
Mauricio SiuandGitHub a0e70f95e7 Merge pull request #1221 from Dokploy/feat/wazuh-template
feat: add Wazuh template
2026-10-12 09:12:39 -06:00
Mauricio SiuandClaude Opus 5.5 7687957871 feat: add Wazuh template
Single-node Wazuh 4.14.8 (manager, indexer, dashboard) adapted from the
official wazuh-docker single-node setup:
- internal TLS PKI generated on first deploy by wazuh-certs-generator into a
  named volume (no host files)
- indexer internal users hashed from generated passwords before the security
  index is initialized; no default credentials
- dashboard served over HTTP behind Traefik on the template domain
- agent ports 1514/1515 published on the host (raw TCP, can't go through
  Traefik)

Closes #440

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 17:45:59 -06:00
Mauricio SiuandGitHub 62199f7d1e Merge pull request #1205 from Dokploy/canary
New Version
2026-10-07 21:12:57 -06:00
Mauricio SiuandGitHub 8986ec18a5 Merge pull request #1207 from Dokploy/feat/orbit-template
feat: add Orbit by Noveum (with storage fix)
2026-10-07 21:12:31 -06:00
Mauricio SiuandGitHub 4363ee8630 Merge pull request #1198 from duducp/feat/opendots-template
feat: add OpenDots template
2026-10-07 21:12:08 -06:00
Mauricio SiuandGitHub 796a9eb73b Merge pull request #1189 from ohemilyy/add-reloop-template
feat: add reloop template
2026-10-07 21:11:56 -06:00
Mauricio SiuandGitHub f8516ed065 Merge pull request #1206 from Dokploy/fix/toml4-and-dependabot-canary
fix: resolve dependabot alerts and make templates parse under toml 4 (canary)
2026-10-07 21:11:45 -06:00
Mauricio SiuandGitHub c28bfff733 Merge pull request #1197 from naveenrao2k/fix/kaneo-single-image
fix(kaneo): use single bundled image and require AUTH_SECRET
2026-10-07 21:11:20 -06:00
Mauricio SiuandGitHub ca2759228a Merge pull request #1190 from fdciabdul/patch-1
Use waxum latest tag instead of specific version
2026-10-07 21:11:10 -06:00
Mauricio SiuandGitHub 728bd6b869 Merge pull request #1186 from jr-k/feat/puppetflow-template
feat: add Puppetflow template
2026-10-07 21:10:46 -06:00
Mauricio SiuandGitHub 175fe77c43 Merge pull request #1187 from naimhasim/docktail
feat: add DockTail template
2026-10-07 21:10:25 -06:00
Mauricio SiuandGitHub 7d3ac4fa6d Merge pull request #1142 from nktnet1/drop-docker-compose-version-obsolete
fix: remove obsolete docker-compose version property
2026-10-07 21:10:02 -06:00
Mauricio SiuandGitHub 09b02a961e Merge pull request #1125 from nktnet1/airbyte
feat(blueprint): airbyte template v2 (no hardcoded networks aliases/IPs)
2026-10-07 21:09:51 -06:00
Mauricio SiuandGitHub 5f72171882 Merge pull request #1122 from gpiechnik2/add-heyo-docs-template
Add heyo docs template
2026-10-07 21:09:41 -06:00
Mauricio SiuandGitHub 4dcdd1f9b4 Merge pull request #1114 from GhaziBenDahmane/feat/azerothcore-template
feat: add AzerothCore and AzerothCore Portal templates
2026-10-07 21:09:31 -06:00
Mauricio SiuandGitHub ed2b6c5f6e Merge pull request #1086 from sapientorius/canary
Add Nebulynk Template
2026-10-07 21:09:21 -06:00
Mauricio SiuandClaude Opus 5.5 df3f70f568 fix(opendots): pin build context to an upstream commit
Build from CopilotKit/OpenDots commit 625452e (package.json 0.1.0, upstream has
no tags yet) instead of the moving main branch, and set meta.json version to
0.1.0-625452e instead of "latest".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 20:54:46 -06:00
Mauricio SiuandClaude Opus 5.5 03cede076e fix(docktail): bundle a tailscaled sidecar instead of the host socket
The template mounted the host's /var/run/tailscale, which does not exist on a
standard Dokploy server, so DockTail could never reach tailscaled. Use the
upstream sidecar setup: a pinned tailscale/tailscale container (userspace
networking, state and socket in named volumes) authenticated with
TAILSCALE_AUTH_KEY, sharing its socket with DockTail.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 20:49:45 -06:00
Mauricio SiuandClaude Opus 5.5 d8087ee88a Merge canary and drop the obsolete version key from new templates
Resolves the conflicts with canary and removes the top-level version key from
the templates added since this PR was opened.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 20:44:18 -06:00
3b9cbec16e fix: resolve dependabot alerts and make templates parse under toml 4 (canary)
Port of #1191 (which targets main) onto canary:
- app/ and build-scripts/ dependency bumps from #1191
- signoz, timescaledb, valkey template.toml fixes from #1191
- supabase: kept canary's version (already parses under toml 4 after #1131/#1149)
- appwrite-2 (merged after #1191 was opened): escape the backslash in the
  mongo entrypoint (\! -> \\!), which toml 4 rejects as an invalid escape

All 559 blueprints/*/template.toml parse with toml@4.2.0.

Co-authored-by: narcisonunez <narcisonunez@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 20:42:42 -06:00
Mauricio SiuandClaude Opus 5.5 533f2ae947 fix(heyo-docs): pin scaffolder and runtime package versions
create-heyo-docs@0.2.3 writes "@heyo-sh/heyo-docs": "latest", which now resolves
to 3.4.1 and no longer exports heyoDocs, so astro build fails. Scaffold with
create-heyo-docs@3.1.0, pin @heyo-sh/heyo-docs@3.4.1, and set meta version.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 20:42:40 -06:00
Mauricio SiuandClaude Opus 5.5 250d10ff14 fix(airbyte): replace MinIO with SeaweedFS S3 storage
minio/minio images are no longer pullable. Run chrislusf/seaweedfs:4.48
as the 'minio' service with S3 on port 9000 and the same credentials, so
MINIO_ENDPOINT and the k3s ExternalName stay unchanged. Buckets are
created with weed shell in minio-init.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 20:42:12 -06:00
Mauricio SiuandClaude Opus 5.5 96731d0408 chore(azerothcore): drop the portal template, keep the base server
As offered by the author: the portal depends on a new, unpinned image of
the author's own; the base template uses only official images.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 20:37:25 -06:00
Mauricio SiuandClaude Opus 5.5 1392c62489 fix(nebulynk): build from the v0.7.1 tag instead of the moving stable branch
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 20:37:24 -06:00
Mauricio SiuandClaude Opus 5.5 055787adcc fix(reloop): pin images by digest instead of latest
reloopsh/* images only publish a moving 'latest' tag (fe-dashboard also has
commit tags, the rest don't), so every image is pinned to the digest of the
2026-10-06 build. meta.json version reflects that build date.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 20:36:58 -06:00
Mauricio SiuandClaude Opus 5.5 7b2830c8ff fix(kaneo): pin image to 2.35.0 instead of latest
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 20:34:58 -06:00
Mauricio SiuandClaude Opus 5.5 aa5ee57ff2 fix(waxum): pin image to 0.13.5 instead of latest
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 20:34:58 -06:00
Mauricio SiuandClaude Opus 5.5 96d258fd27 fix(puppetflow): match meta.json version to the v2026.10.20 images
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 20:34:57 -06:00
Mauricio SiuandGitHub 90b4fcd9c8 Merge pull request #1199 from Dokploy/dosu/doc-update-1198
docs: clarify image and version guidance for templates
2026-10-07 20:31:34 -06:00
Mauricio SiuandGitHub a31506f60a Merge pull request #1204 from Dokploy/fix/hydrodactyl-mariadb-tls
fix(hydrodactyl): MariaDB 11.4 with TLS, pin images, wait for db
2026-10-07 20:31:08 -06:00
Mauricio SiuandGitHub 55d12a54d7 Merge pull request #1203 from Dokploy/fix/feedbacks-bundled-s3
fix(feedbacks): bundle private S3 storage so the template deploys out of the box
2026-10-07 20:30:40 -06:00
Mauricio SiuandGitHub d572490c00 Merge pull request #1143 from nktnet1/elastic-search
feat(elasticsearch): update template to v9 with security
2026-10-07 20:30:23 -06:00
Mauricio SiuandGitHub ce32fae273 Merge pull request #1128 from moskoweb/9router
fix: harden and update 9router template
2026-10-07 20:30:15 -06:00
Mauricio SiuandGitHub 3adf3a0fcd Merge pull request #1138 from mrbobzar/canary
Added Pretix Templete
2026-10-07 20:30:06 -06:00
Mauricio SiuandGitHub 10b25f1a51 Merge pull request #1163 from duducp/update-authentik-2026-8-2
feat: update Authentik to 2026.8.2
2026-10-07 20:29:58 -06:00
Mauricio SiuandGitHub 92e0d238ff Merge pull request #1167 from duducp/feat/appwrite-2
feat: add Appwrite 2 template
2026-10-07 20:29:40 -06:00
Mauricio SiuandGitHub bf2947cacc Merge pull request #1173 from jr-k/patch-1
Fix Zitadel when behind a reverse proxy
2026-10-07 20:29:24 -06:00
Mauricio SiuandGitHub ff20013dd9 Merge pull request #1176 from drudge/sable
feat: Add sable template
2026-10-07 20:29:16 -06:00
Mauricio SiuandGitHub 354311df9f Merge pull request #1177 from Nargor/feat/add-mc-controller-template
feat: add MC Controller template
2026-10-07 20:28:53 -06:00
Mauricio SiuandGitHub 213a3142a9 Merge pull request #1179 from fincrawmcq/canary
feat: Fix Fluxer template
2026-10-07 20:28:39 -06:00
Mauricio SiuandClaude Opus 5.5 1d98aa17dd fix(hydrodactyl): MariaDB 11.4 with TLS, pin images, wait for db
The panel's mysql client requires TLS when loading the schema
("SSL is required, but the server does not support it") and MariaDB 10.11
doesn't offer it, so migrations failed and the panel returned 500. MariaDB
11.4 enables TLS by default. Also pin hydrodactyl to v6.4.1 and redis to
7-alpine, drop the MySQL-only auth flag and wait for a healthy database.

Verified on Dokploy: panel returns 200 «Hydrodactyl», database healthy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 20:25:05 -06:00
Mauricio SiuandClaude Opus 5.5 ad464c371b fix(feedbacks): bundle private S3 storage so the template deploys out of the box
The template shipped every S3_* variable empty while the compose requires
them, so it could never deploy. Feedbacks needs an HTTPS S3 endpoint in
production: the template now ships SeaweedFS (minio images are no longer
pullable) with a self-signed cert generated on first start and trusted via
NODE_EXTRA_CA_CERTS, plus a one-shot bucket job. External S3 can still be
used by overriding S3_*. The image digest is pinned in the compose file.

Verified on Dokploy: feedbacks returns 200, all services healthy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 20:24:23 -06:00
JRKandGitHub 6b382a33ad Update docker-compose.yml 2026-10-08 03:32:55 +02:00
Mauricio SiuandGitHub 4cc1cbbe77 Merge pull request #1194 from officialsuyogdixit/codex/add-feedbacks-template
Add Feedbacks template
2026-10-07 18:18:02 -06:00
Mauricio SiuandGitHub e38ef3abd5 Merge pull request #1171 from Furox-Art/add/versitygw
feat: add VersityGW template
2026-10-07 17:48:16 -06:00
Mauricio SiuandGitHub 4c4b8c6ac3 Merge pull request #1152 from bariscelik/inkvoice-0.3.0
chore(inkvoice): bump to 0.3.0 and cap memory at 512M
2026-10-07 17:42:57 -06:00
Mauricio SiuandGitHub fffa46deac Merge pull request #1182 from skender18/add-opencode
feat: add OpenCode template
2026-10-07 17:42:40 -06:00
Mauricio SiuandGitHub 1278af50b5 Merge pull request #1145 from guidoesser/add-prozesswerk-template
feat: add Prozesswerk template (text-to-BPMN, self-hosted)
2026-10-07 17:41:05 -06:00
Mauricio SiuandGitHub 816134d4d0 Merge pull request #1141 from yusuf-gundogdu/fix/libredb-studio-0.14.1
libredb-studio: bump version to 0.18.0, add a healthcheck and pass the generated secrets
2026-10-07 17:40:33 -06:00
Mauricio SiuandGitHub 34d9dca9ee Merge pull request #1149 from whollacsek/feat/supabase-sb-key-only-and-s3-backend
fix(supabase): make sb_-key-only mode work, and document the S3/R2 backend
2026-10-07 17:36:11 -06:00
Mauricio SiuandGitHub 5b41b6bbda Merge pull request #1170 from aindot/canary
New template: OpenProject 17
2026-10-07 17:34:14 -06:00
Mauricio SiuandGitHub a9061f61cf Merge pull request #1132 from ChiragAgg5k/appwrite-2.0.0
feat(appwrite): update template to 2.3.0
2026-10-07 17:32:58 -06:00
Mauricio SiuandClaude Opus 5.5 51910ed53a fix(elastic-search): drop memory_lock and give ES 1.5 GiB
With a 512m heap Elasticsearch 9 still uses ~1 GiB of anonymous memory
(direct buffers, metaspace, code cache, threads), so the 1 GiB
mem_limit got it SIGKILLed in a loop on the server (no shutdown log,
restart every ~1 min). bootstrap.memory_lock made it worse by pinning
pages. Remove memory_lock/memlock ulimits and raise ES_MEM_LIMIT to
1.5 GiB while keeping the heap at 512m.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 17:28:45 -06:00
Mauricio SiuandGitHub 7a594e8eb1 Merge pull request #1185 from fclairamb/add-solidping-template
Add SolidPing template
2026-10-07 17:26:53 -06:00
Mauricio SiuandGitHub 5e4eb93f6b Merge pull request #1155 from vitabaks/autobase-2-11
Update Autobase to version 2.11
2026-10-07 17:26:41 -06:00
Mauricio SiuandGitHub cae917a8fd feat: add OpenLivery multi-client WhatsApp agent template (#1140)
* feat: add OpenLivery template

* Use canonical self-hosting documentation link
2026-10-07 17:26:25 -06:00
Mauricio SiuandGitHub 3d7dbc0f70 Merge pull request #1136 from xob0t/feat/hyperdx-template
feat: add HyperDX template
2026-10-07 17:25:48 -06:00
Mauricio SiuandGitHub ab35b586e1 Merge pull request #1133 from jdjimenez2312/update-gitea-1.27.3
fix: update Gitea with PostgreSQL blueprint template whit 1.27.3 version
2026-10-07 17:25:39 -06:00
Mauricio SiuandGitHub dae4af28be Merge pull request #1148 from kacperwyczawski/canary
feat: update seafile to 13.0
2026-10-07 17:22:49 -06:00
Mauricio SiuandGitHub c77bd2ca70 Merge pull request #1175 from reynaldichernando/feat/corsfix-template
Add Corsfix template
2026-10-07 17:21:55 -06:00
Mauricio SiuandGitHub e3ead8bfa8 Merge pull request #1174 from grovs-io/add-grovs-template
feat: add Grovs template
2026-10-07 17:17:09 -06:00
Mauricio SiuandClaude Opus 5.5 b5196c49a4 fix(elastic-search): pin modest heap and disable ML
Set ES_JAVA_OPTS=-Xms512m -Xmx512m and xpack.ml.enabled=false so
Elasticsearch fits its 1 GiB mem_limit on small hosts, and give the
healthcheck a 120s start_period so a slow first boot does not abort
the depends_on chain.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 17:16:38 -06:00
Mauricio SiuandGitHub 60fb82046e Merge pull request #1165 from duducp/fix/metabase-v0.63.18
fix: update Metabase template to v0.63.18
2026-10-07 17:16:22 -06:00
Mauricio SiuandGitHub d93f17ed53 Merge pull request #1169 from DouglasAR01/patch-1
chore: Update BentoPDF template
2026-10-07 17:11:46 -06:00
Mauricio SiuandGitHub fad0db2689 Merge pull request #1153 from kacperwyczawski/feat/opencloud
feat: add OpenCloud template
2026-10-07 17:09:31 -06:00
Mauricio SiuandGitHub 9c2bfce278 Merge pull request #1157 from paulolinder/update-velix-api-v1.1.0
feat(velix-api): bump to v1.1.0
2026-10-07 17:09:17 -06:00
Mauricio SiuandGitHub a33ce26ace Merge pull request #1162 from lilsnibbi/feat/add-keyzori-template
feat: add Keyzori template
2026-10-07 17:09:01 -06:00
Mauricio SiuandGitHub 41841e1441 Merge pull request #1160 from manganate006/add-openlmnp
Add OpenLMNP template
2026-10-07 17:08:46 -06:00
Mauricio SiuandGitHub 446a0faece Merge pull request #1168 from k2so-dev/add-junctio-template
feat(template): add junctio
2026-10-07 16:59:59 -06:00
Mauricio SiuandClaude Opus 5.5 3fb632006a fix(orbit): give storage its own generated domain
"storage-${domain}" pushes the first DNS label of Dokploy's generated
sslip.io hosts past 63 characters, so the storage domain never resolves
and browser uploads can't reach it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 16:59:42 -06:00
xob0tandGitHub 56bfaea59e feat: add Graylog Open template (#1135) 2026-10-07 14:34:58 -06:00
Mauricio SiuandGitHub 9cbed1788e Merge pull request #1129 from moskoweb/obscura 2026-10-07 14:34:42 -06:00
Mauricio SiuandGitHub 7a41d04323 Merge pull request #1146 from Tekipeps/template/instatic 2026-10-07 14:32:19 -06:00
Mauricio SiuandGitHub a218ca579a Merge pull request #1151 from shivaansh74/feat/add-hydrodactyl-template 2026-10-07 14:32:01 -06:00
Mauricio SiuandGitHub 3b41a21613 Merge pull request #1154 from Windshiftapp/chore/windshift-v0.8.8 2026-10-07 14:31:44 -06:00
Mauricio SiuandGitHub 94e39254bf Merge pull request #1193 from phwizard/feat/ethora-core 2026-10-07 14:31:07 -06:00
Mauricio SiuandClaude Opus 5.5 cc9b579e05 fix(9router): probe 127.0.0.1 in healthcheck
localhost resolves to ::1 first in the image, but Next.js listens on IPv4
0.0.0.0 only, so the healthcheck always failed and Traefik never routed to
the unhealthy container (404).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 13:39:47 -06:00
Mauricio SiuandGitHub 736718b4ff Merge pull request #1130 from BryanFRD/add-lfsx
feat: add LFSX template
2026-10-07 13:34:00 -06:00
Mauricio SiuandGitHub 1373a7760b Merge pull request #1131 from whollacsek/feat/supabase-envoy-gateway
fix(supabase): move the API gateway to Envoy and close five parity gaps with official self-host
2026-10-07 13:33:42 -06:00
Mauricio SiuandGitHub 10fb6bacaf Merge pull request #1172 from ablause/feat/orca-server
feat: add Orca Server template
2026-10-07 13:27:16 -06:00
Mauricio SiuandGitHub a1f497250e Merge pull request #1184 from spacewaterbear/prefect-with-auth
feat: add auth to prefect
2026-10-07 13:27:02 -06:00
Mauricio SiuandClaude Opus 5.5 d98b63e309 fix(pretix): add postgres/redis, pin image, fix port and config
The standalone image was deployed with no database, no Redis and no config,
so celery fell back to amqp://guest@127.0.0.1:5672 and the web never came up
(502); the domain also pointed at port 3000 while the image serves on 80.
Pin pretix/standalone:2026.8.0, add postgres:16 and redis:7, configure
pretix via PRETIX_* env vars (url, secret, database, redis cache/sessions,
celery broker/backend, mail), route the domain to port 80, and set meta
version and tags.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 12:36:24 -06:00
Mauricio SiuandClaude Opus 5.5 b2bb06c8ee fix(sable): configurable DNS host port and pinned image
Host port 53 is usually already bound on Dokploy servers (systemd-resolved),
so publishing 53:8053 made the deploy fail. Publish DNS on SABLE_DNS_PORT
(default 1053; set to 53 once the host port is free) so the web console
works out of the box. Pin ghcr.io/drudge/sable to the 1.6.1 release.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 12:25:17 -06:00
Mauricio SiuandClaude Opus 5.5 f05bb6b377 fix(mc-controller): probe 127.0.0.1 in healthcheck
busybox wget resolves localhost to ::1 first, but Nitro listens on
0.0.0.0 (IPv4 only), so the healthcheck always failed. The container
never became healthy and Traefik never routed the domain (404).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 12:21:48 -06:00
Mauricio SiuandClaude Opus 5.5 4535080ff4 fix(fluxer): add required FLUXER_PROFILE_PSEUDONYM_SECRET
The fluxer v1 images now refuse to start in production without
FLUXER_PROFILE_PSEUDONYM_SECRET (api unhealthy, users-shard crash loop).
Generate it as a template variable and pass it to all services.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 12:20:27 -06:00
Mauricio SiuandClaude Opus 5.5 63b0eef948 fix(orbit): replace MinIO with SeaweedFS S3 storage
MinIO images on quay.io/Docker Hub are no longer publicly pullable, so the
deploy failed at image pull. Storage now runs SeaweedFS (S3 on port 9000,
credentials orbit/MINIO_PASSWORD) and the bucket service uses mc from the
orbit-bucket image to create orbit-uploads and set its CORS rule for the
app origin (browser presigned PUT uploads).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 12:19:35 -06:00
Mauricio SiuandClaude Opus 5.5 8a99147cc1 fix(authentik): start worker after server to avoid data volume copy-up race
server and worker both mount the fresh named volume "data" at /data. The image
ships /data/media as a symlink, and when both containers are created at the same
time Docker populates the volume twice and fails with
"failed to create symlink ... /data/media: file exists". Ordering the worker
after the server makes the first-time copy happen once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 12:19:25 -06:00
Mauricio SiuandClaude Opus 5.5 c7ae79d3ad fix(appwrite-2): mount mongo init files from ../files
Dokploy writes [[config.mounts]] files to ../files/, not next to the
compose file. ./mongo-entrypoint.sh did not exist, so Docker created an
empty directory at /mongo-entrypoint.sh and bash exited 126.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 12:17:23 -06:00
Mauricio SiuandClaude Opus 5.5 5f937bd00e fix(zitadel): use literal "disabled" for tls_mode default
"${disabled}" is not a Dokploy helper, so ZITADEL_TLSMODE was not a valid
--tlsMode value and zitadel exited 1 on start. Default the variable to the
literal value "disabled" (users can switch it to "external" behind HTTPS).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 12:17:02 -06:00
Mauricio SiuandGitHub 97648ba37b Merge pull request #1202 from sipamungkas/main
feat: add databasement template
2026-10-07 11:08:40 -06:00
Mauricio SiuandGitHub cda0f75a16 Merge pull request #1192 from dseegers/activepieces-0-91-2
Update Active pieces 0.91.2
2026-10-07 11:08:29 -06:00
Mauricio SiuandGitHub 86861a7c95 Merge pull request #1196 from forrestzhang107/dexio
feat(template): add Dexio
2026-10-07 11:06:25 -06:00
Mauricio SiuandGitHub ac45a0c2db Merge pull request #1181 from tizianozonta/feat/healthchecks-template
feat: add Healthchecks template
2026-10-07 11:06:13 -06:00
Yusuf Gundogdu b5df69fddb libredb-studio: say "named engines" for the wire-compatible total
The product's own copy rule reads a numeral in front of a bare "engines" as the
count of drivers it ships, which is twenty-six. Fifty-four is the total once the
twenty-eight engines that speak an existing driver's wire protocol are counted,
so it needs the narrower noun the upstream README uses for the same figure.
2026-10-05 18:11:13 +03:00
Yusuf Gundogdu 51b419dc23 libredb-studio: pass the generated secrets to the container
Dokploy does not substitute variables in object items of an env array, so the
three [[config.env]] tables reached the container as literal ${...} and the app
started with empty ADMIN_PASSWORD, USER_PASSWORD and JWT_SECRET. The
[config.env] table form, which every other blueprint in this repo uses,
substitutes correctly. Same change as #1201.
2026-10-05 18:03:50 +03:00
Yusuf Gundogdu 386823709e libredb-studio: move to 0.18.0
0.18.0 is the current release. The description's engine count moves with it:
this release ships twenty-six drivers reaching fifty-four named engines,
where 0.17.0 reached forty-six.
2026-10-05 18:03:50 +03:00
Ragil Burhanudin Pamungkas 68e6a27ab1 fix: correct APP_DISPLAY_TIMEZONE variable in databasement template 2026-10-05 09:46:14 +07:00
Ragil Burhanudin Pamungkas 5efe1e1103 feat: add databasement template 2026-10-05 07:44:51 +07:00
dosubot[bot]andGitHub cbccbcdc39 docs: clarify image and version guidance for templates 2026-10-03 13:44:19 +00:00
Carlos Dorneles daeb5b4b8f feat: add OpenDots template
Adds the blueprints/opendots entry for CopilotKit/OpenDots. No official
image is published, so the compose builds both app and browser targets
from the upstream repo, exposes 4310 only, and persists /data. Secrets
(OWNER_TOKEN, BROWSER_SECRET) are generated per deploy; the browser runs
without a compose profile because Dokploy does not activate profiles.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
2026-10-03 10:32:25 -03:00
Yusuf Gündoğdu c1716ad72b libredb-studio: correct the engine count in the description 2026-10-02 17:00:43 +03:00
JRKandGitHub b88afd51fb bump 2026-10-02 00:39:32 +02:00
jr-k 242a33cdc7 chore(puppetflow): bump to v2026.9.39 2026-10-01 23:57:10 +02:00
JRKandGitHub 20b031224f bump 2026-10-01 23:44:24 +02:00
NaveenRao fd02137aaf fix(kaneo): use single bundled image and require AUTH_SECRET
Kaneo now ships web and API in one image (ghcr.io/usekaneo/kaneo,
API served under /api on port 5173). The old ghcr.io/usekaneo/api
image exits on start with "AUTH_SECRET is not set", so fresh
deployments of this template are broken.

- Replace backend/frontend services with the single kaneo service
- Set AUTH_SECRET and KANEO_CLIENT_URL; drop JWT_ACCESS and BACKEND_HOST
- Use one domain instead of separate frontend/backend domains
- Add healthchecks and wait for Postgres to be healthy
2026-10-01 21:10:31 +05:30
Forrest Zhang 5459883b47 feat(template): add Dexio (logo.svg) 2026-10-01 05:10:48 -07:00
Forrest Zhang 774850fc8c feat(template): add Dexio (meta.json) 2026-10-01 05:10:47 -07:00
Forrest Zhang e6c50bedcd feat(template): add Dexio (template.toml) 2026-10-01 05:10:46 -07:00
Forrest Zhang bd491662af feat(template): add Dexio (docker-compose.yml) 2026-10-01 05:10:45 -07:00
Suyog Dixit 6d276ca4a5 Add Feedbacks template 2026-10-01 12:10:25 +05:30
Forrest Zhang 1f1b900782 feat(template): add Dexio (logo.svg) 2026-09-30 10:04:20 -07:00
Forrest Zhang e0208cd9f3 feat(template): add Dexio (meta.json) 2026-09-30 10:04:19 -07:00
Forrest Zhang 63023253dd feat(template): add Dexio (template.toml) 2026-09-30 10:04:17 -07:00
Forrest Zhang da2bc238fa feat(template): add Dexio (docker-compose.yml) 2026-09-30 10:04:15 -07:00
Taras Filatov 444fa72771 feat: add Ethora Core template 2026-09-30 15:22:24 +01:00
Daan Seegers 44bceb5b64 update meta file for activepieces 2026-09-29 22:44:30 +02:00
Yusuf GUNDOGDU 0bf1113ad7 libredb-studio: refresh to 0.17.0 and correct the engine count
0.16.2 was current when this branch was last refreshed. The description also
said sixteen engines; 0.17.0 reaches eighteen, because Prometheus and Apache
Kafka were added since.
2026-09-29 23:20:34 +03:00
Daan Seegers 4af1d7b278 Update Active pieces 0.91.2 2026-09-29 22:17:58 +02:00
JRKandGitHub 46031f2518 bump 2026-09-29 21:41:18 +02:00
JRKandGitHub b8b6999707 bump 2026-09-29 13:25:41 +02:00
taqinandGitHub 49ab1b3d85 Use latest tag instead of specific version
Latest tag always has bug fix  without breaking change
2026-09-29 13:50:12 +07:00
JRKandGitHub 24ab6ce3f7 bump version 2026-09-29 04:35:28 +02:00
JRKandGitHub 99679eab51 bump version 2026-09-29 04:35:18 +02:00
Finley Crawford-McQuillanandGitHub e335d1b1a9 Merge pull request #1 from fincrawmcq/copilot/canary-fix-fluxer-template
Fixing Fluxer template issues and updating instructions
2026-09-28 18:40:36 +01:00
250d469f00 fix(fluxer): add valid fallback VAPID keys
Co-authored-by: fincrawmcq <173572131+fincrawmcq@users.noreply.github.com>
2026-09-28 17:36:16 +00:00
ohemilyy 24e0b49b68 feat: add reloop template 2026-09-27 14:20:42 -04:00
Naim Hasim 6460c55fb5 feat: add DockTail template 2026-09-28 00:10:00 +08:00
jr-k dda5fb1730 feat: add Puppetflow template 2026-09-27 02:34:21 +02:00
Florent ClairambaultandClaude Opus 4.8 55411395de Add SolidPing monitoring template
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-26 15:49:42 +02:00
spacewaterbear ca7959dad9 feat: add auth to prefect 2026-09-26 14:51:35 +02:00
Reynaldi Chernando 11089396dc fix: make Corsfix auth URL configurable 2026-09-26 14:03:32 +07:00
Alexander Zerling c07d622714 Update Docker Compose configurationfor Nebulynk. Added new transcription worker service which is new since version 0.7.0. 2026-09-25 22:40:50 +02:00
Chirag Aggarwal 32a7d0ac70 feat(appwrite): bump template to 2.3.0
Adds the appwrite-mqtt push broker (MQTT over WebSocket on mqtt.<domain>), replaces the removed _APP_CONSOLE_URL_SCHEME with _APP_CONSOLE_URL, adds _APP_PWNED_PASSWORDS_DSN, and moves the console to 1.1.159, orchestrator to 2.2.2 and autogravity to 0.0.11 to match the stock 2.3.0 installer.
2026-09-25 19:28:20 +01:00
Chirag Aggarwal c8df2286f9 fix(appwrite): opt out of isolated deployment so build jobs can reach the API
Dokploy v0.29.3 to v0.29.13 deploys templates with isolated deployment on unless the template sets isolated = false (older releases always isolate, v0.29.14+ never does by default). That mode attaches every service to an external <appName> network and never creates <appName>_default, so the orchestrator starts build jobs on a network that does not exist and the executor puts runtimes on a network of its own. The orchestrator cannot create or join networks itself, and the repo validator rejects a networks section, so the template opts out of isolation to keep the default network every service shares.
2026-09-25 19:28:20 +01:00
Carlos Dorneles 235acdea23 feat(appwrite-2): update to Appwrite 2.3.0
- Bump appwrite/appwrite to 2.3.0, console to 1.1.159, autogravity to 0.0.11
- Replace _APP_CONSOLE_URL_SCHEME with _APP_CONSOLE_URL (removed in 2.3.0)
- Add appwrite-mqtt service with MQTT envs (_APP_MQTT_REPLAY_DEPTH, _APP_MQTT_MAX_PACKET_SIZE)
- Add _APP_PWNED_PASSWORDS_DSN (2.3.0 password breach policy)
- Add flutter-3.44 sites runtime (Jaspr SSR) and its executor image
- Adopt upstream MongoDB init fix (#13593): idempotent init on port 27018

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
2026-09-24 20:23:09 -03:00
Skender f7dd6b9988 opencode template: force https on generated domain 2026-09-24 22:15:26 +01:00
Skender 0fe93d8e39 opencode template: update meta.json 2026-09-24 22:10:14 +01:00
Skender 9551602df7 opencode template: update template.toml 2026-09-24 22:10:13 +01:00
Skender f9ccaf6c34 opencode template: update docker-compose.yml 2026-09-24 22:10:11 +01:00
Skender 5308f0d04a add opencode template: opencode.svg 2026-09-24 22:05:51 +01:00
Skender 82f8a12b29 add opencode template: meta.json 2026-09-24 22:05:50 +01:00
Skender 00b6c160a0 add opencode template: template.toml 2026-09-24 22:05:49 +01:00
Skender 77b708e335 add opencode template: docker-compose.yml 2026-09-24 22:05:48 +01:00
shashank agarwal e429bff0c2 fix(orbit): use tested versioned multi-platform images 2026-09-24 13:32:24 +05:30
Tiziano Zonta 50da81b19a fix: disable debug mode in Healthchecks template 2026-09-24 09:28:51 +02:00
Tiziano Zonta 3be5179a10 feat: add Healthchecks template 2026-09-24 09:13:27 +02:00
Furox-Art c13cced0f0 fix(template): align VersityGW runtime configuration 2026-09-24 03:16:31 +03:00
shashank agarwal 6425052f98 fix: support generated storage passwords 2026-09-24 01:41:50 +05:30
shashank agarwal 62c2f0ed73 feat: add Orbit task management template 2026-09-24 01:20:22 +05:30
Finley Crawford-McQuillanandGitHub 7dda34013a Fix typo in template.toml 2026-09-22 19:26:58 +01:00
Finley Crawford-McQuillanandGitHub 52fb40bc19 Clear VAPID keys and add setup instructions to template.toml 2026-09-22 19:22:47 +01:00
Finley Crawford-McQuillanandGitHub c98bc28eb4 Add FLUXER_ERLANG_COOKIE to docker-compose.yml 2026-09-22 19:04:50 +01:00
Finley Crawford-McQuillanandGitHub 1ac802dd8d add FLUXER_ERLANG_COOKIE to template.toml 2026-09-22 19:04:12 +01:00
Nargor 0d15b50e92 feat: bump mc-controller template to 1.0.2 2026-09-22 23:45:53 +07:00
Nargor 8a95f2a2a0 feat: add MC Controller template 2026-09-22 22:01:18 +07:00
Nicholas Penree e1e99b1a99 feat: Add sable template 2026-09-21 21:25:59 -04:00
Carlos Dorneles 32fe660cc4 feat(appwrite-2): use node LTS runtimes 22, 24 and 26 2026-09-21 14:56:37 -03:00
Reynaldi Chernando 34fd42e2e5 feat: add Corsfix self-hosting template 2026-09-21 21:23:48 +07:00
Yusuf Gundogdu 7bb611134c libredb-studio: move to 0.16.2 2026-09-21 09:50:50 +03:00
Release 4e67eaa911 feat: add Grovs template 2026-09-21 09:45:30 +03:00
JRKandGitHub a239603a3f Update template.toml 2026-09-20 16:48:19 +02:00
JRKandGitHub c6d9ed96e0 Update docker-compose.yml 2026-09-20 16:45:39 +02:00
Yusuf Gündoğdu a1a811bbf4 libredb-studio: bump meta version to 0.16.1 2026-09-20 13:55:01 +03:00
Yusuf Gündoğdu eb7994560f libredb-studio: bump version to 0.16.1 and add healthcheck 2026-09-20 13:55:00 +03:00
Carlos Dorneles 3ad2b05013 chore(appwrite-2): bump orchestrator to 2.2.2 and executor to 0.29.1 2026-09-19 19:01:37 -03:00
Alexandre Blause ea98830477 feat(blueprint): add orca server template
Run the headless Orca runtime (orca serve) on Dokploy. Orca publishes
no container image, so the compose builds one from the pinned upstream
release AppImage (amd64 or arm64) on Ubuntu 24.04, following the
official headless Linux server guide.

The runtime is served on one domain for both the WebSocket endpoint and
the web client. ORCA_PAIRING_ADDRESS sets the address advertised in
pairing links, and ORCA_SERVE_ARGS passes extra serve flags such as
--mobile-pairing for the Orca mobile app.
2026-09-19 20:32:39 +02:00
Carlos Dorneles 8841f90c9e feat(appwrite-2): add all supported runtimes with multiple versions 2026-09-19 10:23:00 -03:00
Furox-Art e3c611741d feat: add VersityGW template
S3-compatible gateway over a POSIX backend with versioning, flat-file IAM
and the built-in WebUI exposed on the domain; S3 API and admin API ports
stay internal per the upstream Docker guide.
2026-09-18 18:35:35 +03:00
Abdullah A e9b1f1585a adjust env 2026-09-18 15:32:21 +03:00
Abdullah A c42e1c3fc8 adjust env 2026-09-18 15:14:55 +03:00
Abdullah A a145a44964 Add OpenProject 17 AiO template 2026-09-18 14:47:42 +03:00
Carlos Dorneles 573afcfca8 fix(appwrite-2): use service name as executor hostname
openruntimes-executor resolves its own container with gethostname()
against Docker's name filter. With hostname "exc1" the filter never
matches "<project>-openruntimes-executor-1", so the executor crash
loops with "Own container not found" (appwrite/appwrite#13016).

Mirror the appwrite blueprint: set hostname to the service name (a
substring of the generated container name) and point _APP_EXECUTOR_HOST
at http://openruntimes-executor/v1. Avoids container_name, which the
compose validator rejects and which is not deployment-unique.
2026-09-17 18:42:57 -03:00
Carlos Dorneles df4d401ad7 fix(appwrite-2): set executor container_name to match hostname
openruntimes-executor looks itself up in Docker by matching its hostname
against the container name. Without container_name the generated name is
"<project>-openruntimes-executor-1", so the lookup fails and the executor
crash loops with "Own container not found" (appwrite/appwrite#13016),
leaving site/function deployments stuck in "building".
2026-09-17 18:37:58 -03:00
Carlos Dorneles c88ef64e29 feat(appwrite-2): support a dedicated console domain
Add a console_domain variable (defaults to console.<main_domain>) and
route the Console, API (/v1) and Realtime (/v1/realtime) on that host,
while keeping the existing main-domain routes intact. Point
_APP_CONSOLE_DOMAIN and _APP_CONSOLE_HOSTNAMES at the console host so
the Console can reach the API on its own origin and can be protected
independently (e.g. Cloudflare Access).
2026-09-17 17:18:14 -03:00
Douglas RamírezandGitHub 851a6601f2 chore: Update Docker image to specific version 2026-09-17 13:34:00 -05:00
Douglas RamírezandGitHub 1b2e06cb4b chore: Change port from 80 to 8080 in template.toml 2026-09-17 13:22:49 -05:00
Douglas RamírezandGitHub 78f0e98b86 chore: Update Docker image and exposed port in compose file 2026-09-17 13:20:56 -05:00
Web Artisan 259eb8a402 fix(junctio): widen the generated secret 2026-09-17 17:30:52 +03:00
Web Artisan a880b39d48 fix(junctio): generate the secret as hex 2026-09-17 17:22:04 +03:00
Web Artisan ad5a86fc61 feat(template): add junctio 2026-09-17 17:14:25 +03:00
Yusuf GUNDOGDU b7e522a9a0 libredb-studio: bump version to 0.16.0 2026-09-17 13:07:04 +03:00
Chirag Aggarwal f9c496fa57 style(appwrite): drop stray blank line to keep the diff focused 2026-09-17 10:29:35 +01:00
Chirag Aggarwal e65859bced feat(appwrite): bump template to 2.2.0
Picks up the 2.1 and 2.2 releases on top of the 2.0 rebuild: console
1.1.96 self-hosted build, orchestrator 2.2.0, the autogravity service, and
the env changes from those releases (executions are ClickHouse only, the
pool adapter and legacy logging providers are gone).
2026-09-17 10:25:33 +01:00
lilsnibbi e52b86baef fix(keyzori): simplify template and align container routing 2026-09-17 16:44:55 +10:00
Carlos Dorneles e887280386 fix(appwrite-2): default _APP_OPTIONS_FORCE_HTTPS to disabled 2026-09-16 21:42:16 -03:00
Carlos Dorneles b1b5a61e7d fix(appwrite-2): set meta.json id to match renamed blueprint folder 2026-09-16 21:02:01 -03:00
Carlos Dorneles 81325f0731 refactor(appwrite-2): rename blueprint from appwrite-2-2 to appwrite-2 2026-09-16 20:58:56 -03:00
Carlos Dorneles 2bddfa780a fix(appwrite-2-2): wait for postgres, redis and geo health before appwrite
Use depends_on conditions so appwrite does not start before its backing
services are healthy. Compose rejects interpolation in depends_on keys,
so postgresql is referenced by its literal service name.
2026-09-16 20:46:29 -03:00
Carlos Dorneles 79fb54496b fix(appwrite-2-2): route function and site preview subdomains
Appwrite serves function/site previews on <sub>.<functionsDomain> and
<unique>.<sitesDomain>. Dokploy rejects wildcard hosts in template.toml,
so add Traefik HostRegexp labels on the appwrite service, matching the
existing appwrite blueprint.

Also disable _APP_ROUTER_AUTO_CERTIFICATES since Dokploy terminates TLS
and the bundled Appwrite Traefik is not deployed.
2026-09-16 20:44:11 -03:00
Carlos Dorneles 8beb87f3ab feat: add Appwrite 2.2 template
Add a self-hosted Appwrite 2.2 stack adapted from the official
docker-compose, using Dokploy domains instead of the bundled Traefik.

- Fix the compose file so it parses: drop the dangling networks block that
  duplicated the appwrite service and created phantom gateway/runtimes
  services
- Pin all images to explicit versions (appwrite/appwrite:2.2.0, etc.)
- Add restart: unless-stopped to the always-on services and to the
  separate-profile workers
2026-09-16 18:46:27 -03:00
Carlos Dorneles 18c3bf2858 fix: keep /dev/urandom mount recommended by Metabase docs 2026-09-16 18:28:28 -03:00
Carlos Dorneles bf7e3e9d69 fix: update Metabase template to v0.63.18
- Bump metabase/metabase image from v0.50.8 to v0.63.18
- Bump postgres from 14 to 16 and persist data with a named volume
- Generate the database password via the password helper instead of
  hardcoding it
- Add restart policy, expose port and depends_on with healthchecks
2026-09-16 18:26:53 -03:00
Carlos Dorneles 8a1ecbfb74 feat: update authentik to 2026.8.2 2026-09-16 09:05:54 -03:00
lilsnibbi 35b1f66c7a chore: limit Keyzori contribution to blueprint files 2026-09-16 14:20:33 +10:00
lilsnibbi e1c13b9bae chore: use latest Keyzori image in template 2026-09-16 14:02:54 +10:00
lilsnibbi b21588b34e test: cover Keyzori template deployment and persistence 2026-09-16 13:26:34 +10:00
Jeremie e8d2615c2b Add OpenLMNP template 2026-09-14 19:05:06 +02:00
lilsnibbi 63adcdadc2 feat: add Keyzori template 2026-09-14 11:47:44 +10:00
root 974b6ed8f4 feat(velix-api): bump to v1.1.0 — security hardening and Chatwoot SSRF fix 2026-09-13 12:35:23 +00:00
Yusuf Gundogdu 50f0b5f9d9 libredb-studio: bump version to 0.15.0 2026-09-12 03:40:12 +03:00
Vitaliy Kukharik 8e50aaeaa3 Update Autobase to version 2.11
Bump autobase service images (console_ui, console_db, console_api) to 2.11.0.
2026-09-11 20:45:10 +02:00
Stefan Ernst aa6354bda0 chore: update Windshift to v0.8.8 2026-09-11 14:21:37 +02:00
Kacper Wyczawski 2a725ce0fc feat: add OpenCloud template 2026-09-10 10:23:46 +02:00
Barış Çelik 01d4ae2f04 chore(inkvoice): bump to 0.3.0 and cap memory at 512M 2026-09-10 10:48:28 +03:00
Shivaansh Dhingra b343e232ae feat: add Hydrodactyl template (#1139) 2026-09-09 19:38:27 -04:00
William HollacsekandClaude Opus 5 8d416a8a87 Make sb_-only mode work, and name the S3 settings nobody documents
Clearing ANON_KEY and SERVICE_ROLE_KEY is a supported mode — Envoy guards
every legacy branch — but four places broke when you did it. storage,
studio, functions and the realtime healthcheck all read the legacy pair
directly, and storage can never use an sb_ key because it calls PostgREST
at rest:3000 and never traverses the gateway. All four now resolve
${ANON_KEY:-${ANON_KEY_ASYMMETRIC}}. Verified with docker compose config
against a real deployment env: all six land on the ES256 JWTs and the
healthcheck token is non-empty.

Storage S3 block, with the three traps: REGION is read as the S3 signing
region when STORAGE_S3_REGION is unset, and this template ships it as
"stub"; STORAGE_S3_DISABLE_CHECKSUM is needed for providers that reject
the SDK's CRC32 and appears in no upstream file; GLOBAL_S3_PROTOCOL is
in the official compose and read nowhere in supabase/storage. Also noted
that imgproxy needs no S3 config — storage hands it a presigned URL.

STORAGE_TENANT_ID is the top-level key prefix, so it is permanent.

Two more warnings from a real first deploy: the domain is interpolated at
creation, so editing the Domains tab later leaves API_EXTERNAL_URL — and
therefore every token's iss — pointing at the old host; and the ES256
six-value swap does not touch the legacy pair.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-09 15:48:05 -05:00
Kacper Wyczawski b8c5f2bab5 fix: actually remove some of the patches suggested by copilot because they were stupid and outdated 2026-09-09 20:46:18 +02:00
Kacper Wyczawski 914e393f51 fix: incorrect version 2026-09-09 20:40:50 +02:00
Kacper Wyczawski f1295b6518 fix: apply patches suggested by copilot 2026-09-09 20:40:01 +02:00
Kacper Wyczawski d718f761b1 fix: accidentally deleted labels 2026-09-09 20:22:59 +02:00
Kacper Wyczawski 5a8b088c49 fix: remove explicit network config 2026-09-09 20:16:50 +02:00
Kacper Wyczawski 91061251de fix: missing traeffc labels for seafile 2026-09-09 20:13:01 +02:00
Kacper Wyczawski 4d90eab114 feat: update seafile to 13.0 2026-09-09 19:39:34 +02:00
Tekena Solomon bede4dbd80 Merge branch 'template/instatic' of github.com:Tekipeps/templates into template/instatic 2026-09-09 16:15:32 +01:00
Tekena Solomon 6ae5bb5103 Merge branch 'canary' of github.com:Tekipeps/templates into template/instatic 2026-09-09 16:14:50 +01:00
Tekena Solomon e02190ab18 chore: bump Instatic to 0.0.18
Signed-off-by: Tekena Solomon <tekena157@gmail.com>
2026-09-09 16:12:03 +01:00
Guido Esser d742938c5a feat: add Prozesswerk template (text-to-BPMN, self-hosted) 2026-09-09 11:30:53 +02:00
Tam Nguyen 2224b5561d fix: rearrange services + add documentations, remove volume driver 2026-09-08 17:46:58 +10:00
Tam Nguyen 33e928ec64 feat(elasticsearch): update template to v9 with security 2026-09-08 16:54:33 +10:00
Tam Nguyen 72f1ea9318 fix: remove leftover docker compose versioning 2026-09-08 16:38:26 +10:00
Tam Nguyen 95fe69fc48 fix: remove obsolete docker-compose version property
Ref:
- https://docs.docker.com/reference/compose-file/version-and-name
https://docs.docker.com/compose/intro/history
2026-09-08 16:34:07 +10:00
yusuf-gundogdu 8f836f5f28 libredb-studio: bump version to 0.14.1 2026-09-08 08:51:33 +03:00
Andrés Sarrazola aefe3143ce Use canonical self-hosting documentation link 2026-09-07 16:48:19 -05:00
Andrés Sarrazola 543ce0b9a5 feat: add OpenLivery template 2026-09-07 16:28:17 -05:00
MRBobzaRandGitHub 3a7efa52a3 Added Pretix Template 2026-09-06 12:41:32 -05:00
MRBobzaRandGitHub e80389efbc Adding Pretix Template 2026-09-06 12:31:31 -05:00
MRBobzaRandGitHub 343629716a Added Pretix Templete 2026-09-06 11:50:44 -05:00
xob0t 4fd2873a67 fix: map HyperDX exponential histogram metrics 2026-09-06 13:20:34 +03:00
xob0t df88ec0972 docs: record HyperDX web validation 2026-09-06 13:13:52 +03:00
xob0t 4dd732170c feat: add tested HyperDX template 2026-09-06 13:07:55 +03:00
juancho 80a50aa0d0 feat: add Gitea with PostgreSQL Security & Privacy Settings 2026-09-05 23:28:37 -05:00
juancho a9e07bf677 fix: update Gitea with PostgreSQL blueprint template whit 1.27.3 version 2026-09-05 23:05:32 -05:00
William HollacsekandClaude Opus 5 78e1b776ad Pass SB_JWT_ISSUER to Edge Functions, and correct the ES256 instructions
Three fixes found by deploying this blueprint and testing it surface by surface.

The functions service sets SUPABASE_URL to the internal gateway address, while
Auth signs tokens with API_EXTERNAL_URL as the issuer. Supabase's own edge
function JWT helper (_shared/jwt/default.ts) derives its expected issuer from
SUPABASE_URL unless SB_JWT_ISSUER is set, so it rejects every valid token with
an issuer mismatch. Passing SB_JWT_ISSUER through fixes that, and is inert for
functions that do not read it.

The ES256 procedure had three problems. It told you to clone supabase/supabase,
which is a very large monorepo, for one 7 KB script; fetching that file is
enough and node is its only requirement. It omitted --update-env, without which
only four of the six values are printed at all — ANON_KEY_ASYMMETRIC and
SERVICE_ROLE_KEY_ASYMMETRIC reach .env alone, so "replace all six with the ones
it prints" could not be followed. And the script exits 1 after writing the keys,
because it then looks for a docker-compose.yml to patch that is not there and
need not be, since this blueprint already wires all four variables; that made a
successful run look like a failure.

Also documents that pg_graphql is not installed on a fresh database, so the
/graphql/v1 route the gateway already exposes answers with an error until one
statement is run. The hosted platform ships it enabled, so this is a real
difference for code moving across.

Verified against a live deployment: the documented steps run as written, all six
values land, and the issuer now matches so edge-function JWT verification
succeeds. Blueprint validators and generate-meta --check all pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017DjX4ai6xiixeV8knW9Hpa
2026-09-05 15:12:19 -05:00
Chirag Aggarwal 4699cf0de8 feat(appwrite): update template to 2.0.0
Appwrite 2.0 replaces the engine, ships the new root-path console and
defaults new installs to PostgreSQL, so the template is rebuilt from the
stock 2.0.0 installer output rather than bumped:

- PostgreSQL (appwrite/postgres) is the database; MariaDB/MongoDB and
  their init mounts are dropped.
- Combined worker/scheduler topology (appwrite-worker, appwrite-task-scheduler)
  replaces the per-queue worker containers.
- New services: orchestrator (builds), clickhouse (usage/executions),
  appwrite-geo; executor bumped to 0.29.0, console to appwrite/new.
- Console is served at / with the API on /v1 and /.well-known and the
  realtime server on /v1/realtime.
- Runtime and build containers join the stack's own Compose network and
  the builds volume is pinned per project via COMPOSE_PROJECT_NAME.
2026-09-05 16:29:25 +01:00
William HollacsekandClaude Opus 5 7fca9845cf Warn that a domain without TLS needs the http scheme
The template generates SUPABASE_PUBLIC_URL, API_EXTERNAL_URL and
ADDITIONAL_REDIRECT_URLS with https://, which is right for a public domain with
a certificate. Dokploy creates the template's domain with none, so until one is
enabled the domain answers on http only and those three values point at a
scheme that does not respond.

Measured on a live deploy: the stack reports 11/11 healthy and the gateway
answers http with Studio's 401 basic-auth challenge, while https returns 404 —
so nothing looks broken, but Studio's own calls fail, Envoy's CORS check
compares Origin against the https string and refuses, and GoTrue builds its
issuer, OAuth redirects and email links from the dead scheme.

Also records that Let's Encrypt cannot rescue a private address: an sslip.io
name pointing at a Tailscale 100.x or a LAN address cannot be validated.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 20:34:39 -05:00
William HollacsekandClaude Opus 5 e309adc45b Close five parity gaps with official Supabase self-host
A multi-agent audit of the Envoy port compared the blueprint against
supabase/supabase@master, against Dokploy's own source, and against the repo's
conventions. Three findings survived an adversarial refute pass and two more
were traced to the same cause. All five are divergences from official that
predate this branch, but they sit on the surface this branch touches.

- template.toml: API_EXTERNAL_URL gains /auth/v1, matching official
  docker/.env.example:101 since supabase e7abda8d (PR #47640, 2026-07-07).
  Without it GoTrue advertises https://<domain>/callback for every OAuth and
  SAML flow, and Envoy's lds routes bare /callback to the `/` catch-all — that
  is Studio, not auth. Measured: /auth/v1/authorize returns GoTrue's 400, while
  /callback returns Studio's 401 basic-auth challenge.

- template.toml: add the /volumes/functions/deno.jsonc import map and point
  main/index.ts at it, and take official's `hello` sample. Upstream shipped
  these in 9ef9f1b8 (2026-08-14) and f5f897a2 (2026-08-28); the blueprint's
  functions volume was still at the 2023-era deno.land/std sample with
  importMapPath = null, so no function written against current Supabase docs
  could resolve @supabase/server. Also injects SUPABASE_FUNCTION_SLUG.

- docker-compose.yml: restore official's SELinux flags on the shared functions
  directory — `:z` not `:Z`, and `:ro` back on Studio's copy. `:Z` applies a
  private MCS label, so mounting one host directory into two containers with
  it revokes the first container's access on an SELinux host. Every other bind
  flag in the file already matched official; these three were the only drift.

- meta.json: version becomes 2026.08.03-3. The images are unchanged from
  official's 2026.08.03 snapshot, so 2026.08.17 advertised a state the template
  does not ship.

- template.toml: API_GW_HTTP_PORT is inert, because the port is pinned by
  `expose` and by the domain block. The comment above it said the opposite.

- instructions.md: two operational gaps the audit surfaced. Renaming kong to
  api-gw makes Dokploy reject a redeploy of an existing service until the
  domain's Service Name is edited. And the Postgres data directory is a bind
  mount, so Dokploy's Volume Backups cannot see it, deleting the service
  destroys it regardless of the delete-volumes toggle, and "redeploy with fresh
  volumes" does not reset the database.

Re-verified end to end on Docker 29.4.0: all three repo validators pass, all 11
services healthy, and the eight original checks still pass. Two new ones: the
hello sample returns 200 {"message":"Hello from Edge Functions!"} for both
sb_publishable_ and sb_secret_ keys — proving the import map resolves — and
/auth/v1/settings and /auth/v1/authorize reach GoTrue.

Note a deliberate behaviour change from official: the new sample declares
auth: ["publishable","secret"], so a legacy anon JWT now gets a 401 with an
explanatory INVALID_API_KEY body where the old sample accepted it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 20:13:49 -05:00
William HollacsekandClaude Opus 5 615f8d8d69 Move the Supabase blueprint from Kong to the Envoy API gateway
Official Supabase made Envoy the default API gateway on 2026-08-11 (PR #48153,
self-hosted release 0.8.0) and shipped a CORS fix for /pg/ routes on 2026-08-17
(PR #49136) that only Envoy carries. This blueprint still shipped Kong.

Changes:
- docker-compose.yml: rename `kong` to `api-gw`, on envoyproxy/envoy:v1.39.0.
  TCP healthcheck because the image has no curl or wget. Expose 8000 only —
  Envoy has no 8443 listener. Env vars follow official: ANON_KEY /
  SERVICE_ROLE_KEY replace SUPABASE_ANON_KEY / SUPABASE_SERVICE_KEY, every
  KONG_* is dropped, and SUPABASE_PUBLIC_URL is added for #49136. Rename the
  three internal references to the gateway, and add official's `functions`
  healthcheck.
- template.toml: swap the two Kong mounts for the four envoy ones, copied from
  supabase/supabase@master. serviceName becomes `api-gw`; KONG_HTTP_PORT
  becomes API_GW_HTTP_PORT and KONG_HTTPS_PORT is dropped.
- meta.json: version marker names the Envoy switch.
- instructions.md: Kong replaced by Envoy in all four places, plus a note that
  Studio's basic-auth credential is a SHA1+base64 hash of DASHBOARD_PASSWORD
  computed by Envoy's entrypoint at startup.

Two Dokploy adaptations, deliberate and both needed:
- No `networks:` aliases block and no `ports:` mapping — validate-docker-compose
  rejects both. The alias exists upstream only for backwards compatibility, and
  nothing here still points at `kong`.
- cds.yaml points the realtime cluster at `realtime`, not at official's
  `realtime-dev.supabase-realtime` container_name, because this blueprint sets
  no container_name. lds.template.yaml is byte-identical to official, so the
  Host header realtime uses for tenant resolution is unchanged.

Verified locally against Docker 29.4.0 / Compose v5.1.2, rendering the template
the way Dokploy does. All 11 services healthy; legacy keys work; sb_publishable_
is blocked by RLS while sb_secret_ reads the row; Studio basic auth challenges
and accepts; /realtime/v1/api/tenants and /realtime/v1/api/openapi return 403
and the /rest/v1/ root stays service-role only; an OPTIONS to /pg/ returns
access-control-allow-origin matching SUPABASE_PUBLIC_URL; a realtime channel
join over ?apikey=sb_publishable_… replies status ok; and the sample edge
function returns its response.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 14:59:48 -05:00
moskoweb 271aa8224f fix(obscura): support token auth in CDP websocket URL 2026-09-03 14:07:43 +00:00
Khiet Tam Nguyen 127fd8260c fix: trailing slash for manifest-server healthcheck to avoid redirect in logs 2026-09-03 19:15:52 +10:00
BryanFRD fa06c0d2e2 feat: add LFSX template 2026-09-03 10:34:24 +02:00
moskoweb ef51d95292 feat(obscura): expose authenticated CDP and MCP endpoints 2026-09-02 18:04:05 +00:00
moskoweb 8a191639b6 feat: add Obscura Browser template 2026-09-02 12:52:58 +00:00
moskoweb 51f065c794 fix: harden and update 9router template 2026-09-02 12:30:14 +00:00
Tam Nguyen 7328d9c0ab feat: add AIRBYTE_ENABLE_UNSAFE_CODE for manifest-server and workload-launcher 2026-09-02 08:32:33 +10:00
Khiet Tam Nguyen ef94e85e12 chore: format airbyte logo svg 2026-09-01 20:00:07 +10:00
830d6bbc8d Add OpenStatus template (#1126)
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:05:48 -06:00
gpiechnik2 ef4cedcc86 Update versioning 2026-08-31 09:12:01 +02:00
Tam Nguyen 8a6f23ca15 feat: add healthchecks to all long-running containers 2026-08-31 15:17:45 +10:00
Tam Nguyen 40683e2afa fix: remove reliance on hard-coded network
Changes based on:
- https://github.com/nktnet1/airbyte-compose/pull/2

Hopefully addresses:
- https://github.com/Dokploy/templates/pull/1119#issuecomment-5471586794
2026-08-31 10:48:52 +10: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
Mauricio SiuandClaude Fable 5 de2bf9ece2 fix: make AzerothCore templates start reliably out of the box
- Force the MySQL healthcheck over TCP: with --host=localhost it pings the unix socket, which answers during MySQL's temporary init phase before networking is up, so db-import started too early and failed with connect error 111.
- Serialize the SOAP bootstrap after the admin bootstrap: both jobs insert into acore_auth.account concurrently and hit a MySQL deadlock (Error 1213) that bootstrap-account does not retry.
- Default REQUIRE_EMAIL_VERIFICATION to false via a new PORTAL_REQUIRE_EMAIL_VERIFICATION variable: the template ships empty SMTP settings, so the portal crash-looped on first deploy.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 16:31:27 -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
gpiechnik2 22f7eecbba Update heyo docs logo 2026-08-30 17:35:41 +02:00
gpiechnik2 85144c103b Add heyo docs template 2026-08-30 16:50:01 +02:00
Khiet Tam Nguyen 31dbf42773 fix: sync core dns version in config mount 2026-08-30 13:29:46 +10:00
Khiet Tam Nguyen 0bae8c9e55 fix: expose instead of ports for 8001 2026-08-30 12:01:03 +10:00
Ghazi BEN DAHMANE 5743692cdd feat(azerothcore-portal): configure email verification 2026-08-28 22:22:58 +02:00
Ghazi BEN DAHMANE 8d248a3dee chore: track latest portal image 2026-08-28 21:47:23 +02:00
Ghazi BEN DAHMANE 6df08cfa66 feat: add AzerothCore portal template 2026-08-28 21:41:11 +02:00
Tam Nguyen de7c35ccc5 fix: reduce hard-coded ip reliance for services apart from K3S
Ref:
- https://github.com/nktnet1/airbyte-compose/pull/1
2026-08-28 16:16:20 +10:00
Tam Nguyen d828ed2753 docs(airbyte): note about public access for AIRBYTE_URL 2026-08-28 11:36:19 +10:00
Tam Nguyen 9358c91ae4 fix: use password 32 to meet minimum jwt signature requirement 2026-08-28 11:22:47 +10:00
Tam Nguyen 07d806ae61 feat(blueprint): add airbyte template 2026-08-28 10:56:20 +10:00
Ghazi BEN DAHMANE 902b3d55fc feat: add AzerothCore template 2026-08-27 20:22:53 +02:00
AlexandGitHub baeee743b9 Merge branch 'Dokploy:canary' into canary 2026-08-26 11:43:28 +02:00
Alexander Zerling 299ef205a3 Refactor Nebulynk Docker Compose and template configuration for improved clarity and functionality 2026-08-26 11:35:14 +02:00
Mauricio SiuandGitHub f29a0b7340 Merge pull request #1103 from jmaxdev/canary
feat: add Kotonoba template
2026-08-25 11:46:44 -06:00
AlexandGitHub 7994b28553 Merge branch 'Dokploy:canary' into canary 2026-08-25 12:42:53 +02: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
Mauricio SiuandClaude Fable 5 08e0637b57 nebulynk: drop import.base64 (not used by the templates build)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 21:00:45 -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
Mauricio Siu 8754e69d3c merge canary 2026-08-24 20:56:33 -06:00
Mauricio Siu 1f1e3b4651 fix(instatic): accept both https and http public origins so the setup wizard works before HTTPS is enabled 2026-08-24 20:55:32 -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
Tekena Solomon 0179ab425c fix: add init container to fix Instatic storage volume permissions
Signed-off-by: Tekena Solomon <tekena157@gmail.com>
2026-08-20 04:45:21 +01:00
Tekena Solomon 1f7fd68b56 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>
2026-08-20 04:32:30 +01: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
Alexander Zerling 5c84dd7fea Update Nebulynk version to stable and increase meeting transcript wait timeout
- Changed version from 0.4.0 to stable in meta.json
- Increased MEETING_TRANSCRIPT_WAIT_TIMEOUT_MS from 1200000 to 1800000 in template.toml
2026-08-16 02:22:26 +02:00
Alexander Zerling 3f3c3aebeb updated base64 2026-08-16 01:37:10 +02:00
Alexander Zerling 963d77a5be Update template.toml for HTTP-only domains and add optional configurations
- Changed frontend, backend, livekit, and garage URLs to HTTP for sslip.io compatibility.
- Added NODE_ENV set to "development".
- Introduced optional SMTP and integration keys with placeholders.
- Added operational and security settings including rate limits and cookie configurations.
2026-08-16 01:25:22 +02:00
Alexander Zerling 35d8f7869e Refactor code structure for improved readability and maintainability 2026-08-15 20:20:28 +02:00
Alexander Zerling 6fcf6240af Add Nebulynk template configuration with environment variables and domain settings
- Introduced a new template.toml file for Nebulynk blueprint.
- Defined variables for frontend, backend, LiveKit, and garage domains.
- Configured PostgreSQL and storage S3 credentials with secure password generation.
- Set up environment variables for services including JWT and API keys.
- Specified domain configurations for frontend, backend, LiveKit, and garage services.
2026-08-15 20:15:34 +02: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 SiuandClaude Fable 5 ca5dfb87a7 docs: fix remaining README references to the removed root meta.json
Lines 11 and 65 still told contributors to add their entry to the root
meta.json, which was removed in #978 (metadata now lives in
blueprints/<id>/meta.json and the aggregate is generated at build time).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 10:52:20 -06:00
Mauricio SiuandGitHub 730b00d363 Merge pull request #775 from satyatulasijalandharch/erpnext-version-16
Add ERPNext v16 configuration and remove Strapi duplicates
2026-07-08 10:50:21 -06:00
Mauricio SiuandGitHub a06e409d05 Merge pull request #850 from ZeroWing-Automator/canary
feat: add 6 new templates (KeyDB, VictoriaMetrics, Gel, Matomo, Flarum, Leantime)
2026-07-08 10:49:07 -06:00
Mauricio SiuandGitHub 0563ee593e Merge pull request #961 from moskoweb/supabase
Update Supabase Template
2026-07-08 10:48:18 -06:00
Mauricio SiuandGitHub 895f08fbfe Merge pull request #883 from NightVibes33/feature/add-dokploy-templates
feat: add 11 Dokploy templates
2026-07-08 10:45:49 -06:00
Mauricio SiuandGitHub 0b8f194f9e Merge pull request #912 from leogomide/update-plane-v1.3.1
chore(plane): update template to v1.3.1 with healthchecks and bug fixes
2026-07-08 10:45:24 -06:00
Mauricio SiuandGitHub 98197dc7b2 Merge pull request #923 from brunofrank/evolution-crm
Evolution CRM & Evolution GO templates
2026-07-08 10:44:56 -06:00
Mauricio SiuandGitHub f38f8ace86 Merge pull request #939 from rohitmulani63-ops/codex/add-heyform-smtp-config
fix: expose HeyForm SMTP settings
2026-07-08 10:44:27 -06:00
Mauricio SiuandGitHub 922b3dcff2 Merge pull request #779 from jyoti369/add-glances
feat: add Glances system monitoring template
2026-07-08 10:26:21 -06:00
Mauricio SiuandGitHub 811748e222 Merge pull request #865 from ahmed-lotfy-dev/feat/add-powersync-template
feat: add powersync blueprint template
2026-07-08 10:25:49 -06:00
Mauricio SiuandGitHub 6bd5cd2197 Merge pull request #884 from BinkyTwin/codex/add-paperless-ngx-template
feat: add Paperless-ngx and Gatus templates
2026-07-08 10:25:02 -06:00
Mauricio SiuandGitHub 0244cf13bc Merge pull request #934 from rohitmulani63-ops/codex/add-zulip-template
feat: add Zulip template
2026-07-08 10:24:01 -06:00
Mauricio SiuandGitHub a0ecfc7ee0 Merge pull request #928 from danestves/add-engram-template
feat(blueprint): add engram template
2026-07-08 10:23:34 -06:00
Mauricio SiuandGitHub 9ed1424b41 Merge pull request #794 from juandelperal/canary
feat(chatwoot): update blueprint to latest production layout
2026-07-08 10:23:02 -06:00
Mauricio SiuandGitHub 5110c468d3 Merge pull request #812 from schmanat/add-duplicati
add duplicati
2026-07-08 10:22:45 -06:00
Mauricio SiuandGitHub 7d70100230 Merge pull request #799 from enemyrr/multica-clean
Add Multica template
2026-07-08 10:22:30 -06:00
Mauricio SiuandGitHub bc12a2ede9 Merge pull request #900 from NightVibes33/add-wallabag-template
feat: add wallabag template
2026-07-08 10:22:18 -06:00
Mauricio SiuandGitHub 1299984829 Merge pull request #782 from zrja/zrja/shopware-v1
feat: add Shopware blueprint
2026-07-08 10:22:01 -06:00
Mauricio SiuandGitHub ecfd938131 Merge pull request #765 from SamirChatwiti/canary
feat: add Matomo blueprint
2026-07-08 10:21:12 -06:00
Mauricio SiuandGitHub 28b254fff1 Merge pull request #886 from BinkyTwin/codex/add-thingsboard-template
feat: add ThingsBoard template
2026-07-08 10:20:17 -06:00
Mauricio SiuandGitHub 31839bfa29 Merge pull request #818 from Nico-Pergande/update-authentik-2026.2.2-pg18
feat(authentik): bump to 2026.2.2 and Postgres 18
2026-07-08 10:20:02 -06:00
Mauricio SiuandGitHub 0a0cabcfb0 Merge pull request #955 from rohitmulani63-ops/codex/add-tandoor-recipes-template
feat: add Tandoor Recipes template
2026-07-08 10:19:09 -06:00
Mauricio SiuandGitHub 00cb500a1f Merge pull request #887 from BinkyTwin/codex/add-nodelink-template
feat: add NodeLink template
2026-07-08 10:18:47 -06:00
Mauricio SiuandGitHub f2fdb525d8 Merge pull request #888 from BinkyTwin/codex/add-owncloud-infinite-scale-template
feat: add ownCloud Infinite Scale template
2026-07-08 10:18:34 -06:00
Mauricio SiuandGitHub e83d6d1192 Merge pull request #898 from MANFIT7/add-code-server-template
feat: add code-server template
2026-07-08 10:18:09 -06:00
Mauricio SiuandGitHub 9d007e826c Merge pull request #932 from rohitmulani63-ops/codex/add-filerun-template
feat: add FileRun template
2026-07-08 10:08:26 -06:00
Mauricio SiuandGitHub 8ffc5ef169 Merge pull request #863 from iRazvan2745/canary
add uptimekit
2026-07-08 10:07:09 -06:00
Mauricio SiuandClaude Fable 5 d6bf8ac34c fix: gel HTTP endpoint + admin UI, keydb as headless DB, leantime port/env; drop matomo — superseded by #765
- gel: allow plain HTTP for the reverse proxy (GEL_SERVER_HTTP_ENDPOINT_SECURITY=optional), enable admin UI and point the domain at /ui
- keydb: remove HTTP domain and published port — pure Redis-protocol DB reachable via internal network
- leantime: image serves on 8080 (non-root nginx), add required LEAN_APP_URL and LEAN_SESSION_PASSWORD, use utf8mb4
- matomo: removed from this PR, already fixed in #765

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 03:03:58 -06:00
Mauricio SiuandClaude Fable 5 c39505b9c6 fix: make chroma, homebox and languagetool templates deployable
- chroma: mount volume at /data (chromadb 1.x data dir), drop legacy 0.x
  env vars (IS_PERSISTENT/PERSIST_DIRECTORY) and point the domain to
  /api/v2/heartbeat so the API-only service verifies with HTTP 200
- homebox: newer images panic on boot without HBOX_AUTH_API_KEY_PEPPER
  (>=32 bytes); generate it via ${password:64} in template.toml
- languagetool: point the domain to /v2/languages (the API returns 400
  on "/"), which responds HTTP 200
- restore gotify/jellyseerr/privatebin/speedtest-tracker meta.json to
  canary so this PR no longer touches templates that already exist

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 02:54:56 -06:00
Mauricio SiuandClaude Fable 5 0ada7ae5f2 fix: remove public backend domain that always returned 404
The Multica backend is an API-only chi server with no route registered
at "/", so the generated backend domain (path "/") permanently answered
HTTP 404 even though the container was healthy. The web frontend already
proxies /api/*, /ws, /auth/* and /uploads/* to http://backend:8080 via
Next.js rewrites, and when NEXT_PUBLIC_WS_URL is unset the browser
derives the WebSocket URL from the page origin, so the backend never
needs to be exposed publicly.

- drop the backend [[config.domains]] entry and api_domain variable
- drop NEXT_PUBLIC_WS_URL so the WS URL falls back to the page origin
  and goes through the frontend's /ws rewrite
- remove ephemeral host port publications (ports: "8080"/"3000");
  Traefik reaches the containers over the docker network

Verified on a Dokploy instance: deploy done, frontend / -> 200 and
backend reachable through the proxy (/api/config -> 200).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 02:50:24 -06:00
Mauricio SiuandClaude Fable 5 c7487d8c09 fix: db healthcheck window too short and blocking depends_on aborted deploy
The deploy failed with 'dependency failed to start: container db-1 is
unhealthy'. Root cause: the MariaDB 11.8 healthcheck allowed only ~40s
(start_period 10s + 3x10s retries) before flagging the container
unhealthy, which is not enough for the first-boot datadir
initialization on a modest VPS. Since create-site depended on
db:service_healthy, docker compose up -d aborted the whole deploy.

Fixes, following the pattern of the existing working erpnext template:
- Extend the db healthcheck window (start_period 120s, 30 retries) so
  first-boot initialization does not mark the container unhealthy.
- Drop depends_on from the one-shot create-site and migration jobs and
  gate create-site with wait-for-it (db/redis) inside its command, so
  docker compose up -d returns without blocking on the multi-minute
  site creation and cannot fail on transient health states.

Verified on a fresh deploy: all services up, create-site installed
frappe + erpnext and enabled the scheduler, frontend serves the
ERPNext login page with HTTP 200.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 02:44:14 -06:00
Mauricio SiuandClaude Fable 5 987fdf3c09 fix: composer security audit blocked pinned shopware/core, bump to 6.7.12.1
Bootstrap died with exit 2 because Composer >= 2.9 enables
audit.block-insecure by default: shopware/core v6.7.8.2 is now affected
by 9 security advisories (all fixed in 6.7.10.1+), so
'composer create-project shopware/production:6.7.8.2' failed to resolve
dependencies and the whole stack never started.

- Bump the pinned Shopware version to 6.7.12.1 (latest, advisory-free).
- Disable audit.block-insecure in the bootstrap's global composer config
  so advisories published after a version is pinned cannot brick fresh
  one-click deploys.
- Use APP_URL=http://${main_domain} per template conventions; an https
  APP_URL breaks storefront sales-channel matching when the Dokploy
  domain is served over plain http.

Verified on a Dokploy instance: full bootstrap + deployment-helper
install completed in ~4 min, storefront and /admin both return HTTP 200.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 02:26:08 -06:00
Mauricio SiuandClaude Fable 5 c5033dc610 fix: remove interactive --password flag so Glances web server can start
The --password flag makes Glances prompt for a password interactively
via getpass, which fails in a non-TTY container. The container kept
crash-looping, so Traefik returned 404 for the domain. Glances also
does not read GLANCES_USERNAME/GLANCES_PASSWORD env vars, so the auth
setup was ineffective. Run the web server with GLANCES_OPT=-w and drop
the unused password env vars from the compose file and template.toml.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 02:20:36 -06:00
Mauricio SiuandClaude Fable 5 e6f7ede9a7 fix: don't force SSL by default so Chatwoot works on http domains
FORCE_SSL=true + FRONTEND_URL=https:// made Rails 301-redirect every
request to https, which Traefik answered with a sustained 404 because
Dokploy-generated template domains are http-only. Default to
FORCE_SSL=false and FRONTEND_URL=http://${main_domain} (matching the
repo convention); users who terminate TLS can flip these afterwards.

Verified on a Dokploy instance: fresh deploy of chatwoot/chatwoot:v4.12.1
migrates and answers HTTP 200 with the onboarding page.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 02:16:26 -06:00
Mauricio SiuandClaude Fable 5 288dfdce45 fix: mount postgres volume at new PGDATA path for postgres:18
The official postgres:18 image moved PGDATA from /var/lib/postgresql/data
to /var/lib/postgresql. Mounting the volume at the old path made the
entrypoint abort and the postgresql container restart-loop, failing the
deploy with "dependency postgresql failed to start". Mounting the volume
at /var/lib/postgresql fixes the deploy; server responds 200 on
/if/flow/initial-setup/.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 02:11:39 -06:00
Mauricio SiuandClaude Fable 5 ede9c3684c fix: align compose env vars with template.toml and allow external hostnames
The compose file referenced ${SERVICE_PASSWORD_ENCRYPT} and
${SERVICE_PASSWORD_WEB}, but template.toml defines the variables as
SETTINGS_ENCRYPTION_KEY and DUPLICATI__WEBSERVICE_PASSWORD, so both
values rendered empty at deploy time. Also removed the leftover
SERVICE_URL_DUPLICATI_8200 passthrough entry and added
DUPLICATI__WEBSERVICE_ALLOWED_HOSTNAMES=* so the Duplicati web server
(2.0.8+) accepts requests forwarded by Traefik for the configured
domain instead of rejecting unknown Host headers.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 02:10:02 -06:00
Mauricio SiuandClaude Fable 5 8480130401 fix: bundle Postgres so the service can actually start
The template pointed PS_DATA_SOURCE_URI at a placeholder connection
string (postgresql://user:password@host:5432/db), so the PowerSync
service could never connect and crash-looped, leaving the domain
returning Traefik 404s.

Changes:
- Add a bundled Postgres 17 service with wal_level=logical, a
  healthcheck, and a persistent volume; powersync waits for it to be
  healthy before starting.
- Replace the base64-encoded config env var with a readable
  powersync.yaml mounted via [[config.mounts]]. Replication reads from
  the powersync database and bucket storage uses a separate
  powersync_storage database (Postgres storage requires a database
  distinct from the replication source).
- Add an init SQL mount that creates the storage database, a demo
  "lists" table synced by the default sync rules, and the powersync
  publication required for logical replication.
- Replace the unsupported sync_config block with standard sync_rules,
  and add an HS256 dev key so client auth works out of the box.
- Remove host port mapping (Traefik routes to the container port) and
  point the template domain at /probes/liveness since PowerSync has no
  route on "/".

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 02:05:00 -06:00
Mauricio SiuandClaude Fable 5 495f22c520 fix: postgres 18 data dir mountpoint breaking db startup
The postgres:18-alpine image moved PGDATA from /var/lib/postgresql/data
to /var/lib/postgresql, so mounting the volume at the old path made the
entrypoint abort and the db container restart forever, failing the
service_healthy dependency for dash and status-page.

- Mount db_data at /var/lib/postgresql (postgres 18 layout)
- Remove host port mappings (Dokploy routes via domains/Traefik)
- Generate POSTGRES_PASSWORD and CLICKHOUSE_PASSWORD with ${password:32}
  instead of hardcoded credentials
- Drop unused DASH_PORT/STATUS_PAGE_PORT env and dangling empty
  [[config.mounts]] section in template.toml

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 02:00:49 -06:00
Mauricio SiuandClaude Fable 5 e60d713179 fix: run init container as root so the install marker can be written
The tb-node image runs as the non-root "thingsboard" user (uid 799), but
the freshly created /data named volume is owned by root, so
"touch /data/.thingsboard-installed" failed with permission denied after
every successful install. Combined with "set -e" and "restart: on-failure",
the init container kept re-running the installer forever and the main
thingsboard service (gated on service_completed_successfully) never
started, leaving the domain returning 404.

Running the init service as root lets the marker be written so the init
completes and stays idempotent across redeploys. Also widened the main
service healthcheck start window (start_period 300s, retries 10) so the
slow first boot on modest VPS hardware is not marked unhealthy while
docker compose up --wait is in progress.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 01:55:38 -06:00
Mauricio SiuandClaude Fable 5 0999407513 fix: mount postgres 18 data volume at /var/lib/postgresql
The postgres:18 image moved its data directory from
/var/lib/postgresql/data to /var/lib/postgresql, and its entrypoint
now fails hard when a volume is mounted at the old path. This made
paperless-ngx-db restart-loop and never reach healthy, so the deploy
errored with 'dependency paperless-ngx-db failed to start'.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 01:55:26 -06:00
Mauricio SiuandClaude Fable 5 448d4ba76d fix: oCIS crash-loop and https-only redirect behind Dokploy proxy
The container was restart-looping because the built-in IdP fatals with
"invalid iss value, URL must start with https://" when OCIS_URL uses
plain http, which caused the sustained 502.

- Set owncloud_url to https://${main_domain} so the IdP issuer is valid
  and ocis server stays up.
- oCIS 8.x unconditionally answers 308 -> https:// whenever it receives
  X-Forwarded-Proto: http (services/proxy https_redirect middleware), so
  the domain check then died on a redirect loop into a non-existent 443
  router. Add a small nginx gateway in front of oCIS that forwards
  requests with X-Forwarded-Proto: https (what a TLS-terminating proxy
  sends) and point the Dokploy domain at gateway:8080.
- Update the README notes accordingly.

Verified on a live Dokploy instance: deploy done, GET / returns
HTTP 200 with title "ownCloud".

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 01:54:04 -06:00
Mauricio SiuandClaude Fable 5 ef8071e5ff fix: send Authorization header in NodeLink healthcheck
NodeLink requires the Authorization header on every API route,
including /version, so the healthcheck's unauthenticated fetch always
got a 401 and the container stayed permanently unhealthy. Traefik
skips unhealthy containers, so the assigned domain returned a
sustained 404 even though the deploy finished successfully.

Pass the container's NODELINK_SERVER_PASSWORD as the Authorization
header in the healthcheck fetch; the container now reaches a healthy
state and the domain routes to the server (401 on / without
credentials, 200 on /version with the password), as expected for a
Lavalink-compatible server.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 01:49:54 -06:00
Mauricio SiuandClaude Fable 5 5a6d31c147 fix: make Evolution CRM and Evolution GO templates respond on their domains
evolutioncrm:
- Point the evo-crm-frontend domain at port 80 instead of 5173: the
  community frontend image serves the built app via nginx on port 80
  (5173 is the vite dev port), so the domain returned 502.
- Set EVOLUTION_API_ONLY_SERVER=true on evo-crm: the community image
  ships without the Rails dashboard views (the UI lives in the separate
  evo-crm-frontend service), so the default root route (dashboard#index)
  can never render and returned 406 for every request. With the flag the
  root serves the API status JSON; all /api routes are unaffected.
- Drop the evolution-go-* volumes that were left over from the other
  template.

evolutiongo:
- Evolution GO has no route on "/" and answers 503 (LICENSE_REQUIRED)
  on API routes until a license is activated through the bundled
  manager UI, so the single domain never responded. Add a small nginx
  gateway that redirects "/" to /manager/login and proxies everything
  else (WebSockets included) 1:1 to evolution-go:8080, and point the
  domain at it.
- Persist /app/dbdata and /app/logs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 01:41:12 -06:00
Mauricio SiuandClaude Fable 5 3523fc6a90 fix: remove nested .config volume that crash-looped code-server
The named volume mounted at /home/coder/.config was created root-owned
(the path does not exist in the codercom/code-server image), so
code-server running as uid 1000 failed with
"EACCES: permission denied, mkdir '/home/coder/.config/code-server'"
and restarted in a loop, leaving Traefik returning 404. The .config
directory already lives inside /home/coder, which is persisted by the
code-server-home volume, so the extra volume is unnecessary.

Verified: deploy done, container healthy, domain on port 8080 returns
HTTP 200 with the code-server login page.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 01:37:50 -06:00
Mauricio SiuandClaude Fable 5 65a9a0a5a5 fix: let wallabag entrypoint provision the database so the install runs
The template deployed but returned a persistent HTTP 500: MARIADB_DATABASE
pre-created the wallabag database, so the image entrypoint detected an
existing database, skipped bin/console wallabag:install and left an empty
schema. Only MARIADB_ROOT_PASSWORD is set now, letting the entrypoint
create the database/user and run the installer on first boot (matching the
official wallabag docker-compose).

Also:
- build SYMFONY__ENV__DOMAIN_NAME from the generated domain with the http
  scheme so assets/redirects match how the domain is served
- point SYMFONY__ENV__REDIS_HOST at the wallabag-redis service (default is
  'redis', which does not resolve here)
- randomize SYMFONY__ENV__SECRET instead of relying on the image's
  hardcoded default

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 01:37:02 -06:00
Mauricio SiuandClaude Fable 5 ce4e15741a fix(plane): clear network false positive and restore canary metadata
- Reword two docker-compose comments so the literal string
  "dokploy-network" no longer appears. The compose never declared the
  network manually (Dokploy attaches it automatically); the automated
  template check was tripping on the comment text alone.
- meta.json: keep canary's richer description and tags
  (kanban, project-management), bumping only the version to v1.3.1.

Deploy-verified on a test Dokploy instance: full stack booted in 465s
and proxy:80 answered HTTP 200 with the Plane landing page.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 01:26:27 -06:00
Mauricio SiuandClaude Fable 5 56df572522 fix: trust Dokploy's Traefik proxy via LOADBALANCER_IPS
Zulip 12 rejects requests forwarded by an untrusted reverse proxy with
a 500 "Proxy-Misconfiguration: Incorrect reverse proxy IPs set in
Zulip" error page. TRUST_GATEWAY_IP=True only whitelists the
container's default-route gateway IP, but Dokploy's Traefik connects
from its own container IP on the (dynamically-subnetted) compose
network, so it was never trusted.

Replace TRUST_GATEWAY_IP with LOADBALANCER_IPS covering the RFC1918
ranges, which Zulip feeds into nginx set_real_ip_from / its trusted
proxy list, so Traefik is trusted regardless of which Docker subnet it
connects from.

Also align meta.json version with the shipped image tag (12.1-0).

Note: the zulip-server image ships a HEALTHCHECK (/health, 300s start
period) and first boot runs full migrations, so Traefik only exposes
the router once the container turns healthy — expect several minutes
of 404 on the domain right after the first deploy.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 01:24:58 -06:00
Mauricio SiuandClaude Fable 5 b81de7fda7 fix: resolve conflict markers accidentally committed during meta migration
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 01:13:53 -06:00
Mauricio SiuandClaude Fable 5 eb1c47e86b fix: resolve conflict markers accidentally committed during meta migration
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 01:13:50 -06:00
Mauricio SiuandClaude Fable 5 fc447e3a9a fix: resolve conflict markers accidentally committed during meta migration
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 01:13:47 -06:00
Mauricio SiuandClaude Fable 5 f1709c321c fix: resolve conflict markers accidentally committed during meta migration
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 01:12:41 -06:00
Mauricio SiuandClaude Fable 5 16eacb1fdf fix: point domain at /dashboard — engram cloud serves no route at /
engram `cloud serve` only registers /health, /sync/* and /dashboard/*;
Go's ServeMux answers "404 page not found" at the root path, which is
indistinguishable from a Traefik router miss. The deploy itself was fine
(both containers healthy), but the default domain pointed at `/` and
kept returning 404. Adding `path = "/dashboard"` routes the app's real
browser surface (login page / dashboard).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 01:11:26 -06:00
Mauricio SiuandClaude Fable 5 ff625d2125 fix: resolve broken merge in supabase template, keep canary structure with updated image versions
The previous merge of origin/canary into this branch was committed with
unresolved conflict markers in docker-compose.yml and template.toml,
producing invalid YAML/TOML. It also carried over the old kong
eval-based entrypoint, which made the kong container unhealthy and
failed the deploy (dependency kong failed to start).

This commit restores the known-good template structure from canary
(kong-entrypoint.sh, declarative kong.yml with JWKS/asymmetric key
routes, vector + analytics stack, correct domains) and applies only
the version bumps intended by this PR:

- studio 2026.04.27 -> 2026.06.03-sha-0bca601
- gotrue v2.186.0 -> v2.189.0
- postgrest v14.8 -> v14.12
- realtime v2.76.5 -> v2.102.3
- storage-api v1.48.26 -> v1.60.4
- postgres-meta v0.96.3 -> v0.96.6
- edge-runtime v1.71.2 -> v1.74.0
- postgres 15.8.1.085 -> 17.6.1.136
- supavisor 2.7.4 -> 2.9.5

Deploy-tested on Dokploy: all 13 containers running, kong healthy,
studio dashboard reachable through kong (HTTP 200).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 01:03:04 -06:00
Mauricio SiuandClaude Fable 5 88fae2f9cc fix: chown named volumes so the non-root filerun user can install on first run
The filerun/filerun image runs as user filerun (1001:1001), but /var/www/html
is created as root in the image, so the named volume inherits root:root
ownership. The entrypoint's first-run installer then fails to download
filerun.zip into /var/www/html (Permission denied) and the container
crash-loops with exit 1.

- Add a busybox init service that chowns the html and user-files volumes to
  1001:1001 before filerun starts (gated via service_completed_successfully).
- Drop the user: "99:100" override, which is meant for pre-chowned host bind
  mounts in the upstream example, not named volumes.
- Remove the UTF-8 BOM at the start of the file, the legacy links: entry and
  the obsolete version: key.

Verified on a live Dokploy deploy: HTTP 200 with page title
"FileRun :: Installation".

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 01:00:34 -06:00
Mauricio SiuandClaude Fable 5 8e9d32a783 fix: pin heyform to v0.1.0 and use valid keydb tag
- heyform/community-edition:latest now points at v3.0.0-rc.* which hangs
  after Mongoose init and never binds port 8000 (502 behind Traefik).
  Pin the last stable release v0.1.0 (boots and serves the UI).
- eqalpha/keydb:6.3.3 does not exist on Docker Hub; use the multi-arch
  alpine tag instead.

Deploy-tested on a Dokploy instance: HTTP 200, HeyForm UI renders.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 00:45:53 -06:00
Mauricio SiuandClaude Fable 5 0b7511f79c fix: tandoor listens on unix socket by default — bind gunicorn to TCP 8080
The vabene1111/recipes 2.x image starts gunicorn on unix:/tmp/tandoor.sock
unless TANDOOR_PORT is set, so Traefik got 502. Set TANDOOR_PORT=8080 and
point the domain to 8080 (80 was never listening).

Deploy-tested on a Dokploy instance: HTTP 200, setup page renders.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 00:31:53 -06:00
Mauricio SiuandClaude Fable 5 b6710c39aa fix: matomo logo path in meta.json (filename, not full path)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 00:11:50 -06:00
Mauricio Siu 77edae36d8 Merge remote-tracking branch 'origin/canary' into SamirChatwiti/canary
# Conflicts:
#	meta.json
2026-07-08 00:06:38 -06:00
Mauricio Siu c5a713436d Merge remote-tracking branch 'origin/canary' into erpnext-version-16
# Conflicts:
#	meta.json
2026-07-08 00:06:34 -06:00
Mauricio Siu df4260d172 Merge remote-tracking branch 'origin/canary' into add-glances
# Conflicts:
#	blueprints/imgproxy/docker-compose.yml
#	blueprints/mediafetch/docker-compose.yml
#	blueprints/mediafetch/template.toml
#	blueprints/nextcloud-aio/docker-compose.yml
#	meta.json
2026-07-08 00:06:27 -06:00
Mauricio Siu 3a56077d39 Merge remote-tracking branch 'origin/canary' into zrja/shopware-v1
# Conflicts:
#	meta.json
2026-07-08 00:06:22 -06:00
Mauricio Siu ec70e7a5aa Merge remote-tracking branch 'origin/canary' into juandelperal/canary
# Conflicts:
#	meta.json
2026-07-08 00:06:05 -06:00
Mauricio Siu 9af20d0698 Merge remote-tracking branch 'origin/canary' into multica-clean
# Conflicts:
#	blueprints/imgproxy/docker-compose.yml
#	blueprints/mediafetch/docker-compose.yml
#	blueprints/mediafetch/template.toml
#	blueprints/nextcloud-aio/docker-compose.yml
#	meta.json
2026-07-08 00:06:01 -06:00
Mauricio Siu a8f186303a Merge remote-tracking branch 'origin/canary' into add-duplicati
# Conflicts:
#	meta.json
2026-07-08 00:05:50 -06:00
Mauricio Siu 533b433f6c Merge remote-tracking branch 'origin/canary' into update-authentik-2026.2.2-pg18
# Conflicts:
#	meta.json
2026-07-08 00:05:42 -06:00
Mauricio Siu 3fc4acc373 Merge remote-tracking branch 'origin/canary' into ZeroWing-Automator/canary
# Conflicts:
#	meta.json
2026-07-08 00:05:34 -06:00
Mauricio Siu 26860d94c0 Merge remote-tracking branch 'origin/canary' into iRazvan2745/canary
# Conflicts:
#	meta.json
2026-07-08 00:05:29 -06:00
Mauricio Siu 947f099806 Merge remote-tracking branch 'origin/canary' into feat/add-powersync-template
# Conflicts:
#	meta.json
2026-07-08 00:05:25 -06:00
Mauricio Siu c6c07246b6 Merge remote-tracking branch 'origin/canary' into feature/add-dokploy-templates
# Conflicts:
#	blueprints/gotify/docker-compose.yml
#	blueprints/gotify/gotify.svg
#	blueprints/gotify/template.toml
#	blueprints/jellyseerr/docker-compose.yml
#	blueprints/jellyseerr/jellyseerr.svg
#	blueprints/jellyseerr/template.toml
#	blueprints/privatebin/docker-compose.yml
#	blueprints/privatebin/privatebin.svg
#	blueprints/privatebin/template.toml
#	blueprints/speedtest-tracker/docker-compose.yml
#	blueprints/speedtest-tracker/speedtest-tracker.svg
#	blueprints/speedtest-tracker/template.toml
#	meta.json
2026-07-08 00:05:19 -06:00
Mauricio Siu c5f213c173 Merge remote-tracking branch 'origin/canary' into codex/add-paperless-ngx-template
# Conflicts:
#	meta.json
2026-07-08 00:05:15 -06:00
Mauricio Siu 47a04f55a5 Merge remote-tracking branch 'origin/canary' into codex/add-thingsboard-template
# Conflicts:
#	meta.json
2026-07-08 00:05:07 -06:00
Mauricio Siu cbc0a9f242 Merge remote-tracking branch 'origin/canary' into codex/add-nodelink-template
# Conflicts:
#	meta.json
2026-07-08 00:05:03 -06:00
Mauricio Siu b4f9e48699 Merge remote-tracking branch 'origin/canary' into codex/add-owncloud-infinite-scale-template
# Conflicts:
#	meta.json
2026-07-08 00:05:00 -06:00
Mauricio Siu a8efe43f5d Merge remote-tracking branch 'origin/canary' into add-code-server-template
# Conflicts:
#	meta.json
2026-07-08 00:04:56 -06:00
Mauricio Siu d7d426c968 Merge remote-tracking branch 'origin/canary' into add-wallabag-template
# Conflicts:
#	meta.json
2026-07-08 00:04:52 -06:00
Mauricio Siu 13c95c3045 Merge remote-tracking branch 'origin/canary' into update-plane-v1.3.1
# Conflicts:
#	blueprints/plane/docker-compose.yml
#	blueprints/plane/template.toml
#	meta.json
2026-07-08 00:04:43 -06:00
Mauricio Siu 501d80dcd5 Merge remote-tracking branch 'origin/canary' into evolution-crm
# Conflicts:
#	meta.json
2026-07-08 00:04:36 -06:00
Mauricio Siu 5d90a07508 Merge remote-tracking branch 'origin/canary' into add-engram-template
# Conflicts:
#	meta.json
2026-07-08 00:04:32 -06:00
Mauricio Siu 3e856b0316 Merge remote-tracking branch 'origin/canary' into codex/add-filerun-template
# Conflicts:
#	meta.json
2026-07-08 00:04:28 -06:00
Mauricio Siu b94dd44f87 Merge remote-tracking branch 'origin/canary' into codex/add-zulip-template
# Conflicts:
#	meta.json
2026-07-08 00:04:25 -06:00
Mauricio Siu 896f35a8f0 Merge remote-tracking branch 'origin/canary' into codex/add-heyform-smtp-config 2026-07-08 00:04:21 -06:00
Mauricio Siu c048635ec3 Merge remote-tracking branch 'origin/canary' into codex/add-tandoor-recipes-template
# Conflicts:
#	meta.json
2026-07-08 00:04:14 -06:00
Mauricio Siu 32e67eb0aa Merge remote-tracking branch 'origin/canary' into supabase
# Conflicts:
#	blueprints/supabase/docker-compose.yml
#	blueprints/supabase/template.toml
#	meta.json
2026-07-08 00:04:10 -06:00
Mauricio SiuandGitHub a93794e289 Merge pull request #978 from Dokploy/feat/per-template-meta
feat: per-template metadata (blueprints/<id>/meta.json) — no more meta.json merge conflicts
2026-07-08 00:00:10 -06:00
Mauricio SiuandClaude Fable 5 c3de62fb83 feat: per-template metadata — eliminate meta.json merge conflicts
- move each template's metadata to blueprints/<id>/meta.json (442 files, byte-identical roundtrip with the old root meta.json)
- generate the served meta.json at build time into app/public/meta.json (gitignored); pnpm dev/build run the generator first
- CI validates every blueprints/<id>/meta.json via generate-meta.js --check (required fields, id/folder match, logo exists, folder<->meta bidirectionality) and rejects any committed root meta.json
- remove root meta.json, dedupe-and-sort-meta.js and build-scripts/process-meta.js (obsolete)
- update CONTRIBUTING.md, AGENTS.md and README.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 23:58:10 -06:00
Mauricio SiuandGitHub 6a6ab5ac17 Merge pull request #957 from rohitmulani63-ops/add-jitsi-meet-template
feat: add Jitsi Meet template
2026-07-07 23:38:53 -06:00
Mauricio SiuandGitHub cdee0c3e2b Merge pull request #726 from feba33/patch-1 2026-07-07 19:09:35 -06:00
Mauricio Siu 632a2ac79e Merge remote-tracking branch 'origin/canary' into SamirChatwiti/canary
# Conflicts:
#	meta.json
2026-07-07 17:36:57 -06:00
Mauricio Siu 657523290b Merge remote-tracking branch 'origin/canary' into add-jitsi-meet-template
# Conflicts:
#	meta.json
2026-07-07 17:36:53 -06:00
Vladyslav ProsolupovandGitHub 9795b2f042 fix: Imgproxy container exposure (#740) 2026-07-07 17:36:29 -06:00
Andrew TinekovandGitHub b096c532ce feat: Update Glitchtip to version 6.1.0 (#751)
* feat(glitchtip): update to version 6.1.0

* fix(glitchtip): fix code violations
2026-07-07 17:36:25 -06:00
Omar HerriandGitHub 0a62e507b8 Update docker-compose.yml (#753) 2026-07-07 17:36:22 -06:00
RayaneandGitHub 16693e6f74 fix(plane): update to v1.2.3 and replace MinIO with RustFS (#760)
* fix(plane): update template to Plane v1.x (stable)
The existing template targeted v0.27.1 which is heavily outdated.
This updates it to match Plane's current official deployment config.
Changes:
- Images: v0.27.1 → stable (currently v1.2.3) from Docker Hub
- Remove explicit commands from frontend services (built into images)
- Postgres: 17-alpine → 15.7-alpine (matches Plane's supported version)
- Valkey: 7.2.5 → 7.2.11
- Proxy: add admin + live dependencies, proxy_config/proxy_data volumes
- Add LIVE_SERVER_SECRET_KEY, APP_DOMAIN, SITE_ADDRESS env vars
- Add RABBITMQ_USER/PASSWORD/VHOST (new v1.x env var names)
- Fix RABBITMQ_DEFAULT_USER bug (was hardcoded string, not variable)
- Fix DATABASE_URL to use template variables directly
- Fix AWS_ACCESS_KEY_ID to match MINIO_ROOT_USER literal
- Remove deprecated: version key, SENTRY_*, NGINX_PORT
- Remove unused env_file from plane-redis
- Add restart policies to all services

* fix(plane): replace MinIO with RustFS (Apache 2.0)
MinIO's open-source edition is effectively dead:
- Admin UI stripped (March 2025)
- Docker images discontinued (October 2025)
- GitHub repo in maintenance mode (December 2025)
- Marked as "NO LONGER MAINTAINED" (February 2026)
RustFS is an S3-compatible drop-in replacement:
- Apache 2.0 license (no AGPL restrictions)
- Same S3 API on port 9000
- Written in Rust, 2.3x faster than MinIO for small objects
- Active development with built-in web console

* fix(plane): address CI and convention issues

- Add back version: "3.8" (required by Dokploy conventions)
- Update meta.json: version v0.27.1 → v1.2.3
- Run process-meta to fix pre-existing strapi duplicate
- Migrator restart: "no" → on-failure

* fix(plane): address review feedback

- Pin RustFS to 1.0.0-alpha.90 (no latest tag)
- WEB_URL and CORS_ALLOWED_ORIGINS use http (Dokploy handles TLS)
2026-07-07 17:36:19 -06:00
Tobias DalhofandGitHub e933413655 feat(nextcloud-aio): add nextcloud_cron service (#766) 2026-07-07 17:36:16 -06:00
4deab71ad5 fix: use HTTPS for Outline OIDC URLs (#940)
* fix: use HTTPS for Outline OIDC URLs

* Add root-healthy Dex proxy for Outline

---------

Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
2026-07-07 17:36:13 -06:00
Sancho GodinhoandGitHub 56cd3dba39 Add MaxIO template (#744)
* Add Docker Compose configuration for Maxio service

* Add template configuration for maxio service

* Add Maxio logo

* Add Maxio metadata to meta.json

Added metadata for Maxio including links and tags.

* Run node dedupe-and-sort-meta.js

* Fix name from Maxio to MaxIO

* Make suggested updates

* Add missing restart policy

* Make improvements
2026-07-07 17:36:10 -06:00
Andrew TinekovandGitHub 66fea6e989 feat: add OpenObserve template (#750)
* feat: add openobserve template

* fix(openobserve): fix code violations
2026-07-07 17:36:07 -06:00
spacewaterbearandGitHub f3b96bf2d4 feat: add crawlab (#759)
* feat: add crawlab

* feat: add crawlab - re order

* feat: add crawlab - fix compose

* feat: split crawlab into worker and master
2026-07-07 17:36:04 -06:00
MaflyandGitHub 4f103ea041 Add Billmora template (#773)
* feat: add billmora template

* feat: standardize configuration and volume mounts

* feat: hardcode Laravel automations in docker-compose.yml

* fix(billmora): migration race condition

* refactor(billmora): simplify service deploy architecture and standardize blueprint

* feat(billmora): ensure initial data is seeded on startup

* fix(billmora): use storage-based .env persistence to resolve directory mount error

* fix(billmora): revert to separate services for worker and scheduler

* refactor(billmora): remove APP_TIMEZONE from blueprint configuration

* fix(billmora): correct links structure and lowercase tags in meta.json

* fix(billmora): remove invalid volume mounts from template.toml

* fix(billmora): process root meta.json to resolve duplicated templates
2026-07-07 17:36:00 -06:00
8dfb810e65 feat: add Fider template (#936)
* feat: add Fider template

* Add local SMTP service for Fider

---------

Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
2026-07-07 17:35:57 -06:00
7096fe2751 feat: add Seq template (#942)
Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
2026-07-07 16:04:29 -06:00
Abdullah IstiakandGitHub f2f4d85d43 Update Supabase Docker configuration and template (#872)
* Update Supabase Docker configuration and template

- Updated Supabase Studio and GoTrue images to the latest versions.
- Modified healthcheck commands for the Studio service.
- Enhanced environment variable configuration in docker-compose.yml for better flexibility.
- Updated Logflare API key references and added new S3 protocol access keys in template.toml.
- Introduced custom entrypoint script for Kong to handle Lua expressions and environment variable substitution.
- Added new routes and plugins for enhanced authentication and authorization in Kong configuration.

* Refactor Supabase Docker Compose and Template Configuration

- Removed container name prefixes from services in docker-compose.yml for consistency.
- Increased healthcheck retries and start periods for several services to improve stability.
- Updated healthcheck timeout and retry configurations for the analytics service.
- Adjusted appname generation logic in template.toml to ensure proper naming for services.
- Cleaned up commented sections in template.toml for clarity.
2026-07-07 15:51:01 -06:00
Abdelatif DjeddouandGitHub 292716be4b feat: add OpenSourcePOS template (#890) 2026-07-07 15:50:58 -06:00
06904b17be fix: repair CI broken by #875 (arche meta links + stray pnpm-workspace.yaml) (#977)
* fix: repair CI broken by #875 merge

- remove stray build-scripts/pnpm-workspace.yaml (placeholder content broke pnpm install in validate-docker-compose)
- add missing links.website/docs to arche entry in meta.json (validate check)

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

* chore: remove stray .vscode/settings.json introduced by #920

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

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 15:50:39 -06:00
Yağız Berke GüvençandGitHub 708b3019bf feat(postiz): update docker-compose and template for Temporal integration (#851) 2026-07-07 15:44:42 -06:00
NaterfuteandGitHub 7095691571 updated Pyrodactyl logo (#855) 2026-07-07 15:44:39 -06:00
luolinkandGitHub 31bff09eaa Add Marketing Dashboard template (#861) 2026-07-07 15:44:36 -06:00
Abian SuarezandGitHub 641fd75bf7 feat: add rustrak and rustrak-full templates (#866)
* feat: add rustrak and rustrak-full templates

- rustrak: server-only with SQLite, single service, no external DB
- rustrak-full: server + Next.js dashboard + PostgreSQL
Both use abians7/rustrak-server:v0.2.1, Sentry-compatible error tracking

* chore: update rustrak logo to new design
2026-07-07 15:44:33 -06:00
3829b188d8 feat(meta): add Arche AI workspace platform to meta.json (#875)
Introduce Arche, a self-hosted AI workspace platform, with relevant metadata including description, logo, and GitHub link. This addition enhances the diversity of tools available in the project.

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
2026-07-07 15:44:30 -06:00
3d74ad7c08 feat: add Soft Serve template (#889)
* feat: add Soft Serve template

* fix: quote Soft Serve listen addresses

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
2026-07-07 15:44:27 -06:00
d1cc00391e feat: add HedgeDoc template (#893)
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
2026-07-07 15:44:23 -06:00
599588d095 feat: add Taiga template (#895)
Adds a Dokploy template for Taiga (taigaio/taiga-back, taiga-front,
taiga-events, taiga-protected) wired through an nginx gateway, with
RabbitMQ and Postgres backing services.

Diverges from prior PR #547 in two ways:
- Strips trailing inline `# ...` comments from env values in
  template.toml. Those comments were captured as part of the value when
  Dokploy expanded them into docker-compose, polluting strings like
  TAIGA_SCHEME, EMAIL_BACKEND, etc. and breaking Django URL/email
  configuration at runtime.
- Adds explicit SUBPATH= and RABBITMQ_VHOST env entries that PR #547
  referenced but never set, so variable expansion no longer falls back
  to empty/undefined.

Validated locally with build-scripts/validate-template.ts,
build-scripts/validate-docker-compose.ts, and meta.json required-field
+ dedupe-and-sort checks. No runtime deploy was performed locally.

Co-authored-by: Richard Nevins <richjnevins@gmail.com>
2026-07-07 15:44:20 -06:00
MagiqueandGitHub 438a079a6b fix(discourse): replace deprecated Bitnami images with official alternatives (#910)
* refactor(docker-compose): update PostgreSQL and Redis images, adjust environment variables

* chore(meta.json): update Discourse version to 2026.1.4

* chore(docker-compose): comment out DISCOURSE_FORCE_HTTPS for production

* fix(docker-compose): update Discourse app port to 80 for production
2026-07-07 15:44:17 -06:00
df4pandGitHub 38483d467c feat: Add OmniRoute - Free LLM Gateway Template (#920)
* feat: Add OmniRoute - Free LLM Gateway Template

Adding the OmniRoute template to Dokploy.

Never stop coding. Free AI gateway: one endpoint, 160+ providers (50+ free), connect Claude Code, Codex, Cursor, Cline & Copilot to FREE Claude/GPT/Gemini. RTK+Caveman stacked compression saves 15-95% tokens, smart auto-fallback, MCP/A2A, multimodal APIs, Desktop/PWA.

* fix: Testing files updated

Testing files with pnpm updated.

* fix(omniroute): pin OmniRoute image version, fix template.toml syntax, normalize metadata

* chore: Add VS Code setting for git config auto-approval

* chore(app): add pnpm-workspace.yaml to fix pnpm workspace config
2026-07-07 15:44:13 -06:00
f796047552 feat: add Prefect template (#930)
* feat: add Prefect template

* fix: tighten Prefect template routing

---------

Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
2026-07-07 15:44:10 -06:00
Yusuf GündoğduandGitHub 1c0380d77b feat(blueprint): add LibreDB Studio (#931)
* feat: add libredb-studio compose

Adds LibreDB Studio — an MIT-licensed, AI-powered open-source SQL IDE (PostgreSQL, MySQL, Oracle, SQL Server, SQLite, MongoDB, Redis).

This commit adds the docker-compose.yml. The template.toml and meta.json entry follow in the same branch.

Image: ghcr.io/libredb/libredb-studio
Repo: https://github.com/libredb/libredb-studio

* feat: add libredb-studio template.toml

Adds the Dokploy template.toml for LibreDB Studio.

Defines auto-generated secrets (admin password, user password, JWT secret), exposes port 3000 on the primary domain, and persists data via a mount at /app/data.

* feat: add libredb-studio to meta.json

Registers LibreDB Studio in the template catalog index (meta.json), alphabetically-independent top entry. Completes the LibreDB Studio template (compose + template.toml + meta entry).

* fix: sort libredb-studio entry alphabetically in meta.json

Moves the libredb-studio entry to its correct alphabetical position between librechat and libredesk so meta.json remains sorted by id. Resolves the failing "Validate and Process Meta.json" check (duplicates/sort-order validation).

* fix: expand libredb-studio tags to match meta.json formatting

Formats the libredb-studio "tags" array as a multi-line block to match the output of dedupe-and-sort-meta.js, making the entry byte-identical to the canonical processed file. Resolves the failing "Validate and Process Meta.json" check.

* fix: remove invalid mounts block from libredb-studio template.toml

Removes the [[config.mounts]] block, which failed validation because Dokploy requires a 'content' field for file mounts. Data persistence is already handled by the named volume (libredb-data:/app/data) in docker-compose.yml, so no file mount is needed. Resolves the failing "Validate Docker Compose Files" check.

* fix: correct indentation of libredb-studio tags in meta.json

Adjusts the indentation of the "tags" key to 4 spaces so the libredb-studio entry is byte-identical to the output of dedupe-and-sort-meta.js. Resolves the remaining "Validate and Process Meta.json" check failure.

* feat: add libredb-studio logo

Adds the libredb-studio.svg logo to blueprints/libredb-studio/ so it matches the "logo" field in meta.json. Resolves the "Validate Blueprints Structure and Meta" check, which verifies that each meta.json logo has a corresponding file in its blueprint folder.

* fix: bump libredb-studio image to v0.9.27

Updates the image tag from v0.9.13 to v0.9.27 (current release) so reviewers can test against the latest version.

* fix: update LibreDB Studio version to v0.9.27

Update version field from v0.9.13 to v0.9.27 in meta.json

* fix(blueprint): remove v prefix from image tag

GHCR tags do not use v prefix (0.9.27 not v0.9.27)

* fix(meta): remove v prefix from version field

GHCR tags do not use v prefix (0.9.27 not v0.9.27)
2026-07-07 15:44:07 -06:00
cdc72377c7 fix: respect stopped Immich deployments (#938)
Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
2026-07-07 15:44:04 -06:00
1dd181b1c7 feat: add Speedtest Tracker template (#952)
Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
2026-07-07 15:43:59 -06:00
Cagdas SalurandGitHub a33fa76399 feat(template): add tela — markdown-native team wiki with MCP (#967) 2026-07-07 15:43:56 -06:00
5523024b95 feat(appwrite): update template to 1.9.5 (#970)
* feat(appwrite): update template to 1.9.5

Move default datastore to MongoDB (DocumentsDB), add worker-screenshots,
worker-executions and task-interval, bump all images to 1.9.5, expand v5
function runtimes, and provide mongo bootstrap files via config.mounts.
MariaDB kept as a supported alternative. PostgreSQL/embedding (VectorsDB)
and bundled Traefik intentionally excluded.

* fix(appwrite): re-add compose version header and add mongodb tag

Address review: restore "version: 3.8" header (repo convention across
blueprints) and add the mongodb tag to meta.json to reflect the new
default datastore.

* (fix): add container_name to appwrite executor so it can find itself

The openruntimes executor v0.25 discovers its own container by listing
containers whose name matches its hostname (exc1). Without
container_name, compose names the container <project>-openruntimes-executor-1,
the lookup fails with 'Own container not found' and the executor
crash-loops, breaking all function/site builds and executions with
'Could not resolve host: exc1'. Matches upstream appwrite 1.9.5 compose.

Verified end-to-end on a fresh Dokploy v0.29.8 server: executor healthy,
function build + execution succeed.

* (fix): route wildcard sites/functions subdomains to appwrite

Dokploy domains only support exact hosts, so Appwrite-generated preview
and execution URLs (<id>.sites.<domain>, <id>.functions.<domain>) hit
Dokploy traefik with no matching router: 404 over HTTP and the traefik
default self-signed certificate over HTTPS ('site is insecure').

Add HostRegexp routers on the appwrite service for *.sites and
*.functions domains on both web and websecure entrypoints. HTTPS for
these subdomains still requires the user to provide a wildcard
certificate (DNS-01 resolver or uploaded wildcard/Origin CA cert);
with tls=true routers in place traefik picks it up via SNI once added.

Verified on a live Dokploy v0.29.8 deployment: site subdomains route
correctly over HTTP and HTTPS after adding the labels.

* (chore): remove wildcard routing comment

* (fix): drop container_name, use service-name hostname for executor self-discovery

container_name is disallowed by repo conventions and fails CI validation.
The executor discovers its own container by matching gethostname()
against Docker container names (substring filter), so hostname
openruntimes-executor matches <project>-openruntimes-executor-1 and
_APP_EXECUTOR_HOST can use the DNS-resolvable service name.

Also read the MongoDB healthcheck password from the container env
(MONGO_INITDB_ROOT_PASSWORD) instead of interpolating _APP_DB_ROOT_PASS
at render time, so shell-special characters in generated passwords
cannot break authentication.

Both verified on a live Dokploy v0.29.8 deployment: executor healthy,
function execution succeeds, mongodb healthcheck passes.

---------

Co-authored-by: ChiragAgg5k <chirag@appwrite.io>
2026-07-07 15:43:53 -06:00
Abdelatif DjeddouandGitHub 3ebc2f850f feat: add TimescaleDB template (#892) 2026-07-07 15:43:15 -06:00
8a52825167 feat: add Joomla template (#891)
* feat: add Joomla template

* docs: clarify Joomla admin credential fields

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
2026-07-07 15:43:07 -06:00
1e99d46afe feat: add SendDock template (#821)
* feat(senddock): add SendDock template

SendDock is an open-source, self-hosted email marketing platform with
BYO SMTP. The template ships postgres + redis + the canonical
ghcr.io/arkhe-systems/senddock image, with healthchecks, named
volumes and the env vars required for a working install.

The senddock service runs migrations on startup via goose and serves
the Vue dashboard on port 8080. PUBLIC_URL is wired to the Dokploy
domain helper so unsubscribe links and broadcasts work out of the
box. License key is left empty by default, which gives users the
free Core experience; setting SENDDOCK_LICENSE_KEY unlocks the Pro
features.

Running dedupe-and-sort-meta.js per CONTRIBUTING removed an
unrelated duplicate strapi entry that already existed in the index
(same version, same logo, listed twice). The senddock entry is the
intended addition.

* fix(senddock): apply review fixes and bump to 0.6.4.1

- Add required `version: "3.8"` declaration to docker-compose.yml per AGENTS.md
- Convert template.toml env from sub-table to array-of-strings syntax
- Bump image and meta.json version to 0.6.4.1 (latest stable, fixes Redis rate-limiter restart loop affecting 0.4.x-0.6.4)

* fix(senddock): correct website and docs URLs to senddock.dev

* fix(senddock): bump to 0.6.5.1

---------

Co-authored-by: Sebastian Vargas <juanse@MacBook-Air-de-Sebastian.local>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
2026-07-07 15:42:47 -06:00
091ea7afda Update Autobase to version 2.7 (#830)
* Update Autobase to version 2.7

Update autobase console image tag in blueprints/autobase/docker-compose.yml from 2.5.2 to 2.7.2 and bump the corresponding package version in meta.json to 2.7.2 to keep metadata in sync with the deployed image.

* Add dbdesk_studio_data Docker volume

---------

Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
2026-07-07 15:42:13 -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
LuisandGitHub 989bf839b6 feat: add Agent Zero autonomous AI agent blueprint (#791)
* feat: add Agent Zero autonomous AI agent blueprint

Added Agent Zero blueprint with SVG logo, Docker Compose configuration for v1.9, and template for deployment. Agent Zero is an open-source autonomous AI agent framework with memory and tool use capabilities.

* feat(meta): add documentation link to agent-zero metadata

Added docs URL to the links section in meta.json to provide direct access to the project documentation at https://www.agent-zero.ai/p/docs/

* fix: add length parameter to password helper
2026-07-07 15:03:09 -06:00
Benjamin NussbaumandGitHub 22f1fe5ee6 feat(blueprint): update name of trmnl-byos-laravel and version (#789) 2026-07-07 15:02:58 -06:00
Stefan ErnstandGitHub bc31807d6f feat: add windshift to dokploy (#787)
* Adding Windshift for Dokploy

* Added up-to-date version and better tags

* Updated logo with less transparency

* Update docker-compose.yml with latest version

Signed-off-by: Stefan Ernst <ernst.stefan@icloud.com>

---------

Signed-off-by: Stefan Ernst <ernst.stefan@icloud.com>
2026-07-07 15:02:48 -06:00
Ennio MarkeGitHubgreptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>Copilot
f1210e6ac4 feat: Add Seanime and remove strapai duplicate entry (#808)
* v1.0.0

* v1.0.1

* Update blueprints/seanime/docker-compose.yml

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update blueprints/seanime/docker-compose.yml

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update blueprints/seanime/docker-compose.yml

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

* v1.0.2

* Update blueprints/seanime/docker-compose.yml

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

* v1.0.4

* v1.0.5

* v1.0.6

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-07-07 14:34:26 -06:00
shandGitHub 9708d34ce1 Add SMTP_PORT environment variable to docker-compose (#806) 2026-07-07 14:34:04 -06:00
FireflyandGitHub 7f9cfaaf49 Add qui A fast, modern web interface for qBittorrent. Manage multiple qBittorrent instances from a single, lightweight application built by autobrr (#825)
* feat: add qui template

qui is a fast, modern web interface for qBittorrent by autobrr,
allowing management of multiple qBittorrent instances from a single,
lightweight self-hosted application.

- docker-compose.yml: pinned ghcr.io/autobrr/qui:1.17.0, exposes 7476
  internally (no host port; Dokploy's Traefik handles routing),
  persistent named volume for /config.
- template.toml: maps the qui service port 7476 to the user-supplied
  domain so Dokploy's Traefik can proxy it.
- meta.json: register the template with logo and tags.

* fix(qui): use latest image tag

ghcr.io/autobrr/qui has no v1.17.0 tag published; only 'latest' and
PR/dev tags are available. Switch the image and meta.json version to
'latest' so the template actually deploys.

* revert: restore duplicate strapi entry removed by dedupe script

The previous commit accidentally removed a pre-existing duplicate
strapi entry as a side effect of running process-meta. That entry
exists upstream and is unrelated to the qui template; restore it
verbatim.

* fix: deduplicate meta.json to pass CI validation

The upstream meta.json had a pre-existing duplicate strapi entry.
Remove it so dedupe-and-sort produces identical output to the committed
file, satisfying the validate-meta CI check.

* fix(qui): replace logo with autobrr org avatar (128x128)
2026-07-07 14:23:01 -06:00
cc99a025d3 feat: add Homepage template (#871)
Co-authored-by: atlasclaw369 <268303653+atlasclaw369@users.noreply.github.com>
2026-07-07 14:12:07 -06:00
Robert Da SilvaandGitHub 201fcd1ed8 feat(blueprint): add LimeSurvey template (#878) 2026-07-07 14:11:16 -06:00
0074651a45 feat: add Miniflux template (#881)
* feat: add Miniflux template

* fix: guard GitHub star count fallback

---------

Co-authored-by: Artemis-ignis <Artemis-ignis@users.noreply.github.com>
2026-07-07 14:10:00 -06:00
Luke DunsmoreandGitHub c9dc13aab8 feat: update MediaFetch template version to 1.3.5 (#879)
* feat: add MediaFetch template

* Corrected .toml

* .toml

* Updated template to version 1.3.5

* Codex issues raised now fixed

* Codex issues addressed

* TOML Update
2026-07-07 14:09:30 -06:00
ac716a337f feat: add Rallly template (#933)
Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
2026-07-07 14:04:26 -06:00
b0429d94b9 fix: keep Valkey internal (#937)
Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
2026-07-07 14:04:12 -06:00
f14cc64043 feat: add PrivateBin template (#947)
* feat: add PrivateBin template

* chore: pin privatebin template version

---------

Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
2026-07-07 14:03:54 -06:00
c70cd23b7e feat: add Paperclip template (#943)
Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
2026-07-07 14:01:01 -06:00
e83e869bd3 feat: add LubeLogger template (#896)
Co-authored-by: 100more <184098138+100more@users.noreply.github.com>
2026-07-07 13:55:48 -06:00
MANFIT7andGitHub 76ceefdd2b feat: add Snipe-IT template (#897) 2026-07-07 13:55:14 -06:00
MANFIT7andGitHub cf862fccfb feat: add LibreSpeed template (#899) 2026-07-07 13:53:26 -06:00
Rohit Mulani 667137d6c2 Merge remote-tracking branch 'origin/canary' into codex/add-heyform-smtp-config 2026-07-07 23:46:54 +04:00
Rohit Mulani 1ba28d6145 Align HeyForm cache service with upstream docs 2026-07-07 23:46:52 +04:00
Shabani MagawilaandGitHub bdda9b476b feat: Add GeoServer & PostGIS blueprint (#919)
* Add GeoServer & PostGIS blueprint

* Add GeoServer blueprint metadata and logo

* Fix meta.json formatting and sorting

* Fix template.toml schema validation errors

* Remove invalid config.mounts from template.toml
2026-07-07 13:44:45 -06:00
Rohit Mulani ff9e609b8e Merge remote-tracking branch 'origin/canary' into codex/add-zulip-template 2026-07-07 23:43:16 +04:00
Rohit Mulani c69a2900f5 Update Zulip reverse proxy settings 2026-07-07 23:43:13 +04:00
Nicolás CarvajalandGitHub a3d1efad02 chore: update hi-events template to version 1.9.0-beta and add smtp mail configuration (#911) 2026-07-07 13:42:42 -06:00
Mendy LandaandGitHub 5bbc380f36 Add Cut (self-hosted URL shortener) template (#914) 2026-07-07 13:41:57 -06:00
Akshat MehtaandGitHub a2bf4b1393 fix(vaultwarden): update outdated image version (#921) 2026-07-07 13:40:34 -06:00
Rohit Mulani 16d35299a7 Merge remote-tracking branch 'origin/canary' into codex/add-filerun-template
# Conflicts:
#	meta.json
2026-07-07 23:38:20 +04:00
Rohit Mulani dabe8466ac Align FileRun compose with upstream runtime settings 2026-07-07 23:38:00 +04:00
Rohit Mulani 52f765898e Fix Tandoor Recipes service port 2026-07-07 23:23:40 +04:00
Rohit Mulani 721fd4ee88 Merge remote-tracking branch 'origin/canary' into codex/add-tandoor-recipes-template 2026-07-07 23:23:18 +04:00
Rohit Mulani c63c170036 Merge remote-tracking branch 'origin/canary' into add-jitsi-meet-template
# Conflicts:
#	meta.json
2026-07-07 23:20:16 +04:00
7f722cdeab feat: add Firefly III template (#941)
Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
2026-07-07 13:19:17 -06:00
Rohit Mulani 219cd25e22 Add Jitsi metadata entry 2026-07-07 23:18:12 +04:00
5a193c5fb2 feat: add Gotify template (#946)
* feat: add Gotify template

* chore: pin gotify template version

---------

Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
2026-07-07 13:16:48 -06:00
6d0028bcfc feat: add Joplin Server template (#948)
* feat: add Joplin Server template

* chore: pin joplin-server template version

* Update blueprints/joplin-server/template.toml

---------

Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
2026-07-07 13:16:27 -06:00
c3ed7d9296 feat: add Dockge template (#949)
Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
2026-07-07 13:13:20 -06:00
5f037d3e6b feat: add Jellyseerr template (#950)
* feat: add Jellyseerr template

* chore: pin jellyseerr template version

---------

Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
2026-07-07 13:12:56 -06:00
7faf814ec7 feat: add SFTPGo template (#951)
* feat: add SFTPGo template

* fix: use Dokploy port syntax for SFTPGo

* chore: pin sftpgo template version

---------

Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
2026-07-07 13:12:35 -06:00
47f92da9a2 feat: add FileGator template (#953)
* feat: add FileGator template

* chore: pin filegator template version

---------

Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
2026-07-07 13:10:07 -06:00
942a43ec02 feat: add ArchiveBox template (#954)
Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
2026-07-07 13:09:44 -06:00
Barış ÇelikandGitHub 74fd2a960f feat: add Inkvoice template (#958) 2026-07-07 13:03:04 -06:00
9ad8a84fc4 feat: add Hermes agent template (#960)
Hermes is an open agent runtime from Nous Research. This template runs the
supervised gateway with:
- web dashboard (9119) behind Traefik, protected by the bundled basic-auth
  provider (auth-gated mode triggers automatically once reachable off-loopback);
  username admin, generated 128-char password
- OpenAI-compatible gateway API (8642), enabled and bound to 0.0.0.0 with a
  generated bearer token (both off by default upstream)

Image pinned to v2026.6.19. Provider keys are configured from the dashboard
after deploy and persist in the hermes_data volume.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 13:02:43 -06:00
Marios AntonoudiouandGitHub 39d6d0430a Introduce chatto app template (#962)
* Introduce chatto app template

* Clean up template

* Update chatto env vars
2026-07-07 13:02:09 -06:00
Quentin HandGitHub f381e4db50 Add Dokploy configuration template for Spliit with environment variable (#969)
* Add Dokploy configuration template for Spliit with environment variables and domain setup

* Fix : add double quote

* Fix : remove container name

* Fix : service name

* Fix : use good name of database

* Fix : change db name
2026-07-07 12:55:31 -06:00
Julian GerhardsandGitHub cdd996f73a feat: alarik template blueprint (#971) 2026-07-07 12:53:45 -06:00
Khiet Tam NguyenandGitHub 51f0b08b21 feat: update registry template to v3 (#972) 2026-07-07 12:47:42 -06:00
Bill Nice G. HavugukuriandGitHub 98844f7d83 feat: Add Ollama Chat Tone Template (#973)
* Add Ollama Chat Tone blueprint with Docker configuration, SVG logo, and metadata

* Update .gitignore and replace Ollama Chat Tone SVG with new design

* Add Ollama Chat Tone metadata to meta.json

* Update GitHub link in meta.json for Ollama Chat Tone

* Fix environment variable casing in docker-compose.yml and update template.toml with default values

* Remove duplicate .DS_Store entry from .gitignore

* Delete .DS_Store

Delete .DS_Store
2026-07-07 12:47:33 -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
Alan MoskoandGitHub 16ea723792 Atualizar Template Supabase
feat: update Supabase production template to latest self-hosted versions
2026-06-25 18:52:39 -03:00
Alan Mosko 1148db114b feat: update supabase production template 2026-06-25 18:52:11 -03:00
Rohit Mulani 7c8950a253 chore: pin tandoor-recipes template version 2026-06-23 00:20:23 +04:00
Rohit Mulani daa0fa8aa9 feat: add Tandoor Recipes template 2026-06-22 19:33:10 +04:00
Rohit Mulani f7dcdc5243 feat: add Jitsi Meet template 2026-06-22 18:50:20 +04:00
Rohit Mulani 24fba0a729 fix: expose HeyForm SMTP settings 2026-06-22 14:44:23 +04:00
Rohit Mulani b2bf966e86 feat: add Zulip template 2026-06-22 14:33:35 +04:00
Rohit Mulani a185fe8625 fix: remove FileRun template BOM 2026-06-22 14:19:54 +04:00
Rohit Mulani 7d302816cd feat: add FileRun template 2026-06-22 14:19:35 +04:00
Daniel Esteves 01f532d02c fix(engram): use static internal Postgres password in DSN
The template helper's ${password:N} can emit URL-reserved characters
(!@#$%^&*), which corrupt ENGRAM_DATABASE_URL while Postgres receives
the raw password, causing intermittent connection failures on first
deploy. Postgres is not exposed (internal network only), so a static
internal password is safe and matches the convention used by the
umami and documenso templates. Real secrets (JWT, cloud token, admin
token) remain randomly generated.
2026-06-19 19:17:19 -04:00
Daniel Esteves a29e4b4a18 feat(blueprint): add engram template
Engram Cloud is a self-hosted persistent-memory sync server for AI
coding agents. Deploys the published ghcr.io/gentleman-programming/engram
image with a PostgreSQL backend, auto-generated auth secrets (cloud
token, admin token, JWT secret), and a domain on the dashboard/API port.
2026-06-19 17:54:52 -04:00
Bruno Frank Silva Cordeiro 33dfea6ca7 Wrapping up, everythings working. 2026-06-12 08:59:45 -03:00
Bruno Frank Silva Cordeiro 95c11135c2 Using latest images. 2026-06-11 23:37:43 -03:00
Bruno Frank Silva Cordeiro 759eff464d Fix URLS and health or crm when booting procesor. 2026-06-11 09:54:16 -03:00
Bruno Frank Silva Cordeiro 38788336c7 Evolution GO and Evolution CRM. 2026-06-11 08:24:18 -03:00
LeoGomideandClaude Opus 4.8 d651d2d400 docs(plane): document each env var as inline comments in template env
Add a "# ..." comment string before every entry in config.env, grouped
into labelled sections (Application, PostgreSQL, Redis, RabbitMQ,
storage, proxy, runtime) with blank-line separators. Because Dokploy
renders config.env entries verbatim into the generated .env, these
comment strings carry the documentation into the deployed .env file
(TOML # comments would be stripped at parse time and never reach it).

Same pattern already used by discord-tickets, garage-with-ui, tooljet
and rustfs. No variable values changed; all 39 vars preserved.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 13:29:46 -03:00
LeoGomideandClaude Opus 4.8 2248627c98 fix(plane): move env/mounts under [config] so template env exports correctly
The v1.3.1 rewrite (669ad4a) reordered template.toml so that
[[config.domains]] preceded the bare `env = [...]` and `mounts = []`
keys. In TOML those keys then attach to the first config.domains table
element instead of [config], leaving config.env undefined. Dokploy reads
env from config.env, so the base64 export / deploy shipped with no
environment variables at all.

Move env/mounts back above [[config.domains]] (matching the original
template and other blueprints like documenso). config.env now resolves
to all 39 entries; the domain table keeps only serviceName/port/host.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 10:43:51 -03:00
LeoGomideandClaude Opus 4.8 b24dbc7611 fix(plane): tighten proxy TRUSTED_PROXIES to private_ranges (no IP spoofing)
Defaulting TRUSTED_PROXIES to 0.0.0.0/0 makes Caddy trust X-Forwarded-For /
X-Real-IP from any peer, allowing client-IP spoofing (CWE-348 / CWE-290) that
poisons rate-limiting and audit logs. In Dokploy the only upstream is Traefik on
the private dokploy-network, so trust Caddy's built-in `private_ranges` token
instead. Legitimate forwarded client IPs (Traefik is a private peer) still
resolve correctly; XFF from public-IP peers is rejected if the proxy is ever
exposed directly. Overridable via env for custom topologies.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 10:17:09 -03:00
LeoGomideandClaude Opus 4.8 34501dd8b5 fix(plane): set proxy SITE_ADDRESS and TRUSTED_PROXIES to fix Caddyfile crash
The plane-proxy Caddyfile.ce ends with a `{$SITE_ADDRESS} { import plane_proxy }`
block. SITE_ADDRESS has no inline default upstream, so when it is unset the block
becomes keyless and Caddy aborts with:

  adapting config using caddyfile: server block without any key is global
  configuration, and if used, it must be first

Expose SITE_ADDRESS (:80, matching the proxy `expose: ["80"]` + domain port 80,
since Dokploy terminates TLS upstream) and TRUSTED_PROXIES (0.0.0.0/0, matching
the Caddyfile inline default) on the proxy env, and document both in template.toml
so they render into the generated env. Reported and verified by @RDeluxe in #912.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 10:13:39 -03:00
LeoGomide 11bc16ea36 docs(plane): translate top-of-file comment to English 2026-05-28 12:27:07 -03:00
LeoGomide 9c29df415c fix(plane): rename services + add proxy links to avoid DNS collision
The plane-proxy image has hardcoded `reverse_proxy web:3000`/`api:8000`
in its Caddyfile with generic service names. In multi-stack Dokploy
deployments, those names collide with other stacks' containers (Next.js
apps frequently have a `web` service) on the shared dokploy-network —
the Plane domain ends up serving content from unrelated stacks.

Two-step fix:
  1. Rename internal services with `plane-*` prefix (unique cluster-wide):
     web/space/admin/live/api/worker/beat-worker/migrator → plane-*
  2. Add `links:` block to the `proxy` service mapping the new names back
     to the generic ones the Caddyfile expects (`plane-web:web` etc.).
     Docker injects these into /etc/hosts, which has absolute priority
     over DNS — Caddy resolves `web`/`api`/etc. directly to our renamed
     containers, ignoring any collision on dokploy-network.

Also updates `API_BASE_URL` in template.toml and the `x-live-env` anchor
from `http://api:8000` → `http://plane-api:8000`.

No `networks:` declarations added (repo validator rejects them; Dokploy
manages networking automatically).
2026-05-28 12:22:37 -03:00
LeoGomide 669ad4a257 chore(plane): update template to v1.3.1 with healthchecks and bug fixes
- Bump makeplane/* images v0.27.1 -> v1.3.1
- Pin minio to RELEASE.2025-04-22T22-12-26Z (last release with full admin
  console before community-edition feature removal)
- Add YAML anchors (x-*-env) for env reuse across backend services
- Add healthchecks for postgres, valkey, rabbitmq
- api/worker/beat-worker wait for migrator via service_completed_successfully
  (fixes race where backend booted before schema was migrated)
- Add restart policies (unless-stopped for long-running, on-failure for migrator)
- Migrate env_file -> inline environment (matches repo convention)
- Expose APP_RELEASE in template.toml [variables] for UI override

Bug fixes in template.toml:
- RABBITMQ_DEFAULT_USER was the literal string "rabbitmq_user" instead of
  a variable reference; AMQP_URL was inconsistent with the broker user
- WEB_URL was missing the https:// scheme (broke OAuth/email links)
- DATABASE_URL/AMQP_URL referenced inline vars that Dokploy does not
  resolve inside [config.env]; now use [variables] directly
- Remove dead vars: NGINX_PORT (Plane v1.x uses Caddy), SENTRY_DSN,
  SENTRY_ENVIRONMENT
- Add WEBHOOK_ALLOWED_IPS/WEBHOOK_ALLOWED_HOSTS (SSRF guard default
  introduced in Plane v1.x)
2026-05-28 11:14:59 -03:00
NightVibes33 455e1914a9 feat: add wallabag template 2026-05-21 15:49:17 +00:00
NightVibes33 5d220e04b4 polish added templates 2026-05-21 15:45:32 +00:00
NightVibes33 8c1a085acb refine added Dokploy templates 2026-05-21 15:36:50 +00:00
Axile 9b25708efe feat: add code-server template 2026-05-21 15:47:04 +08:00
NightVibes33 aea19d1d5a feat: add more self-hosted app templates 2026-05-20 22:16:10 +00:00
NightVibes33 bd2dd62358 feat: add Homebox Jellyseerr and Speedtest Tracker templates 2026-05-20 21:19:59 +00:00
NightVibes33 7466165b1c feat: add PrivateBin Traccar and Wakapi templates 2026-05-20 21:10:23 +00:00
NightVibes33 b203c65ba6 feat: add Gotify and PairDrop templates 2026-05-20 20:45:13 +00:00
BinkyTwin b846612d0e fix: default ownCloud public URL to HTTP 2026-05-20 22:30:05 +02:00
BinkyTwin 30cad7b347 fix: align ThingsBoard init queue type 2026-05-20 22:20:50 +02:00
BinkyTwin c01b38343d feat: add ownCloud Infinite Scale template 2026-05-20 22:16:56 +02:00
BinkyTwin 79c38c5836 feat: add NodeLink template 2026-05-20 22:10:02 +02:00
BinkyTwin a7f3a74982 feat: add ThingsBoard template 2026-05-20 22:00:58 +02:00
BinkyTwin 7e5691b847 feat: add Gatus template 2026-05-20 21:26:07 +02:00
BinkyTwin 0c3d1ccd20 fix: align Paperless URL scheme default 2026-05-20 21:22:23 +02:00
BinkyTwin 12411b5ff0 feat: add Paperless-ngx template 2026-05-20 21:15:44 +02:00
NightVibes33 dc809a9849 feat: add chroma languagetool and shiori templates 2026-05-20 18:09:47 +00:00
iRazz 2e480e3c53 add uptimekit 2026-05-15 20:05:25 +03:00
ahmed-lotfy-dev a9a40ec69a fix: update powersync base64 config to match working deployment + add env comments 2026-05-15 20:02:21 +03:00
ahmed-lotfy-dev 3314b5930f fix: process meta.json (sort + dedupe) 2026-05-15 19:01:17 +03:00
ahmed-lotfy-dev be677f50a5 feat: add powersync blueprint template 2026-05-15 18:54:52 +03:00
iRazz b88e276f69 add uptimekit 2026-05-15 04:19:29 +03:00
iRazz eaff380d77 add uptimekit 2026-05-15 04:13:23 +03:00
JuanandGitHub 1cde3fac82 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
2026-05-12 14:54:37 -06:00
Kien NgoGitHubgreptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
0df6bc5b29 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>
2026-05-12 14:40:05 -06:00
Harikrishnan DhanasekaranandGitHub 94b9aa70de Added the frappe lending template (#665)
* added the frappe lending template

* removed the external network
2026-05-12 14:32:59 -06:00
Dries AugustynsandGitHub 5ca048afcf 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
2026-05-12 14:17:35 -06:00
Mauricio SiuandGitHub ff465cdab6 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
2026-05-08 19:27:02 -06:00
ZeroWing-AutomatorandGitHub 256c08ac5f Add files via upload 2026-05-05 06:36:21 -04:00
ZeroWing-AutomatorandGitHub cc2b18a85a Add files via upload 2026-05-05 06:35:55 -04:00
ZeroWing-AutomatorandGitHub 84df565923 Add files via upload 2026-05-05 06:35:17 -04:00
ZeroWing-AutomatorandGitHub 49de63093f Update meta.json 2026-05-05 15:23:46 +05:00
ZeroWing-AutomatorandGitHub 3f0ffc0243 Create docker-compose.yml 2026-05-05 15:19:06 +05:00
ZeroWing-AutomatorandGitHub a1b9db513a Create template.toml 2026-05-05 15:18:38 +05:00
ZeroWing-AutomatorandGitHub 2fceaafdda Create docker-compose.yml 2026-05-05 15:17:04 +05:00
ZeroWing-AutomatorandGitHub 98699c6178 Create template.toml 2026-05-05 15:16:31 +05:00
ZeroWing-AutomatorandGitHub 4e52a303ba Create docker-compose.yml 2026-05-05 15:14:07 +05:00
ZeroWing-AutomatorandGitHub 756ebc7f31 Create template.toml 2026-05-05 15:12:39 +05:00
ZeroWing-AutomatorandGitHub 4c49e4362a Add files via upload 2026-05-04 21:53:35 -04:00
ZeroWing-AutomatorandGitHub 79754e3cb4 Add files via upload 2026-05-04 21:53:08 -04:00
ZeroWing-AutomatorandGitHub 930a4ef6d8 Add files via upload 2026-05-04 21:52:29 -04:00
ZeroWing-AutomatorandGitHub a0abb8fcfe Update meta.json 2026-05-05 06:44:27 +05:00
ZeroWing-AutomatorandGitHub b7985463d8 Update template.toml 2026-05-05 06:43:13 +05:00
ZeroWing-AutomatorandGitHub 525220a0b4 Create docker-compose.yml 2026-05-05 06:42:55 +05:00
ZeroWing-AutomatorandGitHub 377009a5fa Create template.toml 2026-05-05 06:42:10 +05:00
ZeroWing-AutomatorandGitHub 71ea46881f Update meta.json 2026-05-05 06:39:18 +05:00
ZeroWing-AutomatorandGitHub e97aec0196 Create docker-compose.yml 2026-05-05 06:34:27 +05:00
ZeroWing-AutomatorandGitHub a06feb6a99 Create template.toml 2026-05-05 06:34:00 +05:00
ZeroWing-AutomatorandGitHub 644cdfcb77 Update meta.json 2026-05-05 06:28:29 +05:00
ZeroWing-AutomatorandGitHub 7de03e4246 Create docker-compose.yml 2026-05-05 06:23:55 +05:00
ZeroWing-AutomatorandGitHub 355833ea32 Create template.toml 2026-05-05 06:23:17 +05:00
Manuel Schneider b19d017a66 fix docker-compose requirements for duplicati 2026-05-04 08:14:16 +02:00
Nico PergandeandClaude Opus 4.7 9095db8607 feat(authentik): bump to 2026.2.2 and Postgres 18
Updates the Authentik blueprint from 2025.6.3 to the latest stable
2026.2.2, and bumps Postgres from 16-alpine to 18-alpine. Redis is
intentionally retained.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 19:03:40 +02:00
Manuel Schneider bf4d1d6605 add duplicati 2026-04-19 21:56:47 +02:00
Andreas EnemyrandClaude Opus 4.7 30d789cb45 Add Multica template
Open-source managed agents platform (Next.js + Go + pgvector).
Builds from source via remote git context since no pre-built images
are published. Exposes two Traefik domains: frontend (3000) and
backend (8080) for the CLI/daemon.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 13:41:06 +02:00
Juan del Peral 4fac6db5c3 chore(meta): dedupe and sort meta.json
Remove duplicate strapi entry so processed meta matches CI expectations.

Made-with: Cursor
2026-04-16 19:01:33 -03:00
Juan del Peral 79d9fec567 fix(chatwoot): align metadata and HTTPS defaults
Update Chatwoot metadata to match the pinned image version and default the template URL/SSL settings for Dokploy TLS deployments.

Made-with: Cursor
2026-04-16 17:47:15 -03:00
Juan del Peral eff1206132 Updated chatwoot blueprint 2026-04-16 16:44:59 -03:00
Debojyoti Mandal 265e77bbf8 feat: add Glances system monitoring template 2026-04-09 23:11:26 +05:30
zrja fed39e395e fix: address remaining shopware review notes 2026-04-09 04:35:36 +02:00
zrja d0821bdb39 fix: remove duplicate strapi entry 2026-04-09 04:32:02 +02:00
zrja 3100430dc5 fix: address shopware review feedback 2026-04-09 04:15:42 +02:00
zrja ac5f9b995a feat: add shopware blueprint 2026-04-09 04:10:55 +02:00
Satya Tulasi Jalandhar C HandGitHub 72519948b1 feat: add ENABLE_SCHEDULER variable to template.toml and update docker-compose.yml for scheduler management 2026-04-07 10:46:16 +00:00
Satya Tulasi Jalandhar C HandGitHub 8d514c2d43 fix: update volume path for db service in docker-compose.yml 2026-04-07 09:41:02 +00:00
Satya Tulasi Jalandhar C HandGitHub 0064d0b598 fix: correct redis_socketio configuration in docker-compose.yml 2026-04-07 09:37:05 +00:00
Satya Tulasi Jalandhar C HandGitHub 76792ce6b2 fix: update ERPNext ID format in meta.json 2026-04-07 09:34:26 +00:00
Satya Tulasi Jalandhar C HandGitHub 84a19c4fb5 chore: rename the folder 2026-04-07 09:29:45 +00:00
Satya Tulasi Jalandhar C HandGitHub 2d1eeb8d1d refactor: remove Strapi duplicate entry from meta.json 2026-04-07 09:17:40 +00:00
Satya Tulasi Jalandhar C HandGitHub 2c80762082 feat: add ERPNext version 16 configuration and assets 2026-04-07 09:17:13 +00:00
Your Name d70f45f1c9 feat: finalize Matomo with sorted tags 2026-04-01 13:49:37 +01:00
Your Name f2428bc788 feat: finalize Matomo blueprint with sorted meta and flat variables 2026-04-01 13:19:11 +01:00
Your Name da9c076713 feat: sort Matomo entry alphabetically in meta.json 2026-04-01 12:47:45 +01:00
Your Name f6b18cae8a feat: finalize Matomo blueprint with fixed schema and logo 2026-04-01 12:22:28 +01:00
Your Name ad24b4e71b feat: match official compose standards for Matomo 2026-04-01 11:57:28 +01:00
Your Name 5945e44c7c feat: finalize Matomo blueprint with official schema 2026-04-01 11:45:11 +01:00
Your Name 9b3745f919 feat: add Matomo blueprint (v2 - fixed bot issues) 2026-04-01 11:22:34 +01:00
Your Name bd83cb9fd0 feat: add Matomo blueprint 2026-04-01 11:16:45 +01:00
+58 4902cbf105 New Version (#737)
* 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

---------

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>
2026-03-05 01:44:01 -06:00
Mauricio SiuandGitHub d157cef3c3 Merge branch 'main' into canary 2026-03-05 01:43:39 -06:00
Adrian Alfred C. BonpinandGitHub 691af5208a 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
2026-03-05 01:41:59 -06:00
WladiandGitHub 58d4a57aae feat(blueprint): add Verdaccio - private node.js package registry (#735) 2026-03-05 01:40:58 -06:00
kadmaandGitHub be88eb9567 Update grafana 12.4 (#731)
* Update grafana 12.4

* Update meta.json
2026-03-05 01:39:40 -06:00
marcbodeaandGitHub c2531b9ae9 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
2026-03-05 01:38:08 -06:00
1c43fd5324 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>
2026-03-05 01:30:25 -06:00
Dipanda AserandGitHub ebb526b5ea 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
2026-03-05 01:27:26 -06:00
Luke DunsmoreandGitHub 8deb82ab52 feat: add MediaFetch template (#688)
* feat: add MediaFetch template

* Corrected .toml

* .toml
2026-03-05 01:25:57 -06:00
2f249505de 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>
2026-03-05 01:24:56 -06:00
Matheus FelipeandGitHub 27564cd2fd feat: update to new Evolution API image source and pin it to the latest version (#644) 2026-03-05 01:18:46 -06:00
Vladyslav ProsolupovandGitHub 4b2bc71f95 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
2026-03-05 01:16:54 -06:00
febaandGitHub 5faf1b8579 Update volume path in docker-compose.yml
For persistent node
2026-02-26 14:41:45 -06:00
+49 39fb9dd134 New templates (#711)
* 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

---------

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>
2026-02-15 21:24:19 -06:00
Khiet Tam NguyenandGitHub 38e417b194 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
2026-02-15 21:10:10 -06:00
Andrew WongandGitHub a19303e3bf Update InvoiceShelf compose to suit new changes (#693)
https://github.com/InvoiceShelf/docker/blob/89bf78cec6fae54db76f84e0a4dc6255a8da710e/upgrade-guide.md
2026-02-15 21:02:22 -06:00
e7b0034833 fix docker-compose variables and update github link (#701)
Co-authored-by: Aaron McGuire <git.figment276@passmail.net>
2026-02-15 21:01:07 -06:00
Kien NgoandGitHub e0c0c5458b upgrade nextcloud img version (#705) 2026-02-15 20:58:59 -06:00
Benjamin NussbaumandGitHub 8d9c8d5c4f feat(blueprint): update trmnl-byos-laravel template (#704) 2026-02-15 20:57:38 -06:00
SimonandGitHub 11ea20d291 uptime-kuma: Bump version to 2.1.0 (#706)
* Bump version to 2.1.0

* Update meta.json with new version number
2026-02-15 20:56:12 -06:00
Kien NgoandGitHub e63a6d5408 Add IPFS Kubo template (#703)
* Add IPFS Kubo template

* Update init cmds

* Remove port forwarding
2026-02-15 20:53:54 -06:00
Vinicios LugliandGitHub 161053606f 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
2026-02-15 20:50:57 -06:00
Harshal RathoreandGitHub c3e83d75c6 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.
2026-02-15 20:49:26 -06:00
178e11d2fb 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>
2026-02-15 20:46:11 -06:00
Mauricio Siu f8e072549c 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.
2026-02-15 20:44:47 -06:00
Mauricio Siu a4b7e93a33 refactor: add 2026-02-15 19:54:58 -06:00
kadmaandGitHub 16a7e0d9e4 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
2026-02-15 19:42:23 -06:00
Huy PhamandGitHub 62706658ea feat: add SeaweedFS template (#630)
* feat: add SeaweedFS template

* chore: add specific seaweedfs version
2026-02-15 19:38:35 -06:00
CopilotGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>Siumauricio
911ed4beec 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>
2026-02-15 19:32:35 -06:00
e00f7c0c5e 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>
2026-02-15 19:30:14 -06:00
131ae0073e 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>
2026-02-15 19:28:00 -06:00
+14 42df67fcbb 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>
2026-02-15 01:33:20 -06:00
9292145136 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>
2026-02-15 01:27:27 -06:00
Ye LiuandGitHub c2b233774f 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.
2026-02-15 01:23:29 -06:00
+35 c818352721 New version (#708)
* 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

---------

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>
2026-02-12 10:13:54 -06:00
Khiet Tam NguyenandGitHub 88d26c8353 feat(blueprint): Cloudflare DDNS (#689)
* feat: added Cloudflare DDNS template

* fix: make CLOUDFLARE_API_TOKEN and DOMAINS mandatory env
2026-02-10 16:15:24 -06:00
Khiet Tam NguyenandGitHub c9e2a669c4 fix: cloudflared documentation links & env variables (#699) 2026-02-10 16:14:46 -06:00
853b643802 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>
2026-02-10 16:12:22 -06:00
+34 9d17e6bf8a New Templates (#690)
* 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>

---------

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>
2026-01-29 20:14:06 -06:00
Mauricio SiuandGitHub 2690ea1e1b Merge branch 'main' into canary 2026-01-29 19:29:27 -06:00
6104321d56 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>
2026-01-29 18:57:29 -06:00
Mauricio SiuandGitHub e099095c4c Update instructions.md 2026-01-29 18:43:05 -06:00
Mauricio Siu de3129be54 Remove instructions.md file as it contained no useful content. 2026-01-29 18:41:18 -06:00
Mauricio SiuandGitHub 0105994ef4 Create instructions.md 2026-01-29 18:40:54 -06:00
Mauricio SiuandGitHub 7c3e09101f Create instructions.md 2026-01-29 18:36:56 -06:00
Mauricio SiuandGitHub 1d3fde31f0 Rename INSTRUCTIONS.md to instructions.md 2026-01-29 18:34:53 -06:00
Mauricio SiuandGitHub 64949ea5fa Create INSTRUCTIONS.md 2026-01-29 18:33:26 -06:00
+32 b519c78d13 New Templates & Updates (#685)
* 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

---------

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>
2026-01-28 01:11:36 -06:00
Mauricio Siu 67bba2a91c Merge branch 'main' into canary 2026-01-28 01:02:54 -06:00
FireflyandGitHub f8952fb79e Add qbitwebui (#675)
* Add qBittorrent Web UI template

* Fix healthcheck bug
2026-01-28 00:54:53 -06:00
фырат ёздэнandGitHub c251041879 fix: tailscale exitnode authkey env (#669) 2026-01-28 00:53:37 -06:00
aurorarissimeandGitHub bba70339f3 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
2026-01-28 00:53:26 -06:00
FireflyandGitHub ebcaed8eea Add Cloudreve template (#649)
Self-hosted file management and sharing system with multi-cloud storage support.
Includes PostgreSQL and Redis for database and caching.
2026-01-28 00:49:21 -06:00
Vitaliy KukharikandGitHub 3395913afb 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.
2026-01-28 00:46:57 -06:00
JemgandGitHub 26fcbe302d 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.
2026-01-28 00:45:19 -06:00
NaterfuteandGitHub 8aa23faa54 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
2026-01-28 00:42:41 -06:00
FireflyandGitHub 8c87c2d566 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.
2026-01-28 00:40:43 -06:00
FireflyandGitHub bc934d84a5 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.
2026-01-28 00:38:29 -06:00
1c3afa98db feat: ad streamflow (#645)
Co-authored-by: thaarrtt <tonyhart2020@gmail.com>
2026-01-28 00:34:15 -06:00
Pablo Moraga SandovalandGitHub b2e91749d3 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
2026-01-28 00:30:45 -06:00
Carl-Gerhard LindesvärdandGitHub 51750f2b1b fix: use major version for openpanel (#680) 2026-01-28 00:29:15 -06:00
Huba TubaandGitHub bce7326959 fix: searxng template (#651) 2026-01-28 00:28:22 -06:00
Christus VincentandGitHub 1ead7d06a4 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
2026-01-07 13:11:03 -06:00
Khiet Tam NguyenandGitHub 7c2f0d4f8e 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
2026-01-07 13:02:50 -06:00
+17 7417972335 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>
2026-01-07 13:00:31 -06:00
2199d1d152 [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>
2026-01-07 12:24:55 -06:00
294421a380 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>
2026-01-07 12:20:45 -06:00
kipavyandGitHub ea1174c290 feat: Add scrutiny template (#500)
* Adds scrutiny template

* ran npm run process-meta

* feat(scrutiny): add Proxmox usage instructions

* Refactor port mappings in docker-compose.yml

Updated port mappings to remove quotes in docker-compose.yml.
2026-01-07 12:15:11 -06:00
Alexey FedorovandGitHub b8984b9e4f Update Umami to version v2.20.2 (#641) 2026-01-07 12:06:58 -06:00
Louan FonteneleandGitHub 8b579fbb60 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
2026-01-05 22:49:26 -06:00
CopilotGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>SiumauricioCopilot
b3e62b447d 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>
2025-12-19 22:29:05 -06:00
CopilotGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>SiumauricioCopilot
9501d5f974 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>
2025-12-19 18:16:25 -06:00
Mauricio Siu ee0e6fba92 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. 2025-12-19 18:05:58 -06:00
Mauricio Siu 9433dce128 Remove pull request trigger from deploy-preview workflow 2025-12-19 18:00:36 -06:00
CopilotGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>Siumauricio
97159bd1b4 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>
2025-12-19 17:56:22 -06:00
CopilotGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>Siumauricio
7b02385416 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>
2025-12-19 17:54:45 -06:00
Mauricio Siu 211c2aeb60 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.
2025-12-19 17:52:07 -06:00
CopilotGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>SiumauricioCopilot
be3c7f2d1d [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>
2025-12-19 16:06:36 -06:00
CopilotGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>Siumauricio
f5552b557c 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>
2025-12-19 16:03:32 -06:00
Huy PhamandGitHub e4ffe271e0 fix: update zitadel default instance features (#544) 2025-12-19 15:57:48 -06:00
Mauricio Siu dd8ef5b3c8 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.
2025-12-19 15:54:36 -06:00
Mauricio Siu 4757c59da3 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.
2025-12-19 15:45:08 -06:00
Khiet Tam NguyenandGitHub 0438165d43 feat(blueprint): mage ai template (#601)
* feat(blueprint): template for mage-ai

* fix: add healthcheck for mage-ai
2025-12-18 22:39:16 -06:00
JemgandGitHub 7528f73265 refactor: update docker-compose.yml to include version and restart policy (#599) 2025-12-17 23:45:28 -06:00
Carl-Gerhard LindesvärdandGitHub 37dc848e71 fix: openpanel and migrate to v2 (#594) 2025-12-16 21:14:42 -06:00
76049e3628 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>
2025-12-16 11:32:11 -06:00
726a8c6bc9 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>
2025-12-15 00:19:57 -06:00
+13 53c2ddb2fa 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>
2025-12-14 23:40:25 -06:00
JemgandGitHub 54eccbe32b 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
2025-12-14 23:30:03 -06:00
b23e3320f0 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>
2025-12-14 23:28:39 -06:00
be933bdc54 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>
2025-12-14 23:27:26 -06:00
32da868c01 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>
2025-12-14 23:23:05 -06:00
efea22e1f0 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>
2025-12-14 23:09:54 -06:00
ScanandGitHub 40aa695a73 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
2025-12-14 23:08:22 -06:00
Khiet Tam NguyenandGitHub 4367e2a42a 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
2025-12-14 22:52:06 -06:00
87ab908a32 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>
2025-12-14 01:18:49 -06:00
a9740da9cb 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>
2025-12-14 01:16:39 -06:00
Mauricio Siu b4efed26a0 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.
2025-12-14 01:15:46 -06:00
Mauricio Siu 0e84b284d8 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.
2025-12-14 01:15:25 -06:00
4c36b7d6ca 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>
2025-12-14 00:54:16 -06:00
Mauricio Siu 7c540d158a 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.
2025-12-14 00:52:59 -06:00
a00b179ddf 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>
2025-12-14 00:42:48 -06:00
ChrisandGitHub 6e1aece2e7 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
2025-12-14 00:40:29 -06:00
eb41d83963 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>
2025-12-14 00:40:02 -06:00
Harikrishnan DhanasekaranandGitHub 385906aa4c feat: Add MediaCMS template (#524) 2025-12-14 00:37:18 -06:00
640abda5d8 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>
2025-12-14 00:31:12 -06:00
Mauricio SiuandGitHub 9e4da9c806 Update section title from 'Suggestions' to 'Requirements' 2025-12-14 00:21:47 -06:00
f3c1060443 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>
2025-12-14 00:13:13 -06:00
c0ff3ca788 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>
2025-12-14 00:01:17 -06:00
Mauricio Siu dcc456d18b 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.
2025-12-14 00:00:54 -06:00
Mauricio Siu b7f7c9ffb8 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.
2025-12-13 23:51:28 -06:00
30ecc96168 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>
2025-12-13 23:48:57 -06:00
Mauricio Siu c59fbf0f36 chore: remove package-lock.json file from the app directory 2025-12-13 23:41:40 -06:00
0aad2a0231 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>
2025-12-13 23:40:48 -06:00
aa48af7856 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>
2025-12-13 23:37:00 -06:00
Mauricio Siu abd316fd6e 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.
2025-12-13 14:38:37 -06:00
Mauricio Siu f78cc8d51f fix: update pull request template to clarify issue closing keywords 2025-12-13 01:45:43 -06:00
Mauricio Siu 7834542c9c feat: add pull request template for improved contribution guidelines 2025-12-13 01:45:06 -06:00
BlinkStrikeandGitHub 5905579eab add rustfs template (#568) 2025-12-07 03:46:38 -06:00
Thiago MadPinandGitHub f569d1379c fix: correct DEFAULT_DOMAIN environment variable reference in docker-compose.yml (#562) 2025-12-03 10:19:27 -06:00
florianheysenandGitHub 3205b672c4 Add Openinary Template (#567)
* feat: add Openinary template

* feat: update Openinary configuration to support ALLOWED_ORIGIN and refactor domain variable
2025-12-03 10:01:30 -06:00
ScanandGitHub 0fd2456a2a Change Enshrouded Server Image #557
changed image to mornedhels/enshrouded-server
2025-11-29 17:30:26 -09:00
Crackvignoule b4ebb8d9c5 changed image from sknnr/enshrouded-dedicated-server to mornedhels/enshrouded-server for autoupdate and easier config 2025-11-29 10:32:45 +01:00
ScanandGitHub daae16de16 Merge pull request #550 from Rabithua/rote
feat: add Rote template
2025-11-28 03:33:25 -09:00
Rabithua 88bff5f2a0 fix: change VITE_API_BASE to http:// for traefik.me compatibility 2025-11-28 19:15:08 +08:00
ScanandGitHub bba48c0a57 feat: add LibreChat template 2025-11-28 00:46:40 -09:00
xSiumauricioandGitHub 7efe2226ff Update template.toml (#555)
* Update template.toml

* Update template.toml

* Update template.toml
2025-11-28 02:07:05 -06:00
Mauricio Siu 8ec4ad1d9c Refactor GitHub workflow: uncomment build preview steps for improved deployment process and clarity. 2025-11-28 02:03:42 -06:00
Mauricio Siu 3ec51b85bf Remove unnecessary blank line in deploy-preview.yml for improved readability. 2025-11-28 02:03:23 -06:00
Mauricio Siu a91730e582 Refactor GitHub workflow: comment out build preview steps for clarity and future modifications. 2025-11-28 01:56:31 -06:00
Rabithua d58cc15c54 fix: process meta.json to fix formatting and sorting 2025-11-25 20:06:49 +08:00
Rabithua ac07aa2ed8 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
2025-11-25 20:03:46 +08:00
Sunil Shrestha 46dc5b9be3 docs(librechat): add authentication reference link to docker-compose.yml 2025-11-10 10:38:02 +05:45
Sunil Shrestha 2e1fb3b3a9 fix(librechat): remove predefined persistent volume mounts from template.toml 2025-11-10 10:25:31 +05:45
Sunil Shrestha 1d70294310 fix(librechat): add version under [config] and remove stray [config.mounts] header 2025-11-10 09:19:06 +05:45
Mauricio SiuandGitHub 60796a9084 Update blueprints/librechat/template.toml 2025-11-08 00:24:36 -06:00
Mauricio SiuandGitHub 3e8b431031 Update blueprints/librechat/template.toml 2025-11-08 00:21:23 -06:00
Sunil Shrestha 47daea92f8 fix(librechat): rename api service to librechat in docker-compose.yml 2025-11-02 00:40:02 +05:45
Sunil Shrestha 758cf1d873 fix: rename templates to template.toml 2025-11-02 00:19:15 +05:45
Sunil Shrestha 1e21b7e785 feat(librechat): add LibreChat blueprint with compose, toml, metadata, links and tags 2025-11-02 00:15:12 +05:45
1950 changed files with 71622 additions and 15330 deletions
+8 -13
View File
@@ -8,7 +8,6 @@ Key components:
- **Blueprints**: Self-contained templates with `docker-compose.yml` (service definitions) and `template.toml` (Dokploy-specific configuration for domains, env vars, mounts).
- **meta.json**: Centralized index of all templates, aggregated from blueprint metadata. Entries include `id`, `name`, `version`, `description`, `logo`, `links`, and `tags`.
- **app/**: Vite-based React frontend for local preview/development (runs at http://localhost:5173). Copies blueprints and meta.json to dist during build.
- **Scripts**: Node.js tools in root and `build-scripts/` for maintaining `meta.json` (deduplication, sorting, validation).
Data flow: New templates added to `blueprints/` → Metadata updated in `meta.json` → Processing scripts ensure consistency → App builds include static blueprints/meta for preview.
@@ -22,7 +21,6 @@ The "why": Enables rapid, standardized deployment of 200+ OSS apps on Dokploy wi
- `docker-compose.yml`: Standard Docker Compose v3.8. Avoid `ports`, `container_name`, `networks`—Dokploy handles isolation via internal networks.
- `template.toml`: Defines variables (e.g., `${domain}`), domains (service:port → host), env vars, and mounts. Use helpers like `${password:32}`, `${uuid}`, `${jwt:secret_var}`.
- `logo.svg/png`: Service icon, referenced in `meta.json`.
- `app/vite.config.ts`: Configures build to copy `blueprints/*` and `meta.json` to dist root for static serving.
- `dedupe-and-sort-meta.js`: Standalone script—reads `meta.json`, removes duplicate `id`s (keeps first), sorts by `id` (case-insensitive), creates timestamped backup.
- `build-scripts/process-meta.js`: Advanced processor with CLI options (`--verbose`, `--no-backup`, `--input`/`--output`), JSON schema validation (required: `id`, `name`, `version`, `description`, `links.github`, `logo`, `tags` array).
@@ -32,6 +30,8 @@ Exemplary blueprint: `blueprints/ghost/`—`docker-compose.yml` exposes port 236
1. **Add/Update Template**:
- **REQUIREMENT**: Service **MUST** be open source. Only add templates for applications with an open-source license (e.g., MIT, Apache, GPL, AGPL). Proprietary or closed-source services are not allowed.
- **Verify Docker Images**: Before using any Docker image in `docker-compose.yml`, verify it exists using `docker manifest inspect <image:tag>` (e.g., `docker manifest inspect docker.io/bitnami/discourse:3.5.0`). This ensures the image is available and prevents deployment failures.
- Create `blueprints/<id>/` (e.g., `ghost`).
- Implement `docker-compose.yml` (single service typical; use volumes for persistence).
- Configure `template.toml`—reference vars in `[config.domains]`, `[config.env]`, `[config.mounts]`.
@@ -39,14 +39,7 @@ Exemplary blueprint: `blueprints/ghost/`—`docker-compose.yml` exposes port 236
- Run `node dedupe-and-sort-meta.js --backup` to validate/sort.
- Commit; PR triggers Dokploy preview (base64 import for testing).
2. **Local Development**:
- App: `cd app && pnpm install && pnpm dev` (Vite dev server).
- Meta processing: `npm run process-meta` or `make process-meta` (uses Makefile targets: `validate`, `check`, `build`).
- Build app: `cd app && pnpm build`—copies blueprints/meta to `dist/` for static hosting.
- Test template: Use PR preview URL or local Dokploy instance; import base64 from template card.
3. **CI/CD**:
2. **CI/CD**:
- `.github/workflows/validate-meta.yml` (if present): Runs validation on push/PR—fails on duplicates, invalid JSON, missing fields.
- Integrate processing: Add `npm run process-meta` to build steps; use `--no-backup` in CI.
@@ -54,20 +47,22 @@ No tests in repo—focus on manual validation via scripts and Dokploy deploys. D
## Conventions and Patterns
- **Open Source Requirement**: **ALL services MUST be open source**. Only applications with open-source licenses (MIT, Apache, GPL, AGPL, etc.) are allowed. Proprietary or closed-source services are strictly prohibited.
- **Template IDs**: Lowercase, kebab-case (e.g., `active-pieces`); unique across repo—enforced by dedupe script.
- **Docker Compose**: Minimal—omit `ports` (Dokploy proxies), `restart: unless-stopped`, persistent volumes (e.g., `- db-data:/var/lib/postgresql/data`). Services named after folder (e.g., `ghost` service).
- **Docker Compose**: Minimal—omit `ports` (Dokploy proxies), persistent volumes (e.g., `- db-data:/var/lib/postgresql/data`). Services named after folder (e.g., `ghost` service).
- **template.toml**:
- Variables: `[variables] main_domain = "${domain}"`; use helpers for secrets (`${password:64}`, `${base64:32}`).
- Domains: `[[config.domains]] serviceName = "<service>" port = 80 host = "${main_domain}"` (path="/" optional).
- Env: `[[config.env]]` array of "KEY=VALUE" strings, interpolating vars (e.g., "DB_PASSWORD=${db_pass}").
- **URL Variables**: When environment variables require URLs (e.g., `WEB_URL`, `NEXTAUTH_URL`, `PUBLIC_URL`), **always use HTTP by default** (e.g., `"http://${main_domain}"`). HTTPS should only be used if explicitly required by the application or when using a reverse proxy with SSL termination.
- Mounts: `[[config.mounts]] filePath = "/etc/config" content = """multi-line\ncontent"""`.
- JWT helper: `${jwt:secret_var:payload_var}` for auth tokens; payload as JSON string with `exp: ${timestamps:YYYY-MM-DDTHH:mm:ssZ}`.
- **Meta.json**: Entries as JSON objects; tags array of lowercase strings (e.g., ["monitoring", "database"]); links object with `github`, `website`, `docs`.
- **No Networks**: Rely on Dokploy's isolated deployments—avoid explicit `networks:`.
- **Versions**: Pin images to specific versions in `docker-compose.yml` (e.g., `ghost:5.82.0-alpine`); match in `meta.json.version`.
- **Versions**: Pin images to specific versions in `docker-compose.yml` (e.g., `ghost:5.82.0-alpine`); match in `meta.json.version`. **NEVER use `latest` tag**—it can break templates when upstream images change unexpectedly. **Always verify image exists** using `docker manifest inspect <image:tag>` before committing.
- **Logos**: SVG preferred; size ~128x128; file name in `meta.json.logo` (e.g., "ghost.svg").
Cross-component: No runtime communication—templates independent. App consumes static blueprints/meta for UI rendering (e.g., search, cards via React components in `app/src/`).
Cross-component: Templates are independent and ship as static blueprints/meta.
## Integration Points
@@ -6,12 +6,13 @@ New PR of [Template Name]
Before submitting this PR, please make sure that:
- [ ] I have read the suggestions in the README.md file https://github.com/Dokploy/templates?tab=readme-ov-file#general-suggestions-when-creating-a-template
- [ ] I have read the suggestions in the README.md file https://github.com/Dokploy/templates?tab=readme-ov-file#general-requirements-when-creating-a-template
- [ ] I have tested the template in my instance, so the maintainers don't spend time trying to figure out what's wrong.
- [ ] I have added tests that demonstrate that my correction works or that my new feature works.
## Issues related (if applicable)
Close automatically the related issues using the keywords: `closes #ISSUE_NUMBER`, `fixes #ISSUE_NUMBER`, `resolves #ISSUE_NUMBER`
Close automatically the related issues using the keywords: `closes #ISSUE_NUMBER`
Example: `closes #123`
## Screenshots or Videos
+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
-4
View File
@@ -5,10 +5,6 @@ on:
workflows: [Build Preview Deployment]
types:
- completed
pull_request:
branches:
- canary
permissions:
actions: read
deployments: write
@@ -0,0 +1,121 @@
name: Validate Docker Compose Files
on:
pull_request:
branches:
- canary
paths:
- 'blueprints/**/docker-compose.yml'
- 'blueprints/**/template.toml'
workflow_dispatch:
jobs:
validate-docker-compose:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Docker Compose
run: docker compose version
- 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: Detect changed blueprints
id: changed
run: |
BASE_SHA=$(git merge-base HEAD origin/${{ github.base_ref }})
# Obtener todos los blueprints que tienen cambios (en docker-compose.yml o template.toml)
CHANGED_BLUEPRINTS=$(git diff --name-only --diff-filter=ACMRT $BASE_SHA HEAD | \
grep -E 'blueprints/[^/]+/(docker-compose\.yml|template\.toml)$' | \
sed 's|blueprints/\([^/]*\)/.*|\1|' | \
sort -u)
echo "Changed blueprints:"
echo "$CHANGED_BLUEPRINTS" | while read blueprint; do
[ -n "$blueprint" ] && echo " - $blueprint"
done
# Guardar lista de blueprints (una por línea)
echo "blueprints<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGED_BLUEPRINTS" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Validate blueprints
run: |
BLUEPRINTS="${{ steps.changed.outputs.blueprints }}"
if [ -z "$BLUEPRINTS" ] || [ "$BLUEPRINTS" = "" ]; then
echo "ℹ️ No blueprints changed, skipping validation"
exit 0
fi
ERROR=0
# Convertir a array para evitar problemas con subshells
mapfile -t BLUEPRINT_ARRAY <<< "$BLUEPRINTS"
# Iterar sobre cada blueprint
for blueprint in "${BLUEPRINT_ARRAY[@]}"; do
[ -z "$blueprint" ] && continue
BLUEPRINT_PATH="blueprints/$blueprint"
COMPOSE_FILE="$BLUEPRINT_PATH/docker-compose.yml"
TOML_FILE="$BLUEPRINT_PATH/template.toml"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📦 Validating: $blueprint"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# 1. Validar best practices de docker-compose.yml
if [ ! -f "$COMPOSE_FILE" ]; then
echo "⚠️ WARNING: docker-compose.yml not found"
ERROR=1
continue
fi
echo "🔍 Validating docker-compose.yml best practices..."
if ! (cd build-scripts && pnpm exec tsx validate-docker-compose.ts --file "../$COMPOSE_FILE" --verbose); then
ERROR=1
continue
fi
# 3. Validar template.toml
if [ -f "$TOML_FILE" ]; then
echo "🔍 Validating template.toml..."
if ! (cd build-scripts && pnpm exec tsx validate-template.ts --dir "../$BLUEPRINT_PATH" --verbose); then
ERROR=1
continue
fi
else
echo "⚠️ WARNING: template.toml not found"
ERROR=1
continue
fi
echo "✅ All validations passed for $blueprint"
done
if [ $ERROR -eq 1 ]; then
echo ""
echo "❌ Validation failed for one or more blueprints"
exit 1
else
echo ""
echo "✅ All blueprints validated successfully"
fi
+21 -60
View File
@@ -1,12 +1,18 @@
name: Validate and Process Meta.json
name: Validate Template Metadata
on:
push:
branches: [canary]
paths: ["meta.json"]
paths:
- "blueprints/**"
- "build-scripts/generate-meta.js"
- "meta.json"
pull_request:
branches: [canary]
paths: ["meta.json"]
paths:
- "blueprints/**"
- "build-scripts/generate-meta.js"
- "meta.json"
workflow_dispatch:
jobs:
@@ -17,64 +23,19 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
- name: Reject root meta.json
run: |
if [ -f "meta.json" ]; then
echo "❌ The root meta.json is generated at build time and must not be committed."
echo " Add your template's metadata to blueprints/<id>/meta.json instead."
exit 1
fi
echo "✅ No root meta.json present"
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "18"
node-version: "20"
- name: Validate meta.json structure
run: |
echo "🔍 Validating meta.json structure..."
node -e "
const fs = require('fs');
const data = JSON.parse(fs.readFileSync('meta.json', 'utf8'));
if (!Array.isArray(data)) throw new Error('meta.json must be an array');
console.log('✅ meta.json structure is valid');
console.log('📊 Found', data.length, 'entries');
"
- name: Check for duplicates and sort order
run: |
echo "🔍 Checking for duplicates and sort order..."
node build-scripts/process-meta.js --verbose --output /tmp/meta-test.json
- name: Compare with original
run: |
echo "🔍 Comparing processed file with original..."
if ! diff -q meta.json /tmp/meta-test.json > /dev/null; then
echo "⚠️ meta.json needs processing (duplicates found or not sorted)"
echo "Original entries:"
node -e "console.log(JSON.parse(require('fs').readFileSync('meta.json', 'utf8')).length)"
echo "Processed entries:"
node -e "console.log(JSON.parse(require('fs').readFileSync('/tmp/meta-test.json', 'utf8')).length)"
echo ""
echo "To fix this, run: npm run process-meta"
exit 1
else
echo "✅ meta.json is properly deduplicated and sorted"
fi
- name: Validate required fields
run: |
echo "🔍 Validating required fields..."
node -e "
const fs = require('fs');
const data = JSON.parse(fs.readFileSync('meta.json', 'utf8'));
const required = ['id', 'name', 'version', 'description', 'links', 'logo', 'tags'];
let issues = 0;
data.forEach((item, index) => {
const missing = required.filter(field => !item[field]);
if (missing.length > 0) {
console.log('❌ Entry', index, '(' + item.id + '):', 'Missing fields:', missing.join(', '));
issues++;
}
});
if (issues > 0) {
console.log('🚨 Found', issues, 'entries with missing required fields');
process.exit(1);
} else {
console.log('✅ All entries have required fields');
}
"
- name: Validate per-template metadata
run: node build-scripts/generate-meta.js --check
+6 -129
View File
@@ -49,133 +49,10 @@ jobs:
echo "✅ Blueprint folders validated successfully."
fi
- name: Validate meta.json structure and required fields
run: |
echo "🔍 Validating meta.json structure and required fields..."
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
# First check if meta.json exists and is valid JSON
if [ ! -f "meta.json" ]; then
echo "❌ meta.json file not found"
exit 1
fi
if ! jq empty meta.json 2>/dev/null; then
echo "❌ meta.json is not a valid JSON file"
exit 1
fi
ERROR=0
ERRORS_FOUND=""
# Debug: Show total number of entries
TOTAL_ENTRIES=$(jq '. | length' meta.json)
echo "📊 Total entries in meta.json: $TOTAL_ENTRIES"
# Get all entries at once and process them
TOTAL_INDEX=$(($TOTAL_ENTRIES - 1))
for i in $(seq 0 $TOTAL_INDEX); do
entry=$(jq -c ".[$i]" meta.json)
INDEX=$((i + 1))
echo "-------------------------------------------"
echo "🔍 Checking entry #$INDEX..."
# Get the ID for better error reporting
ID=$(echo "$entry" | jq -r '.id // "UNKNOWN"')
echo "📝 Processing entry with ID: $ID"
# Validate required top-level fields
for field in "id" "name" "version" "description" "logo" "links" "tags"; do
if [ "$(echo "$entry" | jq "has(\"$field\")")" != "true" ]; then
ERROR_MSG="❌ Entry #$INDEX (ID: $ID) is missing required field: $field"
echo "$ERROR_MSG"
ERRORS_FOUND="${ERRORS_FOUND}${ERROR_MSG}\n"
ERROR=1
fi
done
# Validate links object required fields
if [ "$(echo "$entry" | jq 'has("links")')" == "true" ]; then
for link_field in "github" "website" "docs"; do
if [ "$(echo "$entry" | jq ".links | has(\"$link_field\")")" != "true" ]; then
ERROR_MSG="❌ Entry #$INDEX (ID: $ID): links object is missing required field: $link_field"
echo "$ERROR_MSG"
ERRORS_FOUND="${ERRORS_FOUND}${ERROR_MSG}\n"
ERROR=1
fi
done
fi
# Validate tags array is not empty
if [ "$(echo "$entry" | jq '.tags | length')" -eq 0 ]; then
ERROR_MSG="❌ Entry #$INDEX (ID: $ID): tags array cannot be empty"
echo "$ERROR_MSG"
ERRORS_FOUND="${ERRORS_FOUND}${ERROR_MSG}\n"
ERROR=1
fi
done
echo "-------------------------------------------"
if [ $ERROR -eq 1 ]; then
echo "❌ meta.json structure validation failed."
echo -e "Summary of all errors found:${ERRORS_FOUND}"
exit 1
else
echo "✅ meta.json structure validated successfully."
fi
- name: Validate meta.json matches blueprint folders and logo files
run: |
echo "🔍 Validating meta.json against blueprint folders and logos..."
ERROR=0
# Read all blueprint folder names into an array
FOLDERS=($(ls -1 blueprints))
# Extract ids and logos from meta.json
IDS_AND_LOGOS=$(jq -c '.[] | {id, logo}' meta.json)
# Validate each id in meta.json exists as a folder
for item in $IDS_AND_LOGOS; do
ID=$(echo "$item" | jq -r '.id')
LOGO=$(echo "$item" | jq -r '.logo')
# Check if folder exists
if [ ! -d "blueprints/$ID" ]; then
echo "❌ meta.json id \"$ID\" does not have a matching folder in blueprints/"
ERROR=1
continue
fi
# Check if logo file exists inside its folder
if [ ! -f "blueprints/$ID/$LOGO" ]; then
echo "❌ Logo \"$LOGO\" defined for \"$ID\" does not exist in blueprints/$ID/"
ERROR=1
fi
done
# Validate each folder has a matching id in meta.json
META_IDS=$(jq -r '.[].id' meta.json)
for FOLDER in "${FOLDERS[@]}"; do
FOUND=0
for ID in $META_IDS; do
if [ "$FOLDER" == "$ID" ]; then
FOUND=1
break
fi
done
if [ "$FOUND" -eq 0 ]; then
echo "❌ Folder \"$FOLDER\" has no matching id in meta.json"
ERROR=1
fi
done
if [ $ERROR -eq 1 ]; then
echo "❌ meta.json validation failed."
exit 1
else
echo "✅ meta.json validated successfully."
fi
- name: Validate per-template metadata (blueprints/<id>/meta.json)
run: node build-scripts/generate-meta.js --check
+3
View File
@@ -0,0 +1,3 @@
node_modules
package-lock.json
meta.json.backup.*
+198
View File
@@ -0,0 +1,198 @@
# AGENTS.md: AI Collaboration Guide
This document provides essential context for AI models interacting with this project. Adhering to these guidelines will ensure consistency and maintain code quality.
## 1. Project Overview & Purpose
- **Primary Goal:** This is the official repository for Dokploy Open Source Templates, maintaining Docker Compose templates for deploying 200+ open-source applications via Dokploy (a self-hosted PaaS alternative to Heroku). The project enables rapid, standardized deployment of OSS applications without manual configuration.
- **Business Domain:** Self-hosted Platform as a Service (PaaS), DevOps tooling, containerized application deployment, and open-source software distribution.
## 2. Core Technologies & Stack
- **Languages:** JavaScript (Node.js), TypeScript (React frontend), YAML (Docker Compose), TOML (template configuration), JSON (metadata), Shell (build scripts).
- **Frameworks & Runtimes:** Node.js runtime, Vite 5.x (for React 19.x frontend), Docker Compose v3.8+, React Router 7.x.
- **Databases:** No direct database usage in core project (templates may include various databases like PostgreSQL, MySQL, Redis, etc.).
- **Key Libraries/Dependencies:**
- **Core:** `nodemon` for development, custom Node.js scripts for meta processing.
- **Frontend:** `fuse.js` (fuzzy search), `zustand` (state management), `@iarna/toml` (TOML parsing), `shadcn/ui` components, `@radix-ui` primitives, `@codemirror` (code editor), `react-router-dom`, `tailwindcss`.
- **Build:** `vite-plugin-static-copy` for copying blueprints to dist.
- **Platforms:** Linux (primary), Docker containers, Dokploy PaaS, Web browsers (for frontend preview), Cloudflare Pages (for PR previews).
- **Package Manager:** npm for root project, pnpm for frontend (`app/` directory).
## 3. Architectural Patterns
- **Overall Architecture:** Template collection and management system with decentralized blueprint architecture. Each blueprint is a self-contained Docker Compose application with Dokploy-specific configuration.
- **Directory Structure Philosophy:**
- `/blueprints`: Contains all deployable application templates, each as a subdirectory with `docker-compose.yml`, `template.toml`, and logo files. Each blueprint is independent with no shared state.
- `/app`: Vite + React + TypeScript frontend for local preview and development.
- `/src/components`: React components (UI components in `/ui` subdirectory using shadcn/ui).
- `/src/hooks`: Custom React hooks (e.g., `useFuseSearch.ts` for fuzzy search).
- `/src/store`: Zustand state management store.
- `/src/lib`: Utility functions and helpers.
- `/build-scripts`: Metadata tooling — `generate-meta.js` (aggregates and validates every `blueprints/<id>/meta.json` into the served `meta.json` artifact) and `explode-meta.js` (one-shot migration reference).
- `/.github/workflows`: CI/CD workflows for validation, preview builds, and deployments.
- Root level: There is NO root `meta.json` in the repo — each template's metadata lives in `blueprints/<id>/meta.json` and the global registry is generated at build time.
- **Module Organization:** Node.js scripts for metadata processing, React components for frontend UI, Docker Compose files for service definitions, TOML files for Dokploy configuration. Frontend uses component-based architecture with hooks for business logic and Zustand for global state.
## 4. Coding Conventions & Style Guide
- **Formatting:** JavaScript follows standard conventions with 2-space indentation. TypeScript in frontend uses ESLint configuration. YAML uses 2-space indentation. TOML files use standard formatting.
- **Naming Conventions:**
- Variables, functions: camelCase (`myVariable`, `myFunction`)
- React components: PascalCase (`TemplateGrid`, `SearchBar`)
- Constants: SCREAMING_SNAKE_CASE (`MAX_BUFFER_SIZE`)
- Template IDs: lowercase, kebab-case (`activepieces`, `ghost`) - **MUST** be unique across repository
- Files: kebab-case for scripts (`generate-meta.js`), PascalCase for React components (`TemplateGrid.tsx`), kebab-case for directories (`build-scripts`)
- Docker services: **MUST** match blueprint folder name exactly (e.g., `ghost` service in `blueprints/ghost/`)
- **API Design:**
- **Backend:** Procedural scripting approach with CLI interfaces. Template system uses declarative configuration over imperative code.
- **Frontend:** Component-based React architecture with hooks for logic separation. Zustand for centralized state management. Custom hooks encapsulate complex logic (e.g., `useFuseSearch` for search functionality).
- **Common Patterns & Idioms:**
- **Metaprogramming:** Minimal use of advanced JavaScript features in scripts, focusing on simple, maintainable code.
- **Memory Management:** Relies on Node.js garbage collection and React's automatic memory management.
- **Polymorphism:** Uses JavaScript prototype-based objects and functional programming patterns. React components use composition over inheritance.
- **Type Safety:**
- Backend scripts: JavaScript with JSDoc comments for documentation.
- Frontend: TypeScript with strict type checking enabled.
- **Concurrency:**
- Backend: Synchronous processing model for meta.json operations.
- Frontend: React's concurrent rendering, `useDeferredValue` for debouncing, `useEffect` for async operations.
- **State Management:** Zustand store pattern with selectors for optimal re-renders. URL params synced with search state via React Router.
- **Error Handling:**
- Backend: Node.js error-first callback pattern and try-catch blocks. Scripts validate JSON structure and fail fast on errors.
- Frontend: Error boundaries for React components, try-catch for async operations, user-friendly error messages via toast notifications.
## 5. Key Files & Entrypoints
- **Main Entrypoints:**
- **Backend:** `build-scripts/generate-meta.js` - Aggregates and validates all `blueprints/<id>/meta.json` files into the served `meta.json` artifact (`app/public/meta.json`, gitignored).
- **Frontend:** `app/src/main.tsx` - React application entry point.
- **Configuration:**
- `app/package.json` - Frontend dependencies and pnpm scripts (`dev` and `build` run `generate-meta.js` first).
- `blueprints/<id>/meta.json` - Per-template metadata (one object per template; 400+ templates).
- `app/vite.config.ts` - Vite build configuration with static copy plugin.
- `app/tsconfig.json` - TypeScript compiler configuration.
- **CI/CD Pipeline:**
- `.github/workflows/validate-meta.yml` - Validates every `blueprints/<id>/meta.json` (via `generate-meta.js --check`) and rejects a committed root `meta.json`.
- `.github/workflows/build-preview.yml` - Builds preview deployments for PRs.
- `.github/workflows/deploy-preview.yml` - Deploys previews to Cloudflare Pages.
## 6. Development & Testing Workflow
- **Local Development Environment:**
- **Install dependencies**
```bash
# Root project
npm install
# Frontend (uses pnpm)
cd app && pnpm install
```
- **Validate template metadata** (CRITICAL: run after adding/editing any `blueprints/<id>/meta.json`)
```bash
node build-scripts/generate-meta.js --check
```
- **Generate the served meta.json artifact** (done automatically by `pnpm dev` / `pnpm build` in `app/`)
```bash
node build-scripts/generate-meta.js # writes app/public/meta.json
```
- **Task Configuration:**
- **App scripts (`app/package.json`, pnpm):**
- `dev`: Generate meta artifact + start Vite dev server
- `build`: Generate meta artifact + typecheck + Vite build
- `generate-meta`: Generate the meta artifact only
- **Testing:** No formal unit testing framework. Validation occurs through:
- Script-based validation of every `blueprints/<id>/meta.json` (`build-scripts/generate-meta.js --check`)
- Manual testing via Dokploy preview deployments (import base64 from PR preview)
- TypeScript compilation errors caught during build
- ESLint for code quality in frontend
- **CI/CD Process:**
- **On blueprint changes:** Validates each template's metadata (required fields, id/folder match, logo file exists) and rejects a committed root `meta.json`.
- **On PR creation:** Builds preview deployment, generates base64 import for testing in Dokploy.
- **Preview testing:** Use PR description link → Search template → Copy base64 → Import in Dokploy instance.
## 7. Specific Instructions for AI Collaboration
- **Contribution Guidelines:**
- Follow existing Dokploy template structure strictly. Each blueprint must be independent with no shared state.
- **CRITICAL:** Template metadata lives in `blueprints/<id>/meta.json` (one object per template). Never create or edit a root-level `meta.json` — it is generated at build time. Run `node build-scripts/generate-meta.js --check` after any metadata edits.
- Test templates in Dokploy preview before submitting PRs (use base64 import from PR preview).
- Add logo file (SVG preferred, ~128x128px) to blueprint folder.
- Ensure the `id` in `blueprints/<id>/meta.json` exactly matches the blueprint folder name (lowercase kebab-case).
- **Docker Compose Conventions (CRITICAL):**
- **NEVER include:** `ports` (use `expose` only), `container_name`, `networks` (Dokploy handles isolation)
- **ALWAYS include:** `restart: unless-stopped` or `restart: always`, persistent volumes
- **Service naming:** MUST match blueprint folder name exactly
- **Image source:** Prefer pinned Docker images from registries (`image: ghost:6-alpine`). When no official published images are available, use Docker Compose `build` with a Git context (e.g., `context: "https://github.com/..."#main`, see `blueprints/opendots` for an example building both `app` and `browser` targets from the upstream repository).
- **Example (with pinned image):**
```yaml
services:
ghost:
image: ghost:6-alpine
restart: always
volumes:
- ghost:/var/lib/ghost/content
volumes:
ghost:
```
- **template.toml Conventions:**
- **Variables:** Define in `[variables]` section, use helpers for secrets
- **Domains:** `[[config.domains]]` with `serviceName`, `port`, `host` (path optional)
- **Env:** Array of strings: `env = ["KEY=VALUE", "DB_PASSWORD=${db_pass}"]`
- **Available helpers:** `${domain}`, `${password:length}`, `${base64:length}`, `${hash:length}`, `${uuid}`, `${randomPort}`, `${email}`, `${username}`, `${timestamp}`, `${timestamps:datetime}`, `${timestampms:datetime}`, `${jwt:secret_var:payload_var}`
- **JWT helper example:** `${jwt:mysecret:mypayload}` with payload containing `exp: ${timestamps:2030-01-01T00:00:00Z}`
- **Volume bind mounts (in docker-compose.yml):** When mounting host paths, do NOT use absolute paths like `"/folder:/path/in/container"`. Use relative paths instead:
```yaml
# Invalid
volumes:
- "/folder:/path/in/container" ❌
# Valid
volumes:
- "../files/my-database:/var/lib/mysql" ✅
- "../files/my-configs:/etc/my-app/config" ✅
```
- **meta.json Requirements:**
- **Required fields:** `id`, `name`, `version`, `description`, `links` (with `github`), `logo`, `tags` (array)
- **Tags:** Lowercase strings (e.g., `["monitoring", "database"]`)
- **Version:** MUST match Docker image version in docker-compose.yml when using `image:`. When building from source (using `build:` with a Git context), the version should reflect the template's own version or the upstream project's version (e.g., `"latest"` for tracking `main` branch).
- **Logo:** Filename only (e.g., `"ghost.jpeg"`), file must exist in blueprint folder
- **Frontend Development:**
- Use TypeScript with strict type checking
- Follow React hooks patterns, avoid class components
- Use Zustand selectors for state access to optimize re-renders
- Fuse.js searches across `name`, `description`, `tags`, `id` fields
- Use shadcn/ui components for consistency
- Sync URL params with search state via React Router
- **Security:**
- Be mindful of security when handling template configurations
- NEVER hardcode secrets in templates - use Dokploy's variable system with helpers
- Pin Docker images to specific versions to avoid supply chain attacks
- Validate user input in frontend before processing
- **Dependencies:**
- When adding new templates, prefer pinned Docker images to specific versions when available
- Update meta.json with exact version matching Docker Compose image version (for `image:`), or the template/upstream version (for `build:` from source)
- For frontend dependencies: Use `pnpm add <package>` in `app/` directory
- For root dependencies: Use `npm install <package>` in root directory
- **Commit Messages:** Follow conventional commit patterns (e.g., `feat:`, `fix:`, `docs:`, `chore:`).
- **Common Pitfalls to Avoid:**
1. Forgetting to process meta.json after editing (CI will fail)
2. Template ID mismatch between meta.json and folder name
3. Including `ports`, `container_name`, or `networks` in docker-compose.yml
4. Using object syntax for env vars in template.toml (must be array of strings)
5. Logo file missing or filename mismatch in meta.json
6. Version mismatch between meta.json and docker-compose.yml image tag
+11 -9
View File
@@ -20,6 +20,11 @@ This project adheres to the [Contributor Covenant Code of Conduct](https://www.c
For larger changes or questions, open an issue first to discuss your ideas.
### Pull Request Guidelines
- **Keep PRs small and focused.** Avoid very large PRs; prefer several smaller PRs (e.g., one template or one logical change per PR). This speeds up review and keeps the history clear.
- **Test before submitting.** Any PR that has not been tested by the contributor will be closed. This keeps the PR queue tidy and ensures that only contributions that have been verified by their authors are considered.
## Adding a New Template
To add a new template, follow these steps:
@@ -27,13 +32,11 @@ To add a new template, follow these steps:
1. **Create a Folder in `blueprints/`**: Name it after the template (e.g., `grafana`). Use lowercase with hyphens for multi-word names.
2. **Add `docker-compose.yml`**: Define the services, volumes, and other Compose configurations. Key guidelines:
- Use `version: "3.8"` or later.
- Avoid exposing ports explicitly (e.g., no `ports: - "3000:3000"`; just `- 3000` if needed for internal reference).
- Do not use `container_name`.
- Avoid custom networks like `dokploy-network`; Dokploy handles isolation automatically.
- Example for Grafana:
```yaml
version: "3.8"
services:
grafana:
image: grafana/grafana-enterprise:9.5.20
@@ -68,16 +71,16 @@ To add a new template, follow these steps:
"""
```
4. **Update `meta.json`**: Add an entry for your template in the root `meta.json`. Include:
4. **Add `meta.json` in your template folder**: Create `blueprints/<id>/meta.json` with a single JSON object describing your template. Do NOT create or edit a root-level `meta.json` — the global registry is generated automatically at build time from every `blueprints/<id>/meta.json` (this is what makes template PRs conflict-free). Include:
- `id`: Folder name (e.g., "grafana").
- `id`: Folder name (e.g., "grafana") — must match the folder exactly.
- `name`: Display name.
- `version`: Image/tag version.
- `description`: Brief overview.
- `logo`: Filename of the logo (e.g., "grafana.svg").
- `links`: Object with `github`, `website`, `docs` (URLs).
- `links`: Object with `github`, `website`, `docs` (URLs; use `""` if not applicable).
- `tags`: Array of categories (e.g., ["monitoring"]).
- Example:
- Example (`blueprints/grafana/meta.json`):
```json
{
"id": "grafana",
@@ -96,7 +99,7 @@ To add a new template, follow these steps:
5. **Add a Logo**: Place an SVG or PNG logo (e.g., `grafana.svg`) in the template folder. Keep it simple and representative (ideally 512x512 or similar).
6. **Run Validation**: Before pushing, run `node dedupe-and-sort-meta.js` (if available) or manually check for syntax errors in YAML/TOML/JSON.
6. **Run Validation**: Before pushing, run `node build-scripts/generate-meta.js --check` to validate every template's metadata (same check CI runs), and manually check for syntax errors in YAML/TOML.
7. **Commit and PR**: Push your branch and open a PR. Include:
- A description of the template.
@@ -148,7 +151,6 @@ Use these in `${}` for dynamic values:
- Omit explicit ports; let Dokploy handle exposure.
- Use persistent volumes for data (e.g., databases).
- Set `restart: unless-stopped` for services.
- **Template.toml**:
@@ -191,7 +193,7 @@ If issues arise, debug locally or in the preview. Fix and update your PR.
## Updating Existing Templates
- Follow the same structure as adding new ones.
- Bump `version` in `meta.json` and update `docker-compose.yml` image tags.
- Bump `version` in the template's `blueprints/<id>/meta.json` and update `docker-compose.yml` image tags.
- Test thoroughly, as changes may affect users.
## Reporting Bugs or Requesting Features
+5 -6
View File
@@ -8,7 +8,7 @@ This is the official repository for the Dokploy Open Source Templates.
1. Fork the repository
2. Create a new branch
3. Add the template to the `blueprints` folder (`docker-compose.yml`, `template.toml`)
4. Add the template metadata (name, description, version, logo, links, tags) to the `meta.json` file
4. Add the template metadata (name, description, version, logo, links, tags) in a `meta.json` file inside your template folder (`blueprints/<id>/meta.json`) — do NOT create or edit a root-level `meta.json`, it is generated at build time
5. Add the logo to the template folder
6. Commit and push your changes
7. Create a pull request (PR)
@@ -35,7 +35,6 @@ Let's suppose you want to add the [Grafana](https://grafana.com/) template to th
2. Add the `docker-compose.yml` file to the folder
```yaml
version: "3.8"
services:
grafana:
image: grafana/grafana-enterprise:9.5.20
@@ -62,7 +61,7 @@ host = "${main_domain}"
[[config.mounts]]
```
4. Add meta information to the `meta.json` file in the root folder
4. Add the meta information in `blueprints/<id>/meta.json` (a single JSON object; the root `meta.json` is generated automatically at build time)
```json
{
@@ -170,7 +169,7 @@ We have a few helpers that are very common when creating a template, these are:
## General Suggestions when creating a template
## General Requirements when creating a template
- Don't use this way in your docker compose file:
@@ -183,7 +182,7 @@ services:
- 3000:3000
# Instead use this way:
ports:
expose:
- 3000
```
@@ -225,4 +224,4 @@ services:
6. Now you can click on the Deploy Button and wait for the deployment to finish, and try to access to the service, if everything is correct you should access to the service and see the template working.
use the command `node dedupe-and-sort-meta.js` to deduplicate and sort the meta.json file.
Each template's metadata lives in `blueprints/<id>/meta.json`; the global `meta.json` is generated at build time. Use `node build-scripts/generate-meta.js --check` to validate all template metadata.
+10 -1
View File
@@ -4,7 +4,16 @@
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/logo.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Dokploy Blueprints</title>
<link rel="canonical" href="https://dokploy.com/templates" />
<meta name="description" content="Browse 500+ open source Docker templates and one-click self-hosted apps to deploy with Dokploy – databases, CMS, analytics, AI tools and more." />
<meta property="og:title" content="Dokploy Templates: 500+ Open Source Apps" />
<meta property="og:description" content="Browse 500+ open source Docker templates and one-click self-hosted apps to deploy with Dokploy – databases, CMS, analytics, AI tools and more." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://templates.dokploy.com" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Dokploy Templates: 500+ Open Source Apps" />
<meta name="twitter:description" content="Browse 500+ open source Docker templates and one-click self-hosted apps to deploy with Dokploy – databases, CMS, analytics, AI tools and more." />
<title>Dokploy Templates: 500+ Open Source Apps</title>
</head>
<body>
<div id="root"></div>
-4248
View File
File diff suppressed because it is too large Load Diff
+7 -6
View File
@@ -4,10 +4,11 @@
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"dev": "node ../build-scripts/generate-meta.js && vite",
"build": "node ../build-scripts/generate-meta.js && tsc -b && vite build",
"lint": "eslint .",
"preview": "vite preview"
"preview": "vite preview",
"generate-meta": "node ../build-scripts/generate-meta.js"
},
"dependencies": {
"@codemirror/autocomplete": "^6.19.1",
@@ -34,13 +35,13 @@
"next-themes": "^0.4.6",
"react": "^19.2.0",
"react-dom": "^19.2.0",
"react-router-dom": "^7.9.4",
"react-router-dom": "^7.18.0",
"sonner": "^2.0.7",
"tailwind-merge": "^3.3.1",
"tailwindcss": "^4.1.16",
"tailwindcss-animate": "^1.0.7",
"vite-plugin-static-copy": "^2.3.2",
"yaml": "2.7.1",
"yaml": "2.8.3",
"zustand": "^5.0.8"
},
"devDependencies": {
@@ -50,6 +51,6 @@
"@vitejs/plugin-react": "^4.7.0",
"globals": "^15.15.0",
"typescript": "~5.7.3",
"vite": "^6.4.1"
"vite": "^6.4.3"
}
}
+349 -283
View File
File diff suppressed because it is too large Load Diff
+4
View File
@@ -0,0 +1,4 @@
packages:
- .
allowBuilds:
esbuild: false
+1
View File
@@ -0,0 +1 @@
meta.json
+3 -1
View File
@@ -13,7 +13,9 @@ const Navigation = () => {
"https://api.github.com/repos/dokploy/dokploy"
);
const data = await response.json();
setGithubStars(data.stargazers_count);
setGithubStars(
Number.isFinite(data.stargazers_count) ? data.stargazers_count : 0
);
} catch (error) {
console.error("Error fetching GitHub stars:", error);
}
+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" />
+2 -4
View File
@@ -11,11 +11,9 @@ export default defineConfig({
{
src: '../blueprints/*',
dest: 'blueprints' // raíz de dist (public root)
},
{
src: '../meta.json',
dest: '' // raíz de dist
}
// meta.json is no longer copied from the repo root: it is
// generated into app/public/meta.json by build-scripts/generate-meta.js
]
})
+22
View File
@@ -0,0 +1,22 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#101a3a"/><stop offset="1" stop-color="#050913"/></linearGradient>
<linearGradient id="rim" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#7c6cff"/><stop offset="1" stop-color="#2de2ff"/></linearGradient>
</defs>
<rect x="6" y="6" width="500" height="500" rx="116" fill="url(#bg)" stroke="url(#rim)" stroke-width="12"/>
<polygon points="256.0,181.5 442.0,288.8 256.0,396.2 70.0,288.8" fill="#2de2ff" fill-opacity="0.12" stroke="#2de2ff" stroke-width="9" stroke-linejoin="round"/>
<polygon points="195.5,237.8 256.0,272.7 256.0,197.6 195.5,162.7" fill="#4f3fd0"/>
<polygon points="316.5,237.8 256.0,272.7 256.0,197.6 316.5,162.7" fill="#7c6cff"/>
<polygon points="256.0,127.8 316.5,162.7 256.0,197.6 195.5,162.7" fill="#b3abff"/>
<line x1="208.8" y1="219.2" x2="242.7" y2="238.8" stroke="#2bff9a" stroke-width="11" stroke-linecap="round"/>
<line x1="208.8" y1="194.4" x2="242.7" y2="213.9" stroke="#2bff9a" stroke-width="11" stroke-linecap="round"/>
<polygon points="283.9,288.8 344.3,323.7 344.3,211.0 283.9,176.1" fill="#0f9cbb"/>
<polygon points="404.8,288.8 344.3,323.7 344.3,211.0 404.8,176.1" fill="#2de2ff"/>
<polygon points="344.4,141.2 404.8,176.1 344.3,211.0 283.9,176.1" fill="#b3f6ff"/>
<line x1="297.2" y1="257.1" x2="331.1" y2="276.6" stroke="#2bff9a" stroke-width="11" stroke-linecap="round"/>
<line x1="297.2" y1="219.9" x2="331.1" y2="239.4" stroke="#2bff9a" stroke-width="11" stroke-linecap="round"/>
<polygon points="195.6,339.9 256.0,374.8 256.0,315.7 195.6,280.8" fill="#2856c8"/>
<polygon points="316.4,339.9 256.0,374.8 256.0,315.7 316.4,280.8" fill="#4f8bff"/>
<polygon points="256.0,245.9 316.4,280.8 256.0,315.7 195.6,280.8" fill="#a8c8ff"/>
<line x1="208.8" y1="318.0" x2="242.7" y2="337.5" stroke="#2bff9a" stroke-width="11" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

+10
View File
@@ -0,0 +1,10 @@
services:
3dokploy:
image: ghcr.io/suleyman/3dokploy:0.1.1
restart: unless-stopped
environment:
- DOKPLOY_URL=${DOKPLOY_URL}
- DOKPLOY_API_KEY=${DOKPLOY_API_KEY}
- BASIC_AUTH=${BASIC_AUTH}
extra_hosts:
- host.docker.internal:host-gateway
+13
View File
@@ -0,0 +1,13 @@
{
"id": "3dokploy",
"name": "3Dokploy",
"version": "0.1.1",
"description": "A live, isometric 3D view of your Dokploy: projects as buildings, services as racks, deploys rolling in on carts, network traffic as packets. Read-only.",
"logo": "3dokploy.svg",
"links": {
"github": "https://github.com/suleyman/3dokploy",
"website": "",
"docs": "https://github.com/suleyman/3dokploy#readme"
},
"tags": ["monitoring", "dashboard", "devops"]
}
+19
View File
@@ -0,0 +1,19 @@
[variables]
main_domain = "${domain}"
auth_password = "${password:24}"
[config]
mounts = []
[[config.domains]]
serviceName = "3dokploy"
port = 3_000
host = "${main_domain}"
[config.env]
# The Dokploy on this same server. If its port 3000 is closed, use its public URL instead.
DOKPLOY_URL = "http://host.docker.internal:3000"
# Required: an API key from Settings → Profile → API/CLI. It stays on the server.
DOKPLOY_API_KEY = ""
# Site login (user admin).
BASIC_AUTH = "admin:${auth_password}"
Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

+44
View File
@@ -0,0 +1,44 @@
services:
9router:
image: decolua/9router:0.5.59
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: https://${ROUTER_HOST}
NEXT_PUBLIC_BASE_URL: https://${ROUTER_HOST}
HEADROOM_URL: http://headroom:8787
AUTH_COOKIE_SECURE: "true"
REQUIRE_API_KEY: "true"
volumes:
- 9router-data:/app/data
depends_on:
headroom:
condition: service_healthy
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:20128/api/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 30s
# 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
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8787/health')"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
volumes:
9router-data:
+17
View File
@@ -0,0 +1,17 @@
{
"id": "9router",
"name": "9Router",
"version": "0.5.59",
"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 -3
View File
@@ -1,9 +1,7 @@
version: "3"
services:
ackee:
image: electerious/ackee:3.4.2
ports:
expose:
- "3000"
environment:
- ACKEE_USERNAME=${ACKEE_USERNAME}
+16
View File
@@ -0,0 +1,16 @@
{
"id": "ackee",
"name": "Ackee",
"version": "latest",
"description": "Ackee is a self-hosted analytics tool for your website.",
"logo": "logo.png",
"links": {
"github": "https://github.com/electerious/Ackee",
"website": "https://ackee.electerious.com/",
"docs": "https://docs.ackee.electerious.com/"
},
"tags": [
"analytics",
"self-hosted"
]
}
+1
View File
@@ -10,6 +10,7 @@ serviceName = "ackee"
port = 3000
host = "${domain}"
[config.env]
ACKEE_USERNAME = "${ACKEE_USERNAME}"
ACKEE_PASSWORD = "${ACKEE_PASSWORD}"
+3 -5
View File
@@ -1,8 +1,6 @@
version: "3.8"
services:
activepieces:
image: activepieces/activepieces:0.35.0
image: activepieces/activepieces:0.91.2
restart: unless-stopped
depends_on:
@@ -32,7 +30,7 @@ services:
AP_TEMPLATES_SOURCE_URL: https://cloud.activepieces.com/api/v1/flow-templates
postgres:
image: postgres:14
image: postgres:17
restart: unless-stopped
environment:
@@ -61,4 +59,4 @@ services:
volumes:
postgres_data:
redis_data:
redis_data:
+17
View File
@@ -0,0 +1,17 @@
{
"id": "activepieces",
"name": "Activepieces",
"version": "0.91.2",
"description": "Open-source no-code business automation tool. An alternative to Zapier, Make.com, and Tray.",
"logo": "activepieces.svg",
"links": {
"github": "https://github.com/activepieces/activepieces",
"website": "https://www.activepieces.com/",
"docs": "https://www.activepieces.com/docs"
},
"tags": [
"automation",
"workflow",
"no-code"
]
}
+17
View File
@@ -0,0 +1,17 @@
{
"id": "actualbudget",
"name": "Actual Budget",
"version": "latest",
"description": "A super fast and privacy-focused app for managing your finances.",
"logo": "actualbudget.png",
"links": {
"github": "https://github.com/actualbudget/actual",
"website": "https://actualbudget.org",
"docs": "https://actualbudget.org/docs"
},
"tags": [
"budgeting",
"finance",
"money"
]
}
+4 -3
View File
@@ -1,4 +1,4 @@
version: "3.8"
# 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.
services:
adguardhome:
image: adguard/adguardhome:latest
@@ -10,11 +10,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: {}
+21
View File
@@ -0,0 +1,21 @@
{
"id": "adguardhome",
"name": "AdGuard Home",
"version": "latest",
"description": "AdGuard Home is a network-wide ad and tracker blocker. Self-host it on your own server with Dokploy, which deploys AdGuard Home as a Docker Compose service in a few clicks.",
"logo": "logo.svg",
"links": {
"github": "https://github.com/AdguardTeam/AdGuardHome",
"website": "https://adguard.com",
"docs": "https://github.com/AdguardTeam/AdGuardHome/wiki"
},
"tags": [
"privacy",
"security",
"dns",
"ad-blocking"
],
"seoTitle": "AdGuard Home Docker Compose Setup",
"seoDescription": "Network-wide ad and tracker blocker. Deploy AdGuard Home with Docker Compose on Dokploy in minutes – free, open source, self-hosted.",
"newConfig": true
}
+2 -3
View File
@@ -1,7 +1,6 @@
version: "3.8"
services:
adminer:
image: adminer:4.8.1
restart: unless-stopped
ports:
- 8080
expose:
- 8080
+21
View File
@@ -0,0 +1,21 @@
{
"id": "adminer",
"name": "Adminer",
"version": "4.8.1",
"description": "Adminer is a lightweight, web-based database management tool. Self-host it on your own server with Dokploy, which deploys Adminer as a Docker Compose service in a few clicks.",
"logo": "logo.svg",
"links": {
"github": "https://github.com/vrana/adminer",
"website": "https://www.adminer.org/",
"docs": "https://www.adminer.org/en/plugins/"
},
"tags": [
"databases",
"developer-tools",
"mysql",
"postgresql"
],
"seoTitle": "Adminer Docker Compose Setup",
"seoDescription": "Lightweight database management tool. Deploy Adminer with Docker Compose on Dokploy in minutes – free, open source, self-hosted.",
"newConfig": true
}
@@ -1,5 +1,3 @@
version: "3.8"
services:
web:
image: ghcr.io/seanmorley15/adventurelog-frontend:latest
+19
View File
@@ -0,0 +1,19 @@
{
"id": "adventurelog",
"name": "AdventureLog",
"version": "latest",
"description": "AdventureLog is an open-source activity tracker with maps, journaling, and Strava integration.",
"logo": "adventurelog.svg",
"links": {
"github": "https://github.com/seanmorley15/adventurelog",
"website": "https://adventurelog.app/",
"docs": "https://adventurelog.app/docs/intro/adventurelog_overview.html"
},
"tags": [
"activity",
"maps",
"django",
"react",
"postgres"
]
}
+29 -11
View File
@@ -1,9 +1,8 @@
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 +11,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 +19,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 +44,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 +70,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: {}
+20
View File
@@ -0,0 +1,20 @@
{
"id": "affinepro",
"name": "Affine Pro",
"version": "stable",
"description": "AFFiNE is a workspace for notes, docs, and whiteboards, and an alternative to Notion. Self-host it on your own server with Dokploy, which deploys AFFiNE as a Docker Compose service in a few clicks.",
"logo": "logo.png",
"links": {
"github": "https://github.com/toeverything/Affine",
"website": "https://affine.pro/",
"docs": "https://docs.affine.pro/"
},
"tags": [
"collaboration",
"self-hosted",
"productivity",
"project-management"
],
"seoTitle": "Self-Host Affine in minutes",
"seoDescription": "Workspace for notes and docs, an alternative to Notion. Self-host Affine on Dokploy in minutes – no manual setup needed."
}
+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" id="a" viewBox="0 0 3271 1440"><defs><style>.st0{fill:#dedede}</style></defs><path d="M1009.95 1209.53c-125.1-214.98-250.74-430.9-378.92-651.16-126.82 219.73-251.81 436.28-376.62 652.51H60.69c190.42-329.11 570.87-981.75 570.87-981.75s382.11 651.12 572.49 980.41h-194.1Z" class="st0"/><path d="M875.46 1210.46H383.92c32.72-56.91 64.4-111.99 95.81-166.62H781.8c30.62 54.46 61.09 108.66 93.67 166.62zm1622.92-202.23c19.52 29.84 37.9 57.94 58.46 89.39h-63.61c-18.29-24.88-38.17-51.91-57.71-78.49h-72.24v78.17h-51.11V828.44c30.03 0 58.71-.22 87.38.06 23.48.24 47.32-1.26 70.37 2.21 37.67 5.66 66.94 25.71 74.9 64.9 8.22 40.54 1.62 78.35-35.52 104.62-3.14 2.22-6.21 4.54-10.93 7.99h.01Zm-135.01-40.37c34 0 66.71 1.87 99.08-.66 21.47-1.67 30.97-17.92 31.56-39.77.61-22.88-9.01-40.56-30.99-42.73-32.8-3.23-66.15-.84-99.65-.84zM1674.39 829.9v38.37c-52.36 58.82-104.25 117.13-160.14 179.91h158.93v49.49h-227.62v-51.9c46.98-52.11 95.02-105.41 147.93-164.09h-147.28V829.9zm906.29-489.95c64.48 63.91 125.11 123.99 189.35 187.65V373.68h47.4v271.19c-64.19-62.94-125.05-122.59-190.04-186.3v162.44h-46.72V339.94h.01Zm195.02 692.31c13.79-6.85 33.51-15.76 45.41-21.65 41.44 55.26 105.07 42.53 132.33 18s35.44-59.98 25.2-95.47c-13.36-34.33-42.97-61.14-86.36-59.62-43.38 1.52-81.55 32.41-85.2 84.34h-50.32c-.57-50.11 36.27-109.35 94.12-126.75 72.77-21.89 144.89 13.23 172.07 83.77 25.18 65.37-5.74 138.6-72.21 171-60.69 29.59-140.17 6.97-175.1-53.61h.04Zm-811.82-622.07c-11.07 8.4-24.55 17.68-34.13 24.95-55.99-46.33-119.62-30.88-142.33 27.28-13.63 38.17 6.27 88.2 48.2 103.62 36.45 13.4 76.82-.61 87.32-31.48-8.66-2.61-17.29-5.23-28.25-8.54-.93-12.84-1.85-25.67-2.96-40.9h96.82c7.25 56.02-37.39 118.12-94.41 132.17-63.06 15.54-129.35-19.2-152.31-79.83-22.64-59.76 4.81-131.25 61.88-161.16 55.93-29.3 126.75-15.37 160.17 33.88Zm-531.9-55.25c48.2 92.28 93.04 178.13 139.88 267.84h-53.47c-27.89-50.55-56.47-102.34-86.73-157.13-28.93 54.29-56.1 105.29-83.82 157.31h-54.54c45.87-88.68 90.79-175.5 138.65-268.02h.01Zm1642.09 60.65h-89.98v-46.22h226.22v46.24h-86.43v205.91h-49.82V415.59zM1947.89 878.34v65.77l63.09.91s-.03 30.03-.03 50.34c-25.69.89-53.1.45-78.35-5.53-21.38-5.05-36.73-22.63-37.67-46.05-1.5-36.98-.4-75.88-.4-115.24h216.51v49.81h-163.16Zm-52.88 218.57v-68.62c14.11-.65 27.22-1.25 40.97-1.87 3.47 7 3.06 19.81 9.96 20.09 6.88.29 107.67 0 164.04 0v50.41h-214.97Zm342.4-678.53v60.83l58.36.84s-.03 27.78-.03 46.57c-23.85.41-49.12.41-72.49-5.11-19.77-4.68-33.97-20.93-34.85-42.59-1.39-34.2-.37-70.19-.37-106.6h200.29v46.07H2237.4h.01Zm-48.91 202.2v-63.49c13.05-.6 25.18-1.15 37.9-1.73 3.2 6.48 2.83 18.32 9.2 18.59s99.6 0 151.75 0v46.63h-198.87.01Z" class="st0"/></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

+13
View File
@@ -0,0 +1,13 @@
services:
agent-zero:
image: agent0ai/agent-zero:v1.9
restart: unless-stopped
expose:
- "80"
environment:
- AUTH_LOGIN=${AUTH_LOGIN}
- AUTH_PASSWORD=${AUTH_PASSWORD}
volumes:
- agent-zero-data:/a0/usr
volumes:
agent-zero-data:
+17
View File
@@ -0,0 +1,17 @@
{
"id": "agent-zero",
"name": "Agent Zero",
"version": "v1.9",
"description": "Agent Zero is an open-source autonomous AI agent framework with memory and tool use capabilities.",
"logo": "agent-zero.svg",
"links": {
"github": "https://github.com/agent0ai/agent-zero",
"website": "https://www.agent-zero.ai",
"docs": "https://www.agent-zero.ai/p/docs/"
},
"tags": [
"ai",
"agent",
"automation"
]
}
+16
View File
@@ -0,0 +1,16 @@
[variables]
main_domain = "${domain}"
auth_login = "${username}"
auth_password = "${password:32}"
[config]
env = [
"AUTH_LOGIN=${auth_login}",
"AUTH_PASSWORD=${auth_password}",
]
mounts = []
[[config.domains]]
serviceName = "agent-zero"
port = 80
host = "${main_domain}"
+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: {}
+20
View File
@@ -0,0 +1,20 @@
{
"id": "agentdvr",
"name": "Agent DVR",
"version": "latest",
"description": "Agent DVR is a comprehensive video surveillance software with motion detection, alerts, and remote access capabilities.",
"logo": "agentdvr.png",
"links": {
"github": "https://github.com/ispysoftware/AgentDVR",
"website": "https://www.ispyconnect.com/",
"docs": "https://www.ispyconnect.com/userguide-agent-dvr.aspx"
},
"tags": [
"surveillance",
"security",
"video",
"monitoring",
"dvr",
"camera"
]
}
+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]]
+29
View File
@@ -0,0 +1,29 @@
<svg version="1.1" id="Layer_1" xmlns:x="ns_extend;" xmlns:i="ns_ai;" xmlns:graph="ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 95.7 99" style="enable-background:new 0 0 95.7 99;" xml:space="preserve">
<title>Airbyte</title>
<style type="text/css">
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#615EFF;}
</style>
<metadata>
<sfw xmlns="ns_sfw;">
<slices>
</slices>
<sliceSourceBounds bottomLeftOrigin="true" height="99" width="95.7" x="77.2" y="75">
</sliceSourceBounds>
</sfw>
</metadata>
<g>
<path class="st0" d="M32.6,12C43.2,0.1,60.8-3.4,75.2,3.5c19.2,9.1,26.1,32.4,15.7,50.3L67.4,94.1c-1.3,2.3-3.5,3.9-6,4.6
c-2.5,0.7-5.2,0.3-7.5-1l28.4-48.8c7.6-13,2.5-29.9-11.4-36.5c-10.4-5-23.2-2.5-30.9,6.1c-4.2,4.7-6.6,10.8-6.7,17.1
c-0.1,6.3,2.2,12.5,6.3,17.3c0.7,0.9,1.5,1.7,2.4,2.4L25.5,83.8c-0.6,1.1-1.5,2.1-2.5,2.9c-1,0.8-2.2,1.4-3.5,1.7
c-1.3,0.3-2.6,0.4-3.8,0.3c-1.3-0.2-2.5-0.6-3.6-1.2l18-31c-2.6-3.7-4.4-7.9-5.5-12.2l-11,19c-1.3,2.3-3.5,3.9-6,4.6S2.3,68,0,66.7
l28.5-49.1C29.7,15.7,31.1,13.8,32.6,12z M65.6,27.6c6.9,3.9,9.2,12.7,5.3,19.5L43.5,94.1c-1.3,2.3-3.5,3.9-6,4.6
c-2.5,0.7-5.2,0.3-7.5-1L55.4,54c-2-0.4-4-1.3-5.6-2.5c-1.7-1.2-3.1-2.8-4-4.6c-1-1.8-1.6-3.8-1.7-5.9c-0.1-2.1,0.2-4.1,0.9-6.1
c0.7-1.9,1.9-3.7,3.4-5.1c1.5-1.4,3.3-2.5,5.2-3.2c2-0.7,4.1-0.9,6.1-0.8C61.8,26,63.8,26.6,65.6,27.6z M55.6,36.5
c-0.5,0.4-0.9,0.8-1.2,1.3h0c-0.4,0.8-0.7,1.7-0.6,2.5c0.1,0.9,0.4,1.7,0.9,2.4c0.5,0.7,1.3,1.2,2.1,1.5c0.8,0.3,1.8,0.3,2.6,0.1
c0.9-0.2,1.6-0.7,2.2-1.4c0.6-0.7,1-1.5,1.1-2.4c0.1-0.9,0-1.8-0.4-2.6c-0.4-0.8-1-1.5-1.8-1.9c-0.5-0.3-1.1-0.5-1.7-0.6
s-1.2,0-1.8,0.1C56.6,35.8,56.1,36.1,55.6,36.5z">
</path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

+428
View File
@@ -0,0 +1,428 @@
# The following template is not officially supported by the Airbyte team, as
# docker compose deployment has been superseded by abctl. It was made based
# on the community-maintained example below:
#
# - https://github.com/nktnet1/airbyte-compose
#
# NOTE: make sure to change the AIRBYTE_URL and AIRBYTE_API_HOST environment
# variables to match that of your public domain. The URL must be publicly
# accessible (for example, it cannot be auth-protected by Cloudflare).
#
# Once you've completed the setup via the web UI, you can log in using the
# password defined in the AIRBYTE_ADMIN_PASSWORD environment variable.
#
# To connect internal databases, ensure that they are on the same network as
# the k3s container. This is available in Dokploy's UI starting from v0.30.0.
name: airbyte
x-airbyte-environment: &airbyte-environment
AIRBYTE_VERSION: ${AIRBYTE_VERSION:?Set AIRBYTE_VERSION in .env}
AIRBYTE_URL: ${AIRBYTE_URL:?Set AIRBYTE_URL in .env}
AIRBYTE_API_HOST: ${AIRBYTE_API_HOST:?Set AIRBYTE_API_HOST in .env}
AIRBYTE_SERVER_HOST: server:8001
INTERNAL_API_HOST: http://server:8001
MANIFEST_SERVER_API_HOST: http://manifest-server:8080
CONTROL_PLANE_TOKEN_ENDPOINT: http://server:8001/api/v1/dataplanes/token
WORKLOAD_API_HOST: http://workload-api-server:8007
TEMPORAL_HOST: temporal:7233
MINIO_ENDPOINT: http://minio:9000
DATABASE_HOST: db
DATABASE_DB: ${DATABASE_DB:?Set DATABASE_DB in .env}
DATABASE_USER: ${DATABASE_USER:?Set DATABASE_USER in .env}
DATABASE_PASSWORD: ${DATABASE_PASSWORD:?Set DATABASE_PASSWORD in .env}
DATABASE_URL: jdbc:postgresql://db:5432/${DATABASE_DB}
CONFIG_DATABASE_REPLICA_URL: jdbc:postgresql://db:5432/${DATABASE_DB}
CONFIG_DATABASE_REPLICA_USER: ${DATABASE_USER}
CONFIG_DATABASE_REPLICA_PASSWORD: ${DATABASE_PASSWORD}
AWS_ACCESS_KEY_ID: ${MINIO_ROOT_USER:?Set MINIO_ROOT_USER in .env}
AWS_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD:?Set MINIO_ROOT_PASSWORD in .env}
AB_INSTANCE_ADMIN_PASSWORD: ${AIRBYTE_ADMIN_PASSWORD:?Set AIRBYTE_ADMIN_PASSWORD in .env}
AB_INSTANCE_ADMIN_CLIENT_ID: ${AIRBYTE_ADMIN_CLIENT_ID:?Set AIRBYTE_ADMIN_CLIENT_ID in .env}
AB_INSTANCE_ADMIN_CLIENT_SECRET: ${AIRBYTE_ADMIN_CLIENT_SECRET:?Set AIRBYTE_ADMIN_CLIENT_SECRET in .env}
AB_JWT_SIGNATURE_SECRET: ${AIRBYTE_JWT_SIGNATURE_SECRET:?Set AIRBYTE_JWT_SIGNATURE_SECRET in .env}
CONNECTOR_PROFILER_IMAGE: airbyte/async-profiler:${AIRBYTE_VERSION}
CONNECTOR_SIDECAR_IMAGE: airbyte/connector-sidecar:${AIRBYTE_VERSION}
CONTAINER_ORCHESTRATOR_IMAGE: airbyte/container-orchestrator:${AIRBYTE_VERSION}
WORKLOAD_INIT_IMAGE: airbyte/workload-init-container:${AIRBYTE_VERSION}
JAVA_OPTS: -XX:+ExitOnOutOfMemoryError -XX:MaxRAMPercentage=75.0 -XX:FlightRecorderOptions=stackdepth=256
x-airbyte-service: &airbyte-service
env_file:
- ../files/config/airbyte.env
environment: *airbyte-environment
restart: unless-stopped
services:
db:
image: airbyte/db:${AIRBYTE_VERSION}
environment:
POSTGRES_DB: ${DATABASE_DB}
POSTGRES_USER: ${DATABASE_USER}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
PGDATA: /var/lib/postgresql/data/pgdata
healthcheck:
test: [CMD-SHELL, 'pg_isready -U "$${POSTGRES_USER}" -d "$${POSTGRES_DB}"']
interval: 5s
timeout: 5s
retries: 30
start_period: 10s
volumes:
- db-data:/var/lib/postgresql/data
restart: unless-stopped
minio:
# S3-compatible storage (SeaweedFS). The service keeps the "minio" name so
# Airbyte's MINIO_ENDPOINT (http://minio:9000) and the k3s ExternalName
# service keep working unchanged.
image: chrislusf/seaweedfs:${SEAWEEDFS_VERSION}
entrypoint: [/bin/sh, -ec]
command:
- |
mkdir -p /etc/seaweedfs
printf '{"identities":[{"name":"airbyte","credentials":[{"accessKey":"%s","secretKey":"%s"}],"actions":["Admin","Read","Write","List","Tagging"]}]}' \
"$${MINIO_ROOT_USER}" "$${MINIO_ROOT_PASSWORD}" > /etc/seaweedfs/s3.json
exec weed server -dir=/storage -ip.bind=0.0.0.0 \
-master.volumeSizeLimitMB=1024 -volume.max=0 \
-s3 -s3.port=9000 -s3.config=/etc/seaweedfs/s3.json
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
volumes:
- minio-data:/storage
restart: unless-stopped
healthcheck:
test: [CMD-SHELL, "wget -q -O /dev/null http://127.0.0.1:9000/healthz"]
interval: 10s
timeout: 5s
retries: 30
start_period: 20s
minio-init:
image: chrislusf/seaweedfs:${SEAWEEDFS_VERSION}
entrypoint: [/bin/sh, /scripts/init-minio.sh]
environment:
SEAWEEDFS_MASTER: minio:9333
volumes:
- ../files/scripts/init-minio.sh:/scripts/init-minio.sh:ro
depends_on:
minio:
condition: service_healthy
restart: on-failure
temporal:
image: temporalio/auto-setup:${TEMPORAL_VERSION}
environment:
AUTO_SETUP: "true"
DB: postgres12
DB_PORT: "5432"
POSTGRES_SEEDS: db
POSTGRES_USER: ${DATABASE_USER}
POSTGRES_PWD: ${DATABASE_PASSWORD}
POSTGRES_TLS_ENABLED: "false"
POSTGRES_TLS_DISABLE_HOST_VERIFICATION: "false"
SQL_TLS_ENABLED: "false"
SQL_TLS_DISABLE_HOST_VERIFICATION: "false"
DYNAMIC_CONFIG_FILE_PATH: config/dynamicconfig/development.yaml
PROMETHEUS_ENDPOINT: 0.0.0.0:9090
BIND_ON_IP: 0.0.0.0
TEMPORAL_BROADCAST_ADDRESS: 0.0.0.0
volumes:
- ../files/config/temporal-dynamicconfig.yaml:/etc/temporal/config/dynamicconfig/development.yaml:ro
depends_on:
db:
condition: service_healthy
restart: unless-stopped
healthcheck:
test:
- CMD
- /bin/bash
- -ec
- exec 3<>/dev/tcp/127.0.0.1/7233
interval: 10s
timeout: 5s
retries: 30
start_period: 30s
k3s:
image: rancher/k3s:${K3S_VERSION}
command:
- server
- --node-name=airbyte-k3s
- --disable=traefik
- --disable=servicelb
- --disable=metrics-server
- --disable=coredns
- --tls-san=k3s
privileged: true
environment:
K3S_KUBECONFIG_OUTPUT: /output/kubeconfig.yaml
K3S_KUBECONFIG_MODE: "0644"
tmpfs:
- /run
- /var/run
volumes:
- k3s-data:/var/lib/rancher/k3s
- k3s-kubeconfig:/output
healthcheck:
test: [CMD, /bin/kubectl, get, --raw=/readyz]
interval: 5s
timeout: 5s
retries: 60
start_period: 20s
restart: unless-stopped
docker-dns:
image: rancher/mirrored-coredns-coredns:${COREDNS_VERSION}
command: [-conf, /etc/coredns/Corefile]
volumes:
- ../files/config/docker-dns.Corefile:/etc/coredns/Corefile:ro
network_mode: service:k3s
depends_on:
k3s:
condition: service_started
restart: unless-stopped
healthcheck:
test: [CMD, /coredns, -version]
interval: 10s
timeout: 5s
retries: 3
k3s-bootstrap:
image: rancher/k3s:${K3S_VERSION}
entrypoint: [/bin/sh, /scripts/bootstrap-k3s.sh]
environment:
AIRBYTE_ADMIN_PASSWORD: ${AIRBYTE_ADMIN_PASSWORD}
AIRBYTE_ADMIN_CLIENT_ID: ${AIRBYTE_ADMIN_CLIENT_ID}
AIRBYTE_ADMIN_CLIENT_SECRET: ${AIRBYTE_ADMIN_CLIENT_SECRET}
AIRBYTE_JWT_SIGNATURE_SECRET: ${AIRBYTE_JWT_SIGNATURE_SECRET}
DATABASE_USER: ${DATABASE_USER}
DATABASE_PASSWORD: ${DATABASE_PASSWORD}
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
volumes:
- k3s-kubeconfig:/kube
- ../files/config/k3s-resources.yaml:/config/k3s-resources.yaml:ro
- ../files/scripts/bootstrap-k3s.sh:/scripts/bootstrap-k3s.sh:ro
depends_on:
k3s:
condition: service_healthy
docker-dns:
condition: service_started
restart: on-failure
dataplane-credentials:
image: rancher/k3s:${K3S_VERSION}
entrypoint: [/bin/sh, /scripts/export-dataplane-credentials.sh]
volumes:
- k3s-kubeconfig:/kube:ro
- dataplane-credentials:/credentials
- ../files/scripts/export-dataplane-credentials.sh:/scripts/export-dataplane-credentials.sh:ro
depends_on:
bootloader:
condition: service_completed_successfully
restart: on-failure
bootloader:
<<: *airbyte-service
image: airbyte/bootloader:${AIRBYTE_VERSION}
environment:
<<: *airbyte-environment
KUBECONFIG: /kube/config.yaml
MICRONAUT_ENVIRONMENTS: k8s,control-plane,edition-community
JOB_KUBE_NAMESPACE: default
DD_SERVICE: airbyte-bootloader
volumes:
- k3s-kubeconfig:/kube:ro
depends_on:
db:
condition: service_healthy
k3s-bootstrap:
condition: service_completed_successfully
restart: on-failure
server:
<<: *airbyte-service
image: airbyte/server:${AIRBYTE_VERSION}
environment:
<<: *airbyte-environment
DD_SERVICE: airbyte-server
expose:
- 8001
healthcheck:
test:
- CMD
- /bin/bash
- -ec
- |
exec 3<>/dev/tcp/127.0.0.1/8001
printf 'GET /api/v1/health HTTP/1.0\r\nHost: localhost\r\nConnection: close\r\n\r\n' >&3
read -r status <&3
[[ "$$status" == *" 200 "* ]]
interval: 5s
timeout: 10s
retries: 60
start_period: 10s
depends_on:
bootloader:
condition: service_completed_successfully
minio-init:
condition: service_completed_successfully
temporal:
condition: service_started
manifest-server:
<<: *airbyte-service
image: airbyte/manifest-server:${MANIFEST_SERVER_VERSION}
environment:
<<: *airbyte-environment
DD_SERVICE: airbyte-manifest-server
AIRBYTE_ENABLE_UNSAFE_CODE: ${AIRBYTE_ENABLE_UNSAFE_CODE:-false}
depends_on:
bootloader:
condition: service_completed_successfully
minio-init:
condition: service_completed_successfully
healthcheck:
test:
- CMD
- python
- -c
- import urllib.request; response = urllib.request.urlopen("http://127.0.0.1:8080/health/", timeout=5); assert response.status == 200
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
workload-api-server:
<<: *airbyte-service
image: airbyte/workload-api-server:${AIRBYTE_VERSION}
environment:
<<: *airbyte-environment
DD_SERVICE: airbyte-workload-api
depends_on:
bootloader:
condition: service_completed_successfully
minio-init:
condition: service_completed_successfully
temporal:
condition: service_started
healthcheck:
test:
- CMD
- /bin/bash
- -ec
- |
exec 3<>/dev/tcp/127.0.0.1/8085
printf 'GET /health/liveness HTTP/1.0\r\nHost: localhost\r\nConnection: close\r\n\r\n' >&3
read -r status <&3
[[ "$$status" == *" 200 "* ]]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
worker:
<<: *airbyte-service
image: airbyte/worker:${AIRBYTE_VERSION}
environment:
<<: *airbyte-environment
DD_SERVICE: airbyte-worker
depends_on:
bootloader:
condition: service_completed_successfully
temporal:
condition: service_started
workload-api-server:
condition: service_started
healthcheck:
test:
- CMD
- /bin/bash
- -ec
- |
exec 3<>/dev/tcp/127.0.0.1/9000
printf 'GET / HTTP/1.0\r\nHost: localhost\r\nConnection: close\r\n\r\n' >&3
read -r status <&3
[[ "$$status" == *" 200 "* ]]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
cron:
<<: *airbyte-service
image: airbyte/cron:${AIRBYTE_VERSION}
environment:
<<: *airbyte-environment
DD_SERVICE: airbyte-cron
depends_on:
bootloader:
condition: service_completed_successfully
temporal:
condition: service_started
workload-api-server:
condition: service_started
healthcheck:
test:
- CMD
- /bin/bash
- -ec
- |
exec 3<>/dev/tcp/127.0.0.1/8085
printf 'GET /health HTTP/1.0\r\nHost: localhost\r\nConnection: close\r\n\r\n' >&3
read -r status <&3
[[ "$$status" == *" 200 "* ]]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
workload-launcher:
<<: *airbyte-service
image: airbyte/workload-launcher:${AIRBYTE_VERSION}
entrypoint: [/bin/sh, /scripts/start-workload-launcher.sh]
command: [/bin/bash, -c, 'airbyte-app/bin/$${APPLICATION}']
environment:
<<: *airbyte-environment
KUBECONFIG: /kube/config.yaml
MICRONAUT_ENVIRONMENTS: k8s,control-plane,edition-community
JOB_KUBE_NAMESPACE: default
DD_SERVICE: airbyte-workload-launcher
AIRBYTE_ENABLE_UNSAFE_CODE: ${AIRBYTE_ENABLE_UNSAFE_CODE:-false}
volumes:
- k3s-kubeconfig:/kube:ro
- dataplane-credentials:/credentials:ro
- ../files/scripts/start-workload-launcher.sh:/scripts/start-workload-launcher.sh:ro
depends_on:
dataplane-credentials:
condition: service_completed_successfully
k3s-bootstrap:
condition: service_completed_successfully
server:
condition: service_healthy
workload-api-server:
condition: service_started
temporal:
condition: service_started
healthcheck:
test:
- CMD
- /bin/bash
- -ec
- |
exec 3<>/dev/tcp/127.0.0.1/8085
printf 'GET /health/readiness HTTP/1.0\r\nHost: localhost\r\nConnection: close\r\n\r\n' >&3
read -r status <&3
[[ "$$status" == *" 200 "* ]]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
volumes:
db-data:
minio-data:
k3s-data:
k3s-kubeconfig:
dataplane-credentials:
+18
View File
@@ -0,0 +1,18 @@
{
"id": "airbyte",
"name": "Airbyte",
"version": "2.2.0",
"description": "Open-source data movement for ELT pipelines and AI agents.",
"logo": "airbyte.svg",
"links": {
"github": "https://github.com/airbytehq/airbyte",
"website": "https://airbyte.com",
"docs": "https://docs.airbyte.com"
},
"tags": [
"analytics",
"data",
"elt",
"pipeline"
]
}
+656
View File
@@ -0,0 +1,656 @@
[variables]
main_domain = "${domain}"
database_password = "${password:32}"
minio_root_password = "${password:32}"
airbyte_admin_password = "${password:32}"
airbyte_admin_client_id = "${password:32}"
airbyte_admin_client_secret = "${password:32}"
airbyte_jwt_signature_secret = "${password:32}"
[[config.domains]]
serviceName = "server"
port = 8_001
host = "${main_domain}"
[config.env]
AIRBYTE_URL = "http://${main_domain}"
AIRBYTE_API_HOST = "http://${main_domain}/api/public"
AIRBYTE_VERSION = "2.2.0"
MANIFEST_SERVER_VERSION = "7.23.7"
TEMPORAL_VERSION = "1.27.2"
SEAWEEDFS_VERSION = "4.48"
K3S_VERSION = "v1.36.3-k3s1"
COREDNS_VERSION = "1.14.7"
DATABASE_DB = "db-airbyte"
DATABASE_USER = "airbyte"
DATABASE_PASSWORD = "${database_password}"
MINIO_ROOT_USER = "minio"
MINIO_ROOT_PASSWORD = "${minio_root_password}"
AIRBYTE_ADMIN_PASSWORD = "${airbyte_admin_password}"
AIRBYTE_ADMIN_CLIENT_ID = "${airbyte_admin_client_id}"
AIRBYTE_ADMIN_CLIENT_SECRET = "${airbyte_admin_client_secret}"
AIRBYTE_JWT_SIGNATURE_SECRET = "${airbyte_jwt_signature_secret}"
AIRBYTE_ENABLE_UNSAFE_CODE = "false"
[[config.mounts]]
filePath = "./config/airbyte.env"
content = """
AB_AUTH_SECRET_CREATION_ENABLED=true
AB_KUBERNETES_SECRET_NAME=airbyte-auth-secrets
AB_INSTANCE_ADMIN_PASSWORD_SECRET_KEY=instance-admin-password
AB_INSTANCE_ADMIN_CLIENT_ID_SECRET_KEY=instance-admin-client-id
AB_INSTANCE_ADMIN_CLIENT_SECRET_SECRET_KEY=instance-admin-client-secret
AB_JWT_SIGNATURE_SECRET_KEY=jwt-signature-secret
DATAPLANE_CLIENT_ID_SECRET_NAME=airbyte-auth-secrets
DATAPLANE_CLIENT_ID_SECRET_KEY=dataplane-client-id
DATAPLANE_CLIENT_SECRET_SECRET_NAME=airbyte-auth-secrets
DATAPLANE_CLIENT_SECRET_SECRET_KEY=dataplane-client-secret
IDENTITY_PROVIDER_TYPE=simple
AB_AIRBYTE_AUTH_IDENTITY_PROVIDER_VERIFY_ISSUER=false
AB_AIRBYTE_AUTH_IDENTITY_PROVIDER_VERIFY_AUDIENCE=false
AB_COOKIE_SECURE=false
AB_COOKIE_SAME_SITE=Lax
AIRBYTE_EDITION=community
AIRBYTE_CLUSTER_TYPE=hybrid
CLUSTER_TYPE=hybrid
API_AUTHORIZATION_ENABLED=true
LOCAL=false
DEPLOYMENT_ENV=docker-compose
AIRBYTE_DUMMY_SECRET=dummy
CONNECTOR_REGISTRY_SEED_PROVIDER=remote
ENTERPRISE_SOURCE_STUBS_URL=https://connectors.airbyte.com/files/resources/connector_stubs/v1/connector_stubs.json
UPDATE_DEFINITIONS_CRON_ENABLED=true
RUN_DECLARATIVE_SOURCES_UPDATER=false
CONNECTOR_ROLLOUT_EXPIRATION_SECONDS=604800
CONNECTOR_ROLLOUT_WAIT_BETWEEN_ROLLOUTS_SECONDS=10800
CONNECTOR_ROLLOUT_WAIT_BETWEEN_SYNC_RESULTS_QUERIES_SECONDS=3600
DATABASE_PORT=5432
RUN_DATABASE_MIGRATION_ON_STARTUP=true
CONFIGS_DATABASE_MINIMUM_FLYWAY_MIGRATION_VERSION=0.35.15.001
JOBS_DATABASE_MINIMUM_FLYWAY_MIGRATION_VERSION=0.29.15.001
FEATURE_FLAG_CLIENT=configfile
FEATURE_FLAG_PATH=/etc/launchdarkly/flags.yml
JOB_KUBE_SERVICEACCOUNT=airbyte-admin
JOB_KUBE_NAMESPACE=default
JOB_KUBE_LOCAL_VOLUME_ENABLED=false
JOB_ERROR_REPORTING_STRATEGY=logging
LOG_LEVEL=info
MICROMETER_METRICS_ENABLED=false
MICROMETER_METRICS_STEP=PT1M
MICROMETER_METRICS_STATSD_FLAVOR=datadog
MICROMETER_METRICS_OTLP_ENABLED=false
MICROMETER_METRICS_STATSD_ENABLED=false
PUBLISH_METRICS=true
STATSD_HOST=127.0.0.1
STATSD_PORT=8125
OTEL_SDK_DISABLED=true
DD_ENABLED=false
DD_INTEGRATIONS_ENABLED=false
DD_PROFILING_ENABLED=false
STIGG_ENABLED=false
AUDIT_LOGGING_ENABLED=false
STORAGE_TYPE=minio
STORAGE_BUCKET_ACTIVITY_PAYLOAD=airbyte-bucket
STORAGE_BUCKET_AUDIT_LOGGING=airbyte-bucket
STORAGE_BUCKET_LOG=airbyte-bucket
STORAGE_BUCKET_STATE=airbyte-bucket
STORAGE_BUCKET_WORKLOAD_OUTPUT=airbyte-bucket
S3_PATH_STYLE_ACCESS=true
AUTO_SETUP=true
DYNAMIC_CONFIG_FILE_PATH=config/dynamicconfig/development.yaml
PROMETHEUS_ENDPOINT=0.0.0.0:9090
BIND_ON_IP=0.0.0.0
TEMPORAL_BROADCAST_ADDRESS=0.0.0.0
TEMPORAL_CLOUD_ENABLED=false
TEMPORAL_SDK_RPC_TIMEOUT=120s
TEMPORAL_SDK_RPC_LONG_POLL_TIMEOUT=140s
TEMPORAL_SDK_RPC_QUERY_TIMEOUT=20s
TEMPORAL_WORKER_PORTS=9000 9001 9002 9003 9004 9005 9006 9007 9008 9009 9010 9011 9012 9013 9014 9015 9016 9017 9018 9019 9020 9021 9022 9023 9024 9025 9026 9027 9028 9029 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039 9040
TRACKING_ENABLED=true
TRACKING_STRATEGY=segment
SEGMENT_WRITE_KEY=7UDdp5K55CyiGgsauOr2pNNujGvmhaeu
API_URL=/api/v1
CONFIG_ROOT=/configs
MAX_CHECK_WORKERS=30
MAX_NOTIFY_WORKERS=30
MAX_SYNC_WORKERS=5
SYNC_JOB_MAX_ATTEMPTS=3
SYNC_JOB_MAX_TIMEOUT_DAYS=3
SYNC_JOB_INIT_RETRY_TIMEOUT_MINUTES=5
USE_CUSTOM_NODE_SELECTOR=false
USE_STREAM_CAPABLE_STATE=true
WORKSPACE_DOCKER_MOUNT=airbyte_workspace
WORKSPACE_ROOT=/workspace
WORKER_ENVIRONMENT=kubernetes
WORKLOAD_API_SERVER_ENABLED=true
WORKLOAD_LAUNCHER_ENABLED=true
WORKLOAD_LAUNCHER_PARALLELISM=10
CONTAINER_ORCHESTRATOR_ENABLED=true
KUBERNETES_CLIENT_MAX_IDLE_CONNECTIONS=100
PUB_SUB_ENABLED=false
DATA_CHECK_TASK_QUEUES=CHECK_CONNECTION
DATA_DISCOVER_TASK_QUEUES=DISCOVER_SCHEMA
DATA_SYNC_TASK_QUEUES=SYNC
CONNECTOR_SPECIFIC_RESOURCE_DEFAULTS_ENABLED=true
FILE_TRANSFER_EPHEMERAL_STORAGE_LIMIT=5G
FILE_TRANSFER_EPHEMERAL_STORAGE_REQUEST=5G
MICRONAUT_ENVIRONMENTS=k8s,control-plane,edition-community
LAUNCHER_MICRONAUT_ENVIRONMENTS=control-plane,oss
WORKERS_MICRONAUT_ENVIRONMENTS=control-plane
CRON_MICRONAUT_ENVIRONMENTS=control-plane
SERVER_MICRONAUT_ENVIRONMENTS=control-plane
"""
[[config.mounts]]
filePath = "./config/docker-dns.Corefile"
content = """
.:53 {
bind eth0
errors
cache 30
forward . 127.0.0.11
}
"""
[[config.mounts]]
filePath = "./config/k3s-resources.yaml"
content = """
apiVersion: v1
kind: ServiceAccount
metadata:
name: airbyte-admin
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: airbyte-admin-role
namespace: default
rules:
- apiGroups: ["*"]
resources:
- configmaps
- endpoints
- jobs
- pods
- pods/log
- pods/exec
- pods/attach
- secrets
verbs: [get, list, watch, create, update, patch, delete]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: airbyte-admin-binding
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: airbyte-admin-role
subjects:
- kind: ServiceAccount
name: airbyte-admin
namespace: default
---
apiVersion: v1
kind: Service
metadata:
name: airbyte-db-svc
namespace: default
spec:
type: ExternalName
externalName: db
ports:
- name: postgresql
port: 5432
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: airbyte-minio-svc
namespace: default
spec:
type: ExternalName
externalName: minio
ports:
- name: api
port: 9000
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: airbyte-temporal
namespace: default
spec:
type: ExternalName
externalName: temporal
ports:
- name: grpc
port: 7233
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: airbyte-airbyte-server-svc
namespace: default
spec:
type: ExternalName
externalName: server
ports:
- name: http
port: 8001
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: airbyte-workload-api-server-svc
namespace: default
spec:
type: ExternalName
externalName: workload-api-server
ports:
- name: http
port: 8007
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: airbyte-airbyte-manifest-server-svc
namespace: default
spec:
type: ExternalName
externalName: manifest-server
ports:
- name: http
port: 8080
protocol: TCP
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: coredns
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: system:coredns
rules:
- apiGroups: [""]
resources: [endpoints, services, pods, namespaces]
verbs: [list, watch]
- apiGroups: [discovery.k8s.io]
resources: [endpointslices]
verbs: [list, watch]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: system:coredns
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:coredns
subjects:
- kind: ServiceAccount
name: coredns
namespace: kube-system
---
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
errors
health
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough
}
cache 30
loop
reload
loadbalance
forward . 127.0.0.1:1053
}
.:1053 {
bind 127.0.0.1
errors
rewrite stop name regex ^(.+?)(\\.[^.]+\\.svc\\.cluster\\.local|\\.svc\\.cluster\\.local|\\.cluster\\.local)\\.$ {1} answer auto
forward . {$AIRBYTE_K3S_IP}
}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: coredns
namespace: kube-system
labels:
k8s-app: kube-dns
spec:
replicas: 1
selector:
matchLabels:
k8s-app: kube-dns
template:
metadata:
labels:
k8s-app: kube-dns
spec:
priorityClassName: system-cluster-critical
serviceAccountName: coredns
nodeSelector:
kubernetes.io/os: linux
tolerations:
- key: CriticalAddonsOnly
operator: Exists
- key: node-role.kubernetes.io/control-plane
operator: Exists
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
containers:
- name: coredns
image: rancher/mirrored-coredns-coredns:1.14.7
imagePullPolicy: IfNotPresent
args: [-conf, /etc/coredns/Corefile]
env:
- name: AIRBYTE_K3S_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
resources:
limits:
memory: 170Mi
requests:
cpu: 100m
memory: 70Mi
ports:
- name: dns
containerPort: 53
protocol: UDP
- name: dns-tcp
containerPort: 53
protocol: TCP
volumeMounts:
- name: config
mountPath: /etc/coredns
readOnly: true
securityContext:
allowPrivilegeEscalation: false
capabilities:
add: [NET_BIND_SERVICE]
drop: [ALL]
readOnlyRootFilesystem: true
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 60
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8181
periodSeconds: 2
dnsPolicy: Default
volumes:
- name: config
configMap:
name: coredns
---
apiVersion: v1
kind: Service
metadata:
name: kube-dns
namespace: kube-system
labels:
k8s-app: kube-dns
kubernetes.io/cluster-service: "true"
kubernetes.io/name: CoreDNS
spec:
selector:
k8s-app: kube-dns
clusterIP: 10.43.0.10
ports:
- name: dns
port: 53
protocol: UDP
- name: dns-tcp
port: 53
protocol: TCP
"""
[[config.mounts]]
filePath = "./config/temporal-dynamicconfig.yaml"
content = """
frontend.enableClientVersionCheck:
- value: true
constraints: {}
history.persistenceMaxQPS:
- value: 3000
constraints: {}
frontend.persistenceMaxQPS:
- value: 3000
constraints: {}
frontend.historyMgrNumConns:
- value: 30
constraints: {}
frontend.throttledLogRPS:
- value: 20
constraints: {}
frontend.enableUpdateWorkflowExecution:
- value: true
frontend.enableUpdateWorkflowExecutionAsyncAccepted:
- value: true
history.historyMgrNumConns:
- value: 50
constraints: {}
system.advancedVisibilityWritingMode:
- value: "off"
constraints: {}
history.defaultActivityRetryPolicy:
- value:
InitialIntervalInSeconds: 1
MaximumIntervalCoefficient: 100.0
BackoffCoefficient: 2.0
MaximumAttempts: 0
history.defaultWorkflowRetryPolicy:
- value:
InitialIntervalInSeconds: 1
MaximumIntervalCoefficient: 100.0
BackoffCoefficient: 2.0
MaximumAttempts: 0
limit.blobSize.error:
- value: 15728640
constraints: {}
limit.blobSize.warn:
- value: 10485760
constraints: {}
"""
[[config.mounts]]
filePath = "./scripts/bootstrap-k3s.sh"
content = """
#!/bin/sh
set -eu
source_config=/kube/kubeconfig.yaml
client_config=/kube/config.yaml
until [ -s "$source_config" ]; do
sleep 1
done
sed 's|server: https://127.0.0.1:6443|server: https://k3s:6443|' \
"$source_config" > "$client_config"
chmod 0644 "$client_config"
/bin/kubectl --kubeconfig "$client_config" \
config set-context --current --namespace=default >/dev/null
until /bin/kubectl --kubeconfig "$client_config" get --raw=/readyz >/dev/null 2>&1; do
sleep 2
done
/bin/kubectl --kubeconfig "$client_config" apply -f /config/k3s-resources.yaml
/bin/kubectl --kubeconfig "$client_config" \
--namespace kube-system rollout status deployment/coredns --timeout=180s
/bin/kubectl --kubeconfig "$client_config" create secret generic airbyte-auth-secrets \
--namespace default \
--from-literal=instance-admin-password="$AIRBYTE_ADMIN_PASSWORD" \
--from-literal=instance-admin-client-id="$AIRBYTE_ADMIN_CLIENT_ID" \
--from-literal=instance-admin-client-secret="$AIRBYTE_ADMIN_CLIENT_SECRET" \
--from-literal=jwt-signature-secret="$AIRBYTE_JWT_SIGNATURE_SECRET" \
--from-literal=dataplane-client-id= \
--from-literal=dataplane-client-secret= \
--dry-run=client -o yaml | \
/bin/kubectl --kubeconfig "$client_config" apply -f -
/bin/kubectl --kubeconfig "$client_config" create secret generic airbyte-airbyte-secrets \
--namespace default \
--from-literal=AIRBYTE_DUMMY_SECRET=dummy \
--from-literal=AB_INSTANCE_ADMIN_PASSWORD="$AIRBYTE_ADMIN_PASSWORD" \
--from-literal=AB_INSTANCE_ADMIN_CLIENT_ID="$AIRBYTE_ADMIN_CLIENT_ID" \
--from-literal=AB_INSTANCE_ADMIN_CLIENT_SECRET="$AIRBYTE_ADMIN_CLIENT_SECRET" \
--from-literal=AB_JWT_SIGNATURE_SECRET="$AIRBYTE_JWT_SIGNATURE_SECRET" \
--from-literal=DATABASE_USER="$DATABASE_USER" \
--from-literal=DATABASE_PASSWORD="$DATABASE_PASSWORD" \
--from-literal=CONFIG_DATABASE_REPLICA_USER="$DATABASE_USER" \
--from-literal=CONFIG_DATABASE_REPLICA_PASSWORD="$DATABASE_PASSWORD" \
--from-literal=AWS_ACCESS_KEY_ID="$MINIO_ROOT_USER" \
--from-literal=AWS_SECRET_ACCESS_KEY="$MINIO_ROOT_PASSWORD" \
--from-literal=DATAPLANE_CLIENT_ID= \
--from-literal=DATAPLANE_CLIENT_SECRET= \
--dry-run=client -o yaml | \
/bin/kubectl --kubeconfig "$client_config" apply -f -
"""
[[config.mounts]]
filePath = "./scripts/export-dataplane-credentials.sh"
content = """
#!/bin/sh
set -eu
kubeconfig=/kube/config.yaml
namespace=default
secret_name=airbyte-auth-secrets
credentials_dir=/credentials
client_id_file="$credentials_dir/dataplane-client-id"
client_secret_file="$credentials_dir/dataplane-client-secret"
client_id_tmp="$credentials_dir/.dataplane-client-id.$$"
client_secret_tmp="$credentials_dir/.dataplane-client-secret.$$"
umask 022
mkdir -p "$credentials_dir"
trap 'rm -f "$client_id_tmp" "$client_secret_tmp"' 0 1 2 15
client_id_b64=$(
/bin/kubectl --kubeconfig "$kubeconfig" \
--namespace "$namespace" \
get secret "$secret_name" \
-o 'jsonpath={.data.dataplane-client-id}'
)
client_secret_b64=$(
/bin/kubectl --kubeconfig "$kubeconfig" \
--namespace "$namespace" \
get secret "$secret_name" \
-o 'jsonpath={.data.dataplane-client-secret}'
)
[ -n "$client_id_b64" ] || {
echo "The bootloader did not create a data-plane client ID." >&2
exit 1
}
[ -n "$client_secret_b64" ] || {
echo "The bootloader did not create a data-plane client secret." >&2
exit 1
}
printf '%s' "$client_id_b64" | base64 -d > "$client_id_tmp"
printf '%s' "$client_secret_b64" | base64 -d > "$client_secret_tmp"
client_id=$(cat "$client_id_tmp")
if ! printf '%s' "$client_id" | grep -Eq \
'^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$'; then
echo "The bootloader returned an invalid data-plane client ID." >&2
exit 1
fi
mv -f "$client_id_tmp" "$client_id_file"
mv -f "$client_secret_tmp" "$client_secret_file"
trap - 0 1 2 15
"""
[[config.mounts]]
filePath = "./scripts/init-minio.sh"
content = """
#!/bin/sh
set -eu
for bucket in airbyte-bucket state-storage airbyte-dev-logs; do
until echo "s3.bucket.list" | weed shell -master="$SEAWEEDFS_MASTER" 2>/dev/null | grep -q "^[[:space:]]*$bucket[[:space:]]"; do
echo "s3.bucket.create -name $bucket" | weed shell -master="$SEAWEEDFS_MASTER" >/dev/null 2>&1 || true
sleep 2
done
echo "bucket $bucket ready"
done
"""
[[config.mounts]]
filePath = "./scripts/start-workload-launcher.sh"
content = """
#!/bin/sh
set -eu
client_id_file=/credentials/dataplane-client-id
client_secret_file=/credentials/dataplane-client-secret
[ -s "$client_id_file" ] || {
echo "Missing generated data-plane client ID." >&2
exit 1
}
[ -s "$client_secret_file" ] || {
echo "Missing generated data-plane client secret." >&2
exit 1
}
DATAPLANE_CLIENT_ID=$(cat "$client_id_file")
DATAPLANE_CLIENT_SECRET=$(cat "$client_secret_file")
export DATAPLANE_CLIENT_ID DATAPLANE_CLIENT_SECRET
exec /entrypoint.sh "$@"
"""
-2
View File
@@ -1,5 +1,3 @@
version: "3.8"
services:
akaunting:
image: docker.io/akaunting/akaunting:latest
+19
View File
@@ -0,0 +1,19 @@
{
"id": "akaunting",
"name": "Akaunting",
"version": "latest",
"description": "Akaunting is a self-hosted, open-source accounting app for small businesses.",
"logo": "image.png",
"links": {
"github": "https://github.com/akaunting/akaunting",
"website": "https://akaunting.com",
"docs": "https://akaunting.com/docs"
},
"tags": [
"finance",
"accounting",
"php",
"mariadb",
"self-hosted"
]
}
+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.
Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

+30
View File
@@ -0,0 +1,30 @@
services:
alarik:
image: ghcr.io/achtungsoftware/alarik:latest
restart: unless-stopped
volumes:
- alarik-storage:/app/Storage
environment:
- API_BASE_URL=${API_BASE_URL}
- CONSOLE_BASE_URL=${CONSOLE_BASE_URL}
- ADMIN_USERNAME=${ADMIN_USERNAME}
- ADMIN_PASSWORD=${ADMIN_PASSWORD}
- JWT=${JWT}
- ALLOW_ACCOUNT_CREATION=${ALLOW_ACCOUNT_CREATION}
expose:
- 8080
console:
image: ghcr.io/achtungsoftware/alarik-console:latest
restart: unless-stopped
environment:
- NUXT_PUBLIC_API_BASE_URL=${API_BASE_URL}
- NUXT_PUBLIC_CONSOLE_BASE_URL=${CONSOLE_BASE_URL}
- NUXT_PUBLIC_ALLOW_ACCOUNT_CREATION=${ALLOW_ACCOUNT_CREATION}
expose:
- 3000
depends_on:
- alarik
volumes:
alarik-storage:
+17
View File
@@ -0,0 +1,17 @@
{
"id": "alarik",
"name": "Alarik",
"description": "Alarik is a high-performance, S3-compatible object storage.",
"logo": "alarik.png",
"version": "latest",
"links": {
"github": "https://github.com/achtungsoftware/alarik",
"website": "https://alarik.io/",
"docs": "https://alarik.io/docs"
},
"tags": [
"storage",
"s3",
"object-storage"
]
}
+26
View File
@@ -0,0 +1,26 @@
[variables]
console_domain = "${domain}"
api_domain = "${domain}"
[config]
mounts = []
# S3-compatible API - point AWS CLI / SDKs / rclone / backup tools at this domain
[[config.domains]]
serviceName = "alarik"
port = 8_080
host = "${api_domain}"
# Web management console - log in with the generated admin credentials below
[[config.domains]]
serviceName = "console"
port = 3_000
host = "${console_domain}"
[config.env]
API_BASE_URL = "http://${api_domain}"
CONSOLE_BASE_URL = "http://${console_domain}"
ADMIN_USERNAME = "alarik"
ADMIN_PASSWORD = "${password:16}"
JWT = "${base64:64}"
ALLOW_ACCOUNT_CREATION = "false"
+2 -3
View File
@@ -1,7 +1,6 @@
version: '3.3'
services:
alist:
image: xhofe/alist:v3.41.0
image: xhofe/alist:v3.55.0
volumes:
- alist-data:/opt/alist/data
environment:
@@ -11,4 +10,4 @@ services:
restart: unless-stopped
volumes:
alist-data:
alist-data:
+17
View File
@@ -0,0 +1,17 @@
{
"id": "alist",
"name": "AList",
"version": "v3.55.0",
"description": "🗂️A file list/WebDAV program that supports multiple storages, powered by Gin and Solidjs.",
"logo": "alist.svg",
"links": {
"github": "https://github.com/AlistGo/alist",
"website": "https://alistgo.com/",
"docs": "https://alistgo.com/guide/install/docker.html"
},
"tags": [
"file",
"webdav",
"storage"
]
}
+2 -3
View File
@@ -1,12 +1,11 @@
version: "3.8"
services:
alltube:
image: dnomd343/alltube:latest
restart: unless-stopped
ports:
expose:
- 80
environment:
- TITLE=${TITLE}
- CONVERT=${CONVERT}
- STREAM=${STREAM}
- REMUX=${REMUX}
- REMUX=${REMUX}
+17
View File
@@ -0,0 +1,17 @@
{
"id": "alltube",
"name": "AllTube",
"version": "latest",
"description": "AllTube Download is an application designed to facilitate the downloading of videos from YouTube and other video sites. It provides an HTML GUI for youtube-dl with video conversion capabilities and JSON API support.",
"logo": "logo.png",
"links": {
"github": "https://github.com/Rudloff/alltube",
"website": "https://github.com/Rudloff/alltube",
"docs": "https://github.com/Rudloff/alltube/wiki"
},
"tags": [
"media",
"video",
"downloader"
]
}
+2 -3
View File
@@ -1,9 +1,8 @@
version: "3.8"
services:
ampache:
image: ampache/ampache:latest
restart: unless-stopped
ports:
expose:
- 80
volumes:
- config:/var/www/config
@@ -14,4 +13,4 @@ services:
volumes:
config: {}
log: {}
mysql: {}
mysql: {}
+17
View File
@@ -0,0 +1,17 @@
{
"id": "ampache",
"name": "Ampache",
"version": "latest",
"description": "Ampache is a web-based audio/video streaming application and file manager allowing you to access your music & videos from anywhere, using almost any internet enabled device.",
"logo": "logo.png",
"links": {
"github": "https://github.com/ampache/ampache",
"website": "http://ampache.org/",
"docs": "https://github.com/ampache/ampache/wiki"
},
"tags": [
"media",
"music",
"streaming"
]
}
+2 -3
View File
@@ -1,9 +1,8 @@
version: "3.8"
services:
anonupload:
image: ghcr.io/supernova3339/anonfiles:1
restart: unless-stopped
ports:
expose:
- 80
environment:
- ADMIN_EMAIL=${ADMIN_EMAIL}
@@ -13,4 +12,4 @@ services:
- uploads:/var/www/html/uploads
volumes:
uploads: {}
uploads: {}
+16
View File
@@ -0,0 +1,16 @@
{
"id": "anonupload",
"name": "AnonUpload",
"version": "1",
"description": "AnonUpload is a secure, anonymous file sharing application that does not require a database. It is built with privacy as a priority, ensuring that the direct filename used is not displayed.",
"logo": "logo.png",
"links": {
"github": "https://github.com/supernova3339/anonupload",
"docs": "https://github.com/Supernova3339/anonupload/blob/main/env.md",
"website": "https://anonupload.com/"
},
"tags": [
"file-sharing",
"privacy"
]
}
-2
View File
@@ -1,5 +1,3 @@
version: "3.8"
services:
anse-demo:
image: ddiu8081/anse:latest
+18
View File
@@ -0,0 +1,18 @@
{
"id": "anse",
"name": "Anse",
"version": "latest",
"description": "Anse is an open-source alternative to ChatGPT web UI, supporting OpenAI-compatible APIs.",
"logo": "image.png",
"links": {
"github": "https://github.com/ddiu8081/anse",
"website": "https://anse.app/",
"docs": "https://github.com/ddiu8081/anse#readme"
},
"tags": [
"ai",
"chatbot",
"openai",
"ui"
]
}
+1 -1
View File
@@ -1,7 +1,7 @@
services:
answer:
image: apache/answer:1.4.1
ports:
expose:
- '80'
restart: on-failure
volumes:
+16
View File
@@ -0,0 +1,16 @@
{
"id": "answer",
"name": "Answer",
"version": "v1.4.1",
"description": "Answer is an open-source Q&A platform for building a self-hosted question-and-answer service.",
"logo": "answer.png",
"links": {
"github": "https://github.com/apache/answer",
"website": "https://answer.apache.org/",
"docs": "https://answer.apache.org/docs"
},
"tags": [
"q-and-a",
"self-hosted"
]
}
+1 -2
View File
@@ -1,9 +1,8 @@
version: "3.8"
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
+16
View File
@@ -0,0 +1,16 @@
{
"id": "anubis",
"name": "Anubis",
"version": "latest",
"description": "Anubis is a bot protector, It will block bots from accessing your website.",
"logo": "anubis.webp",
"links": {
"github": "https://github.com/TecharoHQ/anubis",
"website": "https://anubis.techaro.lol",
"docs": "https://anubis.techaro.lol/docs/"
},
"tags": [
"self-hosted",
"bot-protection"
]
}
+2 -3
View File
@@ -1,9 +1,8 @@
version: "3.8"
services:
anythingllm:
image: mintplexlabs/anythingllm:latest
restart: unless-stopped
ports:
expose:
- 3001
environment:
- STORAGE_DIR=/app/server/storage
@@ -13,4 +12,4 @@ services:
- SYS_ADMIN
volumes:
storage: {}
storage: {}
+19
View File
@@ -0,0 +1,19 @@
{
"id": "anythingllm",
"name": "AnythingLLM",
"version": "latest",
"description": "AnythingLLM is a private AI chat app for working with your own documents. Self-host it on your own server with Dokploy, which deploys AnythingLLM as a Docker Compose service in a few clicks.",
"logo": "logo.png",
"links": {
"github": "https://github.com/Mintplex-Labs/anything-llm",
"website": "https://anythingllm.com/",
"docs": "https://docs.anythingllm.com/"
},
"tags": [
"ai",
"llm",
"chatbot"
],
"seoTitle": "Self-Host AnythingLLM in minutes",
"seoDescription": "Private AI chatbot for your documents. Self-host AnythingLLM on Dokploy in minutes – no manual setup needed."
}
+20
View File
@@ -0,0 +1,20 @@
# 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:
# docker compose -f compose.aio.yml up -d
#
# The bundle image already contains MongoDB and Redis. Only the bundle service is required
services:
any-sync-bundle:
image: ghcr.io/grishy/any-sync-bundle:latest
restart: unless-stopped
ports:
- "33010:33010"
- "33020:33020/udp"
volumes:
- ../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"
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

+19
View File
@@ -0,0 +1,19 @@
{
"id": "anytype",
"name": "Anytype",
"version": "latest",
"description": "Anytype is a private, offline-first app for notes and personal knowledge. Self-host it on your own server with Dokploy, which deploys Anytype as a Docker Compose service in a few clicks.",
"logo": "logo.png",
"links": {
"github": "https://github.com/grishy/any-sync-bundle",
"docs": "https://doc.anytype.io/anytype-docs",
"website": "https://anytype.io/"
},
"tags": [
"note-taking",
"local-first",
"peer-to-peer"
],
"seoTitle": "Self-Host Anytype with Dokploy",
"seoDescription": "Private, offline-first personal knowledge base. Self-host Anytype on Dokploy – view your client config afterward with a quick command inside the container."
}
+4
View File
@@ -0,0 +1,4 @@
[config]
domains = []
mounts = []
env = []
+21
View File
@@ -0,0 +1,21 @@
{
"id": "appflowy",
"name": "App Flowy",
"version": "0.9.3",
"description": "AppFlowy is a workspace app for notes, docs, and projects, and an open-source alternative to Notion. Self-host it on your own server with Dokploy, which deploys AppFlowy as a Docker Compose service in a few clicks.",
"links": {
"github": "https://github.com/AppFlowy-IO/AppFlowy",
"website": "https://appflowy.io/",
"docs": "https://docs.appflowy.io/docs"
},
"logo": "appflowy.png",
"tags": [
"productivity",
"self-hosted",
"notes",
"knowledge-base",
"notion-alternative"
],
"seoTitle": "Self-Host AppFlowy in minutes",
"seoDescription": "Workspace app, an alternative to Notion. Self-host AppFlowy on Dokploy in minutes – no manual setup needed."
}
+2 -3
View File
@@ -1,9 +1,8 @@
version: "3.8"
services:
apprise-api:
image: linuxserver/apprise-api:latest
restart: unless-stopped
ports:
expose:
- 8000
environment:
- PUID=1000
@@ -13,4 +12,4 @@ services:
- config:/config
volumes:
config: {}
config: {}
+16
View File
@@ -0,0 +1,16 @@
{
"id": "apprise-api",
"name": "Apprise API",
"version": "latest",
"description": "Apprise API provides a simple interface for sending notifications to almost all of the most popular notification services available to us today.",
"logo": "logo.png",
"links": {
"github": "https://github.com/caronc/apprise-api",
"website": "https://github.com/caronc/apprise-api",
"docs": "https://github.com/caronc/apprise-api/wiki"
},
"tags": [
"notifications",
"api"
]
}
+6 -3
View File
@@ -1,6 +1,9 @@
version: "3.8"
services:
appsmith:
image: index.docker.io/appsmith/appsmith-ee:v1.29
image: appsmith/appsmith-ee:v1.94
volumes:
- ../files/stacks:/appsmith-stacks
- appsmith-data:/appsmith-stacks
restart: unless-stopped
volumes:
appsmith-data:
+15
View File
@@ -0,0 +1,15 @@
{
"id": "appsmith",
"name": "Appsmith",
"version": "v1.94",
"description": "Appsmith is a free and open source platform for building internal tools and applications.",
"logo": "appsmith.png",
"links": {
"github": "https://github.com/appsmithorg/appsmith",
"website": "https://appsmith.com/",
"docs": "https://docs.appsmith.com/"
},
"tags": [
"cms"
]
}
File diff suppressed because it is too large Load Diff
+20
View File
@@ -0,0 +1,20 @@
{
"id": "appwrite",
"name": "Appwrite",
"version": "2.7.0",
"description": "Appwrite is an end-to-end platform for building Web, Mobile, Native, or Backend apps, packaged as a set of Docker microservices. It includes both a backend server and a fully integrated hosting solution for deploying static and server-side rendered frontends. Appwrite abstracts the complexity and repetitiveness required to build modern apps from scratch and allows you to build secure, full-stack applications faster.\nUsing Appwrite, you can easily integrate your app with user authentication and multiple sign-in methods, a database for storing and querying users and team data, storage and file management, image manipulation, Cloud Functions, messaging, and more services.",
"links": {
"github": "https://github.com/appwrite/appwrite",
"website": "https://appwrite.io/",
"docs": "https://appwrite.io/docs"
},
"logo": "appwrite.svg",
"tags": [
"database",
"firebase",
"postgresql",
"mongodb",
"hosting",
"self-hosted"
]
}
+403 -56
View File
@@ -1,51 +1,139 @@
[variables]
main_domain = "${domain}"
functions_domain = "functions.${main_domain}"
sites_domain = "sites.${main_domain}"
mqtt_domain = "mqtt.${main_domain}"
openssl_key = "${password:32}"
notifications_tracking_secret = "${password:32}"
db_pw = "${password:32}"
db_root_pw = "${password:32}"
db_user_pw = "${password:32}"
usage_pw = "${password:32}"
executor_secret = "${password:32}"
jobs_secret = "${password:32}"
geo_secret = "${password:32}"
# Optional AI code review of GitHub pull requests. Uncomment together with the
# _APP_REVIEWS_* variables and the appwrite-hansi service in docker-compose.yml.
# reviews_secret = "${password:32}"
console_domain = "console.${main_domain}"
[config]
# Build jobs and runtimes join <appName>_default, which isolated deployments never create
# (every service sits on the external <appName> network instead).
isolated = false
env = [
"_APP_ENV=production",
"_APP_VERSION=2.7.0",
"_APP_MEMORY_LIMIT=512M",
"_APP_EDITION=self-hosted",
"_APP_LOCALE=en",
"_APP_WORKER_PER_CORE=6",
"_APP_OPTIONS_ABUSE=enabled",
"_APP_OPTIONS_ABUSE_INCREASED_LIMIT_PROJECTS=",
"_APP_OPTIONS_FORCE_HTTPS=disabled",
"_APP_OPTIONS_FUNCTIONS_FORCE_HTTPS=disabled",
"_APP_OPTIONS_ROUTER_FORCE_HTTPS=disabled",
"_APP_OPTIONS_ROUTER_PROTECTION=disabled",
"_APP_OPENSSL_KEY_V1=your-secret-key",
"_APP_ROUTER_AUTO_CERTIFICATES=enabled",
"_APP_LOCKING_ENABLED=enabled",
"_APP_OPENSSL_KEY_V1=${openssl_key}",
"_APP_OPENSSL_KEY_V2=",
"_APP_OPENSSL_KEY_CURRENT=1",
"_APP_OPENSSL_KEY_OLDEST=1",
"_APP_NOTIFICATIONS_TRACKING_SECRET=${notifications_tracking_secret}",
"_APP_NOTIFICATIONS_PUSH_APNS=",
"_APP_NOTIFICATIONS_PUSH_APNS_KEY=",
"_APP_DOMAIN=${main_domain}",
"_APP_DOMAIN_FUNCTIONS=${main_domain}",
"_APP_DOMAIN_TARGET=${main_domain}",
"_APP_CONSOLE_DOMAIN=${console_domain}",
"_APP_CONSOLE_URL=https://${console_domain}",
"_APP_CONSOLE_HOSTNAMES=${console_domain}",
"_APP_CONSOLE_TRUSTED_PROJECTS=",
"_APP_CUSTOM_DOMAIN_DENY_LIST=example.com,test.com,app.example.com",
"_APP_DOMAIN_FUNCTIONS=${functions_domain}",
"_APP_DOMAIN_FUNCTIONS_FALLBACK=",
"_APP_DOMAIN_SITES=${sites_domain}",
"_APP_DOMAIN_TARGET_CNAME=localhost",
"_APP_DOMAIN_TARGET_AAAA=::1",
"_APP_DOMAIN_TARGET_A=127.0.0.1",
"_APP_DOMAIN_TARGET_CAA=",
"_APP_DNS=8.8.8.8",
"_APP_DNS_EXTERNAL=",
"_APP_ALLOWED_INTERNAL_ADDRESSES=",
"_APP_TRUSTED_HEADERS=x-forwarded-for",
"_APP_CONSOLE_WHITELIST_ROOT=enabled",
"_APP_CONSOLE_WHITELIST_EMAILS=",
"_APP_CONSOLE_WHITELIST_IPS=",
"_APP_CONSOLE_HOSTNAMES=",
"_APP_CONSOLE_SCHEMA=appwriteio",
"_APP_CONSOLE_SESSION_ALERTS=disabled",
"_APP_CONSOLE_COUNTRIES_DENYLIST=",
"_APP_CONSOLE_GITHUB_APP_ID=",
"_APP_CONSOLE_GITHUB_SECRET=",
"_APP_CONSOLE_GITLAB_APP_ID=",
"_APP_CONSOLE_GITLAB_SECRET=",
"_APP_CONSOLE_GITLAB_ENDPOINT=",
"_APP_CONSOLE_BITBUCKET_APP_ID=",
"_APP_CONSOLE_BITBUCKET_SECRET=",
"_APP_CONSOLE_GOOGLE_APP_ID=",
"_APP_CONSOLE_GOOGLE_SECRET=",
"_APP_SYSTEM_EMAIL_NAME=Appwrite",
"_APP_SYSTEM_EMAIL_ADDRESS=noreply@appwrite.io",
"_APP_SYSTEM_TEAM_EMAIL=team@appwrite.io",
"_APP_SYSTEM_RESPONSE_FORMAT=",
"_APP_SYSTEM_SECURITY_EMAIL_ADDRESS=certs@appwrite.io",
"_APP_EMAIL_SECURITY=",
"_APP_EMAIL_CERTIFICATES=",
"_APP_USAGE_STATS=enabled",
"_APP_LOGGING_PROVIDER=",
"_APP_COMPRESSION_ENABLED=enabled",
"_APP_COMPRESSION_MIN_SIZE_BYTES=1024",
"_APP_LOGGING_CONFIG=",
"_APP_USAGE_AGGREGATION_INTERVAL=30",
"_APP_USAGE_TIMESERIES_INTERVAL=30",
"_APP_USAGE_DATABASE_INTERVAL=900",
"_APP_WORKER_PER_CORE=6",
"_APP_CONSOLE_SESSION_ALERTS=disabled",
"_APP_LOGGING_FORMAT=pretty",
"_APP_GEO_ENDPOINT=http://appwrite-geo/v1",
"_APP_GEO_SECRET=${geo_secret}",
"_APP_REDIS_HOST=redis",
"_APP_REDIS_PORT=6379",
"_APP_REDIS_USER=",
"_APP_REDIS_PASS=",
"_APP_DB_HOST=mariadb",
"_APP_DB_PORT=3306",
"_APP_DB_ADAPTER=postgresql",
"_APP_DB_HOST=postgresql",
"_APP_DB_PORT=5432",
"_APP_DB_SCHEMA=appwrite",
"_APP_DB_USER=user",
"_APP_DB_PASS=password",
"_APP_DB_ROOT_PASS=rootsecretpassword",
"_APP_INFLUXDB_HOST=influxdb",
"_APP_INFLUXDB_PORT=8086",
"_APP_STATSD_HOST=telegraf",
"_APP_STATSD_PORT=8125",
"_APP_DB_PASS=${db_pw}",
"_APP_DATABASE_SHARED_TABLES=",
"_APP_DATABASE_SHARED_NAMESPACE=",
"_APP_LIMIT_DATABASE_BATCH=100",
"_APP_DOCUMENTSDB=enabled",
"_APP_DB_ADAPTER_DOCUMENTSDB=mongodb",
"_APP_DB_HOST_DOCUMENTSDB=mongodb",
"_APP_DB_PORT_DOCUMENTSDB=27017",
"_APP_DB_SCHEMA_DOCUMENTSDB=",
"_APP_DB_USER_DOCUMENTSDB=",
"_APP_DB_PASS_DOCUMENTSDB=",
"_APP_CONNECTIONS_DATABASE_DOCUMENTSDB=",
"_APP_VECTORSDB=enabled",
"_APP_DB_ADAPTER_VECTORSDB=postgresql",
"_APP_DB_HOST_VECTORSDB=postgresql",
"_APP_DB_PORT_VECTORSDB=5432",
"_APP_DB_SCHEMA_VECTORSDB=",
"_APP_DB_USER_VECTORSDB=",
"_APP_DB_PASS_VECTORSDB=",
"_APP_CONNECTIONS_DATABASE_VECTORSDB=",
"_APP_EMBEDDING=disabled",
"_APP_USAGE_STATS=enabled",
"_APP_USAGE_PASS=${usage_pw}",
"_APP_CONNECTIONS_DB_USAGE=http://appwrite:${usage_pw}@clickhouse:8123/appwrite",
"_APP_POOL_SIZE_USAGE=2",
"_APP_CONNECTIONS_DB_EXECUTIONS=http://appwrite:${usage_pw}@clickhouse:8123/appwrite",
"_APP_POOL_SIZE_EXECUTIONS=2",
"_APP_MAINTENANCE_RETENTION_USAGE_TTL=180",
"_APP_STATS_USAGE_QUEUE_NAME=v1-stats-usage",
"_APP_STATS_RESOURCES_QUEUE_NAME=v1-stats-resources",
"_APP_MAINTENANCE_QUEUE_NAME=v1-maintenance",
"_APP_STATS_RESOURCES_INTERVAL=3600",
"_APP_ALERTS_INTERVAL=60",
"_APP_ALERTS_USAGE_LAG=120",
"_APP_MQTT_REPLAY_DEPTH=5",
"_APP_MQTT_MAX_PACKET_SIZE=64000",
"_APP_LIMIT_REALTIME_SUBSCRIPTIONS=100",
"_APP_LIMIT_REALTIME_CHANNELS=100",
"_APP_LIMIT_REALTIME_QUERIES=100",
"_APP_SMTP_HOST=",
"_APP_SMTP_PORT=",
"_APP_SMTP_SECURE=",
@@ -53,8 +141,12 @@ env = [
"_APP_SMTP_PASSWORD=",
"_APP_SMS_PROVIDER=",
"_APP_SMS_FROM=",
"_APP_SMS_PROJECTS_DENY_LIST=",
"_APP_PWNED_PASSWORDS_DSN=none://localhost",
"_APP_STORAGE_LIMIT=30000000",
"_APP_STORAGE_PREVIEW_LIMIT=20000000",
"_APP_AUTOGRAVITY_HOST=http://appwrite-autogravity:8080",
"_APP_EXIFTOOL_HOST=http://appwrite-exiftool:8080",
"_APP_STORAGE_ANTIVIRUS=disabled",
"_APP_STORAGE_ANTIVIRUS_HOST=clamav",
"_APP_STORAGE_ANTIVIRUS_PORT=3310",
@@ -63,6 +155,8 @@ env = [
"_APP_STORAGE_S3_SECRET=",
"_APP_STORAGE_S3_REGION=us-east-1",
"_APP_STORAGE_S3_BUCKET=",
"_APP_STORAGE_S3_ENDPOINT=",
"_APP_STORAGE_S3_PATH_STYLE=",
"_APP_STORAGE_DO_SPACES_ACCESS_KEY=",
"_APP_STORAGE_DO_SPACES_SECRET=",
"_APP_STORAGE_DO_SPACES_REGION=us-east-1",
@@ -79,65 +173,318 @@ env = [
"_APP_STORAGE_WASABI_SECRET=",
"_APP_STORAGE_WASABI_REGION=eu-central-1",
"_APP_STORAGE_WASABI_BUCKET=",
"_APP_FUNCTIONS_SIZE_LIMIT=30000000",
"_APP_FUNCTIONS_BUILD_SIZE_LIMIT=2000000000",
"_APP_COMPUTE_SIZE_LIMIT=30000000",
"_APP_COMPUTE_BUILD_SIZE_LIMIT=2000000000",
"_APP_COMPUTE_BUILD_TIMEOUT=2700",
"_APP_COMPUTE_CPUS=0",
"_APP_COMPUTE_MEMORY=0",
"_APP_COMPUTE_INACTIVE_THRESHOLD=60",
"_APP_COMPUTE_MAINTENANCE_INTERVAL=3600",
"_APP_OPEN_RUNTIMES_NFT=enabled",
"_APP_FUNCTIONS_TIMEOUT=900",
"_APP_FUNCTIONS_BUILD_TIMEOUT=900",
"_APP_FUNCTIONS_CONTAINERS=10",
"_APP_FUNCTIONS_CPUS=0",
"_APP_FUNCTIONS_MEMORY=0",
"_APP_FUNCTIONS_MEMORY_SWAP=0",
"_APP_FUNCTIONS_RUNTIMES=node-16.0,php-8.0,python-3.9,ruby-3.0",
"_APP_EXECUTOR_SECRET=your-secret-key",
"_APP_EXECUTOR_HOST=http://exc1/v1",
"_APP_EXECUTOR_RUNTIME_NETWORK=appwrite_runtimes",
"_APP_FUNCTIONS_ENVS=node-16.0,php-7.4,python-3.9,ruby-3.0",
"_APP_FUNCTIONS_INACTIVE_THRESHOLD=60",
"DOCKERHUB_PULL_USERNAME=",
"DOCKERHUB_PULL_PASSWORD=",
"DOCKERHUB_PULL_EMAIL=",
"OPEN_RUNTIMES_NETWORK=appwrite_runtimes",
"_APP_FUNCTIONS_RUNTIMES_NETWORK=runtimes",
"_APP_FUNCTIONS_CREATION_ABUSE_LIMIT=5000",
"_APP_FUNCTIONS_SCHEDULE_SPREAD=0",
"_APP_FUNCTIONS_RUNTIMES=node-22,node-24,node-26,python-3.12,php-8.3,ruby-3.3,dart-3.5,go-1.23,rust-1.83,bun-1.1,deno-1.46,java-21.0,dotnet-8.0",
"_APP_SITES_TIMEOUT=900",
"_APP_SITES_RUNTIMES=static-1,node-22",
"_APP_EXECUTOR_SECRET=${executor_secret}",
"_APP_EXECUTOR_HOST=http://openruntimes-executor/v1",
"_APP_EXECUTOR_IMAGES=openruntimes/node:v5-22,openruntimes/python:v5-3.12,openruntimes/php:v5-8.3,openruntimes/static:v5-1",
"_APP_EXECUTOR_CONNECTION_STORAGE=local://localhost",
"_APP_JOBS_HOST=http://orchestrator:8080",
"_APP_JOBS_SECRET=${jobs_secret}",
"_APP_JOBS_ENDPOINT=http://appwrite",
# Reviews are opt-in: the shared secret turns the /v1/reviews API on, and the
# console hides the screen in the self-hosted profile regardless.
# "_APP_REVIEWS_SECRET=${reviews_secret}",
# "_APP_REVIEWS_MODEL=anthropic/claude-sonnet-4.5",
# "_APP_REVIEWS_VERIFY_MODEL=",
# "_APP_REVIEWS_AI_GATEWAY_KEY=",
"_APP_BROWSER_HOST=http://appwrite-browser:3000/v1",
"_APP_WORKER_SCREENSHOTS_ROUTER=http://appwrite",
"_APP_DOCKER_HUB_USERNAME=",
"_APP_DOCKER_HUB_PASSWORD=",
"_APP_FUNCTIONS_MAINTENANCE_INTERVAL=3600",
"_APP_MAINTENANCE_INTERVAL=86400",
"_APP_MAINTENANCE_INACTIVE_INTERVAL=604800",
"_APP_MAINTENANCE_START_TIME=00:00",
"_APP_MAINTENANCE_RETENTION_CACHE=2592000",
"_APP_MAINTENANCE_RETENTION_EXECUTION=1209600",
"_APP_MAINTENANCE_RETENTION_AUDIT=1209600",
"_APP_MAINTENANCE_RETENTION_AUDIT_CONSOLE=15778800",
"_APP_MAINTENANCE_RETENTION_ABUSE=86400",
"_APP_MAINTENANCE_RETENTION_SCHEDULES=86400",
"_APP_MAINTENANCE_RETENTION_ALERTS=7776000",
"_APP_INTERVAL_DOMAIN_VERIFICATION=120",
"_APP_INTERVAL_CLEANUP_STALE_EXECUTIONS=300",
"_APP_GRAPHQL_INTROSPECTION=enabled",
"_APP_GRAPHQL_MAX_BATCH_SIZE=10",
"_APP_GRAPHQL_MAX_COMPLEXITY=250",
"_APP_GRAPHQL_MAX_DEPTH=4",
"_APP_WEBHOOK_MAX_FAILED_ATTEMPTS=10",
"_APP_VCS_GITHUB_APP_NAME=",
"_APP_VCS_GITHUB_PRIVATE_KEY=",
"_APP_VCS_GITHUB_APP_ID=",
"_APP_VCS_GITHUB_CLIENT_ID=",
"_APP_VCS_GITHUB_CLIENT_SECRET=",
"_APP_VCS_GITHUB_WEBHOOK_SECRET=",
"_APP_MAINTENANCE_INTERVAL=86400",
"_APP_MAINTENANCE_DELAY=0",
"_APP_MAINTENANCE_RETENTION_CACHE=2592000",
"_APP_MAINTENANCE_RETENTION_EXECUTION=1209600",
"_APP_MAINTENANCE_RETENTION_AUDIT=1209600",
"_APP_MAINTENANCE_RETENTION_ABUSE=86400",
"_APP_MAINTENANCE_RETENTION_USAGE_HOURLY=8640000",
"_APP_MAINTENANCE_RETENTION_SCHEDULES=86400",
"_APP_GRAPHQL_MAX_BATCH_SIZE=10",
"_APP_GRAPHQL_MAX_COMPLEXITY=250",
"_APP_GRAPHQL_MAX_DEPTH=3",
"_APP_VCS_GITEA_ENDPOINT=",
"_APP_VCS_GITEA_BROWSER_ENDPOINT=",
"_APP_VCS_GITEA_CLIENT_ID=",
"_APP_VCS_GITEA_CLIENT_SECRET=",
"_APP_VCS_GITEA_WEBHOOK_SECRET=",
"_APP_VCS_GITLAB_ENDPOINT=",
"_APP_VCS_GITLAB_CLIENT_ID=",
"_APP_VCS_GITLAB_CLIENT_SECRET=",
"_APP_VCS_GITLAB_WEBHOOK_SECRET=",
"_APP_VCS_BITBUCKET_CLIENT_ID=",
"_APP_VCS_BITBUCKET_CLIENT_SECRET=",
"_APP_VCS_BITBUCKET_WEBHOOK_SECRET=",
"_APP_VCS_ORIGIN_CLIENT_ID=",
"_APP_VCS_ORIGIN_PRIVATE_KEY=",
"_APP_VCS_ENTIRE_PLUGIN=",
"_APP_VCS_ENTIRE_PRIVATE_KEY=",
"_APP_VCS_ENTIRE_ISSUER=",
"_APP_VCS_ENTIRE_ENDPOINT=",
"_APP_VCS_WEBHOOK_URL=",
"_APP_MIGRATION_HOST=appwrite",
"_APP_MIGRATIONS_FIREBASE_CLIENT_ID=",
"_APP_MIGRATIONS_FIREBASE_CLIENT_SECRET=",
"_APP_ASSISTANT_OPENAI_API_KEY=",
"_APP_DB_ROOT_PASS=${db_root_pw}",
"_APP_DB_USER_PASS=${db_user_pw}",
"_APP_DB_MAX_CONNECTIONS=500",
]
mounts = []
[[config.mounts]]
filePath = "mongo-init.js"
content = """// mongo-init.js
const adminDb = db.getSiblingDB('admin');
const username = process.env.MONGO_INITDB_USERNAME;
const password = process.env.MONGO_INITDB_PASSWORD;
const database = process.env.MONGO_INITDB_DATABASE;
// Idempotent: the official entrypoint races the real server on port 27017 when
// initialising a fresh volume (appwrite/appwrite#13593), so this script may run
// more than once. Skip if the user already exists.
if (adminDb.getUser(username) === null) {
adminDb.createUser({
user: username,
pwd: password,
roles: [
{ role: 'readWrite', db: database }
]
});
}
"""
[[config.mounts]]
filePath = "mongo-entrypoint.sh"
content = """#!/bin/bash
set -e
KEYFILE_PATH="/data/keyfile/mongo-keyfile"
if [ ! -f "$KEYFILE_PATH" ]; then
echo "Generating random MongoDB keyfile..."
mkdir -p /data/keyfile
openssl rand -base64 756 > "$KEYFILE_PATH"
fi
chmod 400 "$KEYFILE_PATH"
chown mongodb:mongodb "$KEYFILE_PATH" 2>/dev/null || chown 999:999 "$KEYFILE_PATH"
# The standard entrypoint initialises an empty data directory with a second
# mongod on 27017, stopped with `mongod --shutdown`. That returns once the
# server clears <dbpath>/mongod.lock, several steps before it exits and
# releases the port, and the real server binds a millisecond after it starts --
# so a slow shutdown tail leaves it exiting 48, "Address already in use",
# taking the container with it (appwrite/appwrite#13593). Initialise here
# instead, on a port the real server never binds, and hand over a directory
# the standard entrypoint has nothing left to do.
INIT_MARKER=/data/db/.appwrite-initialised
if [ ! -e "$INIT_MARKER" ]; then
INIT_PORT=27018
echo "Initialising MongoDB data directory..."
find -L /data/db \\! -user mongodb -exec chown mongodb '{}' +
export MONGO_INITDB_DATABASE="${MONGO_INITDB_DATABASE:-test}"
gosu mongodb mongod --dbpath /data/db --bind_ip 127.0.0.1 --port "$INIT_PORT" &
INIT_SERVER=$!
READY=
for _ in $(seq 1 30); do
if mongosh --host 127.0.0.1 --port "$INIT_PORT" --quiet --eval 'quit(0)' > /dev/null 2>&1; then
READY=1
break
fi
if ! kill -0 "$INIT_SERVER" 2>/dev/null; then
break
fi
sleep 1
done
if [ -z "$READY" ]; then
echo "MongoDB did not accept connections for initialisation" >&2
exit 1
fi
mongosh --host 127.0.0.1 --port "$INIT_PORT" --quiet admin --eval '
const username = process.env.MONGO_INITDB_ROOT_USERNAME;
if (db.getUser(username) === null) {
db.createUser({
user: username,
pwd: process.env.MONGO_INITDB_ROOT_PASSWORD,
roles: [{ role: "root", db: "admin" }]
});
}
'
mongosh --host 127.0.0.1 --port "$INIT_PORT" --quiet "$MONGO_INITDB_DATABASE" /mongo-init.js
touch "$INIT_MARKER"
kill -TERM "$INIT_SERVER"
wait "$INIT_SERVER"
echo "MongoDB data directory initialised."
fi
exec docker-entrypoint.sh mongod --replSet rs0 --bind_ip_all --auth --keyFile "$KEYFILE_PATH"
"""
[[config.mounts]]
filePath = "clickhouse-config.xml"
content = """<?xml version="1.0"?>
<!--
Retention for ClickHouse's own system log tables.
Every <ttl> in the image's config.xml sits inside an XML comment, so these
tables keep every row forever, and the metric ones add a row per second
whether or not the instance serves traffic. Left alone they outgrow the
usage data they sit next to and fill the volume.
When a window here changes, ClickHouse replaces the table on the next
restart and keeps the old one, rows and all, as <log>_<N>.
clickhouse-init.sh gives those old tables the same window.
-->
<clickhouse>
<!-- The metric, trace and profile logs sample the server every second whether
or not Appwrite serves traffic, and nothing reads them back, so their
writes and the merges behind them are pure overhead. -->
<asynchronous_metric_log remove="1"/>
<metric_log remove="1"/>
<histogram_metric_log remove="1"/>
<query_metric_log remove="1"/>
<processors_profile_log remove="1"/>
<trace_log remove="1"/>
<!-- text_log repeats the server log the container already writes. -->
<text_log remove="1"/>
<!-- Kept for debugging, capped so they cannot fill the volume. -->
<asynchronous_insert_log><ttl>event_date + INTERVAL 3 DAY DELETE</ttl></asynchronous_insert_log>
<query_log><ttl>event_date + INTERVAL 7 DAY DELETE</ttl></query_log>
<query_views_log><ttl>event_date + INTERVAL 7 DAY DELETE</ttl></query_views_log>
<query_thread_log><ttl>event_date + INTERVAL 7 DAY DELETE</ttl></query_thread_log>
<part_log><ttl>event_date + INTERVAL 7 DAY DELETE</ttl></part_log>
<background_schedule_pool_log><ttl>event_date + INTERVAL 7 DAY DELETE</ttl></background_schedule_pool_log>
<!-- Longer, so it still covers a report that reaches us late. crash_log is
deliberately left alone: it is tiny and worth keeping. -->
<error_log><ttl>event_date + INTERVAL 14 DAY DELETE</ttl></error_log>
</clickhouse>
"""
[[config.mounts]]
filePath = "clickhouse-init.sh"
content = """#!/bin/bash
# The ClickHouse entrypoint sources this file, so a subshell keeps these options out of it.
(
set -euo pipefail
client() {
clickhouse-client --host 127.0.0.1 --user "$CLICKHOUSE_USER" --password "$CLICKHOUSE_PASSWORD" "$@"
}
# Flushing replaces log tables whose definition changed, keeping each old table as <log>_<N>.
client --query 'SYSTEM FLUSH LOGS'
# Tables left behind never expire on their own: take the TTL of the log that
# replaced this one, or a week when the log is no longer written at all.
# The named logs must match the ones clickhouse-config.xml removes: a log that
# is still written gets replaced on the next restart if its TTL is altered here.
client --format TSVRaw <<'SQL' | client --multiquery
SELECT concat('ALTER TABLE system.', stale.name, ' MODIFY TTL ', if(active.name = '', 'event_date + INTERVAL 7 DAY DELETE', splitByString(' SETTINGS ', splitByString(' TTL ', active.engine_full)[2])[1]), ';')
FROM (
SELECT name, splitByChar('_', name)[-1] AS suffix, arrayStringConcat(arrayPopBack(splitByChar('_', name)), '_') AS log
FROM system.tables
WHERE database = 'system'
AND position(engine_full, ' TTL ') = 0
AND endsWith(engine, 'MergeTree')
AND name IN (SELECT table FROM system.columns WHERE database = 'system' AND name = 'event_date' AND type = 'Date')
) AS stale
LEFT JOIN system.tables AS active
ON active.database = 'system'
AND active.name = stale.log
AND position(active.engine_full, ' TTL ') > 0
WHERE (endsWith(stale.log, '_log') AND toUInt64OrNull(stale.suffix) IS NOT NULL)
OR stale.name IN ('asynchronous_metric_log', 'metric_log', 'histogram_metric_log', 'query_metric_log', 'processors_profile_log', 'trace_log', 'text_log')
SQL
)
"""
[[config.domains]]
serviceName = "appwrite-console"
port = 3000
host = "${main_domain}"
path = "/"
[[config.domains]]
serviceName = "appwrite"
port = 80
host = "${main_domain}"
path = "/"
path = "/v1"
[[config.domains]]
serviceName = "appwrite-console"
serviceName = "appwrite"
port = 80
host = "${main_domain}"
path = "/console"
path = "/.well-known"
[[config.domains]]
serviceName = "appwrite-realtime"
port = 80
host = "${main_domain}"
path = "/v1/realtime"
# --- Dedicated Console domain ---
# The Console SPA is served at the root of ${console_domain}, with /v1 and
# /v1/realtime proxied to the API and Realtime so the Console reaches the API
# on its own origin.
[[config.domains]]
serviceName = "appwrite-console"
port = 3000
host = "${console_domain}"
path = "/"
[[config.domains]]
serviceName = "appwrite"
port = 80
host = "${console_domain}"
path = "/v1"
[[config.domains]]
serviceName = "appwrite-realtime"
port = 80
host = "${console_domain}"
path = "/v1/realtime"
[[config.domains]]
serviceName = "appwrite"
port = 80
host = "${sites_domain}"
path = "/"
[[config.domains]]
serviceName = "appwrite"
port = 80
host = "${functions_domain}"
path = "/"
[[config.domains]]
serviceName = "appwrite-mqtt"
port = 8083
host = "${mqtt_domain}"
path = "/"
+16
View File
@@ -0,0 +1,16 @@
{
"id": "aptabase",
"name": "Aptabase",
"version": "v1.0.0",
"description": "Aptabase is a self-hosted web analytics platform that lets you track website traffic and user behavior.",
"logo": "aptabase.svg",
"links": {
"github": "https://github.com/aptabase/aptabase",
"website": "https://aptabase.com/",
"docs": "https://github.com/aptabase/aptabase/blob/main/README.md"
},
"tags": [
"analytics",
"self-hosted"
]
}
+2 -3
View File
@@ -1,9 +1,8 @@
version: "3.8"
services:
arangodb:
image: arangodb:3.12.4
restart: unless-stopped
ports:
expose:
- 8529
environment:
- ARANGO_ROOT_PASSWORD=${ARANGO_PASSWORD}
@@ -11,4 +10,4 @@ services:
- data:/var/lib/arangodb3
volumes:
data: {}
data: {}
+17
View File
@@ -0,0 +1,17 @@
{
"id": "arangodb",
"name": "ArangoDB",
"version": "latest",
"description": "ArangoDB is a native multi-model database with flexible data models for documents, graphs, and key-values. Build high performance applications using a convenient SQL-like query language or JavaScript extensions.",
"logo": "logo.png",
"links": {
"github": "https://github.com/arangodb/arangodb",
"website": "https://www.arangodb.com/",
"docs": "https://www.arangodb.com/docs/"
},
"tags": [
"database",
"graph-database",
"nosql"
]
}
+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000" height="1000"><g clip-path="url(#SvgjsClipPath1152)"><rect width="1000" height="1000" fill="#000000"></rect><g transform="matrix(3.401360544217687,0,0,3.401360544217687,250.00000000000003,265.30612244897964)"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="147" height="138" viewBox="0 0 147 138"><image width="147" height="138" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJMAAACKCAYAAACuPHhGAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAZgSURBVHgB7Z3rddNAEIVHVBA6MB1AB04H6QCnAuiAQwehgogOoALUAXSAO0g6MBqzCvip1+zundX9zvEJIfkRS1efVrM760oCu91u0355FELGUVdVda//eCWEGMEwETMYJmIGw0TMYJiIGQwTMYNhImYwTMQMhomYwTARMxgmYgbDRMxgmIgZDBMxg2EiZjBMxAyGiZjBMBEzGCZiBsNEzGCYiBkMEzGDYSJmMEzEDIaJmMEwETMYJmIGw0TMYJiIGQwTMYNhImZUUgi73W7VfvktvnhuX2+qqnqWAijJTB/EHzft66MUQhFmClb60b5W4o9i7FSKmd6LzyApxdjJvZlaK+nJ+Cl+w6QUYacSzHQnvoOkFGGnEsykT3Ar8Y97O7k2U9hueiVl4N5Ors1UkJU6nlszvRanuDVTYVbquAnvyyVuzVSglTq2rZ3eiENcmqlQK3WsvNrJpZkKtlJH09rpVpzhzkyFW6lj3b7PtTjDnZkWYKUOd3ZyZaaFWKnDnZ283ebey7L4JI5wE6Zwla5lWbiykyczubpKDXHzvl2EaaFW6nBjJy9mWtpY6RgXdoIvDThtFIjBbVsqaAQYD2Za6ljpGPjjAG0mWukEXTy3FVDQzUQrHQJ9PGDNRCtdBNZOyGailc4Du7QX0ky00lVgGw9QzUQrXQa28QDOTLTSICDthGgmWqkfSDtBmcn5BhSpgbMTmplQN6D4JnjA2QnGTOBW0tajR8FbuQBlJyQzrQUzSHUoEn4VPKDshGQm1EaBfcU5bN2jf+ONYAFjJwgzATcKdFaScLK+CB4wdoIwE7qVum9op+tkNxOwlZrjCVVwO91JZrKbCdhKZ1c2Alfos294kdVMwFbaXloiG2zVCB7ZN7zIfZtDnTr5PPPnuci6F3q2MIFbqb72C8FajeDxNmdbVE4zebXS2N9LTbbjmiVMyFaSgfNwwU6/BI9sTZu5zITaVNmMrNUgTrEoWeyUvDQQrpofgsmoxfrARUzltkrctJnDTKhjpboa2fUBXMRUkh/npGYqyUodtNM/UpsJdaxUVxN70YKdOHaShGYCbxSYdQWX/N7GkNJMqGOlZu7BBp5iUZId9yRhClfuRjCxukWhFjGT1Z1SmQnVSr1TJ0MBnmJRkoxVo4+ZwMcT91ZhUkp8Wh1DCjMVb6WOYKetYBL9PEQNE/hYKVaxEbWIuQk1sWjENhNyq3esxspa/q7JRiRq40G0MIFbqY41fgCfYvkQ004xzYRspdiP8Q+CaaeobVFRwhSstBZM6thPNeBTLNHsFMtMqBtQKKmKi7VgEs1O5nUm8A0okn6GW3ss9DisBY8oTZsxzKTNgCvBJPWUB+oUSxQ7xTATalNllibFJdnJ1Ezgn1SZyxKoZQJzO5maiVY6T3tcngRzJaapnczMRCtdBdlOGzHCzEzIVmpf76qM282ArxM3s7aJmcCt1FSZ9y0Cn2Ix2/DCxEzAVlKir+MZwhLsNNtM4FaqEYKkBDt9F0xWFkt7Z5uJVhoO+ErM2bMDs8xEK40DfJ347MaDube5rJtL9YA6a486xaLMWjY0OUwhxW8Fk9m9cLEo2U5zzIS8+A3VSh3If9/k8zppAA4+kMy+6+wQgKdYlEkt5VPNhDxWQh6T/A9qEVOZZKfRZgJvqnRhJQW8iKmMttMUMyGPlZCv9gPAp1iU0ed5lJkcfH4uVJGyj2CnJ8FllJ3GmgnZSnBFyj7Au1iUURteDDYTrRQH8CdjZfBxHWMmWikC4EVMZfB5H2QmWikuDuz0esiasKFmQrZS4zlIigM7DWo86DWTAytNqtaiEVZgPAomgxoPhpgJ2UrbEoIU+Ca4W/EMaou6GibwbXEUL1MnvTgoYvZueNFnpiQba07EfBtBAB7EsZ0uholWSo93O10zE/K2OFvBfvqZw4PgctVO18K0EVzclwMuEezUCC4X7XQ2TOCNAkpxt7gjkN/fRTudrTOBty/p1Mm9FA7wVjzK2brTiZloJRjQ7bQ5/s8TM9FKOLTn4qfgdgCdrGo9MJMDK6F3nViD/H5PNrw4MBO4lZJuboqAg3XiB3Z6MROthIeDIqba6a775sVM4FZy03VijQM7vdwx9mbiExwuDtaJv7SU781EK2HjYE3Z3k6vQqpWgsvixkrHgH+gtLK3UwVeaVVcr++2wsE68eYPiYOoQetKl74AAAAASUVORK5CYII="></image></svg></g></g><defs><clipPath id="SvgjsClipPath1152"><rect width="1000" height="1000" x="0" y="0" rx="350" ry="350"></rect></clipPath></defs></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

+100
View File
@@ -0,0 +1,100 @@
# Arche — AI workspace platform that spawns per-user OpenCode containers
# via a Docker socket proxy.
#
# PRE-REQUISITES (run once on the VPS before deploying):
# mkdir -p /opt/arche/kb-content /opt/arche/kb-config /opt/arche/users
#
# Optional (only needed to seed the Knowledge Base):
# git init --bare --initial-branch=main /opt/arche/kb-content
# git init --bare --initial-branch=main /opt/arche/kb-config
#
# POST-DEPLOY (set in Dokploy → Environment, then redeploy):
# 1. Deploy this template once. Dokploy auto-creates a network for the
# compose stack.
# 2. SSH into the host and find the network name:
# docker network ls --format '{{.Name}}' | grep arche
# It looks like `<stack-name>_default` or similar.
# 3. Add the env var OPENCODE_NETWORK=<that-network-name> and redeploy.
# Without it, spawned user workspaces will fail to start.
#
# IMAGE ARCHITECTURE:
# Default tags target linux/amd64. For ARM64 hosts (Apple Silicon,
# Ampere, Graviton), override both images to the `-arm64` variants in
# Dokploy → Environment:
# ARCHE_WEB_IMAGE=ghcr.io/peaberry-studio/arche/web:latest-arm64
# ARCHE_WORKSPACE_IMAGE=ghcr.io/peaberry-studio/arche/workspace:latest-arm64
services:
web:
image: ${ARCHE_WEB_IMAGE:-ghcr.io/peaberry-studio/arche/web:latest}
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
docker-socket-proxy:
condition: service_started
environment:
ARCHE_DOMAIN: ${ARCHE_DOMAIN}
DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/arche?schema=public
ARCHE_SESSION_PEPPER: ${ARCHE_SESSION_PEPPER}
ARCHE_ENCRYPTION_KEY: ${ARCHE_ENCRYPTION_KEY}
ARCHE_INTERNAL_TOKEN: ${ARCHE_INTERNAL_TOKEN}
ARCHE_GATEWAY_TOKEN_SECRET: ${ARCHE_GATEWAY_TOKEN_SECRET}
ARCHE_CONNECTOR_OAUTH_STATE_SECRET: ${ARCHE_CONNECTOR_OAUTH_STATE_SECRET}
ARCHE_GATEWAY_TOKEN_TTL_SECONDS: "86400"
ARCHE_GATEWAY_BASE_URL: http://web:3000
ARCHE_PUBLIC_BASE_URL: https://${ARCHE_DOMAIN}
ARCHE_SESSION_TTL_DAYS: "7"
ARCHE_COOKIE_SECURE: "true"
ARCHE_SEED_ADMIN_EMAIL: ${ARCHE_SEED_ADMIN_EMAIL}
ARCHE_SEED_ADMIN_PASSWORD: ${ARCHE_SEED_ADMIN_PASSWORD}
ARCHE_SEED_ADMIN_SLUG: ${ARCHE_SEED_ADMIN_SLUG:-admin}
CONTAINER_PROXY_HOST: docker-socket-proxy
CONTAINER_PROXY_PORT: "2375"
OPENCODE_IMAGE: ${ARCHE_WORKSPACE_IMAGE:-ghcr.io/peaberry-studio/arche/workspace:latest}
OPENCODE_NETWORK: ${OPENCODE_NETWORK}
KB_CONTENT_HOST_PATH: /opt/arche/kb-content
KB_CONFIG_HOST_PATH: /opt/arche/kb-config
ARCHE_USERS_PATH: /opt/arche/users
expose:
- "3000"
volumes:
- /opt/arche/kb-content:/kb-content
- /opt/arche/kb-config:/kb-config
- /opt/arche/users:/opt/arche/users
postgres:
image: postgres:16
restart: unless-stopped
environment:
POSTGRES_DB: arche
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
docker-socket-proxy:
image: ghcr.io/tecnativa/docker-socket-proxy:master
restart: unless-stopped
environment:
CONTAINERS: 1
NETWORKS: 1
IMAGES: 1
INFO: 1
POST: 1
VOLUMES: 1
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
postgres_data:
+19
View File
@@ -0,0 +1,19 @@
{
"id": "arche",
"name": "Arche",
"version": "latest",
"description": "Arche is a self-hosted AI workspace platform that spawns per-user OpenCode coding containers backed by a shared Knowledge Base. Requires the `arche-internal` external Docker network and `/opt/arche/{kb-content,kb-config,users}` directories on the host before deploy. Images are linux/amd64 by default; override `ARCHE_WEB_IMAGE` and `ARCHE_WORKSPACE_IMAGE` to the `-arm64` tag variants for ARM64 hosts.",
"logo": "arche.svg",
"links": {
"github": "https://github.com/peaberry-studio/arche",
"website": "https://github.com/peaberry-studio/arche",
"docs": "https://github.com/peaberry-studio/arche#readme"
},
"tags": [
"ai",
"coding",
"workspace",
"self-hosted",
"llm"
]
}
+33
View File
@@ -0,0 +1,33 @@
[variables]
main_domain = "${domain}"
postgres_password = "${password:32}"
session_pepper = "${base64:32}"
encryption_key = "${base64:32}"
internal_token = "${base64:32}"
gateway_token_secret = "${base64:32}"
connector_oauth_state_secret = "${base64:32}"
seed_admin_email = "${email}"
seed_admin_password = "${password:16}"
[config]
env = [
"ARCHE_DOMAIN=${main_domain}",
"POSTGRES_PASSWORD=${postgres_password}",
"ARCHE_SESSION_PEPPER=${session_pepper}",
"ARCHE_ENCRYPTION_KEY=${encryption_key}",
"ARCHE_INTERNAL_TOKEN=${internal_token}",
"ARCHE_GATEWAY_TOKEN_SECRET=${gateway_token_secret}",
"ARCHE_CONNECTOR_OAUTH_STATE_SECRET=${connector_oauth_state_secret}",
"ARCHE_SEED_ADMIN_EMAIL=${seed_admin_email}",
"ARCHE_SEED_ADMIN_PASSWORD=${seed_admin_password}",
"ARCHE_SEED_ADMIN_SLUG=admin",
"ARCHE_WEB_IMAGE=ghcr.io/peaberry-studio/arche/web:latest",
"ARCHE_WORKSPACE_IMAGE=ghcr.io/peaberry-studio/arche/workspace:latest",
"OPENCODE_NETWORK=",
]
mounts = []
[[config.domains]]
serviceName = "web"
port = 3000
host = "${main_domain}"
+5
View File
@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
<rect width="128" height="128" rx="28" fill="#101828"/>
<circle cx="64" cy="64" r="34" fill="#38bdf8" opacity="0.92"/>
<text x="64" y="74" text-anchor="middle" font-family="Arial, sans-serif" font-size="30" font-weight="700" fill="#ffffff">A</text>
</svg>

After

Width:  |  Height:  |  Size: 325 B

Some files were not shown because too many files have changed in this diff Show More