Cài đặt và cấu hình Drupal 8 với Nginx và Let's Encrypt trên CentOS 8

theanh

Administrator
Nhân viên
Drupal là một hệ thống quản lý nội dung miễn phí, mã nguồn mở và có thể mở rộng, có thể được cá nhân sử dụng để tạo và quản lý bất kỳ loại trang web nào. Nó được viết bằng PHP và sử dụng MySQL/MariaDB để lưu trữ dữ liệu của mình. Drupal cung cấp một bộ tính năng phong phú có thể được mở rộng bằng hàng nghìn tiện ích bổ sung. Drupal hỗ trợ rất nhiều máy chủ web bao gồm Apache, Nginx, IIS, Lighttpd và cơ sở dữ liệu MySQL, MariaDB, MongoDB, SQLite, PostgreSQL và MS SQL server. Drupal đi kèm với giao diện người dùng web đơn giản và thân thiện với người dùng, cho phép bạn tạo trang web mà không cần bất kỳ kiến thức lập trình nào.

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách cài đặt Drupal 8 trên máy chủ CentOS 8 và bảo mật nó bằng SSL miễn phí Let's Encrypt.

Yêu cầu​

  • Máy chủ chạy CentOS 8.
  • Tên miền hợp lệ được trỏ bằng IP máy chủ của bạn
  • Mật khẩu gốc được cấu hình trên máy chủ.

Cài đặt Nginx, MariaDB và PHP​

Trước khi bắt đầu, bạn sẽ cần cài đặt máy chủ LEMP trên máy chủ của mình. Bạn có thể cài đặt bằng cách chạy lệnh sau:
Mã:
dnf install nginx mariadb-server php php-fpm php-cli php-mbstring php-gd php-xml php-curl php-mysqlnd php-pdo php-json php-opcache -y
Sau khi cài đặt, hãy khởi động dịch vụ Nginx, MariaDB và php-fpm và cho phép chúng khởi động sau khi khởi động lại hệ thống bằng lệnh sau:
Mã:
systemctl start nginx
 systemctl start php-fpm
 systemctl start mariadb
 systemctl bật nginx
 systemctl bật php-fpm
 systemctl bật mariadb

Cấu hình Cơ sở dữ liệu​

Theo mặc định, MariaDB không được bảo mật nên bạn sẽ cần bảo mật nó. Bạn có thể bảo mật nó bằng cách chạy lệnh sau:
Mã:
mysql_secure_installation
Trả lời tất cả các câu hỏi như được hiển thị bên dưới:
Mã:
Nhập mật khẩu hiện tại cho root (nhập nếu không có):Đặt mật khẩu root? [Y/n] CóMật khẩu mới:Nhập lại mật khẩu mới:Xóa người dùng ẩn danh? [Y/n] CóKhông cho phép root đăng nhập từ xa? [Y/n] CóXóa cơ sở dữ liệu thử nghiệm và quyền truy cập vào cơ sở dữ liệu đó? [Y/n] CóTải lại bảng đặc quyền ngay bây giờ? [Y/n] Y
Sau khi hoàn tất, hãy đăng nhập vào shell MariaDB bằng lệnh sau:
Mã:
mysql -u root -p
Cung cấp mật khẩu root của bạn khi được nhắc, sau đó tạo cơ sở dữ liệu và người dùng cho Drupal bằng lệnh sau:
Mã:
MariaDB [(none)]> CREATE DATABASE drupaldb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
 MariaDB [(none)]> CREATE USER drupal@localhost IDENTIFIED BY "password";
Tiếp theo, cấp tất cả các quyền cho drupaldb bằng lệnh sau:
Mã:
MariaDB [(none)]> GRANT ALL ON drupaldb.* TO drupal@localhost IDENTIFIED BY "password";
Tiếp theo, flush các đặc quyền và thoát khỏi shell MariaDB bằng lệnh sau:
Mã:
MariaDB [(none)]> FLUSH PRIVILEGES;
 MariaDB [(none)]> EXIT;

Tải xuống Drupal​

Đầu tiên, bạn sẽ cần tải xuống phiên bản Drupal mới nhất từ trang web chính thức của họ. Bạn có thể tải xuống bằng lệnh sau:
Mã:
wget https://ftp.drupal.org/files/projects/drupal-8.7.10.tar.gz
Sau khi tải xuống, hãy giải nén tệp đã tải xuống bằng lệnh sau:
Mã:
tar -xvzf drupal-8.7.10.tar.gz
Tiếp theo, di chuyển thư mục đã giải nén đến thư mục gốc web Nginx bằng lệnh sau:
Mã:
mv drupal-8.7.10 /var/www/html/drupal
Tiếp theo, tạo một thư mục để lưu trữ các tệp trang web và đổi tên tệp default.settings.php như hiển thị bên dưới:
Mã:
mkdir /var/www/html/drupal/sites/default/files
 cp /var/www/html/drupal/sites/default/default.settings.php /var/www/html/drupal/sites/default/settings.php
Tiếp theo, thay đổi quyền sở hữu thư mục Drupal thành nginx như hiển thị bên dưới:
Mã:
chown -R nginx:nginx /var/www/html/drupal/

Cấu hình Nginx cho Drupal​

Trước tiên, tạo tệp cấu hình php-fpm cho Drupal bằng lệnh sau:
Mã:
nano /etc/php-fpm.d/drupal.conf
Thêm các dòng sau:
Mã:
[drupal]user = nginxgroup = nginxlisten.owner = nginxlisten.group = nginxlisten = /run/php-fpm/drupal.sockpm = ondemandpm.max_children = 50pm.process_idle_timeout = 10 giâypm.max_requests = 500chdir = /
Lưu và đóng tệp khi bạn hoàn tất. Sau đó, tạo tệp cấu hình máy chủ ảo Nginx cho Drupal:
Mã:
nano /etc/nginx/conf.d/drupal.conf
Thêm các dòng sau:
Mã:
server { listen 80; server_name example.com; root /var/www/html/drupal; access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; location = /favicon.ico { log_not_found tắt; access_log tắt; } location = /robots.txt { cho phép tất cả; log_not_found tắt; access_log tắt; } location ~ \..*/.*\.php$ { trả về 403; } location ~ ^/sites/.*/private/ { trả về 403; } # Chặn quyền truy cập vào các tập lệnh trong thư mục tệp site location ~ ^/sites/[^/]+/files/.*\.php$ { từ chối tất cả; } location ~ (^|/)\. { trả về 403; } location / { try_files $uri /index.php?$query_string; } location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; } location ~ /vendor/.*\.php$ { deny all; return 404; } location ~ '\.php$|^/update.php' { fastcgi_split_path_info ^(.+?\.php)(|/.*)$; include fastcgi_params; # Chặn các cuộc tấn công httpoxy. Xem 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/drupal.sock; } location ~ ^/sites/.*/files/styles/ { # Đối với Drupal >= 7 try_files $uri @rewrite; } # Xử lý các tệp riêng tư thông qua Drupal. Đường dẫn của tệp riêng tư có thể đi kèm # với tiền tố ngôn ngữ. location ~ ^(/[a-z\-]+)?/system/files/ { # Đối với 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; }}
Lưu và đóng tệp. Sau đó, khởi động lại dịch vụ php-fpm và Nginx để áp dụng các thay đổi:
Mã:
systemctl restart php-fpm
 systemctl restart nginx

Cấu hình SELinux và Tường lửa​

Theo mặc định, SELinux được bật trong CentOS 8. Vì vậy, bạn sẽ cần cấu hình SELinux để Drupal hoạt động chính xác.

Trước tiên, cho phép Drupal ghi vào các thư mục tệp công khai và riêng tư bằng lệnh sau:
Mã:
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/drupal(/.*)?"
 semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/drupal/sites/default/settings.php'
 semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/drupal/sites/default/files'
 restorecon -Rv /var/www/html/drupal
 restorecon -v /var/www/html/drupal/sites/default/settings.php
 restorecon -Rv /var/www/html/drupal/sites/default/files
Tiếp theo, cho phép Drupal gửi email đi bằng lệnh sau:
Mã:
setsebool -P httpd_can_sendmail on
Tiếp theo, bạn sẽ cần tạo một quy tắc tường lửa để cho phép dịch vụ HTTP và HTTPS từ các mạng bên ngoài. Bạn có thể cho phép bằng lệnh sau:
Mã:
firewall-cmd --permanent --add-service=http
Mã:
firewall-cmd --permanent --add-service=https
 firewall-cmd --reload

Bảo mật Drupal bằng Let's Encrypt SSL​

Drupal hiện đã được cài đặt và cấu hình. Đã đến lúc bảo mật bằng Let's Encrypt SSL miễn phí.

Để thực hiện, bạn sẽ cần tải xuống máy khách certbot trên máy chủ của mình. Bạn có thể tải xuống và thiết lập quyền chính xác bằng cách chạy lệnh sau:
Mã:
wget https://dl.eff.org/certbot-auto
 mv certbot-auto /usr/local/bin/certbot-auto
 chown root /usr/local/bin/certbot-auto
 chmod 0755 /usr/local/bin/certbot-auto
Bây giờ, hãy chạy lệnh sau để lấy và cài đặt chứng chỉ SSL cho trang web Drupal của bạn.
Mã:
certbot-auto --nginx -d example.com
Lệnh trên sẽ cài đặt tất cả các phụ thuộc bắt buộc trên máy chủ của bạn trước. Sau khi cài đặt, bạn sẽ được yêu cầu cung cấp địa chỉ email và chấp nhận điều khoản dịch vụ như hiển thị bên dưới:
Mã:
Lưu nhật ký gỡ lỗi vào /var/log/letsencrypt/letsencrypt.logCác plugin đã chọn: Authenticator apache, Installer apacheNhập địa chỉ email (dùng để gia hạn khẩn cấp và thông báo bảo mật) (Nhập 'c' đểhủy): [emailprotected]- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Vui lòng đọc Điều khoản dịch vụ tạihttps://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. Bạn phảiđồng ý để đăng ký với máy chủ ACME tạihttps://acme-v02.api.letsencrypt.org/directory- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -(A)gree/(C)ancel: A- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Bạn có sẵn lòng chia sẻ địa chỉ email của mình với Electronic Frontier Foundation, đối tác sáng lập của dự án Let's Encrypt và tổ chức phi lợi nhuận phát triển Certbot không? Chúng tôi muốn gửi cho bạn email về công việc của chúng tôimã hóa web, tin tức EFF, các chiến dịch và các cách hỗ trợ tự do kỹ thuật số.- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -(C)ó/(K)o: CNhận chứng chỉ mớiThực hiện các thử thách sau:Thử thách http-01 cho example.comĐang chờ xác minh...Dọn dẹp các thử tháchTriển khai chứng chỉ cho VirtualHost /etc/nginx/conf.d/drupal.conf
Tiếp theo, bạn sẽ cần chọn có chuyển hướng lưu lượng HTTP sang HTTPS hay không như hiển thị bên dưới:
Mã:
Vui lòng chọn có chuyển hướng lưu lượng HTTP sang HTTPS hay không, xóa quyền truy cập HTTP.- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -1: Không chuyển hướng - Không thực hiện thêm bất kỳ thay đổi nào đối với cấu hình máy chủ web.2: Chuyển hướng - Chuyển hướng tất cả các yêu cầu đến quyền truy cập HTTPS an toàn. Chọn tùy chọn này chocác trang web mới hoặc nếu bạn tin tưởng rằng trang web của mình hoạt động trên HTTPS. Bạn có thể hoàn tácthay đổi này bằng cách chỉnh sửa cấu hình máy chủ web của mình.- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Chọn số thích hợp [1-2] rồi [enter] (nhấn 'c' để hủy): 2
Nhập 2 và nhấn Enter để tiếp tục. Sau khi quá trình cài đặt hoàn tất, bạn sẽ thấy kết quả sau:
Mã:
Đang chuyển hướng tất cả lưu lượng truy cập trên cổng 80 sang ssl trong /etc/nginx/conf.d/drupal.conf- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Xin chúc mừng! Bạn đã bật thành công https://example.comBạn nên kiểm tra cấu hình của mình tại:https://www.ssllabs.com/ssltest/analyze.html?d=example.com- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -LƯU Ý QUAN TRỌNG: - Xin chúc mừng! Chứng chỉ và chuỗi của bạn đã được lưu tại: /etc/letsencrypt/live/example.com/fullchain.pem Tệp khóa của bạn đã được lưu tại: /etc/letsencrypt/live/example.com/privkey.pem Chứng chỉ của bạn sẽ hết hạn vào ngày 23-03-2020. Để có phiên bản mới hoặc đã chỉnh sửa của chứng chỉ này trong tương lai, chỉ cần chạy lại certbot-auto với tùy chọn "certonly". Để gia hạn không tương tác *tất cả* chứng chỉ của bạn, hãy chạy "certbot-auto renew" - Nếu bạn thích Certbot, vui lòng cân nhắc hỗ trợ công việc của chúng tôi bằng cách: Quyên góp cho ISRG / Let's Encrypt: https://letsencrypt.org/donate Quyên góp cho EFF: https://eff.org/donate-le

Truy cập trang web Drupal​

Bây giờ, hãy mở trình duyệt web của bạn và nhập URL . Bạn sẽ được chuyển hướng đến trang sau:



Chọn ngôn ngữ mong muốn và nhấp vào nút Lưu và tiếp tục. Bạn sẽ thấy trang sau:



Chọn hồ sơ cài đặt của bạn và nhấp vào nút Lưu và tiếp tục. Bạn sẽ thấy trang sau:



Cung cấp thông tin chi tiết về cơ sở dữ liệu của bạn và nhấp vào nút Lưu và tiếp tục. Bạn sẽ thấy trang sau:



Cung cấp tên trang web, tên người dùng quản trị, mật khẩu và nhấp vào nút Lưu và tiếp tục. Bạn sẽ thấy bảng điều khiển Drupal của mình trong trang sau:



Xin chúc mừng! bạn đã cài đặt và bảo mật Drupal thành công trên máy chủ CentOS 8.
 
Back
Bên trên