Cách cài đặt Craft CMS trên Rocky Linux 9

theanh

Administrator
Nhân viên
Craft CMS là một hệ thống quản lý nội dung nguồn mở để tạo trang web. Đây là một CMS an toàn và có thể mở rộng với hệ sinh thái plugin mở rộng và các plugin miễn phí và trả phí chất lượng cao. Nó có bảng điều khiển trực quan, thân thiện với người dùng để tạo nội dung và các tác vụ quản trị. Nó được xây dựng trên nền tảng Yii PHP. Công cụ tạo mẫu Twig cung cấp năng lượng cho hệ thống tạo mẫu của nó. Nó có thể hoạt động với cả cơ sở dữ liệu MySQL và PostgreSQL để lưu trữ và sử dụng cơ sở dữ liệu Redis để lưu trữ đệm và lưu trữ phiên.

Trong hướng dẫn này, bạn sẽ tìm hiểu cách cài đặt Craft CMS trên máy chủ Debian 12. Bạn cũng sẽ học cách bật Redis để làm việc với nó và cách sao lưu và khôi phục trang web được tạo bằng Craft CMS.

Điều kiện tiên quyết​


  • Máy chủ chạy Rocky Linux 9 với tối thiểu 1 GB RAM.

  • Người dùng không phải root có quyền sudo.

  • Tên miền đủ điều kiện (FQDN) như craftcms.example.com trỏ đến máy chủ của bạn.

  • Tài khoản SMTP có dịch vụ email như Amazon SES hoặc Mailgun.

  • Mọi thứ đều đã cập nhật.
Mã:
$ sudo dnf update
[*]
Một số gói thiết yếu là cần thiết để chạy hướng dẫn và Craft CMS. Một số trong số này sẽ có trên máy chủ của bạn.
Mã:
$ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y

Bước 1 - Cấu hình Tường lửa​

Bước đầu tiên là cấu hình tường lửa. Rocky Linux sử dụng Tường lửa Firewalld. Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo firewall-cmd --state
running
Tường lửa hoạt động với nhiều vùng khác nhau và vùng công cộng là vùng mặc định mà chúng ta sẽ sử dụng. Liệt kê tất cả các dịch vụ và cổng đang hoạt động trên tường lửa.
Mã:
$ sudo firewall-cmd --permanent --list-services
Nó sẽ hiển thị đầu ra sau.
Mã:
cockpit dhcpv6-client ssh
Cho phép HTTP và HTTPS cổng.
Mã:
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
Kiểm tra lại trạng thái của tường lửa.
Mã:
$ sudo firewall-cmd --permanent --list-services
Bạn sẽ thấy một đầu ra.
Mã:
cockpit dhcpv6-client http https ssh
Tải lại tường lửa để kích hoạt các thay đổi.
Mã:
$ sudo firewall-cmd --reload

Bước 2 - Cài đặt Nginx​

Rocky Linux 9 được tích hợp phiên bản Nginx cũ hơn. Bạn cần sử dụng kho lưu trữ Nginx chính thức để cài đặt phiên bản mới nhất.

Tạo và mở tệp /etc/yum.repos.d/nginx.repo cho chỉnh sửa.
Mã:
$ sudo nano /etc/yum.repos.d/nginx.repo
Dán mã sau vào đó.
Mã:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
Sau khi hoàn tất, hãy lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Cài đặt Nginx.
Mã:
$ sudo dnf install nginx -y
Xác minh cài đặt.
Mã:
$ nginx -v
nginx version: nginx/1.24.0
Bật và khởi động máy chủ Nginx dịch vụ.
Mã:
$ sudo systemctl enable nginx --now
Kiểm tra trạng thái dịch vụ.
Mã:
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled) Active: active (running) since Mon 2023-12-04 14:01:19 UTC; 3s ago Docs: http://nginx.org/en/docs/ Process: 59396 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 59397 (nginx) Tasks: 2 (limit: 10866) Memory: 1.9M CPU: 10ms CGroup: /system.slice/nginx.service ??59397 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??59398 "nginx: worker process"

Bước 3 - Cài đặt PHP và tiện ích mở rộng​

Rocky Linux 9 được cài đặt sẵn PHP 8.1 theo mặc định. Để luôn sử dụng phiên bản PHP mới nhất hoặc nếu bạn muốn cài đặt nhiều phiên bản PHP, chúng ta cần sử dụng kho lưu trữ REMI.

Bước đầu tiên là lấy kho lưu trữ Epel.
Mã:
$ sudo dnf install epel-release -y
Tiếp theo, cài đặt kho lưu trữ Remi.
Mã:
$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
Kiểm tra các luồng PHP khả dụng.
Mã:
$ dnf module list php -y
Name Stream Profiles Summary
php 8.1 common [d], devel, minimal PHP scripting language
Remi's Modular repository for Enterprise Linux 9 - x86_64
Name Stream Profiles Summary
php remi-7.4 common [d], devel, minimal PHP scripting language
php remi-8.0 common [d], devel, minimal PHP scripting language
php remi-8.1 common [d], devel, minimal PHP scripting language
php remi-8.2 common [d], devel, minimal PHP scripting language
php remi-8.3 common [d], devel, minimal PHP scripting language
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Phiên bản mặc định là 8.1. Tại thời điểm viết hướng dẫn này, Craft CMS tương thích với PHP 8.2. Do đó, hãy bật kho lưu trữ PHP 8.2 của Remi.
Mã:
$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.2
Cài đặt PHP và các tiện ích mở rộng của nó theo yêu cầu của Craft CMS.
Mã:
$ sudo dnf install php php-cli php-common php-json php-gmp php-fpm php-xmlrpc php-bcmath php-imagick php-curl php-zip php-gd php-mysql php-xml php-mbstring php-xmlrpc php-intl php-pgsql
Kiểm tra phiên bản PHP đã cài đặt.
Mã:
$ php --version
PHP 8.2.13 (cli) (built: Nov 21 2023 09:55:59) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.13, Copyright (c) Zend Technologies with Zend OPcache v8.2.13, Copyright (c), by Zend Technologies
Kích hoạt và khởi động dịch vụ PHP-FPM.
Mã:
$ sudo systemctl enable php-fpm --now
Kiểm tra trạng thái của PHP dịch vụ.
Mã:
$ sudo systemctl status php-fpm
? php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; preset: disabled) Active: active (running) since Mon 2023-12-04 14:05:58 UTC; 6s ago Main PID: 61410 (php-fpm) Status: "Ready to handle connections" Tasks: 6 (limit: 10866) Memory: 16.6M CPU: 96ms CGroup: /system.slice/php-fpm.service ??61410 "php-fpm: master process (/etc/php-fpm.conf)" ??61411 "php-fpm: pool www" ??61412 "php-fpm: pool www" ??61413 "php-fpm: pool www" ??61414 "php-fpm: pool www" ??61415 "php-fpm: pool www"

Bước 4 - Cấu hình PHP-FPM​

Mở php.ini cho chỉnh sửa.
Mã:
$ sudo nano /etc/php.ini
Để thiết lập kích thước tải tệp lên, hãy thay đổi giá trị của upload_max_filesizepost_max_size biến. Giá trị này quyết định kích thước tệp bạn có thể tải lên Craft CMS. Đối với mục đích của chúng tôi, chúng tôi đặt ở mức 128 MB. Bạn có thể thiết lập theo ý thích của mình.
Mã:
$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 128M/' /etc/php.ini
$ sudo sed -i 's/post_max_size = 8M/post_max_size = 128M/' /etc/php.ini
Cấu hình giới hạn bộ nhớ của PHP tùy thuộc vào tài nguyên máy chủ và yêu cầu của bạn.
Mã:
$ sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php.ini
Mở tệp /etc/php-fpm.d/www.conf.
Mã:
$ sudo nano /etc/php-fpm.d/www.conf
Chúng ta cần đặt người dùng/nhóm Unix của các quy trình PHP thành nginx. Tìm các dòng user=www-datagroup=www-data trong tệp và thay đổi chúng thành nginx.
Mã:
...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...
Tìm listen.owner = nobody, listen.group = nobody, listen.mode = 0660 các dòng trong tệp và thay đổi chúng như sau sau khi bỏ chú thích.
Mã:
; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. The owner
; and group can be specified either by name or by their numeric IDs.
; Default Values: user and group are set as the running user
; mode is set to 0660
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Khởi động lại quy trình PHP-fpm. Hãy đảm bảo rằng bạn đã cài đặt Nginx trước khi khởi động lại dịch vụ PHP, nếu không, dịch vụ sẽ không hoạt động vì không tìm thấy nhóm nginx.
Mã:
$ sudo systemctl restart php-fpm
Đổi nhóm thư mục phiên PHP thành Nginx.
Mã:
$ sudo chgrp -R nginx /var/lib/php/session

Bước 5 - Cài đặt Composer​

Composer hoạt động như một trình quản lý phụ thuộc cho PHP. Đây cũng là trình quản lý phụ thuộc của khung Laravel PHP, là thứ cung cấp sức mạnh cho Craft CMS.

Tải xuống tập lệnh cài đặt Composer.
Mã:
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
Xác minh trình cài đặt đã tải xuống.
Mã:
$ php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Bạn sẽ nhận được thông báo sau đầu ra.
Mã:
Installer verified
Chạy tập lệnh cài đặt để tải xuống phiên bản mới nhất của Composer.
Mã:
$ php composer-setup.php
Xóa cài đặt script.
Mã:
$ php -r "unlink('composer-setup.php');"
Di chuyển tệp nhị phân đã tải xuống đến /usr/local/bin thư mục.
Mã:
$ sudo mv composer.phar /usr/local/bin/composer
Xác nhận cài đặt.
Mã:
$ composer --version
Composer version 2.6.5 2023-10-06 10:11:52

Bước 6 - Cài đặt và cấu hình PostgreSQL​

Rocky Linux 9 được tích hợp sẵn PostgreSQL 13 theo mặc định. Thay vào đó, chúng tôi sẽ sử dụng PostgreSQL 16 từ kho lưu trữ chính thức của nó.

Cài đặt kho lưu trữ PostgreSQL RPM.
Mã:
$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Vô hiệu hóa mô-đun PostgreSQL tích hợp sẵn.
Mã:
$ sudo dnf -qy module disable postgresql
Bây giờ, bạn có thể cài đặt PostgreSQL bằng lệnh bên dưới.
Mã:
$ sudo dnf install -y postgresql16-server postgresql16-contrib
Gói postgresql-contrib chứa một số tiện ích bổ sung.

Xác minh phiên bản.
Mã:
$ psql --version
psql (PostgreSQL) 16.1
Khởi tạo cơ sở dữ liệu PostgreSQL.
Mã:
$ sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
Initializing database ... OK
Kích hoạt PostgreSQL dịch vụ.
Mã:
$ sudo systemctl enable postgresql-16
Khởi động dịch vụ PostgreSQL.
Mã:
$ sudo systemctl start postgresql-16
Kiểm tra trạng thái của PostgreSQL dịch vụ.
Mã:
$ sudo systemctl status postgresql-16
? postgresql-16.service - PostgreSQL 16 database server Loaded: loaded (/usr/lib/systemd/system/postgresql-16.service; enabled; preset: disabled) Active: active (running) since Mon 2023-12-04 22:28:34 UTC; 2s ago Docs: https://www.postgresql.org/docs/16/static/ Process: 72143 ExecStartPre=/usr/pgsql-16/bin/postgresql-16-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS) Main PID: 72148 (postgres) Tasks: 7 (limit: 10866) Memory: 17.4M CPU: 45ms CGroup: /system.slice/postgresql-16.service ??72148 /usr/pgsql-16/bin/postgres -D /var/lib/pgsql/16/data/ ??72149 "postgres: logger " ??72150 "postgres: checkpointer " ??72151 "postgres: background writer " ??72153 "postgres: walwriter " ??72154 "postgres: autovacuum launcher " ??72155 "postgres: logical replication launcher "
Dec 04 22:28:33 craftcms.nspeaks.com systemd[1]: Starting PostgreSQL 16 database server...
Dec 04 22:28:33 craftcms.nspeaks.com postgres[72148]: 2023-12-04 22:28:33.999 UTC [72148] LOG: redirecting log output to logging collector process
Dec 04 22:28:33 craftcms.nspeaks.com postgres[72148]: 2023-12-04 22:28:33.999 UTC [72148] HINT: Future log output will appear in directory "log".
Dec 04 22:28:34 craftcms.nspeaks.com systemd[1]: Started PostgreSQL 16 database server.
Bạn có thể thấy dịch vụ được bật và chạy theo mặc định.

Khởi chạy shell PostgreSQL.
Mã:
$ sudo -i -u postgres psql
Tạo Craft CMS cơ sở dữ liệu.
Mã:
postgres=# CREATE DATABASE craftcms;
Tạo người dùng Craft CMS và chọn mật khẩu mạnh.
Mã:
postgres-# CREATE USER craftuser WITH PASSWORD 'Your_Password';
Đổi chủ sở hữu cơ sở dữ liệu thành Craft CMS người dùng.
Mã:
postgres-# ALTER DATABASE craftcms OWNER TO craftuser;
Cấp tất cả các quyền trên cơ sở dữ liệu cho người dùng Craft CMS.
Mã:
postgres-# GRANT ALL PRIVILEGES ON DATABASE craftcms TO craftuser;
Thoát khỏi shell.
Mã:
postgres-# \q
Xác minh rằng thông tin đăng nhập của bạn hoạt động.
Mã:
$ psql --username craftuser --password --host localhost craftcms
Password:
psql (16.1)
Type "help" for help.
craftcms=>
Thoát khỏi shell bằng cách nhập .

Bước 7 - Cài đặt và cấu hình Redis​

Rocky Linux 9 được cài sẵn Redis 6.2 theo mặc định. Tuy nhiên, chúng tôi sẽ sử dụng Redis 7.0 mà chúng tôi sẽ cài đặt bằng Remi Repository.

Vì chúng tôi đã cài đặt Remi repository trong khi cài đặt PHP, chúng tôi có thể bỏ qua phần đó. Liệt kê tất cả các mô-đun Redis có sẵn.
Mã:
$ sudo dnf module list redis
Rocky Linux 9 - AppStream
Name Stream Profiles Summary
redis 7 common [d] Redis persistent key-value database
Remi's Modular repository for Enterprise Linux 9 - x86_64
Name Stream Profiles Summary
redis remi-5.0 common [d] Redis persistent key-value database
redis remi-6.0 common [d] Redis persistent key-value database
redis remi-6.2 common [d] Redis persistent key-value database
redis remi-7.0 common [d] Redis persistent key-value database
redis remi-7.2 common [d] Redis persistent key-value database
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Kích hoạt mô-đun Redis 7.2 mới nhất.
Mã:
$ sudo dnf module enable -y redis:remi-7.2
Cài đặt Redis.
Mã:
$ sudo dnf install redis
Xác minh phiên bản.
Mã:
$ redis-server --version
Redis server v=7.2.3 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=7bd3173e4e30c3e4
Kích hoạt Redis dịch vụ.
Mã:
$ sudo systemctl enable redis
Khởi động dịch vụ Redis.
Mã:
$ sudo systemctl start redis
Kiểm tra trạng thái của dịch vụ.
Mã:
$ sudo systemctl status redis
? redis.service - Redis persistent key-value database Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; preset: disabled) Drop-In: /etc/systemd/system/redis.service.d ??limit.conf Active: active (running) since Mon 2023-12-04 22:36:25 UTC; 1min 32s ago Main PID: 72877 (redis-server) Status: "Ready to accept connections" Tasks: 5 (limit: 10866) Memory: 7.5M CPU: 176ms CGroup: /system.slice/redis.service ??72877 "/usr/bin/redis-server 127.0.0.1:6379"
Dec 04 22:36:25 craftcms.nspeaks.com systemd[1]: Starting Redis persistent key-value database...
Dec 04 22:36:25 craftcms.nspeaks.com systemd[1]: Started Redis persistent key-value database.
Bước tiếp theo là thêm xác thực vào máy chủ Redis. Kể từ Redis v6.0, cách tốt nhất để thêm xác thực là sử dụng ACL (Danh sách kiểm soát truy cập). Mở tệp /etc/redis/redis.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/redis/redis.conf
Tìm dòng # aclfile /etc/redis/users.acl mục nhập và bỏ chú thích bằng cách xóa dấu thăng (#) ở phía trước nó.
Mã:
aclfile /etc/redis/users.acl
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tiếp theo, tạo và mở tệp /etc/redis/users.acl cho chỉnh sửa.
Mã:
$ sudo nano /etc/redis/users.acl
Thêm dòng sau vào đó.
Mã:
user navjot on +@all ~* >yourpassword
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Khởi động lại máy chủ Redis để triển khai thay đổi.
Mã:
$ sudo systemctl restart redis
Mở shell Redis.
Mã:
$ redis-cli
Sử dụng Lệnh PING. Nó sẽ đưa ra lỗi xác thực.
Mã:
127.0.0.1:6379> PING
(error) NOAUTH Authentication required.
Sử dụng lệnh AUTH để ghi nhật ký trong.
Mã:
127.0.0.1:6379> AUTH navjot yourpassword
OK
Sử dụng lệnh PING một lần nữa.
Mã:
127.0.0.1:6379> PING
OK
Thoát khỏi shell.
Mã:
127.0.0.1:6379> exit
Bạn cũng sẽ cần cài đặt PHP Redis phần mở rộng.
Mã:
$ sudo apt install php-redis

Bước 8 - Cài đặt Craft CMS​

Trước khi cài đặt Craft CMS, bạn có thể kiểm tra xem mình có đáp ứng mọi yêu cầu của máy chủ để chạy nó hay không bằng lệnh sau.
Mã:
$ curl -Lsf https://raw.githubusercontent.com/craftcms/server-check/HEAD/check.sh | bash
Bạn sẽ nhận được kết quả sau.
Mã:
Running Craft Server Check…
Craft CMS Requirement Checker
This script checks if your web server configuration meets the requirements for running a Craft CMS installation.
It checks if the server is running the right version of PHP, if appropriate PHP extensions have been loaded,
and if php.ini file settings are correct.
Results:
--------
PHP 8.2+: OK
BCMath extension: OK
ctype extension: OK
cURL extension: OK
DOM extension: OK
Fileinfo extension: OK
GD extension or ImageMagick extension: OK
iconv extension: OK
Intl extension: OK
JSON extension: OK
Multibyte String extension (with Function Overloading disabled): OK
OPcache extension (with save_comments): OK
OpenSSL extension: OK
PCRE extension (with UTF-8 support): OK
PDO extension: OK
Reflection extension: OK
SPL extension: OK
Zip extension: OK
ignore_user_abort(): OK
password_hash(): OK
proc_close(): OK
proc_get_status(): OK
proc_open(): OK
proc_terminate(): OK
allow_url_fopen: OK
ini_set calls: OK
Memory Limit: OK
------------------------------------------
Errors: 0 Warnings: 0 Total checks: 27
Khi mọi thứ đã ổn, bạn có thể tiếp tục. Tạo thư mục gốc của web.
Mã:
$ sudo mkdir /var/www/html/craftcms -p
Đặt người dùng hiện đang đăng nhập làm chủ sở hữu của thư mục này.
Mã:
$ sudo chown -R $USER:$USER /var/www/html/craftcms
Chuyển sang thư mục.
Mã:
$ cd /var/www/html/craftcms
Tải xuống và cài đặt Craft CMS bằng Composer. Dấu chấm (.) ở cuối lệnh có nghĩa là quá trình cài đặt sẽ được thực hiện trong thư mục hiện tại.
Mã:
$ composer create-project craftcms/craft .
Trong quá trình cài đặt, bạn sẽ được yêu cầu cung cấp một số thông tin chi tiết liên quan đến cơ sở dữ liệu và tài khoản quản trị viên. URL trang web và ngôn ngữ của trang web như được hiển thị bên dưới.
Mã:
> @php craft setup/welcome ______ .______ ___ _______ .___________. / || _ \ / \ | ____|| | | ,----'| |_) | / ^ \ | |__ `---| |----` | | | / / /_\ \ | __| | | | `----.| |\ \----./ _____ \ | | | | \______|| _| `._____/__/ \__\ |__| |__| A N E W I N S T A L L ______ .___ ___. _______. / || \/ | / | | ,----'| \ / | | (----` | | | |\/| | \ \ | `----.| | | | .----) | \______||__| |__| |_______/
Generating an application ID ... done (CraftCMS--923f03f1-9bea-4c3d-a7ca-1466645ce75d)
Generating a security key ... done (iMdcUi6wQyf9MshEda__vZcCwILbclxz)
Welcome to Craft CMS!
Are you ready to begin the setup? (yes|no) [no]:yes
Which database driver are you using? (mysql or pgsql) [mysql] pgsql
Database server name or IP address: [127.0.0.1]
Database port: [5432]
Database username: [root] craftuser
Database password:
Database name: craftcms
Database table prefix:
Testing database credentials ... success!
Using default schema "public".
Saving database credentials to your .env file ... done
Install Craft now? (yes|no) [yes]:yes
Username: [admin] navjot
Email: [emailprotected]
Password:
Confirm:
Site name: Howtoforge Tutorials
Site URL: https://craftcms.example.com
Site language: [en-US]
*** installing Craft

Làm cho Redis hoạt động với Craft CMS​

Cài đặt yiisoft/yii2-redis gói.
Mã:
$ composer require --prefer-dist yiisoft/yii2-redis:"~2.0.0"
Mở tệp /var/www/html/craftcms/config/app.php để chỉnh sửa.
Mã:
$ nano config/app.php
Bạn sẽ thấy nội dung sau trong đó.
Mã:
use craft\helpers\App;
return [ 'id' => App::env('CRAFT_APP_ID') ?: 'CraftCMS',
];
Thay đổi thành theo sau.
Mã:
use craft\helpers\App;
return [ 'id' => App::env('CRAFT_APP_ID') ?: 'CraftCMS', 'components' => [ 'cache' => function() { $config = [ 'class' => yii\redis\Cache::class, 'keyPrefix' => Craft::$app->id, 'defaultDuration' => Craft::$app->config->general->cacheDuration, // Full Redis connection details: 'redis' => [ 'hostname' => App::env('REDIS_HOSTNAME') ?: 'localhost', 'port' => 6379, 'username' => App::env('REDIS_USERNAME') ?: null, 'password' => App::env('REDIS_PASSWORD') ?: null, ], ]; return Craft::createObject($config); }, ],
];
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc. Thao tác này bật Redis làm bộ nhớ đệm cho Craft CMS. Bạn cũng có thể sử dụng Redis để lưu trữ dữ liệu phiên PHP, hàng đợi công việc và làm trình điều khiển mutex. Bạn có thể tìm thấy cấu hình cho nó trong tài liệu của Craft CMS.

Bạn cũng cần thêm cấu hình Redis vào tệp .env.
Mã:
$ nano .env
Thêm mã sau vào cuối tập tin.
Mã:
REDIS_HOSTNAME=localhost
REDIS_USERNAME=navjot
REDIS_PASSWORD=yourpassword
Chọn các tùy chọn như hiển thị ở trên. Sau khi hoàn tất, hãy thay đổi nhóm thư mục thành nginx. Theo cách này, cả người dùng hiện đang đăng nhập và Nginx đều có thể truy cập vào Craft CMS.
Mã:
$ sudo chgrp -R nginx /var/www/html/craftcms
Cấp cho nhóm nginx quyền ghi vào thư mục.
Mã:
$ sudo chmod -R g+w /var/www/html/craftcms
Từ đây trở đi, bạn sẽ không cần phải thay đổi quyền nữa và có thể thực hiện mọi thao tác mà không cần sử dụng quyền root.

Bước 9 - Cài đặt SSL​

Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL. Chúng ta sẽ sử dụng trình cài đặt gói Snapd cho mục đích đó. Vì Rocky Linux không đi kèm với nó, hãy cài đặt trình cài đặt Snapd. Nó yêu cầu kho lưu trữ EPEL (Gói bổ sung cho Enterprise Linux) để hoạt động. Nhưng vì chúng ta đã cài đặt nó ở bước 3, nên chúng ta có thể trực tiếp tiến hành.

Cài đặt Snapd.
Mã:
$ sudo dnf install -y snapd
Bật và khởi động dịch vụ Snap.
Mã:
$ sudo systemctl enable snapd --now
Cài đặt gói lõi Snap và đảm bảo rằng phiên bản Snapd của bạn là ngày.
Mã:
$ sudo snap install core && sudo snap refresh core
Tạo các liên kết cần thiết để Snapd hoạt động.
Mã:
$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
Cài đặt Certbot.
Mã:
$ sudo snap install --classic certbot
Sử dụng lệnh sau để đảm bảo lệnh Certbot có thể chạy được bằng cách tạo liên kết tượng trưng đến /usr/bin thư mục.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Kiểm tra xem Certbot có hoạt động bình thường không.
Mã:
$ certbot --version
certbot 2.7.4
Chạy lệnh sau để tạo SSL Chứng chỉ.
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d craftcms.example.com
Lệnh trên sẽ tải chứng chỉ xuống thư mục /etc/letsencrypt/live/craftcms.example.com trên máy chủ của bạn.

Tạo nhóm Diffie-Hellman chứng chỉ.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Kiểm tra dịch vụ lập lịch gia hạn Certbot.
Mã:
$ sudo systemctl list-timers
Bạn sẽ tìm thấy snap.certbot.renew.service là một trong những dịch vụ được lên lịch chạy.
Mã:
NEXT LEFT LAST PASSED UNIT ACTIVATES
---------------------------------------------------------------------------------------------------------------------------
Mon 2023-12-04 23:38:47 UTC 18min left Mon 2023-12-04 22:19:02 UTC 1h 0min ago dnf-makecache.timer dnf-makecache.service
Tue 2023-12-05 00:00:00 UTC 40min left - - logrotate.timer logrotate.service
Tue 2023-12-05 09:36:00 UTC 10h left - - snap.certbot.renew.timer snap.certbot.renew.service
Thực hiện chạy thử quy trình để kiểm tra xem việc gia hạn SSL có hoạt động không tốt.
Mã:
$ sudo certbot renew --dry-run
Nếu bạn không thấy lỗi nào, bạn đã hoàn tất. Chứng chỉ của bạn sẽ tự động gia hạn.

Bước 10 - Cấu hình SELinux​

Thay đổi ngữ cảnh bảo mật tệp cho Craft CMS.
Mã:
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/craftcms(/.*)?"
Áp dụng chính sách.
Mã:
$ sudo restorecon -Rv /var/www/html/craftcms/
Áp dụng chính sách để cho phép Nginx cấp quyền truy cập vào PostgreSQL.
Mã:
$ sudo setsebool -P httpd_can_network_connect_db 1
Áp dụng chính sách để cho phép kết nối được thực hiện với các máy chủ bên ngoài.
Mã:
$ sudo setsebool -P httpd_can_network_connect 1
Với MariaDB 10.11, bạn sẽ gặp phải một vấn đề khác là SELinux ngăn PHP-FPM kết nối với MariaDB. Vấn đề này có thể được giải quyết bằng cách cài đặt mô-đun SELinux. Bước đầu tiên là tạo tệp type enforcement.

Tạo tệp my-phpfpm.te trong thư mục gốc của bạn và mở tệp đó chỉnh sửa.
Mã:
$ cd ~
$ nano my-phpfpm.te
Dán mã sau vào đó.
Mã:
module my-phpfpm 1.0;
require { type unconfined_service_t; type httpd_t; type httpd_sys_content_t; class dir write; class unix_stream_socket connectto;
}
#============= httpd_t ==============
#!!!! This avc is allowed in the current policy
allow httpd_t httpd_sys_content_t:dir write;
#!!!! This avc is allowed in the current policy
allow httpd_t unconfined_service_t:unix_stream_socket connectto;
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Bước tiếp theo là chuyển đổi tệp thành mô-đun chính sách bằng lệnh sau. Không sửa đổi tên tệp trong lệnh, nếu không, lệnh sẽ không hoạt động. Mô-đun được đặt tên là my-phpfpm và tên tệp phải giống với tên mô-đun.
Mã:
$ sudo checkmodule -M -m -o my-phpfpm.mod my-phpfpm.te
Tiếp theo, chúng ta cần biên dịch mô-đun chính sách để tạo chính sách gói.
Mã:
$ sudo semodule_package -o my-phpfpm.pp -m my-phpfpm.mod
Bước cuối cùng là tải gói chính sách bằng lệnh semodule cài đặt chính sách đã sử dụng.
Mã:
$ sudo semodule -i my-phpfpm.pp

Bước 11 - Cấu hình Nginx​

Mở tệp /etc/nginx/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Thêm dòng sau vào trước dòng include /etc/nginx/conf.d/*.conf;.
Mã:
server_names_hash_bucket_size 64;
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tạo và mở tệp /etc/nginx/conf.d/craftcms.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/craftcms.conf
Dán mã sau vào đó. Thay thế craftcms.example.com bằng tên miền của bạn. Đảm bảo giá trị của client_max_body_size được đặt thành 128MB, đây là giá trị chúng tôi đã đặt cho Craft CMS khi cấu hình PHP trước đó.
Mã:
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name craftcms.example.com; root /var/www/html/craftcms/web; index index.php; client_max_body_size 128M; access_log /var/log/nginx/craftcms.access.log; error_log /var/log/nginx/craftcms.error.log; ssl_certificate /etc/letsencrypt/live/craftcms.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/craftcms.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/craftcms.example.com/chain.pem; ssl_session_timeout 5m; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { try_files $uri/index.html $uri $uri/ /index.php?$query_string; } location ~ [^/]\.php(/|$) { try_files $uri $uri/ /index.php?$query_string; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_keep_conn on; include fastcgi_params; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTP_PROXY ""; }
}
# enforce HTTPS
server { listen 80; listen [::]:80; server_name craftcms.example.com; return 301 https://$host$request_uri;
}
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Xác minh Nginx của bạn cấu hình.
Mã:
$ sudo nginx -t
Khởi động lại máy chủ Nginx.
Mã:
$ sudo systemctl restart nginx

Bước 12 - Truy cập Craft CMS​

Mở URL https://craftcms.example.com trong trình duyệt của bạn và bạn sẽ được đưa đến trang sau.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22469%22%3E%3C/svg%3E


Để truy cập trang quản trị, hãy truy cập URL https://craftcms.example.com/admin và bạn sẽ được đưa đến trang đăng nhập.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22691%22%20height=%22586%22%3E%3C/svg%3E


Nhập thông tin đăng nhập quản trị của bạn và nhấp vào phím Đăng nhập để đăng nhập. Bạn sẽ được đưa đến bảng điều khiển sau.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22495%22%3E%3C/svg%3E


Bây giờ bạn có thể bắt đầu sử dụng Craft CMS để xây dựng trang web của mình.

Bước 13 - Sao lưu và khôi phục Craft CMS​

Bạn có thể sao lưu cơ sở dữ liệu của Craft CMS từ bên trong bảng quản trị bằng cách truy cập Bảng điều khiển quản trị >> Tiện ích >> Sao lưu cơ sở dữ liệu.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22369%22%3E%3C/svg%3E


Nhấp vào nút Sao lưu để tải xuống bản sao lưu cơ sở dữ liệu của bạn. Bạn cũng có thể tạo bản sao lưu bằng thiết bị đầu cuối. Chạy lệnh sau để tạo bản sao lưu. Nhập mật khẩu của bạn khi được nhắc.
Mã:
$ mysqldump -u craftcmsuser -p craftcms > ~/craftcms.database.sql
Bạn cũng có thể tạo bản sao lưu cơ sở dữ liệu bằng tiện ích dòng lệnh Craft CMS. Ưu điểm của tiện ích này là bạn không cần phải truyền thông tin xác thực cơ sở dữ liệu của mình. Đọc thêm về Tiện ích bảng điều khiển lệnh Craft CMS tại đây.
Mã:
$ cd /var/www/html/craftcms
$ php craft db/backup ~/
Backing up the database ... done
Backup file: /home/navjot/howtoforge-tutorials--2023-12-03-065138--v4.5.11.1.sql (200.019 KB)
Nếu bạn không chỉ định bất kỳ vị trí nào trong lệnh trên, tệp sao lưu sẽ được ghi vào thư mục /var/www/html/craftcms/storage/backups.

Để sao lưu các tệp, hãy sao chép và lưu toàn bộ /var/www/html/craftcms thư mục.
Mã:
$ cd /var/www/html
$ tar -zcf ~/craftcms.tar.gz craftcms
Để khôi phục trên máy chủ mới, hãy giải nén các tệp vào Thư mục /var/www/html.
Mã:
$ tar -xzf craftcms.tar.gz -C /var/www/html/
Tạo cơ sở dữ liệu có cùng thông tin đăng nhập trên máy chủ mới và khôi phục cơ sở dữ liệu bằng lệnh sau. Nhập mật khẩu của bạn khi được nhắc.
Mã:
$ mysqlimport -u craftcmsuser -p craftcms craftcms.database.sql

Bước 14 - Cập nhật Craft CMS​

Có hai cách để cập nhật Craft CMS. Một là từ bên trong bảng quản trị. Khi có bản cập nhật, bạn sẽ nhận được thông báo. Nhấp vào thông báo để nâng cấp. Craft CMS sẽ tự động sao lưu cơ sở dữ liệu trước khi thực hiện cập nhật.

Bạn cũng có thể cập nhật thông qua thiết bị đầu cuối.

Để kiểm tra tất cả các bản cập nhật khả dụng, hãy chạy lệnh sau.
Mã:
$ cd /var/www/html/craftcms/
$ php craft update
Nếu có bản cập nhật khả dụng, hãy chạy lệnh sau để áp dụng bản cập nhật đó.
Mã:
$ php craft update all

Kết luận​

Đây là phần kết thúc hướng dẫn của chúng tôi, trong đó bạn đã học cách cài đặt phần mềm Craft CMS trên máy chủ Debian 12. Nếu bạn có bất kỳ câu hỏi nào, hãy đăng chúng trong phần bình luận bên dưới.
 
Back
Bên trên