Analytics cookies only (Google Analytics, PostHog). No ad networks, no cross-site tracking. See our privacy policy.
Self-host phpMyAdmin
updated Oct 2026deployed by usprices checked · Jul 2026Install verified on Ubuntu 26.04 · Oct 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →
The long-standing web interface for MySQL and MariaDB: browse and edit tables, run SQL, manage users and privileges, import and export. Shipped as a PHP application on Apache, usually run next to the database it manages.
Runs on a VPS from $4/mo (Kamatera 1GB, 1 GB RAM) · prices checked Sep 2026
Our recommendation
Pick phpMyAdmin when the database is MySQL or MariaDB and you want the interface most hosting guides assume: browse and edit tables, run SQL, manage users and privileges, import and export. It is GPL-2.0 PHP, and the Docker image comes as `apache` (the default, with the web server bundled), `fpm` and `fpm-alpine` (PHP-FPM only, for use behind your own web server). Our snippet is a Compose file with the Apache image pinned to the 5.2.3 release next to a throwaway MariaDB, with `PMA_HOST` pointing at it. We did not find an upstream RAM minimum, so our 256 MB floor is an estimate. Adminer covers several engines in one interface, pgAdmin and pgweb are the PostgreSQL options, and CloudBeaver is the JDBC-based alternative.
What you need
Any VPS with at least 256 MB of RAM
A domain you control — most self-hosted setups need HTTPS in front of them
phpMyAdmin's Docker Hub page flags these before you expose it:
non-negotiableIt logs in to the database server with database credentials, so anyone who can reach port 8080 can try your database users. Keep it on a private network or behind a reverse proxy with its own authentication and TLS; the page covers SSL between phpMyAdmin and the database (PMA_SSL), not HTTPS for the web interface.
non-negotiablePMA_HOST fixes the server, PMA_PORT the port. PMA_ARBITRARY=1 lets users type any server on the login page, which the page presents as an option for trusted environments only; we leave it off.
non-negotiableCustom settings go in config.user.inc.php mounted at /etc/phpmyadmin/, and sessions persist across container updates only if you mount /sessions. The Apache variant listens on container port 80, which our snippet maps to 8080.
non-negotiableThe MariaDB container exists so there is something to log in to; its root password is generated into .env and the data sits in the db_data volume. The repository's main branch already carries a 6.0 changelog, but the latest release is 5.2.3 and that is what we pin.