Cài đặt LAMP (Apache MariaDb Php) trên CENTOS 8
“LAMP” là một nhóm phần mềm nguồn mở thường được cài đặt cùng nhau để cho phép server chạy web động và ứng dụng web được viết bằng PHP. Thuật ngữ này là một từ viết tắt đại diện cho hệ điều hành Linux, với server web Apache. Dữ lưu trữ trong database MariaDB (hay Mysql) và xử lý động bởi PHP.Database trong LAMP thường là một server database MySQL, nhưng trước khi phát hành CentOS 8, MySQL không có sẵn từ kho lưu trữ CentOS mặc định. Do đó, MariaDB , một nhánh cộng đồng của MySQL, đã trở thành một giải pháp thay thế được chấp nhận cho MySQL làm hệ thống database mặc định cho các LAMP trên máy CentOS. MariaDB hoạt động như một bản thay thế cho server MySQL, trong thực tế, điều này có nghĩa là bạn có thể chuyển sang MariaDB mà không phải thực hiện bất kỳ thay đổi trong ứng dụng.
Hướng dẫn này sẽ cài đặt LAMP trên server CentOS 8, sử dụng MariaDB làm hệ thống quản lý database.
Yêu cầu
Ta cần quyền truy cập vào server CentOS 8 với người dùng không phải root có đặc quyền sudo và firewall đang hoạt động trên server. Để thiết lập điều này, ta có thể làm theo Hướng dẫn Thiết lập server Ban đầu cho CentOS 8.
Bước 1 - Cài đặt server Apache
Apache, một server web nguồn mở phổ biến hàng đầu, có thể được cấu hình để chạy PHP. Ta sẽ sử dụng trình quản lý gói dnf
, là trình quản lý gói mặc định mới trên CentOS 8, để cài đặt Apache.
Cài đặt httpd
với:
- sudo dnf install httpd
Nhập y
để xác nhận rằng bạn muốn cài đặt Apache.
Sau khi cài đặt xong, hãy chạy lệnh sau để bật và khởi động Apache:
- sudo systemctl start httpd
Trong trường hợp bạn đã bật firewalld
theo hướng dẫn thiết lập server ban đầu, bạn sẽ cần firewall cho phép cổng của Apache. Lệnh sau sẽ kích hoạt kết nối HTTP, chạy trên cổng 80
theo mặc định:
- sudo firewall-cmd --permanent --add-service=http
Để liệt kê, xác minh thay đổi đã được áp dụng:
- sudo firewall-cmd --permanent --list-all
Bạn sẽ thấy đầu ra như này:
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:
Cần tải lại cấu hình firewall để các thay đổi có hiệu lực:
- sudo firewall-cmd --reload
Với quy tắc firewall mới được thêm vào, bạn có thể kiểm tra xem Apache có hoạt động không bằng cách truy cập địa chỉ IP hoặc tên miền của server từ trình duyệt web.
Nếu không có tên miền được trỏ đến server và không biết địa chỉ IP công cộng của server, bạn có thể tìm tên miền đó bằng cách chạy lệnh sau:
- ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Thao tác này sẽ in ra một vài địa chỉ IP. Bạn có thể thử lần lượt từng IP trong trình duyệt web.
Hoặc hay ho hơn, bạn có thể kiểm tra địa chỉ IP nào có thể truy cập được với công cụ dòng lệnh có sẵn:
- curl -4 icanhazip.com
Sẽ cho ra IP public của bạn, nhập địa chỉ nhận được vào trình duyệt web trang mặc định của Apache có thể hiển thị:
Nếu bạn thấy trang này, thì server web đã được cài đặt chuẩn.
Bước 2 - Cài đặt MariaDB
Bạn đã có một server web và đang chạy, ta sẽ cài đặt một hệ thống database để quản lý dữ liệu cho trang web. Ta sẽ cài đặt MariaDB, một bản fork nhân bản, do cộng đồng phát triển MySQL của Oracle.
Để cài đặt, hãy chạy:
- sudo dnf install mariadb-server
Khi hoàn tất, bật và khởi động MariaDB:
- sudo systemctl start mariadb
Để cải thiện bảo mật của server database, bạn nên chạy một tập lệnh bảo mật được cài đặt sẵn với MariaDB. Tập lệnh này sẽ xóa 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 database:
- sudo mysql_secure_installation
Lệnh này sẽ ra một loạt gợi ý thiết lập MariaDB. Đầu tiên yêu cầu mật khẩu root của database. Không được nhầm lẫn với người dùng root hệ thống. Người dùng root database là người dùng quản trị có đầy đủ đặc quyền đối với hệ thống database. Ta vừa cài đặt MariaDB và chưa thực hiện bất kỳ thay đổi cấu hình nào, mật khẩu này sẽ trống, nên chỉ cần nhấn ENTER
tiếp tục.
Tiếp theo hỏi bạn có muốn thiết lập mật khẩu root database hay không . Vì MariaDB sử dụng phương thức xác thực đặc biệt cho người dùng root thường an toàn hơn so với sử dụng mật khẩu, bạn không cần phải thiết lập điều này ngay bây giờ. Gõ N
rồi nhấn ENTER
.
Sau đó, bạn có thể nhấn Y
và sau đó ENTER
để chấp nhận các giá trị mặc định cho tất cả các câu hỏi tiếp theo. Thao tác này sẽ xóa người dùng ẩn danh và database thử nghiệm, vô hiệu hóa đăng nhập root từ xa server áp dụng ngay những thay đổi đã thực hiện.
Khi hoàn tất, hãy đăng nhập vào console lệnh của MariaDB:
- sudo mysql
Thao tác này sẽ kết nối với server MariaDB với tư cách là người dùng database quản trị root , đầu ra như thế này:
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ư cách root , vì phương pháp xác thực mặc định cho người dùng MariaDB quản trị là unix_socket
thay vì password
. Mặc dù ban đầu điều này có vẻ là một nguy cơ bảo mật, nhưng nó làm cho server database an toàn hơn, vì người dùng duy nhất được phép đăng nhập với tư cách là người dùng MariaDB root là người dùng hệ thống có đặc quyền sudo kết nối từ console hoặc thông qua một ứng dụng chạy với đặc quyền như nhau. Về mặt thực tế, điều đó có nghĩa là bạn sẽ không thể sử dụng người dùng root database quản trị để kết nối từ ứng dụng PHP (để bảo mật tốt) .
Để tăng cường bảo mật, tốt nhất bạn nên thiết lập các tài khoản người dùng mới với ít đặc quyền mở rộng hơn cho mọi database, đặc biệt nếu bạn có kế hoạch lưu trữ nhiều database trên server . Để tạo thiết lập như vậy, ta sẽ tạo một database có tên example_database và người dùng có tên example_user, bạn có thể thay thế các tên này.
Để tạo database mới, hãy chạy lệnh sau từ console MariaDB:
- 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ọ các đặc quyền đầy đủ trên database tùy chỉnh mà bạn vừa tạo. Lệnh sau đặt mật khẩu của người dùng này là password
, bạn nên thay thế giá trị này bằng một mật khẩu an toàn:
- GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
Điều này sẽ cung cấp cho người dùng example_user đầy đủ đặc quyền đối với database example\_database
, đồng thời ngăn người dùng này tạo hoặc sửa đổi database khác trên server.
Xóa các đặc quyền để đảm bảo rằng chúng được lưu và khả dụng trong phiên hiện tại:
- FLUSH PRIVILEGES;
Sau đó, thoát khỏi shell MariaDB:
- exit
Bạn có thể kiểm tra xem người dùng mới có quyền thích hợp hay không bằng cách đăng nhập lại vào console MariaDB, lần này bằng thông tin đăng nhập người dùng mới tại:
- mysql -u example_user -p
Lưu ý cờ -p
trong lệnh này, nó sẽ nhắc bạn nhập mật khẩu bạn đã chọn khi tạo người dùng example_user . Sau khi đăng nhập vào console MariaDB, hãy xác nhận rằng bạn có quyền truy cập vào database example\_database
:
- SHOW DATABASES;
Sẽ có kết quả sau:
+--------------------+ | Database | +--------------------+ | example_database | | information_schema | +--------------------+ 2 rows in set (0.000 sec)
Để thoát khỏi shell MariaDB, hãy nhập:
- exit
Tại thời điểm này, hệ thống database của bạn đã được thiết lập và bạn có thể chuyển sang cài đặt PHP, thành phần cuối của LAMP.
Bước 3 - Cài đặt PHP
Bạn đã cài đặt Apache để phân phát nội dung và cài đặt MariaDB để quản lý dữ liệu. PHP là thành phần của thiết lập sẽ xử lý mã để hiển thị nội dung cho người dùng web. Ngoài gói php
, bạn sẽ cần php-mysqlnd
, một module PHP cho phép PHP giao tiếp với database dựa trên MySQL. Các gói PHP core sẽ tự động được cài đặt dưới dạng các gói phụ thuộc đi theo.
Cài đặt các gói php
và php-mysqlnd
bằng trình quản lý gói dnf
:
sudo dnf install php php-mysqlnd
Sau khi cài đặt xong, cần khởi động lại server web Apache để kích hoạt module PHP:
sudo systemctl restart httpd
Server web của bạn hiện đã được thiết lập đầy đủ. Trong bước tiếp theo, ta sẽ tạo một kịch bản thử nghiệm 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 Apache mặc định trên CentOS 8 sẽ tạo một root Document nằm tại /var/www/html
. Bạn không cần thực hiện bất kỳ thay đổi nào đối với cài đặt mặc định của Apache để PHP hoạt động chính xác trong server web.
Điều chỉnh duy nhất mà ta sẽ thực hiện là thay đổi cài đặt quyền mặc định trên thư mục Document Root Apache. Bằng cách này, bạn sẽ có thể tạo và sửa đổi các file trong thư mục đó với người dùng hệ thống thông thường mà không cần phải đặt trước mỗi lệnh bằng sudo
.
Lệnh sau sẽ thay đổi quyền sở hữu Document Root Apache mặc định thành 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 được đánh dấu trong lệnh này để phản ánh tên người dùng và nhóm trong hệ thống.
- sudo chown -R sammy.sammy /var/www/html/
Bây giờ ta sẽ tạo một trang PHP thử nghiệm để đảm bảo server web hoạt động như mong đợi.
Trình soạn thảo văn bản mặc định đi kèm với CentOS 8 là vi
. vi
là một trình soạn thảo văn bản cực kỳ mạnh mẽ, nhưng nó có thể hơi khó đố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 thân thiện với người dùng hơn như nano
để tạo điều kiện chỉnh sửa file trên server CentOS 8:
- sudo dnf install nano
Nhập y
khi được nhắc xác nhận cài đặt.
Tiếp theo, hãy tạo một file PHP mới có tên là info.php
tại 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 server:
<?php phpinfo();
Khi bạn hoàn tất, hãy lưu file. Nếu bạn đang sử dụng nano
, bạn có thể thực hiện điều đó bằng cách gõ CTRL+X
, rồi đến Y
và ENTER
để xác nhận.
Bây giờ ta có thể kiểm tra xem server web của ta có thể hiển thị chính xác nội dung được tạo bởi tập lệnh PHP hay không. Truy cập trình duyệt của bạn và truy cập tên server hoặc địa chỉ IP server của bạn, theo sau là /info.php
:
http://server_host_or_IP/info.php
Bạn sẽ thấy một trang tương tự như sau:
Sau khi kiểm tra thông tin liên quan về server PHP của bạn thông qua trang đó, tốt nhất là xóa file bạn đã tạo vì nó chứa thông tin nhạy cảm về môi trường PHP và server CentOS của bạn. Sử dụng rm
để xóa file đó:
- rm /var/www/html/info.php
Tiếp theo, ta sẽ kiểm tra kết nối database từ phía PHP.
Bước 5 - Kiểm tra kết nối database từ PHP (Mở rộng)
Nếu bạn muốn kiểm tra xem PHP có thể kết nối với MariaDB và thực thi các truy vấn database hay không, bạn có thể tạo một bảng kiểm tra 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ới console MariaDB với người dùng database bạn đã tạo ở 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 todo_list
. Từ console MariaDB, hãy 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) );
Chèn một vài hàng nội dung trong bảng test:
- INSERT INTO example_database.todo_list (content) VALUES ("My first important item");
- INSERT INTO example_database.todo_list (content) VALUES ("My second important item");
Để xác nhận dữ liệu đã lưu thành công vào bảng, hãy chạy:
- SELECT * FROM example_database.todo_list;
Kết quả như sau:
+---------+--------------------------+ | 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 có dữ liệu hợp lệ trong bảng test, bạn có thể thoát khỏi console MariaDB:
- exit
Bây giờ ta có thể tạo tập lệnh PHP kết nối với MariaDB và truy vấn nội dung. Tạo một file PHP mới trong thư mục root web:
- nano /var/www/html/todo_list.php
Thêm nội dung sau vào file PHP:
<?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 file khi bạn chỉnh sửa xong.
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 server hoặc địa chỉ IP của server, theo sau là /todo_list.php
:
http://server_host_or_IP/todo_list.php
Ta sẽ thấy một trang kiểu thế này, hiển thị nội dung bạn đã chèn vào bảng test :
Vậy PHP đã kết nối và tương tác với server MariaDB thành công.
Kết luận
Trong hướng dẫn này, ta đã xây dựng một nền tảng linh hoạt để chạy các trang web với PHP, sử dụng Apache làm server web. Ta đã thiết lập Apache để xử lý các yêu cầu PHP và thiết lập database MariaDB để lưu trữ dữ liệu.
Các tin trước
Cách cài đặt máy chủ Apache trên Centos 8 2020-09-28
Tổng quan sử dụng SSH, làm việc với SSH Client - Server 2020-09-28
Cách cài đặt SSH Key trên Centos 8, đăng nhập không cần password! 2020-09-27
Cài đặt bảo mật cơ bản cho Centos 8 2020-09-27
Lập lịch với Crontab trên Centos 8 2020-09-27
Bảo mật Apache với Lets Encrypt trên Centos 8 2020-09-19
Tạo chứng chỉ số tự ký trên Apache Centos 8 (self-signed-ssl-certificate) 2020-09-19
Tối ưu SQL với Index, FullText Search 2020-08-10
Cài đặt Node.js trên Ubuntu 18.04 2020-08-06
Bảo mật Apache với Lets Encrypt 2020-08-06