如何在CentOS 7上安装Drupal

Drupal是全球领先的开源CMS平台之一。它具有灵活性,可扩展性,可用于构建各种类型的网站,从小型个人博客到大型企业,政治和政府网站。 在本教程中,我们将说明如何在CentOS 7上安装Drupal 8.6。

9 min read
By myfreax
如何在CentOS 7上安装Drupal

Drupal是全球领先的开源CMS平台之一。它具有灵活性,可扩展性,可用于构建各种类型的网站,从小型个人博客到大型企业,政治和政府网站。

在本教程中,我们将说明如何在CentOS 7上安装Drupal 8.6。

有多种安装Drupal的方法。本指南介绍了使用称为Drupal-project的Drupal项目的Composer模板安装Drupal的必要步骤。

我们将使用Nginx作为网络服务器,使用最新的PHP 7.2和MySQL/MariaDB作为数据库服务器。

先决条件

开始安装之前,请确保您满足以下先决条件:

  • 拥有一个指向您的公共服务器IP的域名。我们将使用example.com
  • 已安装 Nginx
  • 已为您的域安装了SSL证书。您可以按照这些说明
  • 以具有[sudo]特权的用户身份登录

安装免费的Let's Encrypt SSL证书。

创建一个MySQL数据库

第一步是创建一个新的数据库和用户帐户,并向用户授予适当的权限。

如果您的服务器上已经安装了 MySQL MariaDB ,则可以跳过此步骤,如果没有,则可以通过键入以下内容从CentOS的默认存储库中安装MariaDB 5.5服务器软件包:

sudo yum install mariadb-server

对于全新安装的MariaDB / MySQL,建议运行mysql_secure_installation命令以提高数据库服务器的安全性。

通过键入以下命令登录到MySQL Shell,并在出现提示时输入密码:

mysql -u root -p

创建名为drupal,用户名为drupaluser的数据库,并向授予用户的必要权限,请运行以下命令:

CREATE DATABASE drupal CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES ON drupal.* TO 'drupaluser'@'localhost' IDENTIFIED BY 'change-with-strong-password';

安装PHP

CentOS 7附带PHP版本5.4,该版本已过时且不再受支持。 Drupal的推荐PHP版本是PHP 7.2。

首先要在CentOS 7上安装 PHP 7.2 ,我们需要启用 EPEL 和Remi存储库:

sudo yum install epel-release yum-utils
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum-config-manager --enable remi-php72

一旦启用存储库以安装PHP 7.2,并且所有必需的PHP扩展都运行以下命令:

sudo yum install php-cli php-fpm php-mysql php-json php-opcache php-mbstring php-xml php-gd php-curl git

我们安装了PHP FPM,因为我们将Nginx用作网络服务器。

默认情况下,PHP FPM将以用户apache在端口9000上运行。我们将用户更改为nginx,然后从TCP套接字切换到Unix套接字。为此,请打开/etc/php-fpm.d/www.conf文件并编辑以黄色突出显示的行:

/etc/php-fpm.d/www.conf

...
user = nginx
...
group = nginx
...
listen = /run/php-fpm/www.sock
...
listen.owner = nginx
listen.group = nginx

使用以下 chown命令,确保/var/lib/php目录具有正确的所有权:

sudo chown -R root:nginx /var/lib/php

最后,启用并启动PHP FPM服务:

sudo systemctl enable php-fpm
sudo systemctl start php-fpm

安装作曲家

Composer是PHP的依赖项管理器。我们将下载Drupal模板,并使用composer安装所有必需的Drupal组件。

以下命令将通过使用 curl 下载Composer安装程序并将文件移至/usr/local/bin目录,从而在全局范围内安装composer

curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

通过运行以下命令来验证安装,该命令将打印作曲家的版本:

composer --version

输出应如下所示:

Composer version 1.8.4 2019-02-11 10:52:10

安装Drupal

现在已经安装了作曲器,使用/var/www/my_drupal目录中的 Drupal模板创建新的Drupal项目:

sudo /usr/local/bin/composer create-project drupal-composer/drupal-project:8.x-dev /var/www/my_drupal --stability dev --no-interaction

上面的命令将下载模板,获取所有必需的php包,并运行准备项目进行安装所需的脚本。该过程可能需要几分钟,如果成功,则输出结束将如下所示:

Create a sites/default/settings.php file with chmod 0666
Create a sites/default/files directory with chmod 0777

下一步是使用Drush安装Drupal。在下面的命令中,我们传递在第一部分中创建的MySQL数据库和用户信息:

cd /var/www/my_drupal
sudo vendor/bin/drush site-install --db-url=mysql://drupaluser:change-with-strong-password@localhost/drupal

安装程序将提示您以下消息,只需按Enter即可。

You are about to DROP all tables in your 'drupal' database. Do you want to continue? (yes/no) [yes]:

安装完成后,脚本将打印管理用户名和密码。输出应类似于以下内容:

[notice] Starting Drupal installation. This takes a while.
[success] Installation complete.  User name: admin  User password: frxka2Db5v

最后,设置正确的权限,以便Web服务器可以完全访问该网站的文件和目录:

sudo chown -R nginx: /var/www/my_drupal

配置Nginx

到现在,如果不检查本教程的先决条件,则应该已经在系统上安装了带有SSL证书的Nginx。

要为我们的新Drupal项目创建新的服务器块,我们将使用Nginx官方网站上的Nginx 配方

打开您的文本编辑器,然后创建以下文件:

sudo nano /etc/nginx/conf.d/example.com

/etc/nginx/conf.d/example.com

# Redirect HTTP -> HTTPS
server {
    listen 80;
    server_name www.example.com example.com;

    include snippets/letsencrypt.conf;
    return 301 https://example.com$request_uri;
}

# Redirect WWW -> NON WWW
server {
    listen 443 ssl http2;
    server_name www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;

    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    root /var/www/my_drupal/web;

    # SSL parameters
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;

    # log files
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location ~ \..*/.*\.php$ {
        return 403;
    }

    location ~ ^/sites/.*/private/ {
        return 403;
    }

    # Block access to scripts in site files directory
    location ~ ^/sites/[^/]+/files/.*\.php$ {
        deny all;
    }

    # Block access to "hidden" files and directories whose names begin with a
    # period. This includes directories used by version control systems such
    # as Subversion or Git to store control files.
    location ~ (^|/)\. {
        return 403;
    }

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

    location @rewrite {
        rewrite ^/(.*)$ /index.php?q=$1;
    }

    # Don't allow direct access to PHP files in the vendor directory.
    location ~ /vendor/.*\.php$ {
        deny all;
        return 404;
    }


    location ~ '\.php$|^/update.php' {
        fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
        include fastcgi_params;
        # Block httpoxy attacks. See https://httpoxy.org/.
        fastcgi_param HTTP_PROXY "";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_intercept_errors on;
        fastcgi_pass unix:/run/php-fpm/www.sock;
    }

    # Fighting with Styles? This little gem is amazing.
    # location ~ ^/sites/.*/files/imagecache/ { # For Drupal <= 6
    location ~ ^/sites/.*/files/styles/ { # For Drupal >= 7
        try_files $uri @rewrite;
    }

    # Handle private files through Drupal. Private file's path can come
    # with a language prefix.
    location ~ ^(/[a-z\-]+)?/system/files/ { # For Drupal >= 7
        try_files $uri /index.php?$query_string;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        try_files $uri @rewrite;
        expires max;
        log_not_found off;
    }

}

请不要忘记用您的Drupal域替换example.com,并为SSL证书文件设置正确的路径。所有 HTTP请求都将重定向到HTTPS 。此配置中使用的代码段在本指南的 中创建。

在重新启动Nginx服务之前,请进行测试以确保没有语法错误:

sudo nginx -t

重新启动Nginx服务,以使更改生效,方法是键入:

sudo systemctl restart nginx

测试安装

打开浏览器,键入您的域,并假设安装成功,将出现类似于以下的屏幕:

您可以以管理员身份登录并开始自定义新的Drupal安装。

安装Drupal模块和主题

现在,您已经安装了Drupal项目,则需要安装一些模块和主题。 Drupal模块和主题托管在一个自定义的Composer信息库中,Drupal-project可直接为我们进行配置。

要安装模块或主题,您需要做的只是cd到项目目录并键入composer require drupal/module_or_theme_name。例如,如果要安装 Pathauto 模块,则需要运行以下命令:

cd /var/www/my_drupal
sudo -u nginx /usr/local/bin/composer require drupal/pathauto

通过添加 sudo -u nginx 作为用户nginx

Using version ^1.3 for drupal/pathauto
./composer.json has been updated
> DrupalProject\composer\ScriptHandler::checkComposerVersion
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 3 installs, 0 updates, 0 removals
  - Installing drupal/token (1.5.0): Downloading (100%) 
  - Installing drupal/ctools (3.2.0): Downloading (100%)
  - Installing drupal/pathauto (1.3.0): Downloading (100%)
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating autoload files
> DrupalProject\composer\ScriptHandler::createRequiredFiles

如您从上述作曲家的输出中所见,还为我们安装了所有程序包依赖项。

更新Drupal Core

升级之前,最好备份文件和数据库。您可以使用 Backup and Migrate 模块,也可以手动备份数据库和文件。

要备份安装文件,可以使用以下 rsync命令,当然,您需要使用正确的安装目录路径:

sudo rsync -a /var/www/my_drupal/  /var/www/my_drupal_$(date +%F)

要备份数据库,我们可以使用标准的 mysqldump命令

mysqldump -u root -p > /var/www/my_drupal_database_$(date +%F).sql

drush sql-dump

cd /var/www/my_drupal
vendor/bin/drush sql-dump > /var/www/my_drupal_database_$(date +%F).sql

现在,我们创建了备份,可以通过运行以下命令继续并更新所有Drupal核心文件:

sudo -u nginx /usr/local/bin/composer update drupal/core webflo/drupal-core-require-dev symfony/* --with-dependencies

结论

恭喜,您已经使用Composer成功安装了Drupal 8,并了解了如何安装模块和主题。现在,您可以开始自定义您的网站了。 Drupal 8用户指南是学习更多有关如何管理Drupal安装的好起点。另外,不要忘记访问Github上的 Drupal Composer 模板项目。

如有疑问,请在下面发表评论。