1.9.x moves the default datastore from MariaDB to MongoDB (DocumentsDB) and adds new workers/tasks, so this is a substantial update rather than a version bump.
New default DB — MongoDB 8.2.5: replica set bootstrapped via healthcheck, keyfile volume, and mongo-init.js / mongo-entrypoint.sh provided through [[config.mounts]]. MariaDB is kept as a supported alternative (_APP_DB_ADAPTER=mariadb).
New services:appwrite-worker-screenshots, appwrite-worker-executions, appwrite-task-interval.
Env vars updated to 1.9.5 parity (edition, pool adapter, console domain/schema, VectorsDB keys, trusted headers, interval/webhook/screenshot/migration settings, GraphQL introspection, per-worker coroutine tuning); obsolete vars removed (InfluxDB/StatsD, legacy _APP_FUNCTIONS_CPUS/MEMORY/ENVS, etc.).
Function runtimes (v5):node-22, python-3.12, php-8.3, ruby-3.3, dart-3.5, go-1.23, rust-1.83, bun-1.1, deno-1.46, java-21.0, dotnet-8.0. _APP_EXECUTOR_IMAGES pre-pulls a lean subset (node/python/php/static); the rest pull on demand.
Not included: PostgreSQL (VectorsDB) and the embedding service — vector features stay disabled; every depends_on: appwrite-embedding was removed so Compose still starts. The upstream bundled Traefik is omitted (Dokploy provides routing via [[config.domains]]).
Testing
Rendered the template as Dokploy does (resolved .env, wrote the mount files, shared dokploy-network) and brought up all 29 services locally:
✅ MongoDB replica-set bootstrap → healthy
✅ First-boot migrations against Mongo (appwrite DB, 32 collections)
✅appwritedoctor healthcheck passes; GET /v1/health/version → 200 {"version":"1.9.5"}
✅ Account create (201) + email session (201) — Mongo read/write/auth end to end
✅ Console container serving; all workers/tasks/schedulers/mariadb/redis up, no crash-loops
Note: an earlier revision reported the executor crash-looping on macOS only — the actual root cause was the executor's container self-discovery (it matches gethostname() against Docker container names), fixed here by using hostname: openruntimes-executor so it matches the Compose-generated container name.
Verified on a live Dokploy deployment (v0.29.8, Ubuntu 24.04)
✅openruntimes-executor healthy, no restarts
✅ Function build + execution end to end (node-22, returns 200)
✅ Static site deploy + preview URL routed through the wildcard Traefik routers over HTTP and HTTPS
✅ Main/console/API domains with HTTPS via Dokploy's normal Let's Encrypt toggle
✅ MongoDB healthcheck with env-based password
Sites & functions wildcard HTTPS
The template routes *.sites.<domain> and *.functions.<domain> to Appwrite automatically (HostRegexp labels on the appwrite service), so site previews and function execution URLs work out of the box over HTTP.
Wildcard certificates cannot be issued by Dokploy's built-in Let's Encrypt (HTTP-01 cannot issue wildcards, and Appwrite's own certificates worker intentionally skips its generated subdomains). For HTTPS on these subdomains, users must obtain a wildcard cert for *.sites.<domain> and *.functions.<domain> (e.g. Let's Encrypt DNS-01 via lego/acme.sh/certbot, or their DNS provider) and add it in Dokploy → Settings → Certificates — Traefik then serves it automatically via SNI. The main/API/console domains get certificates through Dokploy's regular per-domain Let's Encrypt toggle, no extra steps.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
## 📋 Pull Request Information
**Original PR:** https://github.com/Dokploy/templates/pull/970
**Author:** [@ChiragAgg5k](https://github.com/ChiragAgg5k)
**Created:** 7/1/2026
**Status:** ✅ Merged
**Merged:** 7/7/2026
**Merged by:** [@Siumauricio](https://github.com/Siumauricio)
**Base:** `canary` ← **Head:** `appwrite-1.9.5`
---
### 📝 Commits (6)
- [`7e4710f`](https://github.com/Dokploy/templates/commit/7e4710f1f0e408d0761e47aba325f02d2f698cd0) feat(appwrite): update template to 1.9.5
- [`81b46fa`](https://github.com/Dokploy/templates/commit/81b46fa5df0337eb558c143a700860b1cd8cb4bf) fix(appwrite): re-add compose version header and add mongodb tag
- [`fbb36d9`](https://github.com/Dokploy/templates/commit/fbb36d91420ceace99453b3eaf032fe46799b5ad) (fix): add container_name to appwrite executor so it can find itself
- [`71f8c9a`](https://github.com/Dokploy/templates/commit/71f8c9ad8baeec16b6e0ee428895ce39f06346db) (fix): route wildcard sites/functions subdomains to appwrite
- [`fc33a98`](https://github.com/Dokploy/templates/commit/fc33a986d1a0ffae87ca7962d3a8bfd469cc73d8) (chore): remove wildcard routing comment
- [`25ffae4`](https://github.com/Dokploy/templates/commit/25ffae4b17daaf17ad5cc7de6a11c8f5b7951e3c) (fix): drop container_name, use service-name hostname for executor self-discovery
### 📊 Changes
**3 files changed** (+486 additions, -105 deletions)
<details>
<summary>View changed files</summary>
📝 `blueprints/appwrite/docker-compose.yml` (+389 -56)
📝 `blueprints/appwrite/template.toml` (+95 -48)
📝 `meta.json` (+2 -1)
</details>
### 📄 Description
## What
Updates the **Appwrite** template from `1.8.0` to `1.9.5` ([self-hosted release](https://appwrite.io/blog/post/appwrite-1-9-5-self-hosted-release)).
1.9.x moves the default datastore from MariaDB to **MongoDB** (DocumentsDB) and adds new workers/tasks, so this is a substantial update rather than a version bump.
### Changes
- **Images:** `appwrite/appwrite` → `1.9.5`, `appwrite/console` → `8.7.5`, `appwrite/assistant` → `0.8.4`, `appwrite/browser` → `0.3.2`, `openruntimes/executor` → `0.25.1`, `redis` → `7.4.7-alpine`.
- **New default DB — MongoDB `8.2.5`**: replica set bootstrapped via healthcheck, keyfile volume, and `mongo-init.js` / `mongo-entrypoint.sh` provided through `[[config.mounts]]`. MariaDB is kept as a supported alternative (`_APP_DB_ADAPTER=mariadb`).
- **New services:** `appwrite-worker-screenshots`, `appwrite-worker-executions`, `appwrite-task-interval`.
- **Env vars** updated to 1.9.5 parity (edition, pool adapter, console domain/schema, VectorsDB keys, trusted headers, interval/webhook/screenshot/migration settings, GraphQL introspection, per-worker coroutine tuning); obsolete vars removed (InfluxDB/StatsD, legacy `_APP_FUNCTIONS_CPUS/MEMORY/ENVS`, etc.).
- **Function runtimes (v5):** `node-22, python-3.12, php-8.3, ruby-3.3, dart-3.5, go-1.23, rust-1.83, bun-1.1, deno-1.46, java-21.0, dotnet-8.0`. `_APP_EXECUTOR_IMAGES` pre-pulls a lean subset (node/python/php/static); the rest pull on demand.
- **Not included:** PostgreSQL (VectorsDB) and the embedding service — vector features stay disabled; every `depends_on: appwrite-embedding` was removed so Compose still starts. The upstream bundled Traefik is omitted (Dokploy provides routing via `[[config.domains]]`).
## Testing
Rendered the template as Dokploy does (resolved `.env`, wrote the mount files, shared `dokploy-network`) and brought up all 29 services locally:
- ✅ MongoDB replica-set bootstrap → healthy
- ✅ First-boot migrations against Mongo (`appwrite` DB, 32 collections)
- ✅ `appwrite` `doctor` healthcheck passes; `GET /v1/health/version` → `200 {"version":"1.9.5"}`
- ✅ Account create (`201`) + email session (`201`) — Mongo read/write/auth end to end
- ✅ Console container serving; all workers/tasks/schedulers/mariadb/redis up, no crash-loops
> Note: an earlier revision reported the executor crash-looping on macOS only — the actual root cause was the executor's container self-discovery (it matches `gethostname()` against Docker container names), fixed here by using `hostname: openruntimes-executor` so it matches the Compose-generated container name.
## Verified on a live Dokploy deployment (v0.29.8, Ubuntu 24.04)
- ✅ `openruntimes-executor` healthy, no restarts
- ✅ Function build + execution end to end (`node-22`, returns `200`)
- ✅ Static site deploy + preview URL routed through the wildcard Traefik routers over HTTP and HTTPS
- ✅ Main/console/API domains with HTTPS via Dokploy's normal Let's Encrypt toggle
- ✅ MongoDB healthcheck with env-based password
## Sites & functions wildcard HTTPS
The template routes `*.sites.<domain>` and `*.functions.<domain>` to Appwrite automatically (`HostRegexp` labels on the `appwrite` service), so site previews and function execution URLs work out of the box over HTTP.
Wildcard **certificates** cannot be issued by Dokploy's built-in Let's Encrypt (HTTP-01 cannot issue wildcards, and Appwrite's own certificates worker intentionally skips its generated subdomains). For HTTPS on these subdomains, users must obtain a wildcard cert for `*.sites.<domain>` and `*.functions.<domain>` (e.g. Let's Encrypt DNS-01 via lego/acme.sh/certbot, or their DNS provider) and add it in **Dokploy → Settings → Certificates** — Traefik then serves it automatically via SNI. The main/API/console domains get certificates through Dokploy's regular per-domain Let's Encrypt toggle, no extra steps.
---
<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/Dokploy/templates/pull/970
Author: @ChiragAgg5k
Created: 7/1/2026
Status: ✅ Merged
Merged: 7/7/2026
Merged by: @Siumauricio
Base:
canary← Head:appwrite-1.9.5📝 Commits (6)
7e4710ffeat(appwrite): update template to 1.9.581b46fafix(appwrite): re-add compose version header and add mongodb tagfbb36d9(fix): add container_name to appwrite executor so it can find itself71f8c9a(fix): route wildcard sites/functions subdomains to appwritefc33a98(chore): remove wildcard routing comment25ffae4(fix): drop container_name, use service-name hostname for executor self-discovery📊 Changes
3 files changed (+486 additions, -105 deletions)
View changed files
📝
blueprints/appwrite/docker-compose.yml(+389 -56)📝
blueprints/appwrite/template.toml(+95 -48)📝
meta.json(+2 -1)📄 Description
What
Updates the Appwrite template from
1.8.0to1.9.5(self-hosted release).1.9.x moves the default datastore from MariaDB to MongoDB (DocumentsDB) and adds new workers/tasks, so this is a substantial update rather than a version bump.
Changes
appwrite/appwrite→1.9.5,appwrite/console→8.7.5,appwrite/assistant→0.8.4,appwrite/browser→0.3.2,openruntimes/executor→0.25.1,redis→7.4.7-alpine.8.2.5: replica set bootstrapped via healthcheck, keyfile volume, andmongo-init.js/mongo-entrypoint.shprovided through[[config.mounts]]. MariaDB is kept as a supported alternative (_APP_DB_ADAPTER=mariadb).appwrite-worker-screenshots,appwrite-worker-executions,appwrite-task-interval._APP_FUNCTIONS_CPUS/MEMORY/ENVS, etc.).node-22, python-3.12, php-8.3, ruby-3.3, dart-3.5, go-1.23, rust-1.83, bun-1.1, deno-1.46, java-21.0, dotnet-8.0._APP_EXECUTOR_IMAGESpre-pulls a lean subset (node/python/php/static); the rest pull on demand.depends_on: appwrite-embeddingwas removed so Compose still starts. The upstream bundled Traefik is omitted (Dokploy provides routing via[[config.domains]]).Testing
Rendered the template as Dokploy does (resolved
.env, wrote the mount files, shareddokploy-network) and brought up all 29 services locally:appwriteDB, 32 collections)appwritedoctorhealthcheck passes;GET /v1/health/version→200 {"version":"1.9.5"}201) + email session (201) — Mongo read/write/auth end to endVerified on a live Dokploy deployment (v0.29.8, Ubuntu 24.04)
openruntimes-executorhealthy, no restartsnode-22, returns200)Sites & functions wildcard HTTPS
The template routes
*.sites.<domain>and*.functions.<domain>to Appwrite automatically (HostRegexplabels on theappwriteservice), so site previews and function execution URLs work out of the box over HTTP.Wildcard certificates cannot be issued by Dokploy's built-in Let's Encrypt (HTTP-01 cannot issue wildcards, and Appwrite's own certificates worker intentionally skips its generated subdomains). For HTTPS on these subdomains, users must obtain a wildcard cert for
*.sites.<domain>and*.functions.<domain>(e.g. Let's Encrypt DNS-01 via lego/acme.sh/certbot, or their DNS provider) and add it in Dokploy → Settings → Certificates — Traefik then serves it automatically via SNI. The main/API/console domains get certificates through Dokploy's regular per-domain Let's Encrypt toggle, no extra steps.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.