如何在 Ubuntu 22.04 上使用 Apache2 安装 Drupal CMS
在此页
- 先决条件
- 安装 Apache2 Web 服务器
- 安装 MariaDB 服务器
- 安装和配置 PHP 8.x
- 安装作曲家
- 下载 Drupal 最新版本
- 为 Drupal 设置 Apache2 虚拟主机
- 运行 Drupal Web 安装程序
- 结论
Drupal 是一个免费的开源 Web 内容管理系统,用 PHP 编写,并在 GNU 通用公共许可证下分发。 Drupal 为多渠道发布提供了一个强大的内容管理工具和复杂的 API。在互联网上排名前 10,000 的网站中,至少有 14% 使用 Drupal,用于全球企业行业、政府、教育和机构网站。 Drupal 提供了一个高度可扩展的系统,与数字应用程序集成,可用于为具有多语言支持的不同组织创建多站点。
在本指南中,我将向您展示如何在 Ubuntu 22.04 系统上安装最新版本的 Drupal。本指南包括一些包依赖项的安装,例如 Apache2 Web 服务器、MariaDB 数据库、PHP 8.1 和作为 PHP 包管理工具的 Composer。这里的目标是您将使用 LAMP Stack 完成 Drupal 安装并使用 SSL 证书进行保护。
先决条件
要完成本指南,您需要满足以下要求:
- 一台 Ubuntu 22.04 服务器。该演示使用主机名为 server-ubuntu 并启用了 UFW 防火墙的 Ubuntu 服务器。
- 具有管理权限的非根用户。
- 指向 Ubuntu 服务器 IP 地址的域名。
安装 Apache2 Web 服务器
在第一步中,您将通过 APT 从 Ubuntu 存储库安装 Apache Web 服务器。在撰写本文时,最新版本的 Drupal 9 至少需要 Apache v2.x。
大多数 Drupal 开发都在 Apache Web 服务器上运行,但也有另一个 Web 服务器,例如 Nginx。
在安装包之前,以非 root sudo 用户身份运行以下 apt 命令来更新和刷新包索引存储库。您还可以在您的服务器上使用直接 root 用户。
sudo apt update
现在通过运行下面的 apt 命令来安装 Apache Web 服务器。系统将提示您确认 Apache 安装,输入 Y 表示同意,然后按 ENTER。
sudo apt install apache2

接下来,使用下面的 systemctl 命令来检查和验证 apache2 服务。
您应该得到 apache2 服务已启用并将在系统启动时自动运行的输出。此外,您将收到 apache2 服务运行状态的输出。
sudo systemctl is-enabled apache2
sudo systemctl status apache2

最后,您需要将规则“Apache Full”添加到 UFW 防火墙。规则“Apache Full”将自动允许访问 HTTP 和 HTTPS 端口,这默认包含在 Apache 包中。
运行以下命令以添加“Apache Full”规则。然后,检查并验证 UFW 防火墙的状态。您应该会收到一个输出,表明“Apache Full”规则已添加到 UFW 防火墙。
sudo ufw allow "Apache Full"
sudo ufw status

安装 MariaDB 服务器
Drupal 支持多种 RDBMS(关系数据库管理系统),例如 MySQL/MariaDB、PostgreSQL 和 SQLite。在此示例中,您将使用 MariaDB 数据库服务器安装 Drupal。
当前最新版本的 Drupal 9 至少需要 MariaDB 服务器 v10.3.x。最新的 Ubuntu 存储库提供了 MariaDB 服务器 v10.6。
使用以下 apt 命令安装 MariaDB 服务器包。当提示确认安装时,输入 Y 确认,然后按 ENTER。
sudo apt install mariadb-server mariadb-client

安装 MariaDB 服务器后,运行以下 systemctl 命令来检查 mariadb 服务的状态。
您将收到 mariadb 服务器已启用并将在系统引导/启动时自动运行的输出。而mariadb服务的当前状态是running。
sudo systemctl is-enabled mariadb
sudo systemctl status mariadb

现在 mariadb 服务正在运行,您需要设置和保护 MariaDB 服务器安装。为此,您可以使用 MariaDB 服务器包提供的命令行工具 mysql_secure_installation。
运行以下命令以开始配置和保护 MariaDB 服务器安装。
sudo mysql_secure_installation
现在系统会提示您以下问题:
- 对于没有 root 密码的默认 MariaDB 服务器安装,请在询问密码时按 ENTER。
- 默认情况下,MariaDB root 用户的本地身份验证是安全的,当要求将身份验证方法更改为 unix_socket 时输入 n。
- 输入 Y 以创建新的 MariaDB root 密码。然后,为您的 MariaDB root 用户输入强密码并重复。
- 当要求为 MariaDB root 用户禁用远程身份验证时,输入 Y 表示同意。
- 默认的 MariaDB 服务器安装带有数据库测试,并允许匿名用户访问它。为这两个设置输入 Y 以删除默认数据库测试并删除匿名权限。
- 最后,输入 Y 以确认重新加载表的权限。
此时,您现在已经配置了 MariaDB root 密码并保护了 MariaDB 服务器安装。现在您将为 Drupal 创建一个新的数据库和用户。为此,您必须首先通过 mysql 命令(MySQL/MariaDB 客户端)登录到 MariaDB shell。
使用以下 mysql 命令以 root 用户登录 MariaDB shell。当提示输入密码时,输入您的 MariaDB root 密码。此外,如果您以系统 Linux 用户 root 身份运行此命令,则只需按 ENTER 即可。
sudo mysql -u root -p
接下来,运行以下查询为 Drupal 创建一个新的 MariaDB 数据库和用户。在此示例中,您将使用用户 drupal 创建数据库 drupaldb,密码为 password。您可以用新的强密码替换密码。
CREATE DATABASE drupaldb;
CREATE USER WITH GRANT OPTION;
FLUSH PRIVILEGES;

现在运行另一个以下查询来检查 MariaDB 用户 [email 的权限。然后,您可以通过 quit 查询或只需按 Ctrl+d 退出 MariaDB shell。
您应该收到 MariaDB 用户 [email 有权访问数据库 drupaldb 的输出。
SHOW GRANTS FOR ;
quit

安装和配置 PHP 8.x
在撰写本文时,建议使用最新版本的 Drupal 9 使用 PHP 8.x 进行安装。此外,您还需要安装一些额外的 PHP 扩展,例如用于缓存的 php-apcu、用于图像处理的 php-gd、作为 MariaDB 数据库驱动程序的 php-mysql 等。
在此示例中,您将安装 Ubuntu 存储库提供的 PHP 8.1。使用以下 apt 命令安装 PHP 8.1 和一些额外的扩展和所需的包。
当要求确认安装时,输入 Y 同意并按 ENTER。
sudo apt install php php-apcu php-dev libapache2-mod-php libcurl4-openssl-dev php-cli php-mysql php-zip php-gd php-fpm php-json php-common php-intl php-mbstring php-curl php-xml php-pear php-tidy php-soap php-bcmath php-xmlrpc

安装 PHP 后,您需要从 PECL(PHP 扩展社区库)存储库安装额外的 PHP 扩展 uploadprogress。为此,您可以使用 php-pear 包提供的 pecl 命令行。
Drupal 使用 uploadprogress 扩展来显示和跟踪文件上传的详细进度,其中包括估计的剩余时间,以及在上传文件时访问文件的内容。
使用下面的 pecl 命令安装 PHP 扩展 uploadprogress。 pecl 命令现在将下载 uploadprogress 扩展的源代码并自动编译和安装扩展。
sudo pecl install uploadprogress

安装完成后,运行以下命令为 uploadprogress PHP 扩展创建一个新的配置文件。
cat <<EOF | sudo tee /etc/php/8.1/mods-available/uploadprogress.ini
; configuration for php uploadprogress module
; priority 15
extension=uploadprogress.so
EOF
现在运行以下命令以在您的 PHP 安装上启用 uploadprogress 扩展。
sudo ln -s /etc/php/8.1/mods-available/uploadprogress.ini /etc/php/8.1/apache2/conf.d/15-uploadprogress.ini

您现在已经完成了 Drupal 的所有 PHP 包的安装。现在您需要通过编辑 php.ini 文件来设置 PHP 安装。
使用文本编辑器打开文件 /etc/php/8.1/apache2/php.ini。在此示例中,我们将使用 nano。
sudo nano /etc/php/8.1/apache2/php.ini
改变一些选项如下。 memory_limit 选项应取决于服务器内存,date.timezone 选项应取决于您的时区。
memory_limit = 512M
upload_max_filesize = 60M
max_execution_time = 300
date.timezone = Europe/Paris
完成后保存并关闭文件。
接下来,使用以下 systemctl 命令重新启动 apache2 服务并将新更改应用于 PHP 配置。
sudo systemctl restart apache2
现在您已经完成了 PHP 8.1 的安装和配置,您现在可以通过创建 phpinfo 文件来验证安装。
运行以下命令创建一个新的 phpinfo 文件 /var/www/html/info.php。该文件包含 phpinfo 脚本,它将在您的 Web 浏览器上向您显示 PHP 的详细配置。
cat <<EOF | sudo tee /var/www/html/info.php
<?php
phpinfo();
?>
EOF
最后,打开您的网络浏览器并按照路径 URL /info.php 访问您的 Ubuntu 服务器 IP 地址(即:http://192.168.5.100/info.php)。您应该会看到有关 PHP 8.1 安装详细信息的页面。

安装作曲家
Composer 是用于管理 PHP 包依赖项的命令行工具。您需要安装 Composer,它将用于安装 Drupal 安装的 PHP 包依赖项。
要安装 Composer,请运行以下命令。
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
以下是每个命令使用的内容:
- 第一个命令会将 Composer 安装程序脚本下载到 composer-setup.php。然后,第二个命令将验证安装程序脚本的哈希值。确保您收到输出消息 Installer verified。
- 最后两个命令将运行安装程序脚本并安装 Composer PHP 包依赖项管理工具。之后,安装程序脚本 composer-setup.php 将被删除。
- 最后,您将在当前工作目录中获得 Composer 二进制文件 composer.phar。
接下来,运行以下命令将二进制文件 composer.phar 移动到 /usr/local/bin/composer。此操作将允许所有用户执行 composer 命令。
sudo mv composer.phar /usr/local/bin/composer

您现在可以运行命令 composer 来检查和验证您的安装。以下命令将向您显示 Composer 命令的详细帮助页面。
composer --help
下载 Drupal 最新版本
因为您已经安装了 Drupal 的所有包依赖项,现在您将下载 Drupal 源代码并通过 Composer 安装 PHP 包依赖项。
使用以下 wget 命令下载最新版本的 Drupal。您将在当前工作目录中看到文件 drupal.tar.gz。
wget https://www.drupal.org/download-latest/tar.gz -O drupal.tar.gz
现在通过下面的 tar 命令提取文件 drupal.tar.gz。然后,将提取的 drupal 目录移动到 /var/www/drupal。该目录将用作 Drupal 安装的文档根目录。
tar -xvf drupal.tar.gz
mv drupal-* /var/www/drupal
接下来,使用以下命令更改 Drupal 安装目录 /var/www/drupal 的所有权和权限。所有权必须是具有普通用户权限 755 的用户和组 www-data。
sudo chown -R www-data:www-data /var/www/drupal/
sudo chmod -R 755 /var/www/drupal/
现在移动到 /var/www/drupal 目录并运行如下的 composer 命令来为您的 Drupal 安装安装所有 PHP 依赖项。
cd /var/www/drupal
sudo -u www-data composer install --no-dev
为 Drupal 设置 Apache2 虚拟主机
下载 Drupal 并安装 PHP 包依赖项后,您现在将为 Drupal 安装设置和配置 Apache 虚拟主机。
在开始配置虚拟主机之前,请确保将用于 Drupal 的域名指向您的服务器 IP 地址。此外,请确保您的 SSL 证书已准备就绪。
运行以下 a2enmod 命令为您的 Drupal 启用一些 Apache2 模块。
sudo a2enmod rewrite ssl headers deflate

现在使用以下命令为 drupal /etc/apache2/sites-available/drupal.conf 创建一个新的虚拟主机文件。此示例使用 nano 编辑器。
sudo nano /etc/apache2/sites-available/drupal.conf
为 Drupal 虚拟主机添加以下完整配置。请务必更改域名和 SSL 证书的路径。在此演示中,我们将使用域 hwdomain.io 进行 Drupal 安装。
<VirtualHost *:80>
ServerName hwdomain.io
ServerAdmin
DocumentRoot /var/www/drupal
# Add security
php_flag register_globals off
ErrorLog ${APACHE_LOG_DIR}/hwdomain.io.error.log
CustomLog ${APACHE_LOG_DIR}/hwdomain.io.access.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/hwdomain.io/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hwdomain.io/privkey.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /var/www/drupal>
Options FollowSymlinks
#Allow .htaccess
AllowOverride All
Require all granted
<IfModule security2_module>
SecRuleEngine Off
# or disable only problematic rules
</IfModule>
</Directory>
<Directory /var/www/drupal/>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</Directory>
</VirtualHost>
</IfModule>
保存配置并在完成后关闭文件。
接下来,运行以下命令来激活 drupal.conf 虚拟主机文件。然后,测试并验证您的 Apache 配置。如果您的 Apache 配置正确,您将收到一条输出消息,例如 Syntax OK。
sudo a2ensite drupal.conf
sudo apachectl configtest

最后,重新启动 apache2 服务以应用新的更改和新的虚拟主机文件。您现在可以通过域名和 Web 浏览器访问 Drupal 安装程序。
sudo systemctl restart apache2
运行 Drupal Web 安装程序
要访问 Drupal 安装程序,请打开您的 Web 浏览器并访问您的 Drupal 安装的域名(即:https://hwdomain.io/)。
在语言设置中,选择您的首选语言并单击保存并继续。默认语言设置为英语。

为您的 Drupal 安装选择安装配置文件。然后,单击保存并继续。
您可以使用推荐给新 Drupal 用户的标准配置文件,如果您熟悉 Drupal,则使用 Minimal,或者使用包含 Drupal 站点和配置示例的演示配置文件。

现在为您的 drupal 安装输入 MariaDB 数据库的详细信息,然后单击保存并继续。如果您在不同的主机上使用 MariaDB,请使用高级选项输入 MariaDB 服务器主机 IP 地址。

Drupal 安装将开始。

接下来,输入您的 Drupal 站点配置的详细信息,包括站点名称和您的 Drupal 管理员用户。完成后,单击保存并继续。

现在您应该会看到通知您 Drupal 安装已完成的页面。您可以看到一条消息,例如“恭喜,您安装了 Drupal!。

您现在已经完成了 Drupal 安装,但是您仍然需要设置其他配置。在此示例中,您将设置 Drupal trusted_host 配置,这将保护您的 Drupal 安装免受 HTTP HOST 标头攻击。
要启用 trusted_host 配置,您需要编辑 Drupal 配置 /var/www/drupal/sites/default/settings.php。
运行以下命令使文件 /var/www/drupal/sites/default/settings.php 可写。然后,使用文本编辑器打开该文件。在此演示中,我们将使用 nano。
sudo chmod 644 /var/www/drupal/sites/default/settings.php
sudo nano /var/www/drupal/sites/default/settings.php
按 Ctrl+w 搜索 trusted_host 的模式。然后,将以下配置添加到文件中,并确保使用您的 Drupal 安装更改域名。域名应采用正则表达式格式。
$settings['trusted_host_patterns'] = [
'^hwdomain\.io$',
];
完成后保存配置并退出。然后,使用以下命令再次更改文件的权限,使其不可写。
sudo chmod 444 /var/www/drupal/sites/default/settings.php
最后,返回您的网络浏览器并访问您的 Drupal 安装状态报告(即:https://hwdomain.io/admin/reports/status)。
您将看到 Drupal 安装的详细服务器配置。此外,您还可以看到所有 25 个 Drupal 配置都已成功检查。

将页面滚动到底部,您将看到 Drupal 安装的详细系统配置。在下面,您可以看到 trusted_host 并且启用了上传进度设置。

结论
在本指南中,您在 Ubuntu 22.04 服务器上安装并配置了最新版本的 Drupal v9。您还学习了 Ubuntu 系统上 LAMP Stack(Linux、Apache、MariaDB 和 PHP)的基本安装以及来自 PECL(PHP 扩展社区库)存储库的 PHP 扩展的基本安装。
现在您已经安装了 Drupal 并使用 SSL 证书进行保护并启用了 trusted_host 设置。您可以通过为站点安装主题并安装一些额外的 Drupal 插件来扩展当前的 Drupal 安装。