alawadi.cloudDocs
Guides

Deploy a Marketplace app in one click

Pick a curated community app like WordPress or n8n and deploy it in one click — the platform creates and links its managed database, attaches storage, and brings it up on a public URL.

The Marketplace is a curated catalogue of popular community apps — WordPress, n8n, Uptime Kuma, and more — that you deploy in one click. You pick the app and name it; the platform composes everything else: the container app itself, a managed database when the app needs one, persistent app storage where the app keeps files, the service link, and a public URL with managed TLS.

What "curated" means

Every Marketplace app runs a static image the platform pins to a recent stable version:

  • Images come only from official Docker images, vendor-verified publishers, or images the platform builds itself.
  • Every image reference is immutable — pinned to an exact digest and security-scanned before it enters the catalogue and before any change to it.
  • The platform ships version updates as catalogue updates: a new pinned version applies to new deployments. A running app is never auto-updated behind your back.

Each card in the Marketplace shows the exact pinned version it deploys.

Deploy an app

Open Marketplace in the dashboard and pick an app. The card shows the pinned version, the category, and whether the app needs a managed database.
Give the app a name and choose the project it joins — an existing project or a new one you create in the same dialog. The preset resources and a price estimate are shown before you confirm; a Marketplace app is billed exactly like the same stack built by hand.
Confirm. One action does the rest: the platform creates the managed database if the app requires one (MySQL or PostgreSQL), links it into the app so the connection is injected automatically (the same service link a hand-built stack uses), attaches app storage where the app keeps files, and starts the app.
The app comes up on its own *.alawadi.cloud subdomain with managed TLS. If a database was created, its connection details are shown once on the success screen — the app itself is already wired to it, so there is nothing to copy in by hand.

The pinned-image model: no deploy surface, by design

The image is locked

A Marketplace app has no Deploy tab and no image controls. You cannot push a new image to it, change its tag, roll it back, or deploy to it from GitHub Actions or your private registry. Any deploy attempt — portal, API, or CI — is rejected with 409 MARKETPLACE_IMAGE_LOCKED.

This is what keeps the catalogue safe: the image that runs is always the exact digest the platform curated, scanned, and pinned. Everything else behaves like a normal container app:

  • Environment variables, live logs, metrics, and restart/stop/start all work as usual.
  • Scaling: stateless apps (Umami, Metabase) can scale out and use autoscaling. Apps with app storage run as a single instance.
  • Custom domains and connected services work as usual.

App storage

Where an app needs disk — WordPress files and plugins, n8n workflow data, Gitea repositories — the platform attaches persistent app storage automatically at deploy time, at the path the app expects. Apps with storage run as a single instance. Stateless apps keep all their state in their managed PostgreSQL instead.

Launch catalogue

AppWhat it isManaged databaseApp storage
WordPressCMS and site builderMySQL — created and linked automaticallyYes — site files
n8nWorkflow automationYes — workflows and credentials
Uptime KumaUptime monitoringYes — monitor data
VaultwardenPassword manager (Bitwarden-compatible)Yes — vault data
UmamiWeb analyticsPostgreSQL — created and linked automatically— (stateless)
MetabaseBI and dashboardsPostgreSQL — created and linked automatically— (stateless)
GiteaGit hostingYes — repositories

A tile marked coming soon cannot be deployed yet — the deploy action stays disabled until the app is available.

Per-app notes

  • WordPress runs a hardened, platform-built image derived from the official WordPress image, so it runs without root privileges under the standard app runtime. It is stock WordPress — you install plugins and themes from the WordPress admin as usual.
  • Vaultwarden: the server admin panel (/admin) is disabled by default — the safe default. Bitwarden apps and browser extensions connect normally.
  • n8n: the encryption key that protects stored credentials is generated for you at deploy time.
  • Uptime Kuma and Gitea keep their data on app storage; Gitea runs the official rootless image.
  • Umami and Metabase run stateless against their managed PostgreSQL: all data lives in the database.

Advanced: the API path

Two endpoints back the Marketplace. List the catalogue:

curl https://api.alawadi.cloud/v1/marketplace/apps \
  -H "Authorization: Bearer $TOKEN"

Each entry carries the app slug, its name and description in English and Arabic, the category, the pinned version and image, the port, requires_db (mysql, postgres, or empty), the storage size, the resource preset, and its status (available or coming_soon).

Deploy an app into a project:

curl -X POST https://api.alawadi.cloud/v1/projects/$PROJECT_ID/marketplace/n8n \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "name": "my-blog", "display_name": "My Blog" }'

The 201 response returns the new container and — when the app required a database — a database object with its show-once connection block.

Errors

CodeStatusMeaning
MARKETPLACE_APP_UNKNOWN404The slug is not in the catalogue.
MARKETPLACE_APP_UNAVAILABLE409The app is coming_soon and cannot be deployed yet.
MARKETPLACE_IMAGE_LOCKED409A deploy was attempted on a Marketplace app. The pinned image cannot be changed.
MARKETPLACE_DISABLED403The Marketplace is disabled on the platform.

See Error codes for the general error shape.

On this page