你想在 Debian 10、Debian 11、Ubuntu 20.04 或 Ubuntu 22.04 服务器上安装 Apache2、PHP 8、MySQL / MariaDB 和 phpMyAdmin 吗?这篇文章会一步一步带你完成。
首先刷新软件包列表:
apt update
然后为服务器上已有的软件包安装所有可用更新:
apt upgrade -y
接着安装后续步骤所依赖的软件包:
apt install ca-certificates apt-transport-https lsb-release gnupg curl nano unzip -y
下一步是添加 PHP 8 所在的软件源。两个发行版在这里的做法不同。
在 Debian 上:先添加该软件源的签名密钥。
wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add -
然后添加软件源本身:
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list
在 Ubuntu 上:先安装用于管理附加软件源的软件包:
apt install software-properties-common -y
然后添加软件源:
add-apt-repository ppa:ondrej/php
无论使用哪个发行版,都要再次刷新软件包列表,让新的软件源生效:
apt update
安装 Apache2 网页服务器:
apt install apache2 -y
然后安装 PHP 8 以及 phpMyAdmin 所需的各个模块:
apt install php8.0 php8.0-cli php8.0-common php8.0-curl php8.0-gd php8.0-intl php8.0-mbstring php8.0-mysql php8.0-opcache php8.0-readline php8.0-xml php8.0-xsl php8.0-zip php8.0-bz2 libapache2-mod-php8.0 -y
接下来是数据库。安装 MariaDB 服务端和客户端:
apt install mariadb-server mariadb-client -y
现在加固这套安装。第一次询问当前的 root 密码时,此时还没有密码,直接回车即可。确认关于修改 root 密码的提示,然后设置一个密码。输入过程中屏幕上不会显示任何字符,这是正常现象,并不是出错。其余问题一路回车确认,MariaDB 服务器就配置完成了:
mysql_secure_installation
切换到将要放置 phpMyAdmin 的目录:
cd /usr/share
下载当前版本:
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -O phpmyadmin.zip
解压:
unzip phpmyadmin.zip
删除不再需要的压缩包:
rm phpmyadmin.zip
把解压出来的目录改成更短的名字:
mv phpMyAdmin-*-all-languages phpmyadmin
为该目录设置所需的权限:
chmod -R 0755 phpmyadmin
为 phpMyAdmin 创建一个 Apache2 配置文件:
nano /etc/apache2/conf-available/phpmyadmin.conf
把下面的内容写入该文件:
# phpMyAdmin Apache configuration
Alias /phpmyadmin /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin>
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
</Directory>
# 禁止通过网页访问不需要对外开放的目录
<Directory /usr/share/phpmyadmin/templates>
Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
Require all denied
</Directory>
按 CTRL + X,再按 Y,然后回车保存。
启用刚写好的配置:
a2enconf phpmyadmin
重新加载 Apache2 使其生效:
systemctl reload apache2
创建 phpMyAdmin 需要的临时目录:
mkdir /usr/share/phpmyadmin/tmp/
并把它交给网页服务器用户:
chown -R www-data:www-data /usr/share/phpmyadmin/tmp/
有一点需要注意:出于安全考虑,你不能再用普通的密码方式以 root 身份登录 MariaDB,而 phpMyAdmin 正是使用密码登录的。对此有两种处理办法。强行启用密码登录是可行的,但在生产系统上并不推荐;更好的做法是另外创建一个拥有全部权限的用户。下面分别说明。
方式一 —— 允许 root 使用密码登录(生产系统上不推荐):先连接到 MariaDB 服务器:
mysql -u root
然后执行:
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
接着执行:
FLUSH PRIVILEGES;
这会把 root 用户的认证插件从 UNIX socket 改回普通的密码认证。最后用 exit 命令退出控制台。
方式二 —— 另外创建一个拥有全部权限的用户(推荐):连接数据库:
mysql -u root
创建用户:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
然后授予全部权限:
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;
把 username 和 password 换成你自己的用户名和密码。最后用 exit 命令退出控制台;此后你就可以用这个用户登录 MariaDB,包括通过 phpMyAdmin 登录。
至此,你的 Apache2 网页服务器连同 PHP 8、MariaDB 和 phpMyAdmin 已经可以使用了。默认的网站目录位于 /var/www/html/。在浏览器中于服务器的 IP 地址或域名后面加上 /phpmyadmin,即可打开 phpMyAdmin 界面,并根据你选择的方式,用 root 用户或另外创建的用户登录。
常见问题
本教程适用于哪些 Debian 和 Ubuntu 版本?
适用于 Debian 10 和 11,以及 Ubuntu 20.04 和 22.04。两个发行版之间唯一不同的步骤,是添加 PHP 8 软件源的方式。
为什么我无法通过 phpMyAdmin 以 root 身份登录 MariaDB?
默认情况下 root 用户通过 UNIX socket 认证,而不是使用密码,phpMyAdmin 则使用密码认证。你可以改用密码认证插件,或者更稳妥地另外创建一个拥有全部权限的用户。
我的网站文件应该放在哪里?
Apache2 默认提供 /var/www/html/ 目录。phpMyAdmin 位于 /usr/share/phpmyadmin,在服务器地址后加上 /phpmyadmin 即可访问。