Skip to Content
SeyloDocs

Databases

Postgres, MySQL, MariaDB, MongoDB and Redis on the project's private network, with web UIs, shells, TLS exposure and backups.

Edit on GitHub

Create a database

In a project, click Add a service, pick Database, then the engine and, optionally, the version (empty takes the newest supported one):

EngineVersions
PostgreSQL17, 16, 15
MySQL8.4, 8.0
MariaDB11.8, 11.4, 10.11
MongoDB8.0, 7.0
Redis8.2, 7.4

Seylo generates the credentials and keeps them encrypted. The database is only reachable from services of the same project on the same node, by its service name.

Connect from an app

The database's Connection tab shows the Internal connection: URL, host, port, database, user and password, for services on the same node in this project.

Reference it from the app's environment instead of copying it, so a password reset reaches the app on its next deploy:

DATABASE_URL=${{db.INTERNAL_URL}}

See Environment variables for the other variables a database offers.

Web UI and shell

The Tools section on the Connection tab has:

  • Web UI: pgweb for Postgres, phpMyAdmin for MySQL and MariaDB, mongo-express for MongoDB and Redis Commander for Redis. It starts when you open it, already signed in, and sleeps again after a few idle minutes, so it costs nothing while unused. It is opened through the node's wildcard domain with a one-time ticket from the panel and never gets a port of its own, so the node needs a wildcard domain.
  • Database shell: psql, mysql/mariadb, mongosh or redis-cli, already signed in, in the browser.

Expose with TLS

To reach the database from your laptop or from another node, turn on Exposed. The agent opens a port on the node and the panel creates a separate user that must use SSL; the internal URL and user do not change.

Exposure settings:

SettingWhat it does
Allowed IPsOnly these IPs or CIDRs may connect. Empty allows anywhere.
TLS host nameA name that points at the node gets a Let's Encrypt certificate. Empty uses a self-signed certificate.
PortThe public port. Empty keeps the current one or picks a free port.

Postgres, MySQL and MariaDB serve TLS themselves and refuse plain logins for the exposed user. For MongoDB and Redis the agent terminates TLS on the exposed port. MariaDB always uses its own self-signed certificate, even with a TLS host name.

The Exposed connection URL (${{db.EXPOSED_URL}}) is what services on other nodes use. With a self-signed certificate, tell the client to require TLS without checking the certificate (for Postgres, sslmode=require).

Reset a password

Reset password (the admin user) and Reset the exposed password create a new password inside the running database. Services that reference it get the new value on their next deploy or restart; anything else that uses the old one stops connecting. You type the service name to confirm.

Backups

On the database's Backups tab, schedule dumps to an S3-compatible bucket. Each run uses the engine's own dump tool. See Backups.

On this page