Adminer
Adminer is a browser interface for a database — browsing tables, running queries,
editing rows. One container, and no database of its own: it connects to the
databases other stacks already run. Whoever reaches it has full access to those
databases, DROP TABLE included, so the stack ships VPN-only with a hard rate
limit.
Last run on a host 8 Nov 2026
Pinned at 6.3.0-standalone (released 3 Nov 2026) · the newest upstream release
Needs: Traefik running, a domain, and a database somewhere to point it at.
Installation
Section titled “Installation”From apps/adminer/:
-
Copy the environment file and set
APP_TRAEFIK_HOSTandTZ:Terminal window cp .env.example .env -
Start it:
Terminal window docker compose up -d -
Open
https://<APP_TRAEFIK_HOST>. There is no setup and no account to create — you type database credentials at each login, and nothing is stored.
Verify
Section titled “Verify”docker compose ps # one service, healthyThe login form appearing is all the stack itself can demonstrate. Whether it can reach a database is the next section.
Reaching a database
Section titled “Reaching a database”Blueprint stacks keep their databases on internal networks, so Adminer cannot see them by default. That is deliberate — the isolation is the point — and connecting means joining a network on purpose.
One database, for as long as you need it
Section titled “One database, for as long as you need it”docker network connect wordpress-internal adminer-appThen in the login form:
| Field | Value |
|---|---|
| Server | wordpress-db |
| Username | wp_user |
| Password | from apps/wordpress/.secrets/db_pwd.txt |
| Database | wordpress |
Disconnect when you are done:
docker network disconnect wordpress-internal adminer-appThe same few databases, permanently
Section titled “The same few databases, permanently”Add the networks to docker-compose.yml and declare each as external: true.
Every target stack has to be running before Adminer starts.
A database on another machine
Section titled “A database on another machine”Enter the hostname or address in the login form directly. What it takes to reach it depends on your network rather than on this stack.
Backup
Section titled “Backup”| Database | None of its own. |
| State | None. Connection details are typed per session and never kept. |
| Quiescing | Not applicable. |
Nothing to back up: Adminer is a client, not a store.
It earns one line in a restore plan for the opposite reason. After restoring a database, bring Adminer up, confirm the tables hold the rows you expect, and take it down again — a check on the restore without installing a database client on the host.
Updates
Section titled “Updates”-
Read the changelog. The 6.x line refuses servers that accept any password (PostgreSQL with
trustauthentication, for example), drops several plugins and needs an ES6 browser;UPSTREAM.mdlists the changes per release. -
Raise
APP_TAGin.env, then:Terminal window docker compose pull && docker compose up -d -
Log in to one database. There is no state to migrate, so a version that works works immediately.
Troubleshooting
Section titled “Troubleshooting”The login form rejects a server name that exists. Adminer is not on that stack’s network. Connect it as shown above.
Sessions end after about twenty minutes idle. Upstream behaviour for an administration tool. Long query sessions need re-authentication.
Queries are gone after logging out. Adminer keeps no history between sessions. Keep anything you want to reuse in a local file.
Repository files
Section titled “Repository files”apps/adminer/README.md— setup, the three connection options, security modelapps/adminer/UPSTREAM.md— source and upgrade checklist
Official sources
Section titled “Official sources”© 2026 SecDockBlueCode Apache-2.0Site content CC BY-NC 4.0