Install phpMyAdmin with Nginx (LEMP) on Ubuntu 22.04 LTS
This tutorial will be showing you how to install phpMyAdmin with Nginx, MariaDB and PHP8.1 (LEMP) on Ubuntu 22.04. phpMyAdmin is a free and open-source web-based database management tool written in PHP. It provides a graphical web interface for users to manage MySQL or MariaDB database.
phpMyAdmin allows administrators to:
- browse through databases and tables;
- create, copy, rename, alter and drop databases;
- create, copy, rename, alter and drop tables;
- perform table maintenance;
- add, edit and drop fields;
- execute any SQL-statement, even multiple queries;
- create, alter and drop indexes;
- load text files into tables;
- create and read dumps of tables or databases;
- export data to SQL, CSV, XML, Word, Excel, PDF and LaTeX formats;
- administer multiple servers;
- manage MySQL users and privileges;
- check server settings and runtime information with configuration hints;
- check referential integrity in MyISAM tables;
- create complex queries using Query-by-example (QBE), automatically
- connecting required tables;
- create PDF graphics of database layout;
- search globally in a database or a subset of it;
- transform stored data into any format using a set of predefined functions, such as displaying BLOB-data as image or download-link;
- manage InnoDB tables and foreign keys;
Prerequisites
To follow this tutorial, you need to have an Ubuntu 22.04 OS running on a remote server.
If you are looking for a virtual private server (VPS), I recommend Kamatera VPS, which features:
- 30 days free trial.
- Starts at $4/month (1GB RAM)
- High-performance KVM-based VPS
- 9 data centers around the world, including the United States, Canada, UK, Germany, The Netherlands, Hong Kong, and Isreal.
Follow the tutorial linked below to create your Linux VPS server at Kamatera.
It is assumed that you have already installed LEMP stack on Ubuntu 22.04. If not, please check out the following tutorial.
With that out of the way, let’s get started with installing phpMyAdmin.
Step 1: Download phpMyAdmin on Ubuntu 22.04 Server
phpMyAdmin is included in Ubuntu 22.04 software repository, but it’s better to install the latest version using the upstream package. Run the following command to download it.
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip
Then extract it.
sudo apt install unzip unzip phpMyAdmin-latest-all-languages.zip
Move phpMyadmin to /var/www/
directory.
sudo mkdir -p /var/www/ sudo mv phpMyAdmin-5.2.0-all-languages /var/www/phpmyadmin
Then make the web server user (www-data
) as the owner of this directory.
sudo chown -R www-data:www-data /var/www/phpmyadmin
Step 2: Create a MariaDB Database and User for phpMyAdmin
Log in to MariaDB console.
sudo mysql -u root
Create a new database for phpMyAdmin using the following SQL command. This tutorial names it phpmyadmin
, you can use whatever name you like for the database.
CREATE DATABASE phpmyadmin DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
The following SQL command will create the phpmyadmin
database user and set a password, and at the same time grant all permission of the new database to the new user so later on phpMyAdmin can write to the database. Replace red texts with your preferred password.
GRANT ALL ON phpmyadmin.* TO 'phpmyadmin'@'localhost' IDENTIFIED BY 'your_preferred_password';
Flush the privileges table and exit the MariaDB console.
FLUSH PRIVILEGES; EXIT;
Step 3: Install Required and Recommended PHP Modules.
Run the following command to install PHP modules required or recommended by phpMyAdmin.
sudo apt install php-imagick php-phpseclib php-php-gettext php8.1-common php8.1-mysql php8.1-gd php8.1-imap php8.1-curl php8.1-zip php8.1-xml php8.1-mbstring php8.1-bz2 php8.1-intl php8.1-gmp
Step 4: Create Nginx Server Block for phpMyAdmin
To be able to access the phpMyAdmin web interface, we need to create a Nginx server block by running the following command.
sudo nano /etc/nginx/conf.d/phpmyadmin.conf
We will configure it so that we can access phpMyAdmin via a sub-domain. Paste the following text into the file. Replace pma.example.com
with your actual sub-domain and don’t forget to create DNS A record for it.
server {
listen 80;
listen [::]:80;
server_name pma.example.com;
root /var/www/phpmyadmin/;
index index.php index.html index.htm index.nginx-debian.html;
access_log /var/log/nginx/phpmyadmin_access.log;
error_log /var/log/nginx/phpmyadmin_error.log;
location / {
try_files $uri $uri/ /index.php;
}
location ~ ^/(doc|sql|setup)/ {
deny all;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include snippets/fastcgi-php.conf;
}
location ~ /\.ht {
deny all;
}
}
Your phpMyAdmin files are in /var/www/phpmyadmin/
directory. Save and close the file. Then test Nginx configurations.
sudo nginx -t
If the test is successful, reload Nginx for the changes to take effect.
sudo systemctl reload nginx
Now you should be able to access phpMyAdmin web interface via
pma.example.com
Step 5: Installing TLS Certificate
To secure the phpMyadmin web interface, we can install a free Let’s Encrypt TLS certificate. Install the Let’s Encrypt client from Ubuntu 22.04 software repository like below:
sudo apt install certbot python3-certbot-nginx
Python3-certbot-nginx
is the Nginx plugin for Certbot. Now run the following command to obtain and install TLS certificate.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp -d pma.example.com --email [email protected]
Where:
- –nginx: Use the Nginx authenticator and installer
- –agree-tos: Agree to Let’s Encrypt terms of service
- –redirect: Enforce HTTPS by 301 redirect.
- –hsts: Add the Strict-Transport-Security header to every HTTP response.
- –staple-ocsp: Enables OCSP Stapling.
- –must-staple: Adds the OCSP Must Staple extension to the certificate.
- -d flag is followed by a list of domain names, separated by a comma. You can add up to 100 domain names.
- –email: Email used for registration and recovery contact.
You will be asked if you want to receive emails from EFF(Electronic Frontier Foundation). After choosing Y or N, your TLS certificate will be automatically obtained and configured for you, which is indicated by the message below.
Step 6: Run the phpMyAdmin Setup Wizard
Enter the following in your browser address bar.
https://pma.example.com/setup
Click the New Server
button to configure a server.
Then simply click the Apply
button.
Next, click the Display button to show the configuration file.
In the /var/www/phpmyadmin/
directory, create the config.inc.php file.
sudo nano /var/www/phpmyadmin/config.inc.php
Copy the content of config.inc.php
from the phpMyAdmin setup page and paste them into /var/www/phpmyadmin/config.inc.php
file.
Now you can go back to the main web page: https://pma.example.com/
and login.
Step 7: Troubleshoot phpMyAdmin Login Error
If you log in with MariaDB root
account, you may see the following error.
#1698 - Access denied for user 'root '@'localhost'
and
mysqli_real_connect(): (HY000/1698): Access denied for user 'root '@'localhost'
If you log in with user phpmyadmin
, you won’t see the above error. However, user phpmyadmin
can only be used to administer the phpmyadmin
database.
The cause of the error is that by default MariaDB root user is authenticated via the unix_socket plugin, instead of using the mysql_native_password
plugin. To get around this issue, we can create another admin user and grant all privileges to the new admin user.
Log into the MariaDB server from the command line.
sudo mariadb -u root
Create an admin user with password authentication.
create user admin@localhost identified by 'your-chosen-password';
Grant all privileges on all databases.
grant all privileges on *.* to admin@localhost with grant option;
Flush privileges and exit;
flush privileges; exit;
Now you can log into phpMyAdmin with the admin account and manage all databases.
Step 8: Restricting Access to the /setup Directory
Since the phpMyAdmin setup is finished, there’s no need to allow access to the /setup
directory.
Edit Nginx configuration file.
sudo nano /etc/nginx/conf.d/phpmyadmin.conf
Add the following code snippet to this fiel.
location ~ ^/(doc|sql|setup)/ { deny all; }
Save and close the file. Then test Nginx configurations.
sudo nginx -t
If the test is successful, reload Nginx for the changes to take effect.
sudo systemctl reload nginx
TLS Certificate Auto-Renewal
To automatically renew Let’s Encrypt certificate, simply edit root user’s crontab file.
sudo crontab -e
Then add the following line at the bottom.
@daily certbot renew --quiet && systemctl reload nginx
Reloading Nginx is needed for it to pick up the new certificate to clients.
Use Webmin to Manage MySQL/MariaDB Databases
Webmin is a general Linux server admin panel. It also allows you to manage MySQL/MariaDB databases from a graphical user interface, although it’s not as feature-rich as phpMyAdmin when it comes to database management.
- Create databases
- Create database users
- Grant permissions to database users.
How to Install Webmin on Ubuntu Server
Wrapping Up
I hope this tutorial helped you install phpMyAdmin with Nginx on Ubuntu 22.04 LTS. As always, if you found this post useful, then subscribe to our free newsletter to get more tips and tricks. Take care:)
Lots of poor configuration tutorials out there. This is not one of them. Worked a charm right from the get-go. I used a vhost in nginx’s sites-available configuration directory. No issues whatsoever.
You pixelated the domain in the address field but you didn’t in the window XD, you should double check. Excellent article by the way!
So what is fastcgi-php.conf;? You want to include it but don’t say what’s in there? Or am I a fucking idiot?
It’s a file in
/etc/nginx/snippets
, which comes with Nginx installed from Ubuntu repository. This file contains FastCGI configurations, which areHello, I have this error during the configuration ERROR 1045 (28000): Access denied for user ‘root’@’localhost’
Previously I followed the instructions for “How to Install Nginx, MariaDB and PHP7 (LEMP Stack) on Ubuntu 16.04 LTS”
Then, “How to Fix MariaDB Plugin ‘unix_socket’ is not loaded Error” because I had the Access denied for user ‘root’@’localhost’ issue.
Could you help me ?
Hi, if you followed the “How to Fix MariaDB Plugin ‘unix_socket’ is not loaded Error” post, then you should be able to log in to MariaDB without problems. Make sure you enter the correct password.
All good until this:
/etc/nginx/conf.d/your-site.conf
what is “your-site”.. ?
Hi, this Nginx configuration is used for sub-directory installation. That is, phpMyAdmin is installed as a sub-directory of an existing Nginx virtual host. (www.example.com/phpmyadmin).
I recently wrote a tutorial on Ubuntu 18.04 for sub-domain installation (phpmyadmin.example.com). You can check it out here: https://www.linuxbabe.com/ubuntu/install-phpmyadmin-nginx-lemp-ubuntu-18-04-lts
You need to replace
/etc/nginx/conf.d/your-site.conf
with your existing Nginx virtual host file in/etc/nginx/conf.d
directory or/etc/nginx/sites-enabled/
directory.. If you don’t have such files, you can just use the/etc/nginx/conf.d/default.conf
or/etc/nginx/sites-enabled/default
file.What is the purpose of
a sandbox database or is there more to it?
I know this is late but I followed strict the tutorial but when I want to access phpmyadmin I get a 404 not found. What can be wrong?
I want to use it together with iredmail which I have installed on the server