Cài đặt Drupal 9 CMS trên Ubuntu 20.04

Drupal 9 là phiên bản mới nhất của hệ thống quản lý nội dung Drupal phổ biến (CMS). Drupal là một nền tảng do cộng đồng thúc đẩy để xây dựng trải nghiệm kỹ thuật số tuyệt vời. Nó cho phép người tạo nội dung thêm, chỉnh sửa, xuất bản hoặc xóa nội dung khỏi trang web bằng trình duyệt web trên điện thoại thông minh, máy tính bảng hoặc máy tính để bàn.

Phần mềm Drupal được viết bằng PHP và được phân phối theo Giấy phép Công cộng GNU. Drupal 9 đại diện cho đỉnh cao của tất cả các tính năng được phát triển trong quá trình Drupal 8, trên một cơ sở mã gọn gàng hơn. Một số tính năng trong Drupal 9 là:

  • Layout Builder: Cho phép người chỉnh sửa nội dung thiết kế các trang mà không cần trợ giúp kỹ thuật
  • API-first architecture: Cho phép xây dựng các ứng dụng decoupled và headless mạnh mẽ
  • Media Library: Giúp việc quản lý hình ảnh, video và các nội dung khác dễ dàng hơn bao giờ hết.
  • Cập nhật tự động
  • Giao diện quản trị mới và theme mặc định
Yêu cầu hệ thống Drupal 9

  • PHP >=7.3
  • MySQL or Percona, version >=5.7.8
  • MariaDB >=10.3.7
  • PostgreSQL >=10

Bước 1: Cập nhật hệ thống

sudo apt update
sudo apt -y upgrade && sudo systemctl reboot

Bước 2: Cài đặt Apache2

Trong hướng dẫn này, chúng tôi sẽ sử dụng Apache 2 làm máy chủ web. Apache là một trong những máy chủ web phổ biến nhất hiện nay.
sudo apt install apache2 -y
ramansah@app01:~$ sudo apt install apache2 -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap
liblua5.2-0
Suggested packages:
apache2-doc apache2-suexec-pristine | apache2-suexec-custom
The following NEW packages will be installed:
apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap
liblua5.2-0
0 upgraded, 9 newly installed, 0 to remove and 353 not upgraded.
Theo mặc định, dịch vụ Apache 2 sẽ chạy sau khi cài đặt xong. Chúng tôi sẽ khởi động lại và kích hoạt Dịch vụ Apache 2 bằng cách nhập dòng lệnh:
sudo systemctl stop apache2.service
sudo systemctl start apache2.service
sudo systemctl enable apache2.service
sudo systemctl status apache2.service
ramansah@app01:~$ sudo systemctl stop apache2.service
ramansah@app01:~$ sudo systemctl start apache2.service
ramansah@app01:~$ sudo systemctl enable apache2.service
Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable apache2
ramansah@app01:~$ sudo systemctl status apache2.service
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-10-31 19:22:10 PDT; 12s ago
Docs: https://httpd.apache.org/docs/2.4/
Main PID: 6532 (apache2)
Tasks: 55 (limit: 9443)
Memory: 4.8M
CGroup: /system.slice/apache2.service
├─6532 /usr/sbin/apache2 -k start
├─6533 /usr/sbin/apache2 -k start
└─6534 /usr/sbin/apache2 -k start

Oct 31 19:22:10 app01.otodiginet.com systemd[1]: Starting The Apache HTTP Server...
Oct 31 19:22:10 app01.otodiginet.com systemd[1]: Started The Apache HTTP Server.

Bước 3: Cài đặt MariaDB

Chúng tôi sẽ sử dụng MariaDB làm kho lưu trữ dữ liệu Drupal 9 của chúng tôi. MariaDB là một cơ sở dữ liệu mã nguồn mở tốt. Chúng tôi sẽ cài đặt nó trên máy chủ của mình bằng cách gõ lệnh sau:
sudo apt-get install mariadb-server mariadb-client -y
ramansah@app01:~$ sudo apt-get install mariadb-server mariadb-client -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
galera-3 gawk libaio1 libcgi-fast-perl libcgi-pm-perl libconfig-inifiles-perl libdbd-mysql-perl libdbi-perl
libfcgi-perl libhtml-template-perl libreadline5 libsigsegv2 libsnappy1v5 libterm-readkey-perl
mariadb-client-10.3 mariadb-client-core-10.3 mariadb-common mariadb-server-10.3 mariadb-server-core-10.3 socat
Suggested packages:
gawk-doc libclone-perl libmldbm-perl libnet-daemon-perl libsql-statement-perl libipc-sharedcache-perl mailx
mariadb-test tinyca
The following NEW packages will be installed:
galera-3 gawk libaio1 libcgi-fast-perl libcgi-pm-perl libconfig-inifiles-perl libdbd-mysql-perl libdbi-perl
libfcgi-perl libhtml-template-perl libreadline5 libsigsegv2 libsnappy1v5 libterm-readkey-perl mariadb-client
mariadb-client-10.3 mariadb-client-core-10.3 mariadb-common mariadb-server mariadb-server-10.3
mariadb-server-core-10.3 socat
0 upgraded, 22 newly installed, 0 to remove and 353 not upgraded.
Need to get 20.2 MB of archives.
After this operation, 167 MB of additional disk space will be used.
Chúng tôi sẽ làm cho cơ sở dữ liệu MariaDB được chạy khi khởi động Máy chủ, vì nó là một thành phần hoạt động song song với Drupal. Để thực hiện thao tác này, chúng tôi sẽ khởi động lại và kích hoạt dịch vụ MariaDB bằng cách gõ dòng lệnh:
sudo systemctl stop mariadb.service
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
sudo systemctl status mariadb.service
Chúng tôi sẽ bảo mật Cơ sở dữ liệu MariaDB của mình để tăng cường bảo mật trên cơ sở dữ liệu được hỗ trợ của chúng tôi bằng cách gõ dòng lệnh sau:
sudo mysql_secure_installation
Chúng tôi sẽ được yêu cầu chỉ định một loạt thông tin. Thực hiện theo danh sách dưới đây để biết cấu hình.
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
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

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

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

Set root password? [Y/n] Y
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
... 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
... 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
- 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
... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Để xác minh rằng MariaDB đã được cài đặt chính xác, chúng tôi sẽ đăng nhập vào cơ sở dữ liệu và truy vấn phiên bản của nó bằng cách gõ dòng lệnh:
Thanks for using MariaDB!amansah@app01:~$ sudo mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 44
Server version: 10.3.31-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> select version();
+----------------------------------+
| version() |
+----------------------------------+
| 10.3.31-MariaDB-0ubuntu0.20.04.1 |
+----------------------------------+
1 row in set (0.000 sec)

MariaDB [(none)]> quit;
Bye

Bước 4: Cài đặt PHP 7.4

Sau khi tất cả các gói hỗ trợ được cài đặt, chúng tôi sẽ cài đặt PHP 7.4 bằng cách gõ dòng lệnh:
sudo apt install php7.4 libapache2-mod-php7.4 php7.4-common php7.4-mbstring php7.4-xmlrpc php7.4-soap php7.4-gd php7.4-xml php7.4-intl php7.4-mysql php7.4-cli php7.4-zip php7.4-curl -y
ramansah@app01:~$ sudo apt install php7.4 libapache2-mod-php7.4 php7.4-common php7.4-mbstring php7.4-xmlrpc php7.4-soap php7.4-gd php7.4-xml php7.4-intl php7.4-mysql php7.4-cli php7.4-zip php7.4-curl -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libonig5 libxmlrpc-epi0 libzip4 php-common php7.4-json php7.4-opcache php7.4-readline
Suggested packages:
php-pear
The following NEW packages will be installed:
libapache2-mod-php7.4 libonig5 libxmlrpc-epi0 libzip4 php-common php7.4 php7.4-cli php7.4-common php7.4-curl
php7.4-gd php7.4-intl php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-soap php7.4-xml
php7.4-xmlrpc php7.4-zip
0 upgraded, 20 newly installed, 0 to remove and 358 not upgraded.
Need to get 5,299 kB of archives.
After this operation, 22.2 MB of additional disk space will be used.
...
Creating config file /etc/php/7.4/apache2/php.ini with new version
Module mpm_event disabled.
Enabling module mpm_prefork.
apache2_switch_mpm Switch to prefork
apache2_invoke: Enable module php7.4
Setting up php7.4 (7.4.25-1+ubuntu20.04.1+deb.sury.org+1) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for libc-bin (2.31-0ubuntu9) ...
Processing triggers for php7.4-cli (7.4.25-1+ubuntu20.04.1+deb.sury.org+1) ...
Processing triggers for libapache2-mod-php7.4 (7.4.25-1+ubuntu20.04.1+deb.sury.org+1) ...
Sau đó, chúng tôi sẽ cập nhật tệp /etc/php/7.4/apache2/php.ini cho các thông số bên dưới:
file_uploads = On
allow_url_fopen = On
memory_limit = 256M
upload_max_filesize = 100M
max_execution_time = 360
Sau đó, chúng tôi sẽ xác minh phiên bản PHP 7.4 bằng cách truy vấn phiên bản của nó.
ramansah@app01:~$ php --version
PHP 7.4.25 (cli) (built: Oct 22 2021 12:34:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.25, Copyright (c), by Zend Technologies

Chúng tôi cũng sẽ xác minh rằng quá trình cài đặt PHP 7.4 đã hoàn tất bằng cách khởi động lại Apache và tạo tệp phpinfo.php trong Apache.
ramansah@app01:~$ sudo vi /var/www/html/phpinfo.php
[sudo] password for ramansah:
?php phpinfo(); ?>

Bước 5: Thiết lập cơ sở dữ liệu Drupal 9

Trong phần này, chúng tôi sẽ tạo một cơ sở dữ liệu sẽ được sử dụng cho Drupal 9. Chúng tôi sẽ tạo một cơ sở dữ liệu mới được gọi là: drupaldb và một người dùng mới được gọi là dupal_user.
ramansah@app01:~$ sudo mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 45
Server version: 10.3.31-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE drupaldb;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> GRANT ALL ON drupaldb.* TO 'drupal_user'@'localhost' IDENTIFIED BY 'drupal_passwd' WITH GRANT OPTION;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> exit
Bye

Bước 6: Cài đặt và cấu hình Drupal 9

Cho đến thời điểm hiện tại, công tác chuẩn bị cho việc cài đặt Drupal 9 CMS đã hoàn tất. Sau đó, chúng tôi sẽ tải xuống phần mềm và cấu hình nó. Chúng tôi sẽ tải xuống Drupal 9 mới nhất, với các lệnh sau:
wget https://www.drupal.org/download-latest/tar.gz -O drupal.tar.gz
ramansah@app01:~$ wget https://www.drupal.org/download-latest/tar.gz -O drupal.tar.gz
--2021-10-31 20:50:01-- https://www.drupal.org/download-latest/tar.gz
Resolving www.drupal.org (www.drupal.org)... 199.232.46.217
Connecting to www.drupal.org (www.drupal.org)|199.232.46.217|:443... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://ftp.drupal.org/files/projects/drupal-9.2.7.tar.gz [following]
--2021-10-31 20:50:02-- https://ftp.drupal.org/files/projects/drupal-9.2.7.tar.gz
Resolving ftp.drupal.org (ftp.drupal.org)... 199.232.46.217
Connecting to ftp.drupal.org (ftp.drupal.org)|199.232.46.217|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 18863167 (18M) [application/octet-stream]
Saving to: ‘drupal.tar.gz’

drupal.tar.gz 100%[=================================================>] 17.99M 1.91MB/s in 9.0s

2021-10-31 20:50:11 (2.00 MB/s) - ‘drupal.tar.gz’ saved [18863167/18863167]
Sau khi hoàn tất quá trình tải xuống Drupal 9, chúng tôi sẽ giải nén và chuyển nó vào thư mục /var/www/html/.
ramansah@app01:~$ ls -ltr *.gz
total 18460
-rw-rw-r-- 1 ramansah ramansah 18863167 Oct 6 11:19 drupal.tar.gz
ramansah@app01:~$ tar xvf drupal.tar.gz
ramansah@app01:~$ sudo mv drupal-*/ /var/www/html/drupal
ramansah@app01:~$ ls -ltr /var/www/html/drupal
total 248
-rw-r--r-- 1 ramansah ramansah 18092 Nov 16 2016 LICENSE.txt
-rw-r--r-- 1 ramansah ramansah 4016 Oct 6 11:18 web.config
drwxr-xr-x 19 ramansah ramansah 4096 Oct 6 11:18 vendor
-rw-r--r-- 1 ramansah ramansah 804 Oct 6 11:18 update.php
drwxr-xr-x 2 ramansah ramansah 4096 Oct 6 11:18 themes
drwxr-xr-x 3 ramansah ramansah 4096 Oct 6 11:18 sites
-rw-r--r-- 1 ramansah ramansah 1586 Oct 6 11:18 robots.txt
-rw-r--r-- 1 ramansah ramansah 3205 Oct 6 11:18 README.md
drwxr-xr-x 2 ramansah ramansah 4096 Oct 6 11:18 profiles
drwxr-xr-x 2 ramansah ramansah 4096 Oct 6 11:18 modules
-rw-r--r-- 1 ramansah ramansah 94 Oct 6 11:18 INSTALL.txt
-rw-r--r-- 1 ramansah ramansah 549 Oct 6 11:18 index.php
-rw-r--r-- 1 ramansah ramansah 1507 Oct 6 11:18 example.gitignore
drwxr-xr-x 12 ramansah ramansah 4096 Oct 6 11:18 core
-rw-r--r-- 1 ramansah ramansah 171393 Oct 6 11:18 composer.lock
-rw-r--r-- 1 ramansah ramansah 3156 Oct 6 11:18 composer.json
-rw-r--r-- 1 ramansah ramansah 312 Oct 6 11:18 autoload.php
ramansah@app01:/var/www/html$ ls -ltr
total 20
drwxr-xr-x 8 www-data www-data 4096 Oct 6 11:18 drupal
-rw-r--r-- 1 www-data www-data 10918 Oct 31 19:18 index.html
-rw-r--r-- 1 www-data www-data 22 Oct 31 20:40 phpinfo.php
ramansah@app01:/var/www/html$ sudo chmod -R 755 /var/www/html/

Bước 7: Cấu hình Drupal và Apache2

Tại thời điểm này, chúng tôi sẽ cấu hình Apache2 cho Drupal. Chúng tôi sẽ định cấu hình Virtual Host để cho phép xuất bản trang web. Tạo tệp cấu hình để chỉ định người dùng nào có thể truy cập dịch vụ. Tệp được gọi là /etc/apache2/sites-available/drupal.conf. Đối với hướng dẫn này, bối cảnh của tệp như được hiển thị bên dưới:
ramansah@app01:/var/www/html$ sudo vi /etc/apache2/sites-available/drupal.conf
<VirtualHost *:80>
ServerName app01.otodiginet.com
ServerAlias app01.otodiginet.com
ServerAdmin admin@otodiginet.com
DocumentRoot /var/www/html/drupal/

CustomLog ${APACHE_LOG_DIR}/access.log combined
ErrorLog ${APACHE_LOG_DIR}/error.log

<Directory /var/www/html/drupal>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</Directory>
</VirtualHost>
Chúng tôi sẽ kích hoạt tệp cấu hình mới này để Apache2 tính đến nó trong lần khởi động lại tiếp theo.
sudo apachectl -t
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
sudo sudo a2enmod php7.4
sudo a2enmod rewrite
sudo a2ensite drupal.conf
ramansah@app01:/var/www/html$ sudo apachectl -t
Syntax OK
ramansah@app01:/var/www/html$ sudo a2dismod mpm_event
Module mpm_event already disabled
ramansah@app01:/var/www/html$ sudo a2enmod mpm_prefork
Considering conflict mpm_event for mpm_prefork:
Considering conflict mpm_worker for mpm_prefork:
Module mpm_prefork already enabled
ramansah@app01:/var/www/html$ sudo sudo a2enmod php7.4
Considering dependency mpm_prefork for php7.4:
Considering conflict mpm_event for mpm_prefork:
Considering conflict mpm_worker for mpm_prefork:
Module mpm_prefork already enabled
Considering conflict php5 for php7.4:
Module php7.4 already enabled
ramansah@app01:/var/www/html$ sudo a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
systemctl restart apache2
ramansah@app01:/var/www/html$ sudo a2ensite drupal.conf
Enabling site drupal.
To activate the new configuration, you need to run:
systemctl reload apache2

Bước 8: Cấu hình Drupal 9

Trong phần này, chúng tôi sẽ cấu hình Drupal bằng cách truy cập trang cấu hình Drupal bằng cách truy cập URL:
http://localhost/drupal trong hướng dẫn của chúng tôi, chúng tôi sẽ sử dụng http://app01.otodiginet.com/drupal




Trong phần cuối cùng, chúng tôi sẽ chỉ định thông tin cho trang web của chúng tôi, địa chỉ email và dữ liệu đăng nhập cho quản trị viên.