Skip to content

fix(postiz): add temporal worker and UI services to postiz template#811

Open
chahat1709 wants to merge 134 commits into
Dokploy:mainfrom
chahat1709:fix-postiz-temporal
Open

fix(postiz): add temporal worker and UI services to postiz template#811
chahat1709 wants to merge 134 commits into
Dokploy:mainfrom
chahat1709:fix-postiz-temporal

Conversation

@chahat1709
Copy link
Copy Markdown

@chahat1709 chahat1709 commented Apr 19, 2026

This PR adds the requisite Temporal containers (postiz-temporal, postiz-temporal-ui, postiz-temporal-postgres) to the postiz docker-compose blueprint. This addresses the missing task orchestration capabilities originally missing from the template. Healthchecks have been mapped correctly across the cluster for startup synchronization.

Greptile Summary

This PR adds postiz-temporal, postiz-temporal-ui, and postiz-temporal-postgres services to the postiz blueprint to enable Temporal workflow orchestration. The healthcheck dependency chain is wired correctly, but there are two functional issues that would prevent a successful deployment.

  • temporalio/auto-setup is officially deprecated on Docker Hub and is no longer receiving updates or security patches; the Temporal project now recommends temporalio/server + temporalio/admin-tools.
  • DYNAMIC_CONFIG_FILE_PATH=config/dynamicconfig/production-sql.yaml references a file that does not ship with the auto-setup image (only development-sql.yaml is bundled). This will cause Temporal to fail at startup and cascade the failure to postiz-app via its service_healthy dependency, making the entire stack undeployable.

Confidence Score: 3/5

Not safe to merge — two P1 issues (deprecated image and missing dynamic config file) will prevent the postiz stack from starting successfully.

The production-sql.yaml config path points to a file that does not exist in the Temporal image, and the auto-setup image itself is deprecated. Both are P1 findings on the primary changed file that will cause the template to fail on deployment.

blueprints/postiz/docker-compose.yml — the Temporal service configuration needs the dynamic config path corrected and the deprecated image addressed.

Security Review

  • Using the deprecated temporalio/auto-setup image (blueprints/postiz/docker-compose.yml, line 33) means no future CVE patches will be applied to this image layer, increasing long-term exposure risk for deployed instances.

Comments Outside Diff (1)

  1. blueprints/postiz/template.toml, line 1-22 (link)

    P2 postiz-temporal-ui service has no domain mapping

    The postiz-temporal-ui service (running on port 8080) is added to the compose file but template.toml has no corresponding [[config.domains]] entry for it. Users deploying via Dokploy will have no way to access the Temporal web UI without manually adding a domain. If exposing the UI is intentional, add a domain entry; if it's meant to be internal-only, a comment in the compose file would help clarify intent.

Reviews (1): Last reviewed commit: "fix(postiz): Address AI review feedback,..." | Re-trigger Greptile

Greptile also left 3 inline comments on this PR.

Context used:

  • Context used - AGENTS.md (source)

tknsunil and others added 30 commits November 2, 2025 00:15
- Add Rote deployment template with frontend, backend, and PostgreSQL services
- Configure domain routing for frontend (port 80) and backend (port 3000)
- Set up automatic password generation and environment variables
- Use latest image tag by default
- Add logo and metadata to meta.json
…demirror/autocomplete', '@radix-ui/react-dialog', and React packages to their latest versions. This includes updates to '@types/react' and '@types/react-dom' for improved compatibility and performance.
… target 'canary' branch for pull requests.
* Update template.toml

* Update template.toml

* Update template.toml
…shrouded-server for autoupdate and easier config
changed image to mornedhels/enshrouded-server
* feat: add Openinary template

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

- Introduced a GitHub Actions workflow to validate Docker Compose files and template.toml on pull requests.
- Added helper functions for generating random values and processing variables in templates.
- Implemented validation scripts for checking the structure, syntax, and best practices of Docker Compose and template files.
- Created necessary TypeScript types and configuration files for the build scripts.
* feat(templates): add Passbolt blueprint for Dokploy
- Add docker-compose.yml defining services for Passbolt and MariaDB
- Create template.toml with configurable domain, email, and database credentials
- Add meta.json with metadata, tags, and link to logo

* fix(meta): sort meta.json entries

* fix: passbolt template had several issues that broke deployment

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

everything works now, fully tested

* Update blueprints/passbolt/template.toml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
* feat: Add Kokoro TTS FastAPI template (Dokploy#353)  - Add CPU-optimized docker-compose.yml with source build - Add GPU-optimized docker-compose-gpu.yml for NVIDIA support - Add comprehensive template.toml with OpenAI-compatible API docs - Add kokoro-tts.svg logo and meta.json entry - Support streaming audio, timestamps, and multi-language TTS - Resolves Dokploy#353

* updated the meta.json for the build errors

* removed the docker-compose-gpu.yml file

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Aaron-McGuire and others added 16 commits February 15, 2026 21:01
Co-authored-by: Aaron McGuire <git.figment276@passmail.net>
…ork instructions (Dokploy#595)

* fix: superset version fixed, tweak network instructions

* chore: simplify mapbox key

* fix: volume mount

* deps: bump superset to 6.0.0
* feat: Add imgproxy template

* fix: Configure docker-compose to match requirements

* fix: Process meta

* fix: Change logo name

* fix: Remove incorrect mounts

* fix: Expose 80 port instead of direct mapping

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

* fix: Escaping
…mproved setup (Dokploy#672)

* Update docker-compose.yml

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

* fix: meta nextcloud

* fix: vars

* fix: non capital

* fix: template.toml

* fix: env vars

* fix: var naming

* fix: command

* fix: command

* another try

* keep it simple

* fix toml

* retry classic

* add: admin user

* no aito install

* feat: automated fixes

* fix  file pasth

* fix: manual script

* fix: script

* fix: png logo

* fix: meta logo data

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
* feat: add MediaFetch template

* Corrected .toml

* .toml
* feat: add unleash template

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

* feat: update database user in unleash template from postgres to unleash
…y#696)

* Update Notifuse template: replace PASETO with SECRET_KEY auth

* Update docker-compose.yml

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
* chore: update convex backend and dashboard images, switch from port mapping to expose in docker-compose.yml

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

* Update meta.json
* feat: add tuwunel template for matrix

* fix: replace HTML placeholder with actual SVG logo for tuwunel

* fix: remove enforcement and rename logo
Copilot AI review requested due to automatic review settings April 19, 2026 08:07
@dosubot dosubot Bot added the size:XL This PR changes 500-999 lines, ignoring generated files. label Apr 19, 2026
@dosubot dosubot Bot added the new-template label Apr 19, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 19, 2026

built with Refined Cloudflare Pages Action

⚡ Cloudflare Pages Deployment

Name Status Preview Last Commit
templates ✅ Ready (View Log) Visit Preview 9430a34

Comment thread blueprints/postiz/docker-compose.yml Outdated
condition: service_healthy

postiz-temporal:
image: temporalio/auto-setup:1.27.2
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 security temporalio/auto-setup is deprecated

The temporalio/auto-setup image is officially deprecated and no longer maintained or receiving security updates. The Docker Hub page explicitly states: "⚠️ DEPRECATED — This image is no longer maintained and will not receive updates." The recommended replacement is temporalio/server paired with temporalio/admin-tools, with examples at github.com/temporalio/samples-server/tree/main/compose.

Comment thread blueprints/postiz/docker-compose.yml Outdated
- POSTGRES_USER=${DB_USER}
- POSTGRES_PWD=${DB_PASSWORD}
- POSTGRES_SEEDS=postiz-temporal-postgres
- DYNAMIC_CONFIG_FILE_PATH=config/dynamicconfig/production-sql.yaml
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 production-sql.yaml not bundled in the image

DYNAMIC_CONFIG_FILE_PATH=config/dynamicconfig/production-sql.yaml references a file that is not shipped with the temporalio/auto-setup image. The image only includes development-sql.yaml and development-cass.yaml as default dynamic config files. Without a volume mount providing this file, Temporal will fail to read its dynamic config at startup. Since postiz-app depends on postiz-temporal being healthy, the entire stack will fail to start. Either mount a custom production-sql.yaml or change this to the existing config/dynamicconfig/development-sql.yaml.

Suggested change
- DYNAMIC_CONFIG_FILE_PATH=config/dynamicconfig/production-sql.yaml
- DYNAMIC_CONFIG_FILE_PATH=config/dynamicconfig/development-sql.yaml

Comment on lines +62 to +74
postiz-temporal-postgres:
image: postgres:15-alpine
restart: always
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USER}
volumes:
- postiz-temporal-db-data:/var/lib/postgresql/data
healthcheck:
test: pg_isready -U ${DB_USER}
interval: 10s
timeout: 3s
retries: 3
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Shared DB credentials between application and Temporal Postgres

postiz-temporal-postgres reuses the same ${DB_USER} and ${DB_PASSWORD} as the main postiz-postgres. While these are isolated containers, the Temporal auto-setup image creates its own internal databases (temporal, temporal_visibility) using these credentials. Consider introducing a separate variable (e.g., TEMPORAL_DB_PASSWORD) for the Temporal postgres instance.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates Dokploy blueprint templates and the central meta.json index. While the PR title/description focuses on fixing the Postiz template by adding Temporal services, the changes also introduce multiple new blueprints and adjust several existing templates/versions.

Changes:

  • Add Temporal (server, UI, and Postgres) services and wiring to the postiz blueprint.
  • Add several new templates/metadata entries (e.g., imgproxy, mediafetch, tuwunel, unleash, verdaccio) and related assets.
  • Update/adjust existing templates (e.g., Nextcloud, Grafana, Convex, EvolutionAPI, Notifuse).

Reviewed changes

Copilot reviewed 19 out of 26 changed files in this pull request and generated 14 comments.

Show a summary per file
File Description
meta.json Updates Grafana version, modifies nextcloud-aio metadata, and adds new template entries (imgproxy/mediafetch/strapi/tuwunel/unleash/verdaccio).
blueprints/postiz/docker-compose.yml Adds Temporal server/UI/Postgres services and app env/depends_on wiring.
blueprints/mediafetch/template.toml Introduces MediaFetch template configuration (currently inconsistent with other templates’ domain/env patterns).
blueprints/mediafetch/docker-compose.yml Adds MediaFetch compose definition (uses latest, sets PUBLIC_BASE_URL).
blueprints/mediafetch/mediafetch.svg Adds MediaFetch logo asset.
blueprints/imgproxy/template.toml Adds imgproxy template variables/env and domain mapping.
blueprints/imgproxy/docker-compose.yml Adds imgproxy + nginx caching compose stack.
blueprints/imgproxy/imgproxy.png Adds imgproxy logo asset.
blueprints/unleash/template.toml Adds Unleash template variables and env export.
blueprints/unleash/docker-compose.yml Adds Unleash + Postgres compose stack and healthchecks.
blueprints/unleash/unleash.png Adds Unleash logo asset.
blueprints/tuwunel/template.toml Adds Tuwunel template variables/env and domain mapping.
blueprints/tuwunel/docker-compose.yml Adds Tuwunel compose definition.
blueprints/tuwunel/tuwunel.svg Adds Tuwunel logo asset.
blueprints/verdaccio/template.toml Adds Verdaccio template with a mounted config.yaml content.
blueprints/verdaccio/docker-compose.yml Adds Verdaccio compose definition (publishes a port).
blueprints/verdaccio/verdaccio.svg Adds Verdaccio logo asset.
blueprints/notifuse/template.toml Replaces embedded PASETO keys with generated SECRET_KEY and simplifies env.
blueprints/notifuse/docker-compose.yml Refactors Notifuse compose env/volumes/healthcheck.
blueprints/nextcloud-aio/template.toml Expands Nextcloud template env and adds an optimization script mount.
blueprints/nextcloud-aio/docker-compose.yml Switches Nextcloud to stable, pins MariaDB, adds Redis, mounts the script.
blueprints/nextcloud-aio/nextcloud.png Adds/updates Nextcloud logo asset.
blueprints/nextcloud-aio/nextcloud-aio.svg Removes the old Nextcloud AIO SVG asset.
blueprints/grafana/docker-compose.yml Updates Grafana image tag to match the new version.
blueprints/evolutionapi/docker-compose.yml Switches EvolutionAPI image to an unpinned latest tag.
blueprints/convex/docker-compose.yml Updates Convex image digest and switches from ports to expose.

services:
nextcloud:
image: nextcloud:32.0.5
image: nextcloud:stable
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nextcloud:stable is not a fixed version, which makes the template non-reproducible and risks unexpected breakage on upstream releases. Pin to a specific Nextcloud tag (and keep meta.json.version aligned with it).

Suggested change
image: nextcloud:stable
image: nextcloud:30.0.4

Copilot uses AI. Check for mistakes.
Comment thread meta.json
Comment on lines 4332 to +4336
"id": "nextcloud-aio",
"name": "Nextcloud All in One",
"version": "30.0.2",
"description": "Nextcloud (AIO) is a self-hosted file storage and sync platform with powerful collaboration capabilities. It integrates Files, Talk, Groupware, Office, Assistant and more into a single platform for remote work and data protection.",
"logo": "nextcloud-aio.svg",
"name": "Nextcloud",
"version": "stable",
"description": "Nextcloud is a self-hosted file storage and sync platform with powerful collaboration capabilities. It integrates Files, Talk, Groupware, Office, Assistant and more into a single platform for remote work and data protection.",
"logo": "nextcloud.png",
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The nextcloud-aio meta entry was changed to name/version Nextcloud/stable. This is confusing because the id still implies the AIO distribution, and stable is not a pinned version. Either keep this entry as a Nextcloud AIO template (and use an AIO image/version), or rename/create a separate nextcloud template and pin a concrete version string.

Copilot uses AI. Check for mistakes.
Comment on lines +52 to +61
postiz-temporal-ui:
image: temporalio/ui:2.30.0
restart: always
environment:
- TEMPORAL_ADDRESS=postiz-temporal:7233
- TEMPORAL_CORS_ORIGINS=https://${POSTIZ_HOST}
depends_on:
postiz-temporal:
condition: service_healthy

Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

postiz-temporal-ui is added, but the blueprint's template.toml still exposes only postiz-app. As a result, users likely won't be able to reach the Temporal UI unless an additional [[config.domains]] entry (or other routing mechanism) is added for this service.

Copilot uses AI. Check for mistakes.
image: verdaccio/verdaccio:6
environment:
- VERDACCIO_PORT=4873
ports:
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This compose uses ports: for Verdaccio. Dokploy templates generally avoid publishing ports directly (routing is handled by Dokploy) and use expose: instead. Consider removing ports and switching to expose: - 4873 to align with the documented template conventions.

Suggested change
ports:
expose:

Copilot uses AI. Check for mistakes.
host = "${main_domain}"

[[config.mounts]]
filePath = "/conf/config.yaml"
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The mounted Verdaccio config is created under ../files/conf/config.yaml and mounted into /verdaccio/conf by the compose file, but the mount's filePath is declared as /conf/config.yaml here. To avoid confusion/misconfiguration, consider changing filePath to match the actual in-container path (/verdaccio/conf/config.yaml) and mounting the file directly to that path in docker-compose.yml.

Suggested change
filePath = "/conf/config.yaml"
filePath = "/verdaccio/conf/config.yaml"

Copilot uses AI. Check for mistakes.
restart: always
environment:
- TEMPORAL_ADDRESS=postiz-temporal:7233
- TEMPORAL_CORS_ORIGINS=https://${POSTIZ_HOST}
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TEMPORAL_CORS_ORIGINS is set to an HTTPS URL by default. Repo guidance is to prefer HTTP by default for URL env vars unless HTTPS is explicitly required by the application. Consider using http://${POSTIZ_HOST} here and relying on the proxy for TLS.

Suggested change
- TEMPORAL_CORS_ORIGINS=https://${POSTIZ_HOST}
- TEMPORAL_CORS_ORIGINS=http://${POSTIZ_HOST}

Copilot uses AI. Check for mistakes.

[config.env]
ROOT_EMAIL = "${email}"
API_ENDPOINT = "https://${main_domain}"
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

API_ENDPOINT is set to an HTTPS URL by default. Repo guidance is to default URL env vars to HTTP unless the app explicitly requires HTTPS, since TLS is typically terminated at the proxy layer. Consider changing this to http://${main_domain}.

Suggested change
API_ENDPOINT = "https://${main_domain}"
API_ENDPOINT = "http://${main_domain}"

Copilot uses AI. Check for mistakes.
Comment on lines +4 to +10

[config]
[[config.domains]]
name = "Domain"
variable = "DOMAIN"
serviceName = "mediafetch"
port = 3002
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

template.toml uses non-standard [[config.domains]] fields (name/variable) and omits the required host mapping used across other templates. This is likely to prevent Dokploy from routing traffic. Align this to the usual pattern (define main_domain = "${domain}" and set host = "${main_domain}").

Suggested change
[config]
[[config.domains]]
name = "Domain"
variable = "DOMAIN"
serviceName = "mediafetch"
port = 3002
main_domain = "${domain}"
[config]
[[config.domains]]
serviceName = "mediafetch"
port = 3002
host = "${main_domain}"

Copilot uses AI. Check for mistakes.
BASIC_AUTH_USER = "admin"
BASIC_AUTH_PASS = "${password:12}"

[config]
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The compose file references ${BASIC_AUTH_USER}, ${BASIC_AUTH_PASS}, and ${DOMAIN}, but this template doesn't define any config.env entries to export those variables for compose-time substitution. Add them to [config.env] (or config.env = [...]) so the deployment has the required values.

Suggested change
[config]
[config]
[[config.env]]
name = "BASIC_AUTH_USER"
value = "${BASIC_AUTH_USER}"
[[config.env]]
name = "BASIC_AUTH_PASS"
value = "${BASIC_AUTH_PASS}"
[[config.env]]
name = "DOMAIN"
value = "${DOMAIN}"

Copilot uses AI. Check for mistakes.
Comment on lines +10 to +15
port = 3002

[[config.mounts]]
name = "Downloads"
filePath = "/data/downloads"
content = "mediafetch" No newline at end of file
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[[config.mounts]] here creates a file/directory in ../files, but the compose already persists downloads via the named volume mediafetch_data. As written, this mount is unused by docker-compose.yml and the content = "mediafetch" is unlikely to be meaningful. Consider removing this mount block or wiring it up consistently (e.g., mount ../files/... into the container instead of a named volume).

Suggested change
port = 3002
[[config.mounts]]
name = "Downloads"
filePath = "/data/downloads"
content = "mediafetch"
port = 3002

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new-template size:XL This PR changes 500-999 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.