alawadi.cloudDocs
Core Concepts

Managed Postgres, MySQL, and Redis

Use platform-managed database add-ons from services in the same project.

Managed add-ons

Managed Postgres, MySQL, and Redis run as restricted platform services inside your project. You create and manage them from the dashboard, and credentials are provided through service links, never pasted into plain environment variables.

The engines are managed for you and fixed: Postgres 16, MySQL 8.4, and Valkey 8 (the Redis-compatible engine). You pick the engine and an instance class; the platform runs and patches the rest.

Where Databases lives

Databases is a top-level item in the dashboard sidebar. Open it to see every managed database across your projects, each with its engine, project, status, and reserved resources. From here you can create a new one or open any database's detail page.

Creating a database

Click New database to open the create dialog. You choose:

  • Project: the project the database joins. It is reachable only by services in that same project, over internal DNS.
  • Engine: PostgreSQL, MySQL, or Redis.
  • Name: a friendly name. The platform slugifies it (you see the slug it will deploy as right under the field).
  • Instance class: a named, fixed resource bundle. Memory is the headline and vCPU is bundled with it, so you choose a class by how much of your data needs to live in memory. Postgres and MySQL share a balanced ladder (db.micro through db.xlarge); Redis uses a memory-optimized ladder (cache.micro through cache.xlarge). The bounds are documented in Add managed Postgres, MySQL, or Redis.
  • Storage: reserved disk for the database, sized separately from the instance class. Storage can grow later but never shrink.
  • Version: shown for Postgres (16) and MySQL (8.4). The engine version is managed, so there is one supported option per engine. Redis runs Valkey 8.
  • Redis options: for Redis only, a persistence toggle (on by default; turn it off for a pure-cache instance) and an eviction policy (maxmemory_policy, default allkeys-lru).

Submitting creates the database and takes you straight to its detail page, where it provisions in the background.

Backup and restore coverage

Coverage differs by engine; “managed” does not mean every engine has the same recovery path:

  • PostgreSQL and MySQL have a Backups & restore tab for on-demand backups and point-in-time restore. A restore creates a new database instance so you can verify it before re-linking applications.
  • Redis (Valkey) has no platform backup or point-in-time restore today. The persistence toggle controls how Redis writes locally; it is not an independent backup.

The platform does not publish one blanket RPO or RTO across all three engines. Keep a tested independent copy of critical data.

The detail page

A database's detail page has a connection card and a linked services section.

The connection card shows the internal connection details the platform fills in for you:

  • Internal host: the in-cluster DNS name. It always uses the project's namespace, which the platform manages:
    • Postgres read/write host: <service>-rw.<namespace>.svc.cluster.local:5432.
    • MySQL host: moco-<service>-primary.<namespace>.svc.cluster.local:3306.
    • Redis host: <service>.<namespace>.svc.cluster.local:6379.
  • Port: 5432 (Postgres), 3306 (MySQL), or 6379 (Redis).
  • Connection variable: the environment variable your app reads: DATABASE_URL for Postgres and MySQL, REDIS_URL for Redis.

The card never shows a password. Credentials are injected only by linking the database to a container app, and they stay in a Kubernetes Secret.

How credentials reach your app

You never see, copy, or set the password by hand. From the database detail page, use Link to container to pick a container app in the same project. The platform then injects the connection variable (DATABASE_URL for Postgres and MySQL, REDIS_URL for Redis) into that container as a single connection URL (host plus credentials), wired to the Kubernetes Secret through a secretKeyRef, and re-rolls the container so the value is present. Your app reads that one variable instead of typing a host or password.

The database is always the provider in a link; the consumer is a generic container app. The linked services list on the detail page shows every container this database is wired into.

To add and link a database step by step, see Add managed Postgres, MySQL, or Redis. That page also documents the API (curl) path for automation.

On this page