Docs
Databases
Managed Postgres, MySQL, MariaDB, MongoDB, and Redis on Swarm.
Service types
- PostgreSQL, MySQL, MariaDB, MongoDB, Redis
- Each gets env, start/stop, logs, monitoring, backups and settings in the panel
- Credentials are generated server-side and stored encrypted at rest
- MongoDB replica sets are not supported — a single-node set never started, so the option is refused rather than silently broken
Version picker
General → Version offers a short list of curated tags per engine with an end-of-life note where one applies, and fills the Docker image field for you. Custom image… unlocks the field again for a variant, a fork or a pinned digest.
- Downgrades are refused: the volume is already written in the newer on-disk format and the container would crash-loop. Create a new service on the older version and restore a backup into it
- Major upgrades ask for a confirmation — Postgres in particular will not start on a data directory initialised by an older major, so take a backup first
- Bumps inside one major, and any Redis change, go through without a prompt
- Postgres 18 changed its image layout; Nixploy pins PGDATA inside the mounted volume so an upgrade cannot silently start an empty cluster
- The image only takes effect on the next Reload
Additional databases
One instance can host more than one logical database. Connection → Additional databases creates a database plus an owning user inside the running container — a role and database on Postgres, a database with a granted user on MySQL/MariaDB, a dbOwner user on MongoDB. Redis is not offered: it has one keyspace.
- The service must be running: Nixploy reaches the engine with docker exec, never over the network
- The password is generated server-side, stored encrypted, and redacted for members without the secrets.read capability
- Names are restricted and engine-owned names are rejected; the SQL is piped over stdin so no password appears in ps on the host
- Deleting drops the database and its user, with no undo — and scheduled backups only cover the primary database
Reaching a database
Prefer the internal URL (<appName>:5432) from services in the same environment. A managed database publishes no host port unless you set one, and it never joins the shared, Traefik-facing network.
Swarm's host-mode publishing binds every interface — there is no loopback-only form — so an external port is a real internet-facing listener. Privileged ports, the well-known database ports and the platform's own ports are refused; firewall the rest at the host and keep the generated password. For several TCP services behind one port with SNI, use a TCP domain instead.
Backups
Schedule dumps to an S3-compatible or local destination, run them manually, check the run history, verify a stored dump into a throwaway container, restore from the panel, and set keep-latest retention. Redis is dumped with BGSAVE and the whole data directory (RDB plus the AOF) is archived. See Backups for volume and instance backups.
Also see the repository guides under docs/ · REST API reference
