Cách cài Linux, Apache, MariaDB, PHP (LAMP stack) trên CentOS 8

Một LAMP stack là một nhóm phần mềm mã nguồn mở thường được cài đặt cùng nhau để cho phép một máy chủ chạy các trang web động và ứng dụng web viết bằng PHP. Thuật ngữ này viết tắt từ Linux, Apache, MariaDB và PHP.

Lớp cơ sở dữ liệu trong một LAMP stack thường là một máy chủ cơ sở dữ liệu MySQL, nhưng trước khi CentOS 8 được phát hành, MySQL không có sẵn từ kho lưu trữ mặc định của CentOS. Do đó, MariaDB, một bản fork của MySQL được cộng đồng chấp nhận rộng rãi như một sự thay thế cho MySQL, trở thành hệ thống cơ sở dữ liệu mặc định cho LAMP stack trên các máy chủ CentOS. 

MariaDB hoạt động như một sự thay thế thẳng hàng cho máy chủ MySQL gốc, điều này có nghĩa là bạn có thể chuyển sang MariaDB mà không cần thay đổi bất kỳ cấu hình hoặc mã nguồn trong ứng dụng của bạn. Trong hướng dẫn này, bạn sẽ cài đặt một LAMP stack trên một máy chủ CentOS 8, sử dụng MariaDB làm hệ thống quản lý cơ sở dữ liệu.

Điều kiện tiên quyết khi cài đặt LAMP stack

Để làm theo hướng dẫn cài đặt LAMP stack, bạn cần truy cập vào một máy chủ CentOS 8 với tư cách người dùng chứ không phải là root và có đặc quyền sudo, cũng như một tường lửa hoạt động trên máy chủ của bạn. 

Cách cài LAMP stack (Linux, Apache, MariaDB, PHP) trên Centos 8

Bước 1 - Cài đặt máy chủ web Apache

Để hiển thị trang web cho khách truy cập, chúng ta sẽ sử dụng Apache - một máy chủ web mã nguồn mở phổ biến có thể được cấu hình để phục vụ các trang PHP. Chúng ta sẽ sử dụng trình quản lý gói dnf, đây là trình quản lý gói mặc định mới trên CentOS 8 để cài đặt phần mềm này.

Cài đặt gói httpd bằng lệnh sau:

$ sudo dnf install httpd

Khi được yêu cầu, nhập y để xác nhận rằng bạn muốn cài đặt Apache. Sau khi quá trình cài đặt hoàn tất, chạy lệnh sau để kích hoạt và khởi động máy chủ:

$ sudo systemctl start httpd

Trong trường hợp bạn đã kích hoạt tường lửa firewalld, bạn sẽ cần cho phép kết nối đến Apache. Lệnh sau sẽ kích hoạt kết nối HTTP vĩnh viễn, chạy trên cổng 80 mặc định:

$ sudo firewall-cmd --permanent --add-service=http

Để xác nhận rằng thay đổi đã được áp dụng, bạn có thể chạy:

$ sudo firewall-cmd --permanent --list-all

Bạn có thể thấy đầu ra như sau:

Output
public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: cockpit dhcpv6-client http ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

Bạn cần tải lại cấu hình tường lửa để thay đổi có hiệu lực:

$ sudo firewall-cmd --reload

Với luật tường lửa mới, bạn có thể kiểm tra xem máy chủ có hoạt động hay không bằng cách truy cập vào địa chỉ IP công cộng hoặc tên miền của máy chủ từ trình duyệt web của bạn.

Nếu bạn không có tên miền trỏ đến máy chủ và không biết địa chỉ IP công cộng của máy chủ, bạn có thể tìm nó bằng cách chạy lệnh sau:

$ ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Điều này sẽ in ra một số địa chỉ IP. Bạn có thể thử từng địa chỉ một trong trình duyệt web của bạn.

Như một phương án thay thế, bạn có thể kiểm tra xem địa chỉ IP nào có thể truy cập được nhìn từ các vị trí khác trên internet:

$ curl -4 icanhazip.com

Gõ địa chỉ mà bạn nhận được vào trình duyệt web của bạn và nó sẽ đưa bạn đến trang chủ mặc định của Apache.

Cài Linux, Apache, MariaDB, PHP (LAMP stack) trên CentOS 8

Nếu bạn nhìn thấy trang này, tức là máy chủ web của bạn đã được cài đặt đúng.

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

Bây giờ bạn đã có một máy chủ web hoạt động, bạn cần cài đặt hệ thống cơ sở dữ liệu để có thể lưu trữ và quản lý dữ liệu cho trang web của bạn. Chúng ta sẽ cài đặt MariaDB, một phiên bản phát triển bởi cộng đồng từ MySQL gốc của Oracle.

Để cài đặt phần mềm này, chạy lệnh sau:

$ sudo dnf install mariadb-server

Sau khi quá trình cài đặt hoàn tất, bạn có thể kích hoạt và khởi động máy chủ MariaDB bằng lệnh:

$ sudo systemctl start mariadb

Để cải thiện bảo mật cho máy chủ cơ sở dữ liệu của bạn, nên chạy một script bảo mật được cài đặt sẵn trong MariaDB. Script này sẽ loại bỏ một số cài đặt mặc định không an toàn và khóa quyền truy cập vào hệ thống cơ sở dữ liệu của bạn. 

Bắt đầu chạy script tương tác bằng cách chạy lệnh:

$ sudo mysql_secure_installation

Script này sẽ yêu cầu bạn trả lời một loạt các câu hỏi để thay đổi cài đặt của MariaDB. Câu hỏi đầu tiên yêu cầu bạn nhập mật khẩu gốc hiện tại của cơ sở dữ liệu. Đây không phải là mật khẩu người dùng root của hệ thống. Người dùng root của cơ sở dữ liệu là một người dùng quản trị với đầy đủ quyền truy cập vào hệ thống cơ sở dữ liệu. Vì bạn vừa mới cài đặt MariaDB và chưa thay đổi cấu hình nào, mật khẩu này sẽ trống, vì vậy chỉ cần nhấn ENTER tại câu hỏi.

Câu hỏi tiếp theo yêu cầu bạn có muốn thiết lập mật khẩu gốc cho cơ sở dữ liệu. Vì MariaDB sử dụng một phương thức xác thực đặc biệt cho người dùng root thường an toàn hơn việc sử dụng mật khẩu, bạn không cần thiết lập mật khẩu vào lúc này. Gõ N và nhấn ENTER.

Sau đó, bạn có thể nhấn Y và sau đó nhấn ENTER để chấp nhận giá trị mặc định cho tất cả các câu hỏi tiếp theo. Điều này sẽ loại bỏ người dùng ẩn danh và cơ sở dữ liệu kiểm tra, vô hiệu hóa đăng nhập root từ xa và tải các quy tắc mới này để máy chủ ngay lập tức áp dụng các thay đổi bạn đã thực hiện.

Khi hoàn thành, đăng nhập vào bảng điều khiển MariaDB bằng cách gõ:

$ sudo mysql

Điều này sẽ kết nối đến máy chủ MariaDB với người dùng cơ sở dữ liệu quản trị root được xác định thông qua việc sử dụng sudo khi chạy lệnh này. Bạn sẽ thấy đầu ra giống như sau:

Output
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.17-MariaDB MariaDB Server

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)]> 

Lưu ý rằng bạn không cần cung cấp mật khẩu để kết nối với tài khoản root. Điều này hoạt động vì phương thức xác thực mặc định cho người dùng quản trị MariaDB là unix_socket thay vì mật khẩu. 

Mặc dù điều này có thể có vẻ như một vấn đề về bảo mật ban đầu, nhưng nó làm cho máy chủ cơ sở dữ liệu an toàn hơn vì chỉ có người dùng được phép đăng nhập dưới tài khoản root MariaDB là người dùng hệ thống có quyền sudo kết nối từ bảng điều khiển hoặc thông qua ứng dụng chạy với cùng đặc quyền. 

Trong thực tế, điều đó có nghĩa là bạn sẽ không thể sử dụng người dùng cơ sở dữ liệu root quản trị để kết nối từ ứng dụng PHP của bạn.

Để tăng cường bảo mật, tốt nhất là tạo các tài khoản người dùng riêng với đặc quyền hạn chế cho mỗi cơ sở dữ liệu, đặc biệt là nếu bạn có kế hoạch chứa nhiều cơ sở dữ liệu trên máy chủ của bạn. 

Để thể hiện một cấu hình như vậy, chúng ta sẽ tạo một cơ sở dữ liệu mới có tên là example_database và một người dùng có tên là example_user, nhưng bạn có thể thay thế những tên này bằng các giá trị khác.

Để tạo một cơ sở dữ liệu mới, chạy lệnh sau từ cửa sổ MariaDB console của bạn:

MariaDB [(none)]> CREATE DATABASE example_database;

Bây giờ bạn có thể tạo một người dùng mới và cấp cho họ đầy đủ quyền trên cơ sở dữ liệu tùy chỉnh bạn vừa tạo. Lệnh sau định nghĩa mật khẩu của người dùng này là "password", nhưng bạn nên thay thế giá trị này bằng một mật khẩu an toàn mà bạn chọn:

MariaDB [(none)]> GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Điều này sẽ cấp cho người dùng example_user đầy đủ đặc quyền trên cơ sở dữ liệu example_database, đồng thời ngăn người dùng này tạo hoặc chỉnh sửa các cơ sở dữ liệu khác trên máy chủ của bạn.

Làm mới các đặc quyền để đảm bảo rằng chúng được lưu và có sẵn trong phiên làm việc hiện tại:

MariaDB [(none)]> FLUSH PRIVILEGES;

Sau đó, thoát khỏi giao diện dòng lệnh của MariaDB:

MariaDB [(none)]> exit

Bạn có thể kiểm tra xem người dùng mới có đủ quyền hạn bằng cách đăng nhập vào giao diện dòng lệnh của MariaDB một lần nữa, lần này sử dụng thông tin đăng nhập của người dùng tùy chỉnh:

$ mysql -u example_user -p

Lưu ý cờ -p trong lệnh này, nó sẽ yêu cầu bạn nhập mật khẩu mà bạn đã chọn khi tạo người dùng example_user. Sau khi đăng nhập vào giao diện dòng lệnh của MariaDB, xác nhận rằng bạn có quyền truy cập vào cơ sở dữ liệu example_database:

MariaDB [(none)]> SHOW DATABASES;

Điều này sẽ cung cấp cho bạn đầu ra sau đây:

Output
+--------------------+
| Database           |
+--------------------+
| example_database   |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)

Để thoát khỏi MariaDB shell, gõ:

MariaDB [(none)]> exit

Ở bước này, hệ thống cơ sở dữ liệu của bạn đã được thiết lập và bạn có thể tiếp tục cài đặt PHP, thành phần cuối cùng của bộ công cụ LAMP.

Bước 3 - Cài đặt PHP

Bạn đã cài đặt Apache để phục vụ nội dung và MariaDB để lưu trữ và quản lý dữ liệu. PHP là thành phần trong bộ cài đặt của chúng ta sẽ xử lý mã để hiển thị nội dung động cho người dùng cuối. Ngoài gói php, bạn cần cài đặt php-mysqlnd, một module PHP cho phép PHP giao tiếp với cơ sở dữ liệu dựa trên MySQL. Các gói PHP cốt lõi sẽ tự động được cài đặt như là các phụ thuộc.

Để cài đặt các gói php và php-mysqlnd bằng trình quản lý gói dnf, chạy lệnh sau:

sudo dnf install php php-mysqlnd

Sau khi cài đặt hoàn tất, bạn cần khởi động lại máy chủ web Apache để kích hoạt module PHP:

sudo systemctl restart httpd

Máy chủ web của bạn đã được cài đặt hoàn tất. Trong bước tiếp theo, chúng ta sẽ tạo một tập lệnh kiểm tra PHP để đảm bảo mọi thứ hoạt động như mong đợi.

Bước 4 - Kiểm tra PHP với Apache

Cài đặt mặc định của Apache trên CentOS 8 sẽ tạo ra một thư mục gốc tài liệu nằm tại /var/www/html. Bạn không cần thay đổi bất kỳ cài đặt mặc định nào của Apache để PHP hoạt động chính xác trong máy chủ web của bạn.

Điều chỉnh duy nhất chúng ta sẽ thực hiện là thay đổi cài đặt quyền mặc định trên thư mục gốc tài liệu Apache của bạn. Như vậy, bạn sẽ có thể tạo và sửa đổi tệp trong thư mục đó với người dùng hệ thống thông thường của bạn, mà không cần phải thêm tiền tố sudo cho mỗi lệnh.

Lệnh sau sẽ thay đổi sở hữu của thư mục gốc tài liệu Apache mặc định thành một người dùng và nhóm có tên là sammy, vì vậy hãy đảm bảo thay thế tên người dùng và nhóm đang được tô đậm trong lệnh này để phản ánh tên người dùng và nhóm hệ thống của bạn.

$ sudo chown -R sammy.sammy /var/www/html/

Bây giờ chúng ta sẽ tạo một trang PHP kiểm tra để đảm bảo máy chủ web hoạt động như mong đợi.

Trình chỉnh sửa văn bản mặc định đi kèm với CentOS 8 là vi. vi là một trình chỉnh sửa văn bản rất mạnh mẽ, nhưng nó có thể hơi khó hiểu đối với người dùng thiếu kinh nghiệm với nó. Bạn có thể muốn cài đặt một trình chỉnh sửa văn bản dễ sử dụng hơn như nano để dễ dàng chỉnh sửa tệp trên máy chủ CentOS 8.

$ sudo dnf install nano

Nhập y khi được yêu cầu để xác nhận việc cài đặt.

Bây giờ, hãy tạo một tệp PHP mới có tên info.php trong thư mục /var/www/html:

$ nano /var/www/html/info.php

Đoạn mã PHP sau sẽ hiển thị thông tin về môi trường PHP hiện tại đang chạy trên máy chủ:

<?php

phpinfo();

Khi hoàn tất, lưu và đóng tệp. Nếu bạn đang sử dụng nano, bạn có thể làm điều đó bằng cách nhấn CTRL+X, sau đó gõ Y và ENTER để xác nhận.

Bây giờ, chúng ta có thể kiểm tra xem máy chủ web của chúng ta có thể hiển thị đúng nội dung được tạo bởi một tập lệnh PHP hay không. Truy cập trình duyệt của bạn và truy cập vào tên máy chủ hoặc địa chỉ IP của máy chủ của bạn, tiếp theo là /info.php:

http://server_host_or_IP/info.php

Bạn sẽ thấy một trang tương tự như sau:

Cài Linux, Apache, MariaDB, PHP (LAMP stack) trên CentOS 8

Sau khi kiểm tra thông tin liên quan về máy chủ PHP của bạn qua trang đó, tốt nhất là xóa tệp mà bạn đã tạo vì nó chứa thông tin nhạy cảm về môi trường PHP và máy chủ CentOS của bạn. Bạn có thể sử dụng lệnh rm để xóa tệp đó:

$ rm /var/www/html/info.php

Bạn luôn tạo lại được tệp này nếu bạn cần sau này. Tiếp theo, chúng ta sẽ thử nghiệm kết nối cơ sở dữ liệu từ phía PHP.

Bước 5 - Kiểm tra Kết nối Cơ sở dữ liệu từ PHP (Tùy chọn)

Để kiểm tra xem PHP có thể kết nối được với MariaDB và thực thi các truy vấn cơ sở dữ liệu hay không, bạn có thể tạo một bảng thử nghiệm với dữ liệu giả và truy vấn nội dung của nó từ một tập lệnh PHP.

Đầu tiên, kết nối vào bảng điều khiển MariaDB với người dùng cơ sở dữ liệu bạn đã tạo trong Bước 2 của hướng dẫn này:

$ mysql -u example_user -p

Tạo một bảng có tên là todo_list. Từ bảng điều khiển MariaDB, chạy câu lệnh sau:

CREATE TABLE example_database.todo_list (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);

Bây giờ, chèn một vài dòng nội dung vào bảng kiểm tra. Bạn có thể lặp lại lệnh sau một vài lần, sử dụng các giá trị khác nhau:

MariaDB [(none)]> INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

Để xác nhận rằng dữ liệu đã được lưu thành công vào bảng của bạn, hãy chạy:

MariaDB [(none)]> SELECT * FROM example_database.todo_list;

Bạn sẽ thấy được đầu ra như sau:

Output
+---------+--------------------------+
| item_id | content                  |
+---------+--------------------------+
|       1 | My first important item  |
|       2 | My second important item |
|       3 | My third important item  |
|       4 | and this one more thing  |
+---------+--------------------------+
4 rows in set (0.000 sec)

Sau khi xác nhận rằng có dữ liệu hợp lệ trong bảng thử nghiệm, bạn có thể thoát khỏi MariaDB console bằng cách gõ:

MariaDB [(none)]> exit

Bây giờ bạn có thể tạo tệp PHP để kết nối với MariaDB và truy vấn nội dung. Hãy tạo một tệp PHP mới trong thư mục gốc web tùy chỉnh của bạn bằng trình soạn thảo ưa thích. Chúng ta sẽ sử dụng nano để thực hiện điều này:

$ nano /var/www/html/todo_list.php

Hãy thêm nội dung sau vào tệp PHP của bạn:

<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";

try {
  $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
  echo "<h2>TODO</h2><ol>"; 
  foreach($db->query("SELECT content FROM $table") as $row) {
    echo "<li>" . $row['content'] . "</li>";
  }
  echo "</ol>";
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

Lưu và đóng tệp khi bạn hoàn thành việc chỉnh sửa.

Bây giờ bạn có thể truy cập trang này trong trình duyệt web bằng cách truy cập vào tên máy chủ hoặc địa chỉ IP công khai của máy chủ, theo sau là /todo_list.php:

http://server_host_or_IP/todo_list.php

Bạn sẽ thấy một trang như thế này, hiển thị nội dung bạn đã thêm vào bảng thử nghiệm của mình:

Cài Linux, Apache, MariaDB, PHP (LAMP stack) trên CentOS 8

Điều đó có nghĩa là môi trường PHP của bạn đã sẵn sàng kết nối và tương tác với máy chủ MariaDB.

Trong hướng dẫn này, bạn đã cài đặt LAMP stack, xây dựng một nền tảng linh hoạt để phục vụ các trang web và ứng dụng PHP cho khách truy cập, sử dụng Apache như máy chủ web. Bạn đã cấu hình Apache để xử lý các yêu cầu PHP và cũng đã thiết lập một cơ sở dữ liệu MariaDB để lưu trữ dữ liệu của trang web.

Mọi người cũng tìm kiếm: php stack