Compare commits

..
Author SHA1 Message Date
Mauricio SiuandClaude Fable 5 17a53fa567 fix(supabase): upgrade database to Postgres 17
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:09:28 -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
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 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 decfac62c9 Merge pull request #980 from Dokploy/canary
New 85 Templates
2026-07-08 11:04:02 -06:00
462 changed files with 6868 additions and 1443 deletions
+163
View File
@@ -0,0 +1,163 @@
name: Audit All Blueprints
# The per-PR validators only look at blueprints a PR touches, which is the right
# call for CI cost but means a template is checked when it lands and then never
# again. When a rule is added or tightened, every existing blueprint that breaks
# it stays broken with nothing surfacing it (see #1047).
#
# This job runs the same validators over ALL blueprints on a schedule, so drift
# is reported instead of accumulating. It never runs on pull_request, so it
# cannot block a contributor for a pre-existing problem they did not introduce.
on:
schedule:
# Mondays, 04:00 UTC
- cron: "0 4 * * 1"
workflow_dispatch:
inputs:
fail_on_findings:
description: "Exit non-zero when findings exist (default: report only)"
type: boolean
default: false
permissions:
contents: read
jobs:
audit:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20.16.0
- name: Set up pnpm
uses: pnpm/action-setup@v4
with:
version: 8
- name: Install dependencies
run: cd build-scripts && pnpm install
- name: Validate per-template metadata
run: node build-scripts/generate-meta.js --check
- name: Audit every blueprint
id: audit
run: |
# $RUNNER_TEMP is per-job; also cleared explicitly so a re-run or a
# partially-executed earlier step can never leak into the summary.
WORK="${RUNNER_TEMP:-/tmp}"
OUT="$WORK/validator-out.txt"
REPORT="$WORK/audit-report.md"
SUMMARY="$WORK/audit-summary.md"
rm -f "$OUT" "$REPORT" "$SUMMARY"
COMPOSE_FAILED=""
TOML_FAILED=""
for dir in blueprints/*/; do
id="$(basename "$dir")"
# Run unconditionally: a blueprint with no docker-compose.yml or no
# template.toml is itself a finding, and the validators already
# report a missing file clearly. Skipping them would hide exactly
# the blueprints most likely to be broken.
if ! (cd build-scripts && pnpm exec tsx validate-docker-compose.ts \
--file "../$dir/docker-compose.yml") > "$OUT" 2>&1; then
COMPOSE_FAILED="$COMPOSE_FAILED $id"
{
echo "### \`$id\` — docker-compose.yml"
echo '```'
grep '❌' "$OUT" || cat "$OUT"
echo '```'
} >> "$REPORT"
fi
if ! (cd build-scripts && pnpm exec tsx validate-template.ts \
--dir "../$dir") > "$OUT" 2>&1; then
TOML_FAILED="$TOML_FAILED $id"
{
echo "### \`$id\` — template.toml"
echo '```'
grep '❌' "$OUT" || cat "$OUT"
echo '```'
} >> "$REPORT"
fi
done
COMPOSE_COUNT=$(echo $COMPOSE_FAILED | wc -w | tr -d ' ')
TOML_COUNT=$(echo $TOML_FAILED | wc -w | tr -d ' ')
TOTAL=$(ls -d blueprints/*/ | wc -l | tr -d ' ')
{
echo "## Blueprint audit"
echo ""
echo "| check | failing | of |"
echo "| --- | --- | --- |"
echo "| \`validate-docker-compose.ts\` | $COMPOSE_COUNT | $TOTAL |"
echo "| \`validate-template.ts\` | $TOML_COUNT | $TOTAL |"
echo ""
} > "$SUMMARY"
if [ -f "$REPORT" ]; then
cat "$REPORT" >> "$SUMMARY"
else
echo "No findings." >> "$SUMMARY"
fi
# The step summary caps at ~1MB and truncates silently past it, which
# would hide findings exactly as the backlog grows. Bound what we
# append and point at the artifact for the rest.
SUMMARY_LIMIT=$((512 * 1024))
SUMMARY_BYTES=$(wc -c < "$SUMMARY" | tr -d ' ')
if [ "$SUMMARY_BYTES" -gt "$SUMMARY_LIMIT" ]; then
# Emit the header table only, never a byte-sliced prefix: cutting
# mid-``` leaves an unclosed code fence, which swallows the notice
# below it and makes the truncation invisible in the rendered summary.
{
head -n 7 "$SUMMARY"
echo ""
echo "_Report omitted: $SUMMARY_BYTES bytes exceeds the $SUMMARY_LIMIT byte budget for a job summary._"
echo "_Download the \`blueprint-audit\` artifact for the complete output._"
} >> "$GITHUB_STEP_SUMMARY"
else
cat "$SUMMARY" >> "$GITHUB_STEP_SUMMARY"
fi
# Always published, so the full report survives regardless of size.
cp "$SUMMARY" "$WORK/blueprint-audit.md"
echo "report_path=$WORK/blueprint-audit.md" >> "$GITHUB_OUTPUT"
echo "compose_failed=$COMPOSE_COUNT" >> "$GITHUB_OUTPUT"
echo "toml_failed=$TOML_COUNT" >> "$GITHUB_OUTPUT"
if [ "$COMPOSE_COUNT" != "0" ] || [ "$TOML_COUNT" != "0" ]; then
echo "::warning::$COMPOSE_COUNT compose and $TOML_COUNT template.toml findings across $TOTAL blueprints"
fi
- name: Upload the full report
if: always() && steps.audit.outputs.report_path != ''
uses: actions/upload-artifact@v4
with:
name: blueprint-audit
path: ${{ steps.audit.outputs.report_path }}
retention-days: 30
- name: Fail if requested
# `inputs` is only populated for workflow_dispatch; on a schedule run it
# is not available, so gate on the event first and read the value through
# github.event.inputs, which is an empty string when absent.
if: >-
github.event_name == 'workflow_dispatch' &&
github.event.inputs.fail_on_findings == 'true' &&
(steps.audit.outputs.compose_failed != '0' || steps.audit.outputs.toml_failed != '0')
run: |
echo "❌ Findings present and fail_on_findings was requested."
exit 1
+1 -1
View File
@@ -183,7 +183,7 @@ services:
- 3000:3000
# Instead use this way:
ports:
expose:
- 3000
```
+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;
Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

+32
View File
@@ -0,0 +1,32 @@
version: "3.8"
services:
9router:
image: decolua/9router:0.5.40
restart: unless-stopped
environment:
DATA_DIR: /app/data
PORT: "20128"
HOSTNAME: "0.0.0.0"
NODE_ENV: production
JWT_SECRET: ${JWT_SECRET}
INITIAL_PASSWORD: ${INITIAL_PASSWORD}
API_KEY_SECRET: ${API_KEY_SECRET}
MACHINE_ID_SALT: ${MACHINE_ID_SALT}
BASE_URL: http://${ROUTER_HOST}
NEXT_PUBLIC_BASE_URL: http://${ROUTER_HOST}
HEADROOM_URL: http://headroom:8787
AUTH_COOKIE_SECURE: "false"
volumes:
- 9router-data:/app/data
depends_on:
- headroom
# Optional token-reduction proxy that 9Router calls through HEADROOM_URL.
# Shipped as a sidecar because the 9Router image does not bundle it.
headroom:
image: ghcr.io/chopratejas/headroom:0.6.7
restart: unless-stopped
volumes:
9router-data:
+17
View File
@@ -0,0 +1,17 @@
{
"id": "9router",
"name": "9Router",
"version": "0.5.40",
"description": "Self-hosted AI model router that rotates requests across 40+ providers with automatic fallback, exposing an OpenAI-compatible endpoint for coding agents.",
"logo": "9router.png",
"links": {
"github": "https://github.com/decolua/9router",
"website": "https://9router.com",
"docs": "https://github.com/decolua/9router/blob/master/DOCKER.md"
},
"tags": [
"ai",
"proxy",
"developer-tools"
]
}
+21
View File
@@ -0,0 +1,21 @@
[variables]
main_domain = "${domain}"
jwt_secret = "${password:64}"
initial_password = "${password:32}"
api_key_secret = "${password:64}"
machine_id_salt = "${password:32}"
[config]
env = [
"ROUTER_HOST=${main_domain}",
"JWT_SECRET=${jwt_secret}",
"INITIAL_PASSWORD=${initial_password}",
"API_KEY_SECRET=${api_key_secret}",
"MACHINE_ID_SALT=${machine_id_salt}",
]
mounts = []
[[config.domains]]
serviceName = "9router"
port = 20128
host = "${main_domain}"
+1 -1
View File
@@ -3,7 +3,7 @@ version: "3"
services:
ackee:
image: electerious/ackee:3.4.2
ports:
expose:
- "3000"
environment:
- ACKEE_USERNAME=${ACKEE_USERNAME}
-4
View File
@@ -1,4 +0,0 @@
## Instructions
We don't have nothing to show here....
+1 -1
View File
@@ -61,4 +61,4 @@ services:
volumes:
postgres_data:
redis_data:
redis_data:
+1 -1
View File
@@ -17,4 +17,4 @@ services:
volumes:
adguardhome-work: {}
adguardhome-conf: {}
adguardhome-conf: {}
+2 -2
View File
@@ -3,5 +3,5 @@ services:
adminer:
image: adminer:4.8.1
restart: unless-stopped
ports:
- 8080
expose:
- 8080
+29 -10
View File
@@ -1,9 +1,9 @@
version: "3.8"
services:
affinepro:
image: ghcr.io/toeverything/affine-graphql:stable-780dd83
image: ghcr.io/toeverything/affine:stable
restart: unless-stopped
ports:
expose:
- 3010
volumes:
- affine-storage:/root/.affine/storage
@@ -12,6 +12,7 @@ services:
- REDIS_SERVER_HOST=redis
- REDIS_SERVER_PASSWORD=${REDIS_PASSWORD}
- DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@db:5432/affinepro
- AFFINE_INDEXER_ENABLED=false
- AFFINE_SERVER_HOST=${DOMAIN}
- MAILER_HOST=${MAILER_HOST}
- MAILER_PORT=${MAILER_PORT}
@@ -19,16 +20,21 @@ services:
- MAILER_PASSWORD=${MAILER_PASSWORD}
- MAILER_SENDER=${MAILER_SENDER}
depends_on:
- db
- redis
db:
condition: service_healthy
redis:
condition: service_healthy
migration:
condition: service_completed_successfully
migration:
image: ghcr.io/toeverything/affine-graphql:stable-780dd83
command: node ./scripts/self-host-predeploy.js
image: ghcr.io/toeverything/affine:stable
command: ["sh", "-c", "node ./scripts/self-host-predeploy.js"]
environment:
- REDIS_SERVER_HOST=redis
- REDIS_SERVER_PASSWORD=${REDIS_PASSWORD}
- DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@db:5432/affinepro
- AFFINE_INDEXER_ENABLED=false
- AFFINE_SERVER_HOST=${DOMAIN}
- MAILER_HOST=${MAILER_HOST}
- MAILER_PORT=${MAILER_PORT}
@@ -39,17 +45,25 @@ services:
- affine-storage:/root/.affine/storage
- affine-config:/root/.affine/config
depends_on:
- db
- redis
db:
condition: service_healthy
redis:
condition: service_healthy
db:
image: postgres:15-alpine
image: pgvector/pgvector:pg16
restart: unless-stopped
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=affinepro
- POSTGRES_INITDB_ARGS=--data-checksums
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres", "-d", "affinepro"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
@@ -57,9 +71,14 @@ services:
command: redis-server --requirepass ${REDIS_PASSWORD}
volumes:
- redis-data:/data
healthcheck:
test: ["CMD-SHELL", "redis-cli -a '${REDIS_PASSWORD}' ping | grep PONG"]
interval: 10s
timeout: 5s
retries: 5
volumes:
affine-storage: {}
affine-config: {}
postgres-data: {}
redis-data: {}
redis-data: {}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "affinepro",
"name": "Affine Pro",
"version": "stable-780dd83",
"version": "stable",
"description": "Affine Pro is a modern, self-hosted platform designed for collaborative content creation and project management. It offers an intuitive interface, seamless real-time collaboration, and powerful tools for organizing tasks, notes, and ideas.",
"logo": "logo.png",
"links": {
+1 -1
View File
@@ -11,4 +11,4 @@ services:
volumes:
- agent-zero-data:/a0/usr
volumes:
agent-zero-data:
agent-zero-data:
+2 -3
View File
@@ -11,12 +11,11 @@ services:
- agentdvr-config:/AgentDVR/Media/XML/
- agentdvr-media:/AgentDVR/Media/WebServerRoot/Media/
- agentdvr-commands:/AgentDVR/Commands/
ports:
expose:
- 8090
- 3478/udp
- 50000-50100/udp
volumes:
agentdvr-config: {}
agentdvr-media: {}
agentdvr-commands: {}
agentdvr-commands: {}
+1 -1
View File
@@ -11,4 +11,4 @@ services:
restart: unless-stopped
volumes:
alist-data:
alist-data:
+2 -2
View File
@@ -3,10 +3,10 @@ services:
alltube:
image: dnomd343/alltube:latest
restart: unless-stopped
ports:
expose:
- 80
environment:
- TITLE=${TITLE}
- CONVERT=${CONVERT}
- STREAM=${STREAM}
- REMUX=${REMUX}
- REMUX=${REMUX}
+2 -2
View File
@@ -3,7 +3,7 @@ services:
ampache:
image: ampache/ampache:latest
restart: unless-stopped
ports:
expose:
- 80
volumes:
- config:/var/www/config
@@ -14,4 +14,4 @@ services:
volumes:
config: {}
log: {}
mysql: {}
mysql: {}
+2 -2
View File
@@ -3,7 +3,7 @@ services:
anonupload:
image: ghcr.io/supernova3339/anonfiles:1
restart: unless-stopped
ports:
expose:
- 80
environment:
- ADMIN_EMAIL=${ADMIN_EMAIL}
@@ -13,4 +13,4 @@ services:
- uploads:/var/www/html/uploads
volumes:
uploads: {}
uploads: {}
+1 -1
View File
@@ -1,7 +1,7 @@
services:
answer:
image: apache/answer:1.4.1
ports:
expose:
- '80'
restart: on-failure
volumes:
+1 -1
View File
@@ -10,7 +10,7 @@
"docs": "https://answer.apache.org/docs"
},
"tags": [
"q&a",
"q-and-a",
"self-hosted"
]
}
+1 -1
View File
@@ -3,7 +3,7 @@ services:
anubis:
image: ghcr.io/techarohq/anubis:latest
restart: unless-stopped
ports:
expose:
- "8923" # Anubis default port
environment:
# Required: Point to your frontend service locally
+2 -2
View File
@@ -3,7 +3,7 @@ services:
anythingllm:
image: mintplexlabs/anythingllm:latest
restart: unless-stopped
ports:
expose:
- 3001
environment:
- STORAGE_DIR=/app/server/storage
@@ -13,4 +13,4 @@ services:
- SYS_ADMIN
volumes:
storage: {}
storage: {}
+2 -2
View File
@@ -3,7 +3,7 @@ services:
apprise-api:
image: linuxserver/apprise-api:latest
restart: unless-stopped
ports:
expose:
- 8000
environment:
- PUID=1000
@@ -13,4 +13,4 @@ services:
- config:/config
volumes:
config: {}
config: {}
+1 -1
View File
@@ -7,4 +7,4 @@ services:
restart: unless-stopped
volumes:
appsmith-data:
appsmith-data:
+2 -2
View File
@@ -3,7 +3,7 @@ services:
arangodb:
image: arangodb:3.12.4
restart: unless-stopped
ports:
expose:
- 8529
environment:
- ARANGO_ROOT_PASSWORD=${ARANGO_PASSWORD}
@@ -11,4 +11,4 @@ services:
- data:/var/lib/arangodb3
volumes:
data: {}
data: {}
+1 -2
View File
@@ -9,8 +9,7 @@ services:
PUBLIC_SNAPSHOTS: ${PUBLIC_SNAPSHOTS}
volumes:
- archivebox_data:/data
ports:
expose:
- "8000"
volumes:
archivebox_data:
+2 -2
View File
@@ -3,7 +3,7 @@ services:
argilla-web:
image: argilla/argilla-server:latest
restart: unless-stopped
ports:
expose:
- 6900
environment:
- ARGILLA_HOME_PATH=/var/lib/argilla
@@ -74,4 +74,4 @@ volumes:
argilladata: {}
elasticdata: {}
dbdata: {}
redisdata: {}
redisdata: {}
+2 -2
View File
@@ -3,7 +3,7 @@ services:
audiobookshelf:
image: ghcr.io/advplyr/audiobookshelf:2.19.4
restart: unless-stopped
ports:
expose:
- 80
environment:
- TZ=UTC
@@ -14,4 +14,4 @@ services:
volumes:
config: {}
metadata: {}
metadata: {}
+2 -3
View File
@@ -16,9 +16,8 @@ services:
condition: service_healthy
postgres:
condition: service_healthy
ports:
expose:
- 9091
redis:
image: redis:7-alpine
restart: unless-stopped
@@ -52,4 +51,4 @@ services:
volumes:
authelia_config:
redis_data:
postgres_data:
postgres_data:
+2 -2
View File
@@ -3,7 +3,7 @@ services:
authorizer:
image: lakhansamani/authorizer:1.4.4
restart: unless-stopped
ports:
expose:
- 8080
environment:
- DATABASE_TYPE=postgres
@@ -37,4 +37,4 @@ services:
volumes:
db_data: {}
redis_data: {}
redis_data: {}
+1 -1
View File
@@ -2,7 +2,7 @@ services:
autobase-console:
image: autobase/console:2.7.2
restart: unless-stopped
ports:
expose:
- "80"
- "8080"
environment:
+15 -14
View File
@@ -1,17 +1,15 @@
version: "3.8"
services:
automatisch:
image: dockeriddonuts/automatisch:2.0
image: automatischio/automatisch:0.15.0
restart: unless-stopped
ports:
- 3000
environment:
- HOST=${DOMAIN}
- PROTOCOL=http
- PORT=3000
- API_URL=http://${DOMAIN}
- WEB_APP_URL=http://${DOMAIN}
- APP_ENV=production
- REDIS_HOST=automatisch-redis
- REDIS_USERNAME=default
- REDIS_PASSWORD=${REDIS_PASSWORD}
- POSTGRES_HOST=automatisch-postgres
- POSTGRES_DATABASE=automatisch
@@ -23,11 +21,13 @@ services:
volumes:
- storage:/automatisch/storage
depends_on:
- automatisch-postgres
- automatisch-redis
automatisch-postgres:
condition: service_healthy
automatisch-redis:
condition: service_started
automatisch-worker:
image: dockeriddonuts/automatisch:2.0
image: automatischio/automatisch:0.15.0
restart: unless-stopped
environment:
- APP_ENV=production
@@ -44,8 +44,7 @@ services:
volumes:
- storage:/automatisch/storage
depends_on:
- automatisch-postgres
- automatisch-redis
- automatisch
automatisch-postgres:
image: postgres:15-alpine
@@ -56,18 +55,20 @@ services:
- POSTGRES_DB=automatisch
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d automatisch"]
interval: 10s
timeout: 5s
retries: 5
automatisch-redis:
image: redis:7-alpine
restart: unless-stopped
command: redis-server --requirepass ${REDIS_PASSWORD}
environment:
- REDIS_USERNAME=default
- REDIS_PASSWORD=${REDIS_PASSWORD}
volumes:
- redis_data:/data
volumes:
storage: {}
postgres_data: {}
redis_data: {}
redis_data: {}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "automatisch",
"name": "Automatisch",
"version": "2.0",
"version": "0.15.0",
"description": "Automatisch is a powerful, self-hosted workflow automation tool designed for connecting your apps and automating repetitive tasks. With Automatisch, you can create workflows to sync data, send notifications, and perform various actions seamlessly across different services.",
"logo": "logo.png",
"links": {
+1
View File
@@ -13,6 +13,7 @@ port = 3000
host = "${main_domain}"
[config.env]
DOMAIN = "${main_domain}"
DB_PASSWORD = "${db_password}"
REDIS_PASSWORD = "${redis_password}"
ENCRYPTION_KEY = "${encryption_key}"
+2 -2
View File
@@ -2,7 +2,7 @@ services:
azuracast:
image: ghcr.io/azuracast/azuracast:latest
restart: unless-stopped
ports:
expose:
- 80
volumes:
- azuracast-station-data:/var/azuracast/stations
@@ -36,4 +36,4 @@ volumes:
azuracast-data: {}
azuracast-uploads: {}
azuracast-backups: {}
mariadb-data: {}
mariadb-data: {}
+2 -2
View File
@@ -3,7 +3,7 @@ services:
babybuddy:
image: linuxserver/babybuddy:2.7.0
restart: unless-stopped
ports:
expose:
- 8000
environment:
- PUID=1000
@@ -16,4 +16,4 @@ services:
- config:/config
volumes:
config: {}
config: {}
+1 -1
View File
@@ -2,7 +2,7 @@ services:
backrest:
image: garethgeorge/backrest:v1.7.3
restart: unless-stopped
ports:
expose:
- 9898
environment:
- BACKREST_PORT=9898
+2 -2
View File
@@ -3,7 +3,7 @@ services:
baikal:
image: ckulka/baikal:nginx-php8.2
restart: unless-stopped
ports:
expose:
- 80
environment:
- TZ=UTC
@@ -13,4 +13,4 @@ services:
volumes:
config: {}
data: {}
data: {}
+2 -2
View File
@@ -3,11 +3,11 @@ services:
barrage:
image: maulik9898/barrage:0.3.0
restart: unless-stopped
ports:
expose:
- 3000
environment:
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
- NEXTAUTH_URL=http://${DOMAIN}
- DELUGE_URL=${DELUGE_URL}
- DELUGE_PASSWORD=${DELUGE_PASSWORD}
- BARRAGE_PASSWORD=${BARRAGE_PASSWORD}
- BARRAGE_PASSWORD=${BARRAGE_PASSWORD}
+2 -2
View File
@@ -3,7 +3,7 @@ services:
bazarr:
image: lscr.io/linuxserver/bazarr:1.5.1
restart: unless-stopped
ports:
expose:
- 6767
environment:
- PUID=1000
@@ -15,4 +15,4 @@ services:
- ${TV_PATH}:/tv
volumes:
config: {}
config: {}
+2 -2
View File
@@ -3,11 +3,11 @@ services:
beszel:
image: henrygd/beszel:0.10.2
restart: unless-stopped
ports:
expose:
- 8090
volumes:
- beszel_data:/beszel_data
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
beszel_data: {}
beszel_data: {}
+6 -12
View File
@@ -4,10 +4,8 @@ services:
restart: unless-stopped
depends_on:
- server
ports:
expose:
- '80'
server:
image: bigcapitalhq/server:latest
restart: unless-stopped
@@ -18,9 +16,8 @@ services:
condition: service_started
redis:
condition: service_started
ports:
expose:
- '3000'
environment:
# Mail
- MAIL_HOST=${MAIL_HOST}
@@ -97,9 +94,8 @@ services:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
volumes:
- mysql:/var/lib/mysql
ports:
expose:
- '3306'
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost -u root -p$$MYSQL_ROOT_PASSWORD || exit 1"]
interval: 10s
@@ -110,7 +106,7 @@ services:
mongo:
image: mongo:7
restart: unless-stopped
ports:
expose:
- '27017'
volumes:
- mongo:/data/db
@@ -119,7 +115,7 @@ services:
redis:
image: redis:7-alpine
restart: unless-stopped
ports:
expose:
- '6379'
volumes:
- redis:/data
@@ -133,10 +129,8 @@ services:
gotenberg:
image: gotenberg/gotenberg:7
restart: unless-stopped
ports:
expose:
- '9000'
volumes:
mysql:
name: bigcapital_mysql
+12
View File
@@ -28,6 +28,9 @@ services:
- AUTORUN_LARAVEL_STORAGE_LINK=true
volumes:
- billmora-storage:/var/www/html/storage
- billmora-plugins:/var/www/html/plugin
- billmora-themes-resources:/var/www/html/resources/themes
- billmora-themes-public:/var/www/html/public/themes
depends_on:
billmora-db:
condition: service_healthy
@@ -58,6 +61,9 @@ services:
- AUTORUN_ENABLED=false
volumes:
- billmora-storage:/var/www/html/storage
- billmora-plugins:/var/www/html/plugin
- billmora-themes-resources:/var/www/html/resources/themes
- billmora-themes-public:/var/www/html/public/themes
depends_on:
billmora-db:
condition: service_healthy
@@ -88,6 +94,9 @@ services:
- AUTORUN_ENABLED=false
volumes:
- billmora-storage:/var/www/html/storage
- billmora-plugins:/var/www/html/plugin
- billmora-themes-resources:/var/www/html/resources/themes
- billmora-themes-public:/var/www/html/public/themes
depends_on:
billmora-db:
condition: service_healthy
@@ -126,5 +135,8 @@ services:
volumes:
billmora-storage:
billmora-plugins:
billmora-themes-resources:
billmora-themes-public:
billmora-db-data:
billmora-redis-data:
+1 -1
View File
@@ -19,7 +19,7 @@ services:
- PGID=1000
- TZ=Etc/UTC
- SUBFOLDER=/ #optional
ports:
expose:
- 3000
- 3001
restart: unless-stopped
+1 -2
View File
@@ -16,9 +16,8 @@ services:
options:
max-size: "10m"
max-file: "3"
ports:
expose:
- 1111
blinko-postgres:
image: postgres:14
restart: always
+1 -1
View File
@@ -45,4 +45,4 @@ services:
timeout: 10s
retries: 10
volumes:
pds-data:
pds-data:
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 72 KiB

+84
View File
@@ -0,0 +1,84 @@
version: "3.8"
services:
bonfire:
image: bonfirenetworks/bonfire:1.0.5-social-amd64
restart: unless-stopped
depends_on:
db:
condition: service_healthy
search:
condition: service_started
environment:
# Instance
- HOSTNAME=${BONFIRE_HOSTNAME}
- PUBLIC_PORT=${PUBLIC_PORT:-80}
- SERVER_PORT=4000
- APP_NAME=${APP_NAME:-Bonfire}
- LANG=en_US.UTF-8
# Secrets
- SECRET_KEY_BASE=${SECRET_KEY_BASE}
- SIGNING_SALT=${SIGNING_SALT}
- ENCRYPTION_SALT=${ENCRYPTION_SALT}
- RELEASE_COOKIE=${RELEASE_COOKIE}
# Database (migrations run automatically on startup)
- POSTGRES_HOST=db
- POSTGRES_USER=postgres
- POSTGRES_DB=bonfire_db
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
# Must stay false for the initial migrations; can be set to true
# after the first deployment to speed up future upgrades
- DB_MIGRATE_INDEXES_CONCURRENTLY=${DB_MIGRATE_INDEXES_CONCURRENTLY:-false}
# Search (Meilisearch)
- SEARCH_ADAPTER=meili
- SEARCH_MEILI_INSTANCE=http://search:7700
- MEILI_MASTER_KEY=${MEILI_MASTER_KEY}
# Email (the first account to sign up becomes admin and needs no
# confirmation email; configure a mail backend for further signups)
- MAIL_BACKEND=${MAIL_BACKEND:-none}
- MAIL_SERVER=${MAIL_SERVER:-}
- MAIL_PORT=${MAIL_PORT:-}
- MAIL_USER=${MAIL_USER:-}
- MAIL_PASSWORD=${MAIL_PASSWORD:-}
- MAIL_DOMAIN=${MAIL_DOMAIN:-}
- MAIL_FROM=${MAIL_FROM:-}
- MAIL_KEY=${MAIL_KEY:-}
# Max upload size in megabytes
- UPLOAD_LIMIT=${UPLOAD_LIMIT:-20}
volumes:
- bonfire-uploads:/opt/app/data/uploads
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:4000"]
interval: 30s
timeout: 10s
retries: 15
start_period: 120s
db:
image: postgis/postgis:17-3.5-alpine
restart: unless-stopped
environment:
- POSTGRES_USER=postgres
- POSTGRES_DB=bonfire_db
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d bonfire_db"]
interval: 10s
timeout: 5s
retries: 10
search:
image: getmeili/meilisearch:v1.11
restart: unless-stopped
environment:
- MEILI_MASTER_KEY=${MEILI_MASTER_KEY}
- MEILI_ENV=production
- MEILI_NO_ANALYTICS=true
volumes:
- search-data:/meili_data
volumes:
bonfire-uploads:
db-data:
search-data:
+17
View File
@@ -0,0 +1,17 @@
{
"id": "bonfire",
"name": "Bonfire",
"version": "1.0.5",
"description": "Federated social networking toolkit for communities: customizable digital spaces with ActivityPub federation, flexible boundaries and moderation tools.",
"logo": "bonfire.svg",
"links": {
"github": "https://github.com/bonfire-networks/bonfire-app",
"website": "https://bonfirenetworks.org",
"docs": "https://docs.bonfirenetworks.org"
},
"tags": [
"social",
"fediverse",
"activitypub"
]
}
+55
View File
@@ -0,0 +1,55 @@
[variables]
main_domain = "${domain}"
secret_key_base = "${password:64}"
signing_salt = "${password:32}"
encryption_salt = "${password:32}"
release_cookie = "${password:32}"
postgres_password = "${password:32}"
meili_master_key = "${password:32}"
[config]
[[config.domains]]
serviceName = "bonfire"
port = 4000
host = "${main_domain}"
[config.env]
# Domain of your Bonfire instance (must match the domain above)
"BONFIRE_HOSTNAME" = "${main_domain}"
# Port used to build public URLs: keep 80 while the domain is plain HTTP,
# and change to 443 once you enable HTTPS on the domain
# (HTTPS is required for federation with other fediverse instances)
"PUBLIC_PORT" = "80"
# Display name of your instance
"APP_NAME" = "Bonfire"
# Max upload size in megabytes
"UPLOAD_LIMIT" = "20"
# Secrets (auto-generated)
"SECRET_KEY_BASE" = "${secret_key_base}"
"SIGNING_SALT" = "${signing_salt}"
"ENCRYPTION_SALT" = "${encryption_salt}"
"RELEASE_COOKIE" = "${release_cookie}"
"POSTGRES_PASSWORD" = "${postgres_password}"
"MEILI_MASTER_KEY" = "${meili_master_key}"
# Optional: set to true only AFTER the first deployment finished its initial
# database migrations (speeds up index creation during future upgrades)
# "DB_MIGRATE_INDEXES_CONCURRENTLY" = "true"
# --- Email ---
# The first account to sign up becomes the instance admin and does not need
# a confirmation email. Further signups are invite-only by default (the admin
# can create invite links or open up signups in the instance settings), and
# require a working mail backend to confirm their email address.
# Supported backends include smtp, mailgun, brevo, postmark, ses and more:
# https://docs.bonfirenetworks.org/deploy.html
# "MAIL_BACKEND" = "smtp"
# "MAIL_SERVER" = "smtp.example.com"
# "MAIL_PORT" = "587"
# "MAIL_USER" = "postmaster@example.com"
# "MAIL_PASSWORD" = ""
# "MAIL_DOMAIN" = "example.com"
# "MAIL_FROM" = "bonfire@example.com"
# For API-based backends (e.g. mailgun) set the API key instead:
# "MAIL_KEY" = ""
+1 -1
View File
@@ -8,7 +8,7 @@ services:
depends_on:
mariadb:
condition: service_healthy
ports:
expose:
- 6060
volumes:
- booklore-data:/app/data
+2 -2
View File
@@ -3,7 +3,7 @@ services:
bookstack:
image: lscr.io/linuxserver/bookstack:24.12.1
restart: unless-stopped
ports:
expose:
- 80
environment:
- PUID=1000
@@ -32,4 +32,4 @@ services:
volumes:
config: {}
db_data: {}
db_data: {}
+2 -2
View File
@@ -3,7 +3,7 @@ services:
botpress:
image: botpress/server:12.31.9
restart: unless-stopped
ports:
expose:
- 81
environment:
- BP_HOST=0.0.0.0
@@ -31,4 +31,4 @@ services:
volumes:
data: {}
db_data: {}
db_data: {}
+1 -1
View File
@@ -22,7 +22,7 @@ services:
environment:
VITE_API_URL: http://budget-board-server
PORT: 6253
ports:
expose:
- 6253
depends_on:
- budget-board-server
+2 -2
View File
@@ -3,7 +3,7 @@ services:
bytebase:
image: bytebase/bytebase:3.3.0
restart: unless-stopped
ports:
expose:
- 8080
environment:
- PG_URL=postgres://postgres:${DB_PASSWORD}@bytebase-db:5432/bytebase
@@ -24,4 +24,4 @@ services:
volumes:
data: {}
db_data: {}
db_data: {}
+2 -2
View File
@@ -4,7 +4,7 @@ services:
bytestash:
image: ghcr.io/jordan-dalby/bytestash:1.5.6
restart: unless-stopped
ports:
expose:
- "5000"
environment:
- BASE_PATH=
@@ -24,4 +24,4 @@ services:
- snippets:/data/snippets
volumes:
snippets:
snippets:
+2 -2
View File
@@ -9,7 +9,7 @@ services:
- TZ=Etc/UTC
- PUID=1000
- PGID=1000
ports:
expose:
- 8080
volumes:
- books:/books
@@ -17,4 +17,4 @@ services:
volumes:
books:
data:
data:
+2 -2
View File
@@ -10,7 +10,7 @@
"docs": "https://manual.calibre-ebook.com/"
},
"tags": [
"Documents",
"E-Commerce"
"documents",
"e-commerce"
]
}
+2 -2
View File
@@ -7,10 +7,10 @@ services:
environment:
- CARBONE_EE_LICENSE=${CARBONE_KEY}
- CARBONE_EE_STUDIO=true
ports:
expose:
- 4000
volumes:
- template:/app/template
volumes:
template:
template:
+4 -4
View File
@@ -10,9 +10,9 @@
"docs": "https://carbone.io/documentation/design/overview/getting-started.html"
},
"tags": [
"Document Generation",
"Automation",
"Reporting",
"Productivity"
"document-generation",
"automation",
"reporting",
"productivity"
]
}
+1 -1
View File
@@ -30,4 +30,4 @@ services:
volumes:
casdoor-postgres-data:
casdoor-data:
casdoor-data:
+33
View File
@@ -0,0 +1,33 @@
version: "3.8"
services:
certmate:
image: fabriziosalmi/certmate:2.21.3
environment:
- FLASK_ENV=production
- SECRET_KEY=${SECRET_KEY} # 🔐 Flask session secret
- API_BEARER_TOKEN=${API_BEARER_TOKEN} # 🔐 API / web UI token
- BEHIND_PROXY=${BEHIND_PROXY}
- CLOUDFLARE_TOKEN=${CLOUDFLARE_TOKEN}
- LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
- LOG_LEVEL=${LOG_LEVEL}
expose:
- 8000
volumes:
- certmate_certificates:/app/certificates
- certmate_data:/app/data
- certmate_logs:/app/logs
- certmate_backups:/app/backups
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
volumes:
certmate_certificates:
certmate_data:
certmate_logs:
certmate_backups:
+13
View File
@@ -0,0 +1,13 @@
# CertMate
## Getting started
1. Deploy the template and open the app domain.
2. Log in with the **API bearer token**: it is auto-generated by the template and stored in the `API_BEARER_TOKEN` environment variable (Dokploy → your service → Environment). The same token authenticates REST API requests (`Authorization: Bearer <token>`).
3. In **Settings**, set your Let's Encrypt email and add credentials for your DNS provider (Cloudflare, Route53, etc.) to issue certificates through DNS-01 challenges.
## Notes
- `CLOUDFLARE_TOKEN` can optionally be set as an environment variable instead of configuring it in the UI.
- Certificates, application data and backups are persisted in the `certmate_certificates`, `certmate_data` and `certmate_backups` volumes.
- API documentation is available at `/docs/` (Swagger) and `/redoc/` on your domain.
Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

+18
View File
@@ -0,0 +1,18 @@
{
"id": "certmate",
"name": "CertMate",
"version": "2.21.3",
"description": "CertMate is an SSL certificate management system with a web UI and REST API. It automates issuing and renewing Let's Encrypt certificates via DNS-01 challenges across 20+ DNS providers, with unified backups and multi-account support.",
"logo": "logo.png",
"links": {
"github": "https://github.com/fabriziosalmi/certmate",
"website": "https://www.certmate.org/",
"docs": "https://www.certmate.org/docs/"
},
"tags": [
"ssl",
"certificates",
"security",
"self-hosted"
]
}
+20
View File
@@ -0,0 +1,20 @@
[variables]
main_domain = "${domain}"
SECRET_KEY = "${password:32}"
API_BEARER_TOKEN = "${password:32}"
[config]
mounts = []
[[config.domains]]
serviceName = "certmate"
port = 8000
host = "${main_domain}"
[config.env]
SECRET_KEY = "${SECRET_KEY}" # 🔐 Flask session secret
API_BEARER_TOKEN = "${API_BEARER_TOKEN}" # 🔐 API / web UI token
BEHIND_PROXY = "true"
CLOUDFLARE_TOKEN = ""
LETSENCRYPT_EMAIL = ""
LOG_LEVEL = "INFO"
@@ -4,10 +4,10 @@ services:
changedetection:
image: ghcr.io/dgtlmoon/changedetection.io:0.49
restart: unless-stopped
ports:
expose:
- 5000
volumes:
- datastore:/datastore
volumes:
datastore:
datastore:
+3 -3
View File
@@ -10,8 +10,8 @@
"docs": "https://github.com/dgtlmoon/changedetection.io/wiki"
},
"tags": [
"Monitoring",
"Data",
"Notifications"
"monitoring",
"data",
"notifications"
]
}
+1 -1
View File
@@ -2,7 +2,7 @@ version: "3.8"
services:
chatto:
image: ghcr.io/chattocorp/chatto:0.3.8
image: ghcr.io/chattocorp/chatto:0.4
restart: unless-stopped
expose:
- "4000"
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "chatto",
"name": "Chatto (single binary)",
"version": "0.3.8",
"version": "0.4.x",
"description": "A fully-featured real-time chat application for teams and communities. This template deploys the single Chatto binary with embedded NATS. Note: email/password registration requires SMTP to be configured after deployment; voice/video calls are not included in the single-binary setup.",
"logo": "logo.png",
"links": {
+1 -1
View File
@@ -76,4 +76,4 @@ services:
volumes:
chatwoot-storage:
chatwoot-postgres-data:
chatwoot-redis-data:
chatwoot-redis-data:
+1 -1
View File
@@ -3,7 +3,7 @@ services:
server:
image: ghcr.io/bluewave-labs/checkmate-backend-mono:latest
restart: always
ports:
expose:
- 52345
environment:
- UPTIME_APP_API_BASE_URL=${UPTIME_APP_API_BASE_URL}
+2 -2
View File
@@ -15,7 +15,7 @@ services:
- CHEVERETO_HTTPS=0
- CHEVERETO_MAX_POST_SIZE=2G
- CHEVERETO_MAX_UPLOAD_SIZE=2G
ports:
expose:
- 80
volumes:
- storage:/var/www/html/images/
@@ -35,4 +35,4 @@ services:
volumes:
storage:
mysql:
mysql:
+5 -5
View File
@@ -10,10 +10,10 @@
"docs": "https://v4-docs.chevereto.com/"
},
"tags": [
"Image Hosting",
"File Management",
"Open Source",
"Multi-User",
"Private Albums"
"image-hosting",
"file-management",
"open-source",
"multi-user",
"private-albums"
]
}
+1 -1
View File
@@ -10,7 +10,7 @@
"docs": "https://chibisafe.app/docs/intro"
},
"tags": [
"media system",
"media-system",
"storage",
"file-sharing"
]
@@ -8,7 +8,7 @@ services:
- SECRET_KEY=${SECRET_KEY}
- DATABASE_URL=postgres://postgres:${DB_PASSWORD}@db:5432/chiefonboarding
- ALLOWED_HOSTS=${DOMAIN}
ports:
expose:
- 8000
depends_on:
- db
@@ -23,4 +23,4 @@ services:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
postgres_data:
+5 -5
View File
@@ -10,10 +10,10 @@
"docs": "https://docs.chiefonboarding.com/"
},
"tags": [
"Employee Onboarding",
"HR Management",
"Task Tracking",
"Role-Based Access",
"Document Management"
"employee-onboarding",
"hr-management",
"task-tracking",
"role-based-access",
"document-management"
]
}
+5 -6
View File
@@ -5,7 +5,7 @@ services:
restart: unless-stopped
volumes:
- ../files/chirpstack:/etc/chirpstack
ports:
expose:
- 8080
environment:
- MQTT_BROKER_HOST=mosquitto
@@ -21,7 +21,7 @@ services:
restart: unless-stopped
volumes:
- ../files/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge
ports:
expose:
- 1700/udp
environment:
- INTEGRATION__MQTT__EVENT_TOPIC_TEMPLATE=eu868/gateway/{{ .GatewayID }}/event/{{ .EventType }}
@@ -36,7 +36,7 @@ services:
restart: unless-stopped
volumes:
- ../files/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge
ports:
expose:
- 3001
depends_on:
- mosquitto
@@ -45,7 +45,7 @@ services:
image: chirpstack/chirpstack-rest-api:4
restart: unless-stopped
command: --server chirpstack:8080 --bind 0.0.0.0:8090 --insecure
ports:
expose:
- 8090
depends_on:
- chirpstack
@@ -73,9 +73,8 @@ services:
restart: unless-stopped
volumes:
- ../files/mosquitto/config/:/mosquitto/config/
ports:
expose:
- 1883
volumes:
postgresqldata:
redisdata:
+2 -2
View File
@@ -3,7 +3,7 @@ version: "3"
services:
chromium:
image: lscr.io/linuxserver/chromium:5f5dd27e-ls102
ports:
expose:
- "3000"
environment:
- PUID=1000
@@ -13,4 +13,4 @@ services:
- config:/config
volumes:
config:
config:
+2 -2
View File
@@ -3,7 +3,7 @@ version: "3"
services:
classicpress:
image: classicpress/classicpress:php8.3-apache
ports:
expose:
- "80"
environment:
- WORDPRESS_DB_HOST=db
@@ -27,4 +27,4 @@ services:
volumes:
wordpress-data:
db-data:
db-data:
+2 -2
View File
@@ -3,7 +3,7 @@ version: "3"
services:
cloud9:
image: lscr.io/linuxserver/cloud9:1.29.2
ports:
expose:
- "8000"
environment:
- PUID=1000
@@ -17,4 +17,4 @@ services:
- code:/code
volumes:
code:
code:
+2 -2
View File
@@ -3,7 +3,7 @@ version: "3"
services:
cloudcmd:
image: coderaiser/cloudcmd:18.5.1
ports:
expose:
- "80"
environment:
- CLOUDCMD_ROOT=/mnt/fs
@@ -12,4 +12,4 @@ services:
- CLOUDCMD_PASSWORD=${PASSWORD}
volumes:
- /root:/root
- /:/mnt/fs
- /:/mnt/fs
+6 -6
View File
@@ -3,7 +3,7 @@ version: "3"
services:
cockpit:
image: cockpithq/cockpit:core-2.11.0
ports:
expose:
- "80"
environment:
- COCKPIT_SESSION_NAME=cockpit
@@ -11,8 +11,8 @@ services:
- COCKPIT_DATABASE_SERVER=mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@mongo:27017
- COCKPIT_DATABASE_NAME=cockpit
volumes:
- html:/var/www/html
- data:/var/www/html/storage/data
- config:/var/www/html/config
- storage:/var/www/html/storage
depends_on:
- mongo
@@ -25,6 +25,6 @@ services:
- mongo-data:/data/db
volumes:
html:
data:
mongo-data:
config:
storage:
mongo-data:
+2 -2
View File
@@ -3,7 +3,7 @@ version: "3"
services:
codex:
image: ghcr.io/codex-team/codex.docs:v2.2
ports:
expose:
- "3000"
environment:
- APP_CONFIG_database_driver=mongodb
@@ -28,4 +28,4 @@ services:
volumes:
uploads:
db:
mongo-data:
mongo-data:
@@ -3,10 +3,10 @@ version: "3"
services:
collabora:
image: collabora/code:latest
ports:
expose:
- "9980"
environment:
- domain=${DOMAIN}
- username=${USERNAME}
- password=${PASSWORD}
- extra_params=--o:ssl.enable=false
- extra_params=--o:ssl.enable=false
+1 -1
View File
@@ -5,5 +5,5 @@ services:
restart: unless-stopped
volumes:
- ../files/commafeed-data:/commafeed/data
ports:
expose:
- 8082
+2 -2
View File
@@ -3,7 +3,7 @@ version: "3"
services:
commento:
image: registry.gitlab.com/commento/commento:v1.8.0
ports:
expose:
- "8080"
environment:
- COMMENTO_ORIGIN=${COMMENTO_ORIGIN}
@@ -19,4 +19,4 @@ services:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
postgres-data:
@@ -3,7 +3,7 @@ version: "3"
services:
commentoplusplus:
image: caroga/commentoplusplus:v1.8.7
ports:
expose:
- "8080"
environment:
- COMMENTO_ORIGIN=${COMMENTO_ORIGIN}
@@ -22,4 +22,4 @@ services:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
postgres-data:
-37
View File
@@ -1,37 +0,0 @@
<svg
version="1.1"
id="Layer_1"
xmlns="http://www.w3.org/2000/svg"
x="0px"
y="0px"
width="100%"
viewBox="0 0 864 864"
enableBackground="new 0 0 864 864"
xmlSpace="preserve"
>
<path
fill="#EC008C"
opacity="1.000000"
stroke="none"
d="M0.999997,649.000000 C1.000000,433.052795 1.000000,217.105591 1.000000,1.079198 C288.876801,1.079198 576.753601,1.079198 865.000000,1.079198 C865.000000,73.025414 865.000000,145.051453 864.634888,217.500671 C852.362488,223.837280 840.447632,229.735275 828.549438,235.666794 C782.143677,258.801056 735.743225,281.945923 688.998657,304.980469 C688.122009,304.476532 687.580750,304.087708 687.053894,303.680206 C639.556946,266.944733 573.006775,291.446869 560.804199,350.179443 C560.141357,353.369446 559.717590,356.609131 559.195374,359.748962 C474.522705,359.748962 390.283478,359.748962 306.088135,359.748962 C298.804138,318.894806 265.253357,295.206024 231.834442,293.306793 C201.003021,291.554596 169.912033,310.230042 156.935104,338.792725 C149.905151,354.265930 147.884064,370.379944 151.151794,387.034515 C155.204453,407.689667 166.300507,423.954224 183.344437,436.516663 C181.938263,437.607025 180.887405,438.409576 179.849426,439.228516 C147.141953,465.032562 139.918045,510.888947 163.388611,545.322632 C167.274551,551.023804 172.285187,555.958313 176.587341,561.495728 C125.846893,587.012817 75.302292,612.295532 24.735992,637.534790 C16.874903,641.458496 8.914484,645.183228 0.999997,649.000000 z"
/>
<path
fill="#000000"
opacity="1.000000"
stroke="none"
d="M689.340759,305.086823 C735.743225,281.945923 782.143677,258.801056 828.549438,235.666794 C840.447632,229.735275 852.362488,223.837280 864.634888,217.961929 C865.000000,433.613190 865.000000,649.226379 865.000000,864.919800 C577.000000,864.919800 289.000000,864.919800 1.000000,864.919800 C1.000000,793.225708 1.000000,721.576721 0.999997,649.463867 C8.914484,645.183228 16.874903,641.458496 24.735992,637.534790 C75.302292,612.295532 125.846893,587.012817 176.939667,561.513062 C178.543060,562.085083 179.606812,562.886414 180.667526,563.691833 C225.656799,597.853394 291.232574,574.487244 304.462524,519.579773 C304.989105,517.394409 305.501068,515.205505 305.984619,513.166748 C391.466370,513.166748 476.422729,513.166748 561.331177,513.166748 C573.857727,555.764343 608.978149,572.880920 638.519897,572.672791 C671.048340,572.443665 700.623230,551.730408 711.658752,520.910583 C722.546875,490.502106 715.037842,453.265564 682.776733,429.447052 C683.966064,428.506866 685.119507,427.602356 686.265320,426.688232 C712.934143,405.412262 723.011475,370.684631 711.897339,338.686676 C707.312805,325.487671 699.185303,314.725128 689.340759,305.086823 z"
/>
<path
fill="#FEFBFC"
opacity="1.000000"
stroke="none"
d="M688.998657,304.980469 C699.185303,314.725128 707.312805,325.487671 711.897339,338.686676 C723.011475,370.684631 712.934143,405.412262 686.265320,426.688232 C685.119507,427.602356 683.966064,428.506866 682.776733,429.447052 C715.037842,453.265564 722.546875,490.502106 711.658752,520.910583 C700.623230,551.730408 671.048340,572.443665 638.519897,572.672791 C608.978149,572.880920 573.857727,555.764343 561.331177,513.166748 C476.422729,513.166748 391.466370,513.166748 305.984619,513.166748 C305.501068,515.205505 304.989105,517.394409 304.462524,519.579773 C291.232574,574.487244 225.656799,597.853394 180.667526,563.691833 C179.606812,562.886414 178.543060,562.085083 177.128418,561.264465 C172.285187,555.958313 167.274551,551.023804 163.388611,545.322632 C139.918045,510.888947 147.141953,465.032562 179.849426,439.228516 C180.887405,438.409576 181.938263,437.607025 183.344437,436.516663 C166.300507,423.954224 155.204453,407.689667 151.151794,387.034515 C147.884064,370.379944 149.905151,354.265930 156.935104,338.792725 C169.912033,310.230042 201.003021,291.554596 231.834442,293.306793 C265.253357,295.206024 298.804138,318.894806 306.088135,359.748962 C390.283478,359.748962 474.522705,359.748962 559.195374,359.748962 C559.717590,356.609131 560.141357,353.369446 560.804199,350.179443 C573.006775,291.446869 639.556946,266.944733 687.053894,303.680206 C687.580750,304.087708 688.122009,304.476532 688.998657,304.980469 M703.311279,484.370789 C698.954468,457.053253 681.951416,440.229645 656.413696,429.482330 C673.953552,421.977875 688.014709,412.074219 696.456482,395.642365 C704.862061,379.280853 706.487793,362.316345 700.947998,344.809204 C691.688965,315.548492 664.183716,296.954437 633.103516,298.838257 C618.467957,299.725372 605.538086,305.139557 594.588501,314.780121 C577.473999,329.848511 570.185486,349.121399 571.838501,371.750854 C479.166595,371.750854 387.082886,371.750854 294.582672,371.750854 C293.993011,354.662048 288.485260,339.622314 276.940491,327.118439 C265.392609,314.611176 251.082092,307.205322 234.093262,305.960541 C203.355347,303.708374 176.337585,320.898438 166.089890,348.816620 C159.557541,366.613007 160.527206,384.117401 168.756042,401.172516 C177.054779,418.372589 191.471954,428.832886 207.526581,435.632172 C198.407059,442.272583 188.815598,448.302246 180.383728,455.660675 C171.685028,463.251984 166.849655,473.658661 163.940216,484.838684 C161.021744,496.053375 161.212982,507.259705 164.178833,518.426208 C171.577927,546.284302 197.338104,566.588867 226.001465,567.336853 C240.828415,567.723816 254.357819,563.819092 266.385468,555.199646 C284.811554,541.994751 293.631104,523.530579 294.687347,501.238312 C387.354828,501.238312 479.461304,501.238312 571.531799,501.238312 C577.616638,543.189026 615.312866,566.342102 651.310059,559.044739 C684.973938,552.220398 708.263306,519.393127 703.311279,484.370789 z"
/>
<path
fill="#EC008C"
opacity="1.000000"
stroke="none"
d="M703.401855,484.804718 C708.263306,519.393127 684.973938,552.220398 651.310059,559.044739 C615.312866,566.342102 577.616638,543.189026 571.531799,501.238312 C479.461304,501.238312 387.354828,501.238312 294.687347,501.238312 C293.631104,523.530579 284.811554,541.994751 266.385468,555.199646 C254.357819,563.819092 240.828415,567.723816 226.001465,567.336853 C197.338104,566.588867 171.577927,546.284302 164.178833,518.426208 C161.212982,507.259705 161.021744,496.053375 163.940216,484.838684 C166.849655,473.658661 171.685028,463.251984 180.383728,455.660675 C188.815598,448.302246 198.407059,442.272583 207.526581,435.632172 C191.471954,428.832886 177.054779,418.372589 168.756042,401.172516 C160.527206,384.117401 159.557541,366.613007 166.089890,348.816620 C176.337585,320.898438 203.355347,303.708374 234.093262,305.960541 C251.082092,307.205322 265.392609,314.611176 276.940491,327.118439 C288.485260,339.622314 293.993011,354.662048 294.582672,371.750854 C387.082886,371.750854 479.166595,371.750854 571.838501,371.750854 C570.185486,349.121399 577.473999,329.848511 594.588501,314.780121 C605.538086,305.139557 618.467957,299.725372 633.103516,298.838257 C664.183716,296.954437 691.688965,315.548492 700.947998,344.809204 C706.487793,362.316345 704.862061,379.280853 696.456482,395.642365 C688.014709,412.074219 673.953552,421.977875 656.413696,429.482330 C681.951416,440.229645 698.954468,457.053253 703.401855,484.804718 z"
/>
</svg>

Before

Width:  |  Height:  |  Size: 7.0 KiB

-48
View File
@@ -1,48 +0,0 @@
# conduwuit
# https://conduwuit.puppyirl.gay/deploying/docker-compose.yml
services:
homeserver:
image: girlbossceo/conduwuit:latest
restart: unless-stopped
ports:
- 8448:6167
volumes:
- db:/var/lib/conduwuit
#- ./conduwuit.toml:/etc/conduwuit.toml
environment:
# Edit this in your Dokploy Environment
CONDUWUIT_SERVER_NAME: ${CONDUWUIT_SERVER_NAME}
CONDUWUIT_DATABASE_PATH: /var/lib/conduwuit
CONDUWUIT_PORT: 6167
CONDUWUIT_MAX_REQUEST_SIZE: 20000000 # in bytes, ~20 MB
CONDUWUIT_ALLOW_REGISTRATION: 'true'
CONDUWUIT_REGISTRATION_TOKEN: ${CONDUWUIT_REGISTRATION_TOKEN}
CONDUWUIT_ALLOW_FEDERATION: 'true'
CONDUWUIT_ALLOW_CHECK_FOR_UPDATES: 'true'
CONDUWUIT_TRUSTED_SERVERS: '["matrix.org"]'
#CONDUWUIT_LOG: warn,state_res=warn
CONDUWUIT_ADDRESS: 0.0.0.0
# Uncomment if you mapped config toml in volumes
#CONDUWUIT_CONFIG: '/etc/conduwuit.toml'
### Uncomment if you want to use your own Element-Web App.
### Note: You need to provide a config.json for Element and you also need a second
### Domain or Subdomain for the communication between Element and conduwuit
### Config-Docs: https://github.com/vector-im/element-web/blob/develop/docs/config.md
# element-web:
# image: vectorim/element-web:latest
# restart: unless-stopped
# ports:
# - 8009:80
# volumes:
# - ./element_config.json:/app/config.json
# depends_on:
# - homeserver
volumes:
db:
-19
View File
@@ -1,19 +0,0 @@
{
"id": "conduwuit",
"name": "Conduwuit",
"version": "latest",
"description": "Well-maintained, featureful Matrix chat homeserver (fork of Conduit)",
"logo": "conduwuit.svg",
"links": {
"github": "https://github.com/girlbossceo/conduwuit",
"website": "https://conduwuit.puppyirl.gay",
"docs": "https://conduwuit.puppyirl.gay/configuration.html"
},
"tags": [
"backend",
"chat",
"communication",
"matrix",
"server"
]
}
-15
View File
@@ -1,15 +0,0 @@
[variables]
main_domain = "${domain}"
registration_token = "${password:20}"
[config]
env = [
"CONDUWUIT_SERVER_NAME=${main_domain}",
"CONDUWUIT_REGISTRATION_TOKEN=${registration_token}",
]
mounts = []
[[config.domains]]
serviceName = "homeserver"
port = 6_167
host = "${main_domain}"
+2 -2
View File
@@ -3,7 +3,7 @@ version: "3"
services:
confluence:
image: atlassian/confluence-server:8.6-ubuntu-jdk17
ports:
expose:
- "8090"
volumes:
- confluence-data:/var/atlassian/application-data/confluence
@@ -15,4 +15,4 @@ services:
- CATALINA_CONNECTOR_SECURE=true
volumes:
confluence-data:
confluence-data:
+1 -1
View File
@@ -3,7 +3,7 @@ services:
convertx:
image: ghcr.io/c4illin/convertx
restart: unless-stopped
ports:
expose:
- 3000
environment:
- JWT_SECRET=${JWT_SECRET}
+2 -2
View File
@@ -3,7 +3,7 @@ version: "3"
services:
coral:
image: coralproject/talk:9.7.0
ports:
expose:
- "3000"
environment:
- MONGODB_URI=${MONGODB_URI}
@@ -30,4 +30,4 @@ services:
volumes:
mongo-data:
redis-data:
redis-data:
+1 -1
View File
@@ -3,7 +3,7 @@ version: '3.8'
services:
couchdb:
image: couchdb:latest
ports:
expose:
- '5984'
volumes:
- couchdb-data:/opt/couchdb/data

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