Conversation
Add a self-hosted Appwrite 2.2 stack adapted from the official docker-compose, using Dokploy domains instead of the bundled Traefik. - Fix the compose file so it parses: drop the dangling networks block that duplicated the appwrite service and created phantom gateway/runtimes services - Pin all images to explicit versions (appwrite/appwrite:2.2.0, etc.) - Add restart: unless-stopped to the always-on services and to the separate-profile workers
Appwrite serves function/site previews on <sub>.<functionsDomain> and <unique>.<sitesDomain>. Dokploy rejects wildcard hosts in template.toml, so add Traefik HostRegexp labels on the appwrite service, matching the existing appwrite blueprint. Also disable _APP_ROUTER_AUTO_CERTIFICATES since Dokploy terminates TLS and the bundled Appwrite Traefik is not deployed.
…write Use depends_on conditions so appwrite does not start before its backing services are healthy. Compose rejects interpolation in depends_on keys, so postgresql is referenced by its literal service name.
built with Refined Cloudflare Pages Action⚡ Cloudflare Pages Deployment
|
Add a console_domain variable (defaults to console.<main_domain>) and route the Console, API (/v1) and Realtime (/v1/realtime) on that host, while keeping the existing main-domain routes intact. Point _APP_CONSOLE_DOMAIN and _APP_CONSOLE_HOSTNAMES at the console host so the Console can reach the API on its own origin and can be protected independently (e.g. Cloudflare Access).
openruntimes-executor looks itself up in Docker by matching its hostname against the container name. Without container_name the generated name is "<project>-openruntimes-executor-1", so the lookup fails and the executor crash loops with "Own container not found" (appwrite/appwrite#13016), leaving site/function deployments stuck in "building".
openruntimes-executor resolves its own container with gethostname() against Docker's name filter. With hostname "exc1" the filter never matches "<project>-openruntimes-executor-1", so the executor crash loops with "Own container not found" (appwrite/appwrite#13016). Mirror the appwrite blueprint: set hostname to the service name (a substring of the generated container name) and point _APP_EXECUTOR_HOST at http://openruntimes-executor/v1. Avoids container_name, which the compose validator rejects and which is not deployment-unique.
duducp
force-pushed
the
feat/appwrite-2
branch
from
September 19, 2026 13:23
28cace0 to
8841f90
Compare
|
Any updates? Hoping to see that merged |
Author
@Siumauricio, can you get help with the review? |
- Bump appwrite/appwrite to 2.3.0, console to 1.1.159, autogravity to 0.0.11 - Replace _APP_CONSOLE_URL_SCHEME with _APP_CONSOLE_URL (removed in 2.3.0) - Add appwrite-mqtt service with MQTT envs (_APP_MQTT_REPLAY_DEPTH, _APP_MQTT_MAX_PACKET_SIZE) - Add _APP_PWNED_PASSWORDS_DSN (2.3.0 password breach policy) - Add flutter-3.44 sites runtime (Jaspr SSR) and its executor image - Adopt upstream MongoDB init fix (#13593): idempotent init on port 27018 🤖 Generated with Codebuff Co-Authored-By: Codebuff <noreply@codebuff.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What is this PR about?
New PR of Appwrite 2 (
appwrite-2, Appwrite 2.3.0)Adds a self-hosted Appwrite 2.3 stack adapted from the official
appwrite/appwrite2.3.0docker-compose.yml. The bundled Traefik is replaced with Dokploy domains, so the stack is reachable through the Dokploy reverse proxy instead of Appwrite's own.Services
appwrite,appwrite-console,appwrite-realtime,appwrite-mqtt,appwrite-worker,appwrite-task-*,postgresql,mongodb(replica set),redis,clickhouse,mariadb,openruntimes-executor,orchestrator,appwrite-geo,appwrite-autogravity,appwrite-assistant,appwrite-browser, plus the optionalseparate/embeddingprofile services.Appwrite 2.3 uses PostgreSQL as its primary database (and for the vectors DB), MongoDB as the documents DB, and Redis/ClickHouse for cache/usage.
mariadbis started for parity with upstream but is not used by 2.3.Domains
By default the API and the Console share the main domain, while Sites and Functions get their own subdomains:
https://<main_domain>/v1→ API,https://<main_domain>/v1/realtime→ Realtime,https://<main_domain>/→ Consolehttps://sites.<main_domain>→ Sites,https://functions.<main_domain>→ FunctionsThe Console can be moved to a dedicated host through the
console_domainvariable (defaults toconsole.<main_domain>). This is useful to protect the Console with Cloudflare Access without exposing the public API:https://<main_domain>/v1→ API (external clients),https://<main_domain>/v1/realtime→ Realtimehttps://<console_domain>/→ Console,https://<console_domain>/v1→ API,https://<console_domain>/v1/realtime→ RealtimeNo wildcard is added for the Console host, and the Sites/Functions wildcards are unchanged. The main-domain routes are kept for backwards compatibility.
Notes
networks:block had turnedgateway/appwrite/runtimesinto phantom services and duplicated theappwritekey. That is fixed here.appwrite/appwrite:2.2.0,appwrite/new:1.1.96-self-hosted,appwrite/postgres:0.1.0,mongo:8.2.5,redis:7.4.7-alpine,clickhouse/clickhouse-server:26.4.3-alpine,openruntimes/executor:0.29.0,ghcr.io/open-runtimes/orchestrator/orchestrator:2.2.0, etc.).restart: unless-stoppedadded to the always-on services and to theseparate-profile workers.depends_onconditions added soappwritewaits forpostgresql,redisandappwrite-geoto be healthy.password:32helper; the MongoDB keyfile and app user are created at first boot via the mountedmongo-init.js/mongo-entrypoint.sh.<sub>.<functionsDomain>/<unique>.<sitesDomain>. Dokploy rejects wildcard hosts intemplate.toml, soHostRegexpTraefik labels are added to theappwriteservice (same approach as the existingappwriteblueprint).console_domain(defaultconsole.<main_domain>) feeds_APP_CONSOLE_DOMAINand_APP_CONSOLE_HOSTNAMES, and adds Dokploy routes for the Console at/plus/v1and/v1/realtimeon that host, so the Console reaches the API on its own origin. No wildcard is used._APP_CONSOLE_URL(new in 2.3.0) is set to the console domain, so backend-generated links (OAuth callbacks, emails, VCS comments) point at the Console host._APP_OPTIONS_FORCE_HTTPS=disabledand_APP_ROUTER_AUTO_CERTIFICATES=disabledby default: Dokploy terminates TLS, and forcing HTTPS would break the console/preview URLs when no HTTPS domain is configured yet._APP_COMPUTE_RUNTIMES_NETWORK=dokploy-networkand the executor'sdocker.sock//tmpmounts follow the same pattern as the existingappwriteblueprint._APP_CONSOLE_URL_SCHEMEreplaced by_APP_CONSOLE_URL(removed upstream), newappwrite-mqttservice,_APP_PWNED_PASSWORDS_DSNenv,flutter-3.44sites runtime, console1.1.159and autogravity0.0.11withMODEL_BACKEND=focalnet, and the upstream MongoDB init fix (#13593). The MQTT mqtts/wss ports (8883/8084) are not exposed through Dokploy domains, which only route HTTP/HTTPS.Validation
node build-scripts/generate-meta.js --checkpasses.npx tsx build-scripts/validate-template.ts --dir blueprints/appwrite-2andnpx tsx build-scripts/validate-docker-compose.ts --file blueprints/appwrite-2/docker-compose.ymlpass.docker compose configpasses for the default and for theseparate/embeddingprofiles.depends_onintentionally adds health conditions.References
Checklist
Before submitting this PR, please make sure that:
Issues related (if applicable)
N/A
Screenshots or Videos