如何在Ubuntu 18.04 LTS上使用Nginx(LEMP)安装phpMyAdmin
本教程将向您展示如何在Ubuntu 18.04上使用Nginx,MariaDB和PHP7.2(LEMP)安装phpMyAdmin。 phpMyAdmin是一个免费的开放源代码的基于Web的数据库管理工具,用PHP编写。 它为用户提供了图形Web界面来管理MySQL或MariaDB数据库。 您还将学习如何在phpMyAdmin上启用两因素身份验证。
先决条件
要遵循本教程,您需要在本地计算机或远程服务器上运行Ubuntu 18.04 OS。 如果您正在寻找VPS(虚拟专用服务器),则可以单击此特殊链接以在DigitalOcean上获得$ 100的免费信用。 (仅适用于新用户)。 如果您已经是DigitalOcean用户,则可以单击此特殊链接以在Vultr上获得$ 50的免费信用(仅适用于新用户)。
假定您已经在Ubuntu 18.04上安装了LEMP堆栈。 如果没有,请查看以下教程。
- 如何在Ubuntu 18.04上安装LEMP堆栈(Nginx,MariaDB,PHP7.2)
有了这一点,让我们开始安装phpMyAdmin。
步骤1:下载并安装phpMyAdmin
phpMyAdmin包含在Ubuntu 18.04软件存储库中,因此我们可以使用以下命令轻松安装它。
sudo apt update sudo apt install phpmyadmin
在安装过程中,它将提示您选择要配置的Web服务器。 Nginx不在列表中,因此请按Tab键并单击“确定”以跳过此步骤。
接下来,选择“是”以创建一个新数据库,并让 dbconfig-common
配置它。
这还将创建一个新的数据库用户,名为 phpmyadmin
。 给该用户输入密码。
完成后,将新建一个名为 phpmyadmin
创建并且数据库用户 phpmyadmin
具有管理此数据库的必要特权。 如果您像我一样好奇,可以登录MariaDB并检查哪些特权 phpmyadmin
用户已被授予。
您可以使用以下命令登录MariaDB服务器。
sudo mysql -u root
然后检查特权。
show grants for [email protected];
输出:
如您所见,用户 phpmyadmin
对数据库拥有所有特权 phpmyadmin
。 现在您可以执行以下命令退出:
exit;
步骤2:创建Nginx服务器块
为了能够访问phpMyAdmin Web界面,我们需要通过运行以下命令来创建Nginx服务器块。
sudo nano /etc/nginx/conf.d/phpmyadmin.conf
我们将对其进行配置,以便我们可以通过子域访问phpMyAdmin。 将以下文本粘贴到文件中。 更换 pma.example.com
与您的实际子域,不要忘记为其创建一个A记录。
server { listen 80; listen [::]:80; server_name pma.example.com; root /usr/share/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/php7.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } location ~ /.ht { deny all; } }
您的phpMyAdmin文件位于 /usr/share/phpmyadmin/
目录。 保存并关闭文件。 然后测试Nginx配置。
sudo nginx -t
如果测试成功,请重新加载Nginx以使更改生效。
sudo systemctl reload nginx
现在您应该能够通过以下方式访问phpMyAdmin Web界面
pma.example.com
请注意,phpMyAdmin在最新版本的Firefox中将无法使用。 您可以使用Google Chrome浏览器访问phpMyAdmin Web界面。 在登录表单中输入用户凭据之前,让我们启用HTTPS。
步骤3:安装TLS证书
为了保护phpMyadmin Web界面的安全,我们可以安装免费的Let’s Encrypt TLS证书。 从Ubuntu 18.04软件存储库安装Let’s Encrypt客户端,如下所示:
sudo apt install certbot python3-certbot-nginx
Python3-certbot-nginx
是Certbot的Nginx插件。 现在运行以下命令以获取并安装TLS证书。
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --must-staple -d pma.example.com --email your-email-address
说明:
- –nginx:使用Nginx身份验证器和安装程序
- –同意:同意让我们加密服务条款
- –重定向:添加301重定向。
- –hsts:将Strict-Transport-Security标头添加到每个HTTP响应。
- –staple-ocsp:启用OCSP装订。
- –必须装订:将OCSP必须装订扩展名添加到证书中。
- -d 标志后面是域名列表,以逗号分隔。 您最多可以添加100个域名。
- -电子邮件:用于注册和恢复联系的电子邮件。
系统将询问您是否要接收来自EFF(电子前沿基金会)的电子邮件。 选择Y或N后,将自动为您获取并配置您的TLS证书,如以下消息所示。
测试您的TLS证书
转到ssllabs.com测试TLS证书和配置。 你应该得到 A + 因为启用了HSTS。
解决登录错误
如果使用MariaDB根帐户登录,则可能会看到以下错误。
#1698 - Access denied for user 'root '@'localhost'
和
mysqli_real_connect(): (HY000/1698): Access denied for user 'root '@'localhost'
如果您使用用户登录 phpmyadmin
,您不会看到上述错误。 但是,用户 phpmyadmin
只能用于管理 phpmyadmin
数据库。 错误的原因是,默认情况下,通过unix_socket插件对MariDB超级用户进行身份验证,而不是使用 mysql_native_password
插入。 要解决此问题,我们可以创建另一个管理员用户,并将所有特权授予新的管理员用户。
从命令行登录到MariaDB服务器。
sudo mariadb -u root
创建一个具有密码身份验证的管理员用户。
create user [email protected] identified by 'your-chosen-password';
在所有数据库上授予所有特权。
grant all privileges on *.* to [email protected] with grant option;
刷新特权并退出;
flush privileges; exit;
现在,您可以使用管理员帐户登录phpMyAmin并管理所有数据库。
使用其他端口
使用另一个端口而不是默认端口443可能是有利的,因为您可以在不使用phpMyAdmin来防止黑客活动时关闭该端口,或者可以指定允许哪些IP地址访问该端口。 配置非常简单。 只需打开服务器阻止文件。
sudo nano /etc/nginx/conf.d/phpmyadmin.conf
找到以下两行:
listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot
将443更改为其他端口,例如8443。
listen [::]:8443 ssl ipv6only=on; # managed by Certbot listen 8443 ssl; # managed by Certbot
您还可以如下所示将http2添加到它们中,以启用HTTP / 2协议。
listen [::]:8443 ssl http2 ipv6only=on; # managed by Certbot listen 8443 ssl http2; # managed by Certbot
保存并关闭文件。 然后测试Nginx配置。
sudo nginx -t
如果测试成功,请重新加载Nginx以使更改生效。
sudo systemctl reload nginx
现在您可以通过以下方式访问phpMyAdmin:
https://pma.example.com:8443
安装最新稳定版本的phpMyAdmin
Ubuntu 18.04存储库随附PHP7.2和phpMyAdmin 4.6.6。 您可以在浏览器标题栏中检查您的phpMyAdmin版本。
但是,自版本4.7.4开始,phpMyAdmin支持PHP7.2。 当您将phpMyAdmin 4.6.6与PHP7.2结合使用时,将看到以下警告消息。
parameter must be an array or an object that implements countable
要解决兼容性问题,我们可以安装phpMyAdmin 4.8,它是撰写本文时最新的稳定版本。 使用下载 wget
。
wget https://files.phpmyadmin.net/phpMyAdmin/4.8.0.1/phpMyAdmin-4.8.0.1-all-languages.zip
然后将其提取。
sudo apt install unzip unzip phpMyAdmin-4.8.0.1-all-languages.zip
备份原始的phpMyAdmin文件。
sudo mv /usr/share/phpmyadmin /usr/share/phpmyadmin-original
将phpMyadmin 4.8移至 /usr/share/phpmyadmin/
目录。
sudo mv phpMyAdmin-4.8.0.1-all-languages /usr/share/phpmyadmin
编辑供应商配置文件。
sudo nano /usr/share/phpmyadmin/libraries/vendor_config.php
找到以下行。
define('CONFIG_DIR', '');
更改为
define('CONFIG_DIR', '/etc/phpmyadmin/');
保存并关闭文件。 然后创建 tmp
文件夹以存储缓存文件。
sudo mkdir /usr/share/phpmyadmin/tmp
将用户所有权和组所有权更改为 www-data
。
sudo chown www-data:www-data /usr/share/phpmyadmin/tmp
现在,您可以使用phpMyAdmin 4.8,而无需重新加载或重新启动Nginx。
启用两因素身份验证
您还可以通过启用双重身份验证来加强phpMyAdmin,这是4.8版中新增的功能。 要启用它,请登录phpMyAdmin。 然后去 Settings
-> Two-factor authentication
然后选择 身份验证应用程序(2FA)。
单击后 配置两因素身份验证 按钮,系统会显示一个QR码,您需要使用手机上的两因素身份验证应用程序对其进行扫描。
Google Authenticator是一个受欢迎的2FA应用程序,但我推荐FreeOTP,它是由Red Hat开发的开源2FA应用程序。 输入2FA应用程序生成的身份验证代码后,就会启用两因素身份验证。 如果现在注销并重新登录,则除了用户名和密码外,还需要输入验证码。
证书自动续订
要自动续订我们的加密证书,只需编辑根用户的crontab文件。
sudo crontab -e
然后在底部添加以下行。
@daily certbot renew --quiet && systemctl reload nginx
--quiet
标志将禁止标准输出。 如果要接收标准错误,请在crontab文件的开头添加以下行。
MAILTO=your-email-address
为此,需要重新加载Nginx才能将新证书提供给客户端。
我希望本教程可以帮助您在Ubuntu 18.04 LTS上使用Nginx安装phpMyAdmin。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 照顾自己。