Hướng dẫn cài đặt LAMP(Linux, Apache, MariaDB, PHP) trên Ubuntu server 20.04

Hướng dẫn cài đặt LAMP(Linux, Apache, MariaDB, PHP) trên Ubuntu server 20.04

Giới thiệu

“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 máy chủ lưu trữ các trang 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 máy chủ web Apache. Dữ liệu trang web được lưu trữ trong cơ sở dữ liệu MariaDB và nội dung động được xử lý bởi PHP.

Yêu cầu

Trong bài viết này, chúng ta sẽ cài đặt LAMP trên máy chủ Ubuntu 20.04LTS đã cài đặt theo "Hướng dẫn cài đặt Ubuntu Server 20.04".

Tiến hành cài đặt.

Bước 1. Cài đặt Apache và cập nhập Firewall

Máy chủ web Apache là một trong những máy chủ web phổ biến nhất trên thế giới. Nó có rất nhiều tài liệu, có cộng đồng người dùng tích cực và được sử dụng rộng rãi trong phần lớn lịch sử của web, điều này làm cho nó trở thành một lựa chọn tuyệt vời để lưu trữ một trang web. Một ví dụ cụ thể là Wordpress với rất rất nhiều trang web sử dụng.
Cập nhập package manager

sudo apt update

Cài đặt apache với lệnh

sudo apt install apache2


Xác nhận cài đặt Apache, gõ "Y" và ấn Enter

Chờ đợi một chút, quá trình cài đặt đã hoàn tất

Kiểm tra trạng thái Apache chạy hay chưa, nếu hiện là Active: active (running) là Apache đã chạy ok rồi đó.

Sau khi cài đặt xong, bạn sẽ cần cấu hình tường lửa của mình để cho phép lưu lượng truy cập HTTP. Để liệt kê tất cả các cấu hình ứng dụng UFW hiện có:

sudo ufw app list

Ý nghĩa của mỗi cấu hình:
Apache: Cấu hình này chỉ mở cổng 80(lưu lượng web bình thường, không được mã hóa).
Apache Full: Cấu hình này mở cả cổng 80 (lưu lượng web bình thường, không được mã hóa) và cổng 443 (lưu lượng được mã hóa TLS/SSL).
Apache Secure: Cấu hình này chỉ mở cổng 443(lưu lượng được mã hóa TLS/SSL).

Vì chúng ta mới cài server nên cũng chưa có chứng chỉ SSL hay các cổng khác cần mở, trước hết mở cổng 80 cho Apache:
sudo ufw allow "Apache"
kiểm tra sự thay đổi, chúng ta đã thấy Apache trong danh sách được phép truy cập

sudo ufw status

Bây giờ bạn có thể truy cập vào web thông qua địa chỉ
http://your_server_ip

và hiện lên trang web như này, vậy là đã cài thành công Apache rồi đó

Nếu bạn không biết địa chỉ IP máy bạn, có thể sử dụng một số cách sau đây để tìm

ip a

hoặc là

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

trong đó eth0 là tên card mạng của bạn

Bước 2. Cài đặt mariadb

Bây giờ bạn đã có một máy chủ web đang chạy, cần cài đặt hệ thống quản trị cơ sở dữ liệu để có thể lưu trữ và quản lý dữ liệu cho trang web của mình. MariaDB (thay thế MySQL) là một hệ quản trị cơ sở dữ liệu phổ biến được sử dụng trong môi trường PHP.

sudo apt install mariadb-server

Đối với cài đặt MariaDB mới, bước tiếp theo là chạy tập lệnh bảo mật đi kèm. Tập lệnh này thay đổi một số tùy chọn mặc định kém an toàn hơn cho những thứ như thông tin đăng nhập tài khoản root từ xa hoặc là tài khoản mẫu.

sudo mysql_secure_installation

thực hiện các bước sau

Enter current password for root (enter for none): 

Do chưa thiết lập nên bỏ qua, ấn Enter thể hiện chưa có

Set root password? [Y/n] N

Chọn N và nhấn Enter. Vì mặc định tài khoản này trong MariaDB được gắn chặt với bảo trì hệ thống tự động, vì vậy chúng ta không nên thay đổi các phương thức xác thực của tài khoản đó. Làm như vậy sẽ làm cho bản cập nhật có thể phá vỡ hệ thống cơ sở dữ liệu.

Remove anonymous users? [Y/n] Y

Chọn Y để xóa tài khoản khách.

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 một số người dùng ẩn danh và cơ sở dữ liệu mẫu, vô hiệu hóa đăng nhập tài khoản root từ xa.

Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Bước 3 - (Tùy chọn)

Tạo người dùng quản trị sử dụng xác thực mật khẩu
Trên hệ thống Ubuntu chạy MariaDB 10.3, tài khoản root của MariaDB được xác thực bằng cách sử dụng plugin unix_socket chứ không phải bằng mật khẩu. Điều này cho phép một số bảo mật và khả năng sử dụng tốt hơn, nhưng nó cũng có thể làm phức tạp mọi thứ khi bạn cần cho phép một chương trình bên ngoài (ví dụ: phpMyAdmin).

Vì máy chủ sử dụng tài khoản root cho các tác vụ như kiểm tra nhật ký,khởi động hay dừng máy chủ, tốt nhất là không thay đổi chi tiết xác thực của root. Dù chúng ta có thể thay đổi thông tin đăng nhập bằng cách sửa nội dung trong tệp /etc/mysql/debian.cnf. Tuy nhiên, ban đầu có thể hoạt động tốt, nhưng các bản cập nhật về sau có thể có khả năng ghi đè những thay đổi đó, và khi chúng ta quên thay đổi lại thì "pòm" hệ thống có thể xảy ra lỗi.
Do đó, thay vì sửa đổi tài khoản gốc, mình nghĩ nên tạo một tài khoản quản trị riêng để truy cập dựa trên mật khẩu.

Để làm được điều này, chúng ta sẽ tạo một tài khoản mới có tên là admin với các khả năng tương tự như tài khoản gốc, nhưng được định cấu hình để xác thực mật khẩu.

sudo mariadb

Sau đó, tạo người dùng mới với quyền admin dựa trên mật khẩu. Tên và mật khẩu tùy ý của bạn.

GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
# xóa các đặc quyền
FLUSH PRIVILEGES;

OK. Vậy là xong, thoát khỏi MariaDB

exit

Bước 4.

Kiểm tra MariaDB

sudo systemctl status mariadb

Nếu hiển thị Active: active (running) là MariaDB đã chạy OK rồi đó, nếu chưa chạy thì thực hiện lệnh sau

sudo systemctl start mariadb

Nếu bạn đã định cấu hình người dùng quản trị với xác thực mật khẩu, bạn có thể thực hiện thao tác tương tự bằng cách nhập:

mysqladmin -u admin -p version

nhập mật khẩu, nếu hiện ra như này là OK rồi đó

Bây giờ bạn có một máy chủ MariaDB đang chạy và an toàn, tiếp theo, chúng ta sẽ tiến hành cài đặt PHP.

Bước 5. Cài đặt PHP

Bạn đã cài đặt Apache để phân phát nội dung của mình và đã cài đặt MySQL để lưu trữ và quản lý dữ liệu của bạn. PHP là thành phần thiết lập của sẽ xử lý mã để hiển thị nội dung động cho người dùng cuối cùng.
Để cài đặt, thực hiện lệnh:

sudo apt install php libapache2-mod-php php-mysql

Sau khi cài đặt xong, xác nhận phiên bản Apache đã cài

php -v

Bước 6. Kiểm tra hoạt động (tùy chọn)

Nếu bạn cài wordpress, lavarel ...thì có thể bỏ qua bước này, trực tiếp cài đặt để biết rõ ngay server đã hoạt động tốt hay chưa.
6.1. Kiểm tra hoạt động của php
Tạo file info.php

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

Nhập vào nội dung này

<?php
phpinfo()
?>

Lưu lại và kiểm tra thử qua trình duyệt web
http://your_server_ip/info.php

Nếu hiển thị trên trình duyệt là như hình dưới, PHP của bạn đang hoạt động như mong đợi.

6.2. Kiểm tra kết nối cơ sở dữ liệu MariaDB từ PHP
Vào mariadb

sudo mariadb

tạo database mẫu

CREATE DATABASE test;

tạo user cho database này, mật khẩu là password

CREATE USER 'test_user'@'%' IDENTIFIED BY 'password';

cấp quyền cho user truy cập vào database đó

GRANT ALL ON test.* TO 'test_user'@'%';

thoát khỏi user quản trị

exit

đăng nhập lại với user vừa tạo

mariadb -u test_user -p

Tạo bảng thử nghiệm test_list

CREATE TABLE test.test_list (item_id INT AUTO_INCREMENT,content VARCHAR(255),PRIMARY KEY(item_id));

chèn 1 số dữ liệu

INSERT INTO test.test_list (content) VALUES ("Test Item 1");INSERT INTO test.test_list (content) VALUES ("Test Item 2");INSERT INTO test.test_list (content) VALUES ("Test Item 3");

Kiểm tra thử đã chèn thành công chưa

SELECT * FROM test.test_list;

OK, vậy là database đã được tạo xong. Tiếp theo, tạo file php để kết nối database

sudo nano /var/www/html/list.php

Chèn nội dung sau

<?php
$user = "test_user";
$password = "password";
$database = "test";
$table = "test_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 lại và kiểm tra với đường dẫn http://your_server_ip/list.php

Nếu hiện ra như hình, điều đó có nghĩa là PHP đã sẵn sàng kết nối và tương tác với máy chủ MariaDB.

Kết luận

Vậy là bạn đã cài đặt Apache, MariaDB và PHP thành công trên Ubuntu server của bạn rồi đó.
Trong bài này, mình đã xây dựng một nền tảng linh hoạt để cung cấp các trang web và ứng dụng PHP cho khách truy cập, sử dụng Apache làm máy chủ và MySQL làm hệ thống lưu trữ cơ sở dữ liệu.

Nếu có khó khăn hay có câu hỏi gì hãy đừng ngại ngần mà viết comment ở phần bên dưới nhé.