Cài đặt Linux, Apache, MySQL, PHP (LAMP) Stack trên Ubuntu 22.04

by toantv

Trước khi bắt đầu

“LAMP” 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áy chủ chứa 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ừ hệ điều hành Linux kết hợp với máy chủ web Apache. Dữ liệu của trang web được lưu trữ trong cơ sở dữ liệu MySQL và nội dung động được xử lý bởi PHP.

Cụ thể:

  • L – Linux là hệ điều hành mã nguồn mở, thường được sử dụng làm nền tảng cho các máy chủ web.
  • A – Apache là một máy chủ web mã nguồn mở, được sử dụng phổ biến trên toàn thế giới. Nó có khả năng xử lý các yêu cầu HTTP và phục vụ các tệp và trang web tĩnh và động.
  • M – MySQL là hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) mã nguồn mở, được sử dụng để lưu trữ và quản lý dữ liệu trên máy chủ web.
  • P – PHP là một ngôn ngữ lập trình mã nguồn mở, phục vụ cho việc phát triển các ứng dụng web động. Nó có khả năng tương tác với cơ sở dữ liệu và tạo ra nội dung động trên máy chủ web.

Đảm bảo rằng bạn có quyền truy cập sudo vào máy chủ Linux vì các lệnh được sử dụng trong hướng dẫn này yêu cầu đặc quyền root.

Bước 1: Cài đặt Apache

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 mô tả rõ ràng, có một 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 đó khiến nó trở thành một lựa chọn tuyệt vời để lưu trữ một trang web.

Cập nhật kho lưu trữ gói. Nếu đây là lần đầu bạn sử dụng lệnh sudo trong phiên làm việc này, bạn sẽ được nhắc nhập mật khẩu người dùng của mình để xác nhận bạn có đủ quyền để quản lý các gói hệ thống bằng apt:

sudo apt update -y

Tiếp theo, cài đặt Apache bằng lệnh sau:

sudo apt install apache2 -y
sudo systemctl enable apache2

Sau khi quá trình cài đặt hoàn tất, bạn cần điều chỉnh cài đặt tường lửa để cho phép traffic HTTP. Công cụ cấu hình tường lửa mặc định của Ubuntu được gọi là Uncomplicated Firewall (UFW). Nó có các profile ứng dụng khác nhau mà bạn có thể tận dụng. Để liệt kê tất cả các profile ứng dụng UFW hiện có, thực thi lệnh sau:

sudo ufw app list
Output
Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

Dưới đây là ý nghĩa của mỗi profile:

  • Apache: chỉ mở cổng 80 (traffic web thông thường, chưa được mã hóa).
  • Apache Full: mở cả cổng 80 (traffic web thông thường, chưa được mã hóa) và cổng 443 (traffic được mã hóa TLS/SSL).
  • Apache Secure: chỉ mở cổng 443 (traffic được mã hóa TLS/SSL).

Hiện tại, tốt nhất là chỉ cho phép kết nối trên cổng 80, vì đây là một cài đặt Apache mới và bạn chưa cấu hình chứng chỉ TLS/SSL để cho phép traffic HTTPS trên máy chủ của bạn.

Để chỉ cho phép traffic trên cổng 80, sử dụng profile Apache:

sudo ufw allow in "Apache"

Xác minh sự thay đổi bằng lệnh sau:

sudo ufw status
Output

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                                
Apache                     ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)                    
Apache (v6)                ALLOW       Anywhere (v6)     

Mở trình duyệt và truy cập vào địa chỉ IP máy chủ của bạn

http://your_server_ip

Trang web mặc định của Apache trên Ubuntu 22.04 được sử dụng cho mục đích thông tin và kiểm tra

Ubuntu 22.04 Apache default web page with an overview of your default configuration settings

Bước 2: Cài đặt MySQL

Bây giờ bạn đã có một máy chủ web đang hoạt động, bạn cần cài đặt hệ thống cơ sở dữ liệu để lưu trữ và quản lý dữ liệu cho trang web của bạn. 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 mysql-server -y
sudo systemctl enable mysql

Khi quá trình cài đặt hoàn tất, khuyến nghị bạn chạy một srcipt bảo mật đi kèm với MySQL. Kịch bản 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ằng cách chạy lệnh sau:

sudo mysql_secure_installation

Bạn sẽ được yêu cầu câu hỏi xem bạn có muốn cấu hình VALIDATE PASSWORD PLUGIN hay không.

Lưu ý: Nếu được kích hoạt, các mật khẩu không khớp với tiêu chí được chỉ định sẽ bị từ chối bởi MySQL với một lỗi. Bạn nên sử dụng mật khẩu mạnh và duy nhất cho thông tin đăng nhập cơ sở dữ liệu.

Trả lời Y để kích hoạt, hoặc bất cứ điều gì khác để tiếp tục mà không kích hoạt:

Output

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: 

Nếu bạn trả lời “yes”, bạn sẽ được yêu cầu chọn một mức độ kiểm tra mật khẩu. Hãy nhớ rằng nếu bạn nhập “2” cho mức độ mạnh nhất, bạn sẽ nhận được lỗi khi cố gắng đặt mật khẩu mà không chứa chữ số, chữ cái in hoa và thường, và ký tự đặc biệt:

Output

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary              file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Đối với các câu hỏi còn lại, nhấn Y và nhấn phím ENTER tại mỗi lời nhắc. Điều này sẽ loại bỏ một số người dùng ẩn danh và cơ sở dữ liệu test, vô hiệu hóa đăng nhập root từ xa và tải các quy tắc mới này để MySQL ngay lập tức thực hiện các thay đổi bạn đã thực hiện.

Khi bạn hoàn thành, hãy thử đăng nhập vào bảng điều khiển MySQL:

sudo mysql
Output

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.28-0ubuntu4 (Ubuntu)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Để thoát khỏi bảng điều khiển MySQL, nhập vào dòng lệnh sau:

mysql> exit

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

Bạn đã cài đặt Apache để phục vụ nội dung và MySQL để lưu trữ và quản lý dữ liệu. PHP là thành phần của cấu hình 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 “php-mysql”, một module PHP cho phép PHP giao tiếp với cơ sở dữ liệu dựa trên MySQL. Bạn cũng cần “libapache2-mod-php” để cho phép Apache xử lý các tệp PHP. Các gói PHP cốt lõi sẽ tự động được cài đặt như các phụ thuộc.

Để cài đặt các gói này, chạy lệnh sau:

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

Sau khi quá trình cài đặt hoàn tất, chạy lệnh sau để xác nhận phiên bản PHP của bạn:

php -v
Output

PHP 8.1.2 (cli) (built: Mar  4 2022 18:13:46) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies

Ở thời điểm này, ngăn xếp LAMP của bạn đã hoạt động đầy đủ, nhưng trước khi kiểm tra cấu hình của bạn với một tập lệnh PHP, tốt nhất là thiết lập một Apache Virtual Host đúng để chứa tệp và thư mục của trang web của bạn.

Bước 4: Tạo một Virtual Host cho trang web của bạn

Khi sử dụng máy chủ web Apache, bạn có thể tạo các virtual host (tương tự như các server blocks trong Nginx) để đóng gói các chi tiết cấu hình và lưu trữ nhiều tên miền từ một máy chủ duy nhất. Trong hướng dẫn này, chúng ta sẽ thiết lập một tên miền được gọi là toantranvan.com, nhưng bạn nên thay thế nó bằng tên miền của riêng bạn.

Apache trên Ubuntu 22.04 mặc định có một virtual host được kích hoạt sẵn, được cấu hình để phục vụ nội dung từ thư mục /var/www/html. Mặc dù điều này hoạt động tốt cho một trang web duy nhất, nhưng nó có thể trở nên phức tạp nếu bạn đang lưu trữ nhiều trang web. Thay vì sửa đổi /var/www/html, chúng ta sẽ tạo một cấu trúc thư mục trong /var/www cho trang web toantranvan.com, và giữ /var/www/html nguyên vẹn như thư mục mặc định khi bạn muốn quay trở về ban đầu.

Tạo thư mục cho your_domain như sau:

sudo mkdir /var/www/toantranvan.com

Tiếp theo, gán quyền sở hữu của thư mục bằng biến môi trường $USER, biến này sẽ tham chiếu đến người dùng hệ thống hiện tại của bạn:

sudo chown -R $USER:$USER /var/www/toantranvan.com

Sau đó, mở một tệp cấu hình mới trong thư mục sites-available của Apache bằng trình chỉnh sửa dòng lệnh mà bạn ưa thích. Ở đây, chúng tôi sẽ sử dụng vi:

sudo vi /etc/apache2/sites-available/toantranvan.com.conf

Thêm vào nội dung tệp sau đây với tên miền riêng của bạn:

<VirtualHost *:80>
    ServerName toantranvan.com
    ServerAlias www.toantranvan.com 
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/toantranvan.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Lưu và thoát

Với cấu hình VirtualHost này, chúng ta đang chỉ cho Apache phục vụ toantranvan.com bằng cách sử dụng /var/www/toantranvan.com như thư mục gốc của trang web. Nếu bạn muốn kiểm tra Apache mà không có tên miền, bạn có thể xóa hoặc chú thích các tùy chọn ServerName và ServerAlias bằng cách thêm dấu thăng (#) ở đầu của mỗi dòng tùy chọn.

Bây giờ, sử dụng lệnh a2ensite để kích hoạt virtual host mới:

sudo a2ensite toantranvan.com

Bạn có thể muốn tắt trang web mặc định được cài đặt sẵn với Apache. Để tắt trang web mặc định của Apache, gõ lệnh sau:

sudo a2dissite 000-default

Note : Trường hợp bạn muốn quay trở về cấu hình mặc định Apache thực hiện lệnh sau:

sudo ln -s /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-enabled/

Để đảm bảo rằng tệp cấu hình của bạn không chứa lỗi cú pháp, chạy lệnh sau:

sudo apache2ctl configtest

Tải lại Apache để các thay đổi này có hiệu lực:

sudo systemctl reload apache2

Trang web mới của bạn hiện đang hoạt động, nhưng thư mục gốc của trang web /var/www/toantranvan.com vẫn còn trống rỗng. Tạo một tệp index.html trong vị trí đó để kiểm tra xem virtual host hoạt động như mong đợi:

nano /var/www/toantranvan.com/index.html

Thêm nội dung sau vào tệp tin này:

<html>
  <head>
    <title>your_domain website</title>
  </head>
  <body>
    <h1>Hello World!</h1>

    <p>This is the landing page of <strong>your_domain</strong>.</p>
  </body>
</html>

Lưu và đóng tệp, sau đó mở trình duyệt và truy cập vào tên miền hoặc địa chỉ IP của máy chủ của bạn:

http://server_domain_or_IP

Trang web của bạn nên hiển thị nội dung trong tệp bạn vừa chỉnh sửa:

Apache virtual host test landing page that reveals your HTML code to the user

Bạn có thể để tệp này tại chỗ làm trang test tạm thời cho ứng dụng của bạn cho đến khi bạn thiết lập một tệp index.php để thay thế. Khi bạn làm điều đó, hãy nhớ xóa hoặc đổi tên tệp index.html trong thư mục gốc của tài liệu của bạn, vì nó sẽ được ưu tiên hơn tệp index.php.

Tổng kết

Trong hướng dẫn này, bạn đã xây dựng một cơ sở 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 làm máy chủ web và MySQL làm hệ thống cơ sở dữ liệu.

Bước tiếp theo ngay lập tức, bạn nên đảm bảo rằng kết nối tới máy chủ web của bạn được bảo mật bằng cách phục vụ chúng qua giao thức HTTPS. Để làm được điều đó, bạn có thể sử dụng Let’s Encrypt để bảo mật trang web của bạn với chứng chỉ TLS/SSL miễn phí.

Related Posts

Leave a Comment