如何在 Debian 12、11 或 10 上使用 Nginx 安装 phpMyAdmin

phpMyAdmin 是一个广泛使用的开源工具,用 PHP 编写,旨在通过 Web 管理 MySQL 和 MariaDB。它提供了一个直观的图形界面,用于执行各种数据库操作,例如创建、修改和删除数据库、表、字段或行、执行 SQL 语句以及管理用户权限。在 Debian 12、11 或 10 上安装 phpMyAdmin 需要手动设置 LEMP 堆栈(Linux、NGINX、MySQL/MariaDB、PHP),然后下载并配置最新版本的 phpMyAdmin。

使用 phpMyAdmin 可简化数据库管理,即使不习惯使用命令行进行数据库操作的用户也可以使用它。本指南将引导您完成手动安装 LEMP 堆栈、配置 phpMyAdmin 和保护设置的步骤。

在 Debian 上为 phpMyAdmin 安装 LEMP Stack

步骤1:刷新Debian系统

开始使用最新的软件包更新您的 Debian 系统,以实现安全且无错误的设置。此主动步骤旨在减少安装过程中发生冲突的可能性。

sudo apt update && sudo apt upgrade

如果您更新内核或许多软件包,则需要重新启动。

第 2 步:安装 Nginx

首先,安装 Nginx 来建立 LEMP 堆栈。执行以下命令:

sudo apt install nginx

通常,系统在安装后默认启用 Nginx 服务。但是,请务必谨慎检查其状态并确保其按预期运行:

systemctl status nginx

如果服务器未处于活动状态,请使用以下命令启用 Nginx 并确保它在每次重启时自动启动:

sudo systemctl enable nginx --now

此命令安装 Nginx 的默认版本。

注意:如果您有兴趣部署最新的稳定版或主线版 Nginx,请考虑遵循我们的指南 如何在 Debian 12、11 或 10 Linux 上升级 Nginx。

步骤3:安装MariaDB

接下来,在 LEMP 堆栈设置中安装数据库组件。许多人选择 MariaDB 而不是 MySQL,因为它具有卓越的性能和附加功能。

要安装 MariaDB,请运行以下命令:

sudo apt install mariadb-server mariadb-client

注意:如果你想要安装 MariaDB.org 官方存储库中的其他版本,请参阅我们的指南 在 Debian 12、11 或 10 Linux 上安装 MariaDB 11.x 或 10.x。

完成后,确认 MariaDB 服务的启用和正确功能,类似于您对 Nginx 的验证:

systemctl status mariadb

如果 MariaDB 未激活,请使用以下命令激活它并确保它在重启时启动。

sudo systemctl enable mariadb --now

为了增强 MariaDB 的安全性,请执行提供的安全脚本, mysql_secure_installation在安装过程中。全新安装的 MariaDB 的默认设置通常会留下恶意行为者可以利用的漏洞。

sudo mysql_secure_installation

执行安全脚本将引导您完成几个步骤来加强 MariaDB 的安全性。这些步骤包括设置 root 密码、限制远程访问、删除匿名用户帐户以及删除测试数据库。

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] Y <---- Type Y then press the ENTER KEY.
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] Y <---- Type Y then press the ENTER KEY.
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y <---- Type Y then press the ENTER KEY.
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y <---- Type Y then press the ENTER KEY.
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y <---- Type Y then press the ENTER KEY.
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y <---- Type Y then press the ENTER KEY.
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

步骤4:安装PHP

安装 PHP 服务以完成 LEMP 堆栈设置。PHP 通过 PHP-FPM 服务和 phpMyAdmin 所需的附加模块充当 Nginx 和 MariaDB 之间的桥梁。

注意:如果您希望安装特定版本的 PHP,请参阅我们的指南 安装 Debian 12、11 或 10 Linux 上可用的任何 PHP 8.x 版本。

要在 Debian 系统上部署 PHP 和 PHP-FPM 以及必要的模块,请执行以下操作:

sudo apt install php-fpm php-mbstring php-bcmath php-xml php-mysql php-common php-gd php-cli php-curl php-zip php-gd

PHP 安装后,确认 PHP 服务的状态,就像对 MariaDB 和 Nginx 所做的那样。

例如,对于 Debian Bookworm 上的默认版本 PHP 8.2,具体命令是:

systemctl status php8.2-fpm

如果 PHP 服务保持不活动状态,请使用以下命令启用它并确保它在每次重启时自动启动。

sudo systemctl enable php-fpm --now

使用 Nginx 和 Debian 完成 phpMyAdmin

本节介绍获取 phpMyAdmin 档案以及设置必要目录、权限和数据库条目的过程。

步骤 1:为 phpMyAdmin 创建超级用户

通常,您可以使用 root 用户访问 phpMyAdmin。但是,为了遵守强大的安全实践,请创建一个不同的超级用户,而不是使用 root 用户。此概念与 Linux 利用 sudo 用户而不是直接以 root 身份登录的实践一致。

首先,在终端界面上验证自己的身份:

sudo mariadb -u root

验证成功后,后续步骤是在 MariaDB 终端内创建数据库。

CREATE USER PMAUSER IDENTIFIED BY 'password here change';

接下来,创建一个用户并赋予其所需的权限,如下所示:

GRANT ALL PRIVILEGES ON *.* TO 'PMAUSER'@'localhost' IDENTIFIED BY 'password here change' WITH GRANT OPTION;

替换占位符密码 “在此更改密码” 在执行命令之前,使用安全密码是关键。

建立用户并设置权限后,请记住刷新权限以进行更改。

FLUSH PRIVILEGES;

要退出 MariaDB 终端,请使用以下命令。

QUIT;

第 2 步:下载 phpMyAdmin 源代码

本节将介绍如何获取 phpMyAdmin 的源存档。利用命令行终端是一种下载所有语言最新版本的有效方法。

要下载 phpMyAdmin 存档,请在终端中执行以下命令。

DATA="$(wget https://www.phpmyadmin.net/home_page/version.txt -q -O-)"
URL="$(echo $DATA | cut -d ' ' -f 3)"
VERSION="$(echo $DATA | cut -d ' ' -f 1)"
wget https://files.phpmyadmin.net/phpMyAdmin/${VERSION}/phpMyAdmin-${VERSION}-all-languages.tar.gz

如果您需要 phpMyAdmin 的英文版本,请将上一个命令的最后一行替换为以下内容:

wget https://files.phpmyadmin.net/phpMyAdmin/${VERSION}/phpMyAdmin-${VERSION}-english.tar.gz

下载完成后,下一步是通过执行以下命令来提取 phpMyAdmin 档案:

tar xvf phpMyAdmin-${VERSION}-all-languages.tar.gz

步骤3:配置phpMyAdmin

下一阶段涉及使用 mv 命令将所有提取的文件迁移到 /var/www/ 目录中的最终目的地。

sudo mv phpMyAdmin-*/ /var/www/phpmyadmin

当您从源安装 phpMyAdmin 时,您会发现默认情况下不存在 TMP 目录。因此,最好手动创建此目录。

sudo mkdir /var/www/phpmyadmin/tmp

phpMyAdmin 目录包含一个默认的配置示例文件,您需要重命名该文件以便 phpMyAdmin 识别它。使用 CP 命令在 /var/www/phpmyadmin/ 目录中创建默认文件的副本,确保备份。

要将 config.sample.inc.php 复制到 config.inc.php,请执行以下命令:

sudo cp /var/www/phpmyadmin/config.sample.inc.php /var/www/phpmyadmin/config.inc.php

复制文件后,使用首选文本编辑器将其打开。在此示例中,我们使用 nano 文本编辑器:

sudo nano /var/www/phpmyadmin/config.inc.php

phpMyAdmin 使用 Blowfish 密码。要修改此设置,请导航至以 $cfg['blowfish_secret'] 开头的行。

$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

在单引号内指定一个由 32 个随机字符组成的字符串。使用 pwgen 程序作为生成此字符串的便捷方法。执行以下终端命令来安装 pwgen:

这使得所有操作保持清晰并直接归因于用户(或执行该操作的任何人)。

sudo apt install pwgen 

安装完成后执行以下命令:

pwgen -s 32 1

此命令将生成一串32个随机字符作为blowfish密钥。

将密码插入配置文件的示例 (不要抄袭):

UvqAlsvTxRdYIyO8TnlkJsVQaWs2LfgL

配置文件中的示例:

对于大多数用户来说,其余默认设置应该足够了。但是,如果您的服务器位于网络内的另一台服务器上,则需要找到并修改行 $cfg['Servers'][$i]['host'] 以反映私有 IP 地址。此修改的图示如下所示:

$cfg['Servers'][$i]['host'] = '192.168.55.101';

步骤4:配置phpMyAdmin文件权限

将目录所有者的权限分配给 www-user 对于确保兼容性和安全性至关重要。

要设置 chown 权限:

sudo chown -R www-data:www-data /var/www/phpmyadmin/

要设置 chmod 权限:

sudo find /var/www/phpmyadmin/ -type d -exec chmod 755 {} \;
sudo find /var/www/phpmyadmin/ -type f -exec chmod 644 {} \;

在接下来的部分中,我们将讨论为您的 phpMyAdmin 服务创建和设置 Nginx 服务块。

为 phpMyAdmin 设置 NGINX 服务器块

要访问 phpMyAdmin Web 界面,创建 NGINX 服务器块是必不可少的一步。建立一个独特的子域来加强安全措施并抵御暴力攻击,这是强烈推荐的。您可以随意命名这个子域,无论它是什么,只要您认为合适即可。

步骤1:在Debian上为phpMyAdmin创建Nginx服务器块

让我们首先使用 nano 文本编辑器创建并打开您的服务器块。执行以下命令:

sudo nano /etc/nginx/sites-available/phpmyadmin.conf

第 2 步:配置 Nginx 服务器块

成功打开服务器块文件后,将以下文本复制并粘贴到文件中。请务必用您自己的域名 URL 替换域名 URL:

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.2-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    include snippets/fastcgi-php.conf;
  }

  location ~ /\.ht {
    deny all;
  }
}

以下是关于上述示例需要注意的一些关键点:

  • /run/php/php8.2-fpm.sock; – 此路径需要反映正在使用的 PHP-FPM 版本。例如,它可以是 8.3、8.1、8.0、7.4 等。
  • root /var/www/phpmyadmin/; – 这是本指南中定义的路径。如果您的 phpMyAdmin 位于其他地方,请确保相应地更新此行。

如果您是唯一从静态 IP 地址访问服务器的人,请考虑在第一个位置条目上方添加以下代码:

  allow <your ip address>;
  deny all; 

  location / {
    try_files $uri $uri/ /index.php;
  }

上述代码有效地阻止了未经授权的访问者访问带有 403 错误的页面,只允许你的 IP 地址访问。虽然它可能不适合所有设置,但它可以有效防御暴力攻击。

步骤 3:保存并退出文本编辑器

要保存更改,请按 (CTRL+O),要退出编辑器,请按 (CTRL+X)。

步骤4:创建配置文件的符号链接

接下来,从 sites-available 目录创建到配置文件所在的 sites-enabled 目录的符号链接:

sudo ln -s /etc/nginx/sites-available/phpmyadmin.conf /etc/nginx/sites-enabled/

步骤 5:执行空运行测试

在重启 NGINX 服务之前,进行试运行测试至关重要。此措施在实时环境中至关重要,可确保对配置文件的任何修改都不会触发 NGINX 错误:

sudo nginx -t

如果您的配置没有错误,将会出现以下输出:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

步骤6:重新启动NGINX服务

最后,为了使更改生效,请重新启动 NGINX 服务:

sudo systemctl restart nginx

本节就为 phpMyAdmin 创建 NGINX 服务器块。在下一节中,您将打开并登录 phpMyAdmin Web 界面。

浏览 phpMyAdmin Web 界面

通过启动您首选的 Web 浏览器开始与 phpMyAdmin 界面交互。在地址栏中输入 pma.example.com,确保将“example”替换为您的域名或服务器 IP 地址。请记住,您也可以在内部环境中使用 localhost。

完成此操作后,您将进入 phpMyAdmin 登录屏幕,如下图所示:

通过输入您的凭据并选择“继续”或“登录”来浏览登录屏幕。此操作授予您访问 phpMyAdmin 仪表板的权限,如下图所示。

作为首次使用 phpMyAdmin 的用户,您可能希望熟悉“状态页面”。它提供了对数据库状态和健康状况的全面了解。

除了统计页面之外,phpMyAdmin 还集成了“顾问系统”。这个方便的功能提供了性能增强的建议。

不过,需要注意的是,虽然顾问建议等待 24 小时,但大多数人认为至少等待 72 小时更为理想。这可确保数据库采样在较长时间内进行,从而提供更准确的建议。

此外,顾问系统不应成为您进行更改的唯一依据。更改 MySQL 或 MariaDB 配置文件需要仔细考虑、彻底测试,甚至可能需要多次迭代。目标是优化配置以获得最佳结果,而这通常需要时间。

通过 Let's Encrypt SSL 证书保护 phpMyAdmin

通过 Certbot 创建 SSL 证书

要加强 phpMyAdmin 实例的安全性,请使用 SSL 证书通过 HTTPS 运行 Nginx。利用 Let's Encrypt(一家提供免费、自动化和开放 SSL 证书的知名证书颁发机构)是最直接的方法。

首先,通过运行以下命令安装 certbot 包,它有助于管理 Let's Encrypt SSL 证书:

sudo apt install python3-certbot-nginx -y

完成 certbot 包安装后,通过执行以下操作来创建 SSL 证书:

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d pma.example.com

启动证书安装过程后:

  • 提示将询问是否接收来自 EFF(电子前沿基金会)的电子邮件。
  • 无论您同意(Y)或不同意(N),系统都会自动安装和配置您的 TLS 证书。
  • 配置包括强制执行 HTTPS 301 重定向、添加 Strict-Transport-Security 标头以及实施 OCSP Stapling。
  • 请记住用您的精确详细信息替换命令中的电子邮件和域名。

完成此设置后,您的 URL 将从 HTTP://pma.example.com 迁移到 HTTPS://pma.example.com,并自动将对以前的 HTTP URL 的任何访问重定向到安全的 HTTPS URL。

为 SSL 续订创建 Cron 作业

建立一个 cron 作业来自动更新您的证书,以进一步简化流程。Certbot 为此提供了一个自动更新脚本。在设置此作业之前,请明智地使用以下命令执行试运行测试以确认一切正常运行:

sudo certbot renew --dry-run

要安排自动续订,请通过执行以下命令打开 crontab 文件:

sudo crontab -e

定期检查证书更新(每天至少一次),以确保您的证书仍然有效。如果需要更新,脚本将自动更新证书。利用 cron 语法在您喜欢的时间设置更新。

00 00 */1 * * /usr/sbin/certbot-auto renew

结论

在 Debian 系统上成功安装和配置 phpMyAdmin 后,您可以通过用户友好的 Web 界面高效地管理 MySQL 或 MariaDB 数据库。定期更新和安全配置可确保您的数据库管理工具保持安全和最新。享受 phpMyAdmin 为在 Debian 上管理数据库提供的便利和强大功能。

Joshua James
跟我来
Joshua James 的最新帖子 (查看全部)

发表评论