如何在 CentOS 7 上安装 Drupal

2023-10-31

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

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

安装 Drupal 的方法有多种。本指南涵盖了使用称为 drupal-project 的 Drupal 项目的 Composer 模板安装 Drupal 所需的步骤。

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

先决条件#

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

  • 有一个域名指向您的公共服务器IP。我们将使用example.com.
  • Have 已安装 Nginx .
  • 为您的域安装 SSL 证书。您可以按照以下步骤安装免费的 Let’s Encrypt SSL 证书这些说明 .
  • 登录身份为具有 sudo 权限的用户 .

创建 MySQL 数据库#

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

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

sudo yum install mariadb-server
对于全新的 MariaDB/MySQL 安装,建议运行mysql_secure_installation命令来提高数据库服务器的安全性。

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

mysql -u root -p

To 创建数据库 named drupal,用户名为drupaluser and to 授予用户必要的权限运行以下命令:

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-utilssudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpmsudo 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 作为 Web 服务器。

默认情况下 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

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

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

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

sudo systemctl enable php-fpmsudo systemctl start php-fpm

安装作曲家#

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

以下命令将安装作曲家通过下载 Composer 安装程序全局curl并将文件移动到/usr/local/bin目录:

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#

现在 Composer 已安装,使用以下命令创建一个新的 Drupal 项目Drupal模板 inside /var/www/my_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_drupalsudo 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 项目创建一个新的服务器块,我们将使用 Nginxrecipe来自 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;
    }

}
不要忘记将 example.com 替换为您的 Drupal 域,并设置 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_drupalsudo -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

正如您从上面的输出中看到的,composer 还为我们安装了所有包依赖项。

更新 Drupal 核心#

在升级之前,最好备份文件和数据库。您可以使用备份和迁移模块或手动备份您的数据库和文件。

要备份安装文件,您可以使用以下命令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

or drush sql-dump:

cd /var/www/my_drupalvendor/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 安装的更多信息的良好起点。另外,别忘了参观Drupal作曲家Github 上的模板项目。

如果您有疑问,请随时在下面发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 CentOS 7 上安装 Drupal 的相关文章

  • mysql语句中的*星号是什么意思?

    Ex mysql query SELECT FROM members WHERE id id 这意味着选择表中的所有列
  • 通过货币换算获取每种产品类型的最低价格

    我想选择每种产品类型中最便宜的 包括运费 价格转换为当地货币 最便宜 产品 价格 产品 运费 seller to aud 我的数据库有如下表 PRODUCTS SELLERS id type id seller id price shipp
  • 将 UPDATE 转换为 INSERT INTO ON DUPLICATE KEY UPDATE 语句

    我有这个 UPDATE MySQL 语句 效果很好 UPDATE table1 Inner Join table2 ON table2 id table1 gw id SET table1 field1 1 table1 field2 2
  • MySQL 服务器未启动

    当我做 mysql u root p并输入my password这就是我得到的 错误 2002 HY000 无法通过套接字 var run mysqld mysqld sock 连接到本地 MySQL 服务器 2 所以我输入 systemc
  • 如何将 MySQL 数据库更改为 UTC?

    我使用的是 Windows 7 对数据库方面的东西有点陌生 我尝试在 Google 上搜索如何将系统时区更改为 UTC 但文档有些高级 我不太确定如何更改此字段 在 my ini 文件的 mysqld 部分下 添加以下行 default t
  • 单行的总和值?

    我有一个 MySQL 查询 它返回由一系列 1 和 0 组成的单行 它用于进度条指示器 我现在在代码中对它进行求和 但我尝试对查询中的值求和 并意识到我无法使用 SUM 因为它们有很多列 但只有一行 有没有办法可以在查询中自动求和 就像这样
  • ActiveRecord3死锁重试

    Rails 3 或 ActiveRecord 3 是否有任何插件可以复制旧版本死锁重试 http agilewebdevelopment com plugins deadlock retry插入 或者 该插件仍然适用于 Rails 3 吗
  • 当“修复表”查询在 mysql 中不起作用时该怎么办?

    我收到此错误 表的存储引擎不支持修复 当我尝试使用查询修复表时repair table tbl college master 表是 innodb 类型 但我不知道我收到此错误 See 手册 http dev mysql com doc re
  • 如何在 phpmyadmin 中创建 MySQL 触发器

    我想在 MySQL 中创建一个触发器 我运行以下命令 mysql gt delimiter mysql gt CREATE TRIGGER before insert money BEFORE INSERT ON money gt FOR
  • 显示表 FULLTEXT 索引列

    我希望运行一个查询 该查询将返回表中全文索引的列列表 该表采用 MyISAM 格式 我将使用 php 来构建查询 理想情况下 我会运行查询 它会返回信息 以便我可以构造一个以逗号分隔的列字符串 例如 名 姓 电子邮箱 这在 MySQL 中可
  • 使 pdo::query 静态

    当我运行下面的代码时出现此错误 我通常使用 msql 函数 但我尝试使用 PDO 代替 怎么了 致命错误 第 14 行无法静态调用非静态方法 PDO query
  • 为什么 MySQL 创建带有 _seq 后缀的表?

    我创建了一个 InnoDB 表 名为foo在 MySQL 中 一旦我对表执行插入操作 我就会看到另一个表foo seq被建造 如果我删除自动生成的表 它会在下一次插入后出现 是什么原因造成的 听起来像是正在创建一个序列 您是否有自动生成的主
  • 无法启动 MySQL 服务器 - 控制进程退出并出现错误代码

    我的 mysql 服务器停止后无法启动 命令使用 sudo etc init d mysql restart Error 重新启动 mysql 通过 systemctl mysql serviceJob for mysql service
  • 如何在 Laravel 查询中使用多个 OR,AND 条件

    我需要 Laravel 查询帮助 我的自定义查询 返回正确结果 Select FROM events WHERE status 0 AND type public or type private 如何写这个查询Laravel Event w
  • 当sql连接中存在两个同名列时,如何从一个表列中获取值

    当我连接两个具有相同名称列的表时 我目前面临着尝试获取值的问题 例如 table1 date和table2 date 每个表中的日期不同 我将如何获取 日期 本例中的表1 我目前正在跑步 while row mysqliquery gt f
  • 如何在Mysql中仅将不同的值从一个表复制到另一个表?

    我有一个大约 2 5GB 的 MySql 数据库 表 A 具有以下列 anoid query date item rank url 我刚刚创建了另一个仅包含列的表 b query and date 我想在查询列中插入所有不同的记录 及其各自
  • 使用 PHP 的 MySQL 连接字符串

    我正在尝试通过本地计算机连接到托管在我的服务器上的数据库 我的服务器有cPanel 11 它是一个典型的共享服务器 由CentOS提供支持 安装了PHP和MySQL 准确地说 我在同一台服务器上持有经销商帐户 我想在不同帐户或域之间访问数据
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • 一次从多个表中删除行

    我正在尝试将 2 个查询合并为一个这样的查询 result db gt query DELETE FROM menu WHERE name new or die db gt error result db gt query DELETE F
  • 在 MySQL 中存储表情符号的编码问题:如何使用 Prisma ORM 在 NodeJS 中定义字符排序规则?

    亲爱的 Nodejs 专家和数据库专家 我们在 MySQL 数据库中存储表情符号和其他特殊字符时遇到问题 我们使用 Prisma 得到一个错误 这是我们使用的 ORM 参数无法从排序规则 utf8 general ci 转换为 utf8mb

随机推荐

  • Java输入流之BufferReader和Scanner的用法!

    在Java中 我们都知道Java的标准输入串是System in 但是我们却很少在Java中看到谁使用它 这是因为我们平时输入的都是一个字符串或者是一个数字等等 而System in提供的read方法是通过字节来读取数据的 所以对我们来说太
  • react hooks的用法

    一 页面初始化的结构 export const SearchPanel gt 二 声明字段的类型 请求字段类型 const param setParam useState name personId 四 写请求接口的代码 useEffect
  • java随机选人,实现对文本文件操作

    理解 全程无报错 IDEA全绿通过 每步都有注解 因为防止 main主代码 太长 将很多方法都封装了 编程小白 有不足的地方希望能指正出来吧 好的处理点 我觉得自己比较好的地方是 将页面方法返回值 设置为集合 这样打印页面的时候 能返回路径
  • CTF-Crypto题目分析__1

    CTF Crypto题目分析 1 以下所有题目提交flag的格式为SeBaFi 第一题 考察base36编码 下载附件后可得 597142166468670232704404065453992639482284357949191392729
  • Java 敏感词过滤工具类及文本

    最主要最主要的文本在此 链接 https pan baidu com s 163mWeLecBdV1tA1WstXnuw pwd yyds 提取码 yyds 复制这段内容后打开百度网盘手机App 操作更方便哦 工具类代码 就是解析文本进行过
  • 基于PyQT5的学生成绩管理系统(运行简单,简单有文档,带注释,含源码)

    自己做的项目 全CSDN唯一 禁止转载 基于pyqt5的学生成绩管理 带登录注册 基本的学生信息的增加 修改 删除 查询和选课 课程信息的增加 修改 删除 查询 成绩的添加 修改 查询等功能 用pycharm导入 安装依赖包 配置好数据库就
  • Java运算符、流程控制

    Java运算符 流程控制 运算符 算术运算符 public class Demo1 public static void main String args 算术运算符 int x 2046 x x 100 100 System out pr
  • 如何检查 MacOS 版本(GUI+CLI)

    macOS 12 是 Apple 团队的最新版本 它的代号是蒙特雷 源自蒙特雷南部海岸的一片未绘制地图的荒野地区 这是最先进的桌面操作系统 功能和美观达到了新的水平 本教程将介绍如何从桌面和命令行界面检查 macOS 版本 检查 MacOS
  • 如何在 Linux 中编译和安装最新的 Redis

    Redis 是一种开源内存数据结构存储 可用作数据库 缓存和消息代理 它以其高性能 可扩展性和易用性而闻名 在本文中 我们将指导您完成在 Linux 上编译和安装最新 Redis 版本的过程 在开始之前 请确保您拥有 Linux 服务器的管
  • 如何计算 Linux 中文件的行数

    有时您可能需要计算 Unix Linux 系统中文件的总行数 本教程帮助您通过命令行使用多种方法来统计 Linux 系统中文件的行数 计算行数wc Command The wc命令是 Unix Linux 系统的 字计数器 这是 Linux
  • 检查脚本是否在 Linux 中以 root 用户身份运行

    有时 shell 脚本需要以 root 用户身份运行才能以管理员权限执行某些任务 通常 可以使用 Sudo 命令来完成该任务 如果在某些情况下您仍然需要强制用户以 root 用户身份运行脚本 您可以向脚本添加代码来检查脚本是否以 root
  • 如何在 CentOS/RHEL 7.5 和 6.9 上安装 PHP 7.2、Apache 2.4、MySQL 5.6

    PHP团队已经发布了升级版本7 2 与 5 X 版本相比 它有许多变化和改进 本文将帮助您在 CentOS RHEL 7 6 操作系统上安装 PHP 7 Apache 2 4 和 MySQL 5 6 本教程已在CentOS 7 4上进行测试
  • 如何清除 Windows 中的 ASP.NET 临时文件

    开发 ASP NET 应用程序时 框架会编译并存储临时文件以提高性能 随着时间的推移 这些文件可能会累积并占用大量存储空间 定期清除 ASP NET 临时文件可以帮助维护您的开发环境并释放宝贵的磁盘空间 本文提供了有关如何在 Windows
  • 允许 ssm:GetParameter 的 AWS IAM 策略

    AWS Systems Manager SSM Parameter Store 提供集中式安全存储解决方案 用于管理您的配置数据 机密和应用程序设置 使用 SSM Parameter Store 时可能执行的关键操作之一是检索参数的值 在本
  • PHP 技巧:使用分隔符将字符串拆分为数组

    在 PHP 中 将字符串拆分为数组是一项常见任务 可以使用各种函数和技术来完成 这 explode 函数是一个方便高效的选项 它允许您根据分隔符将字符串拆分为数组 在本文中 我们将探讨如何在 PHP 中使用explode 函数将字符串拆分为
  • Visual Studio Code 中 Git 集成的快捷方式

    Git 是一种流行的版本控制系统 开发人员使用它来跟踪代码更改并与其他人在项目上进行协作 Visual Studio Code VS Code 具有内置的 Git 集成 可以轻松地直接从编辑器管理和提交更改 在本文中 我们将讨论 Visua
  • 如何通过 SSH 下载和上传文件

    SSH 是访问远程服务器最安全的协议 它通过通信通道提供最高级别的端到端数据安全性 这SCP 安全复制 命令使用 SSH 协议在远程和本地服务器之间复制文件 远程服务器必须有正在运行的 SSH 服务器 本教程将帮助您了解通过 SSH 协议下
  • 如何在 CentOS/RHEL 7 上创建没有 Shell 访问权限的 SFTP 用户

    本教程将帮助您在 CentOS 和 RedHat 系统上创建仅 SFTP 用户 无 ssh 访问权限 用户只能通过SFTP访问连接服务器 并允许访问指定目录 用户无法通过 SSH 访问服务器 按照以下教程创建仅限 sftp 的帐户 第 1
  • 如何在 Linux 中编译和运行 C/C++ 程序

    C 是一种强大的结构化编程语言 用于开发系统软件 根据设计 C 提供了可以有效映射到典型机器指令的结构 它是由丹尼斯 里奇在贝尔实验室 C 程序源是自由格式的文本 使用分号作为语句终止符 使用大括号对条件 函数或循环等语句块进行分组 C 是
  • 如何在 CentOS 7 上安装 Drupal

    Drupal 是全球领先的开源 CMS 平台之一 它灵活 可扩展 可用于构建不同类型的网站 从小型个人博客到大型企业 政治和政府网站 在本教程中 我们将解释如何在 CentOS 7 上安装 Drupal 8 6 安装 Drupal 的方法有