Cách cài đặt Linux, Nginx, MySQL, PHP (LEMP) trên Ubuntu 20.04

3 năm trước, Cài đặt VPS, Ubuntu, 9540 Lượt xem

Đăng ký cập nhập video từ netweb.vn

LEMP là một nhóm phần mềm có thể được sử dụng để phục vụ các trang web động và ứng dụng web được viết bằng PHP. Đây là từ viết tắt mô tả hệ điều hành Linux, với máy chủ web Nginx , Dữ liệu phụ trợ được lưu trữ trong cơ sở dữ liệu MySQL và xử lý động được xử lý bởi PHP.

Hướng dẫn này trình bày cách cài đặt LEMP trên máy chủ Ubuntu 20.04. Hệ điều hành Ubuntu đảm nhận yêu cầu đầu tiên. Chúng tôi sẽ mô tả cách khởi động và chạy các thành phần còn lại.

Setup tưởng lửa ubuntu 20.04 ban đầu

để cài đặt bài này các bạn cách setup UFW trước để có thể mở port và bảo mật máy chủ web của mình trước khi setup 1 webserver hoàn chỉnh nhé!

Bước 1 – Cài đặt Máy chủ Web Nginx

Để hiển thị các trang web cho khách truy cập trang web của chúng tôi, chúng tôi sẽ sử dụng Nginx, một máy chủ web hiệu suất cao. Chúng tôi sẽ sử dụng apt trình quản lý gói để lấy phần mềm này.

Vì đây là lần đầu tiên chúng tôi sử dụng aptcho phiên này, hãy bắt đầu bằng cách cập nhật chỉ mục gói của máy chủ của bạn. Sau đó, bạn có thể sử dụng apt install để cài đặt Nginx:

sudo apt update
sudo apt install nginx

Khi được nhắc, hãy nhập Y để xác nhận rằng bạn muốn cài đặt Nginx. Sau khi cài đặt xong, máy chủ web Nginx sẽ hoạt động và chạy trên máy chủ Ubuntu 20.04 của bạn.

Nếu tường lửa ufw đã  bật, như được khuyến nghị trong hướng dẫn thiết lập tưởng lửa, bạn sẽ cần cho phép kết nối với Nginx. Nginx đăng ký một số cấu hình ứng dụng UFW khác nhau khi cài đặt. Để kiểm tra cấu hình UFW nào khả dụng, hãy chạy:

sudo ufw app list
Output
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Bạn nên bật cấu hình hạn chế nhất vẫn cho phép lưu lượng truy cập mà bạn cần. Vì bạn chưa định cấu hình SSL cho máy chủ của mình trong hướng dẫn này, bạn sẽ chỉ cần cho phép lưu lượng HTTP thông thường trên cổng 80.

Kích hoạt tính năng này bằng cách nhập:

sudo ufw allow 'Nginx HTTP'

Bạn có thể xác minh sự thay đổi bằng cách chạy:

sudo ufw status

Đầu ra của lệnh này sẽ cho thấy rằng lưu lượng HTTP hiện đã được phép:

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Với quy tắc tường lửa mới được thêm vào, 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 tên miền hoặc địa chỉ IP công cộng của máy chủ trong trình duyệt web của bạn.

Nhập địa chỉ mà bạn nhận được vào trình duyệt web của mình và địa chỉ đó sẽ đưa bạn đến trang đích mặc định của Nginx:

http://server_domain_or_IP
Nếu bạn thấy trang này, điều đó có nghĩa là bạn đã cài đặt thành công Nginx và kích hoạt lưu lượng HTTP cho máy chủ web của mình.

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

Bây giờ bạn đã có một máy chủ web và đang chạy, 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 mình. 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.

Một lần nữa, hãy sử dụng apt để mua và cài đặt phần mềm này:

sudo apt install mysql-server

Khi được nhắc, hãy xác nhận cài đặt bằng cách nhập Y, sau đó ENTER.

Khi quá trình cài đặt hoàn tất, bạn nên chạy một tập lệnh bảo mật được cài đặt sẵn với MySQL. 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 cơ sở dữ liệu của bạn. Bắt đầu tập lệnh tương tác bằng cách chạy:

sudo mysql_secure_installation

Điều này sẽ hỏi nếu bạn muốn cấu hình VALIDATE PASSWORD PLUGIN.

Lưu ý: Việc kích hoạt tính năng này chỉ là một lời kêu gọi phán xét. Nếu được bật, mật khẩu không phù hợp với tiêu chí đã chỉ định sẽ bị MySQL từ chối với lỗi. Có thể an toàn để tắt tính năng xác thực, nhưng bạn phải luôn sử dụng mật khẩu mạnh, duy nhất cho thông tin đăng nhập cơ sở dữ liệu.

Câu trả lời là Y có hoặc bất kỳ điều gì khác để tiếp tục mà không cần bật.

VALIDATE PASSWORD PLUGIN 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 plugin?

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

Nếu bạn trả lời “có”, bạn sẽ được yêu cầu chọn cấp độ xác thực mật khẩu. Hãy nhớ rằng nếu bạn nhập 2 ở cấp độ mạnh nhất, bạn sẽ gặp lỗi khi cố gắng đặt bất kỳ mật khẩu nào không chứa số, chữ hoa, chữ thường và ký tự đặc biệt hoặc dựa trên các từ thông dụng trong từ điển.

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

Sau khi nhập lựa chọn các bạn đặt pass tạm là 12345678 nhé!

Bất kể bạn đã chọn thiết lập hay chưa VALIDATE PASSWORD PLUGIN, máy chủ của bạn tiếp theo sẽ yêu cầu bạn chọn và xác nhận mật khẩu cho người dùng gốc MySQL . Điều này không được nhầm lẫn với gốc hệ thống . Người dùng gốc cơ sở dữ liệu là người dùng quản trị có đầy đủ các đặc quyền đối với hệ thống cơ sở dữ liệu. Mặc dù phương pháp xác thực mặc định cho người dùng gốc MySQL không cho phép sử dụng mật khẩu, ngay cả khi một mật khẩu được đặt , bạn nên xác định một mật khẩu mạnh ở đây như một biện pháp an toàn bổ sung. Chúng ta sẽ nói về điều này trong giây lát.

Nếu bạn đã bật xác thực mật khẩu, bạn sẽ được hiển thị độ mạnh mật khẩu cho mật khẩu gốc mà bạn vừa nhập và máy chủ của bạn sẽ hỏi bạn có muốn tiếp tục với mật khẩu đó hay không. Nếu bạn hài lòng với mật khẩu hiện tại của mình, hãy nhập Y“có” tại lời nhắc:

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

Đối với các câu hỏi còn lại, hãy nhấn Yvà nhấn ENTERphím ở mỗi lời nhắc. Thao tác này sẽ xóa một số người dùng ẩn danh và cơ sở dữ liệu thử nghiệm, vô hiệu hóa đăng nhập gốc từ xa và tải các quy tắc mới này để MySQL ngay lập tức tôn trọng những thay đổi bạn đã thực hiện.

Khi bạn hoàn tất, hãy kiểm tra xem bạn có thể đăng nhập vào bảng điều khiển MySQL hay không bằng cách nhập:

sudo mysql

Thao tác này sẽ kết nối với máy chủ MySQL dưới dạng root người dùng cơ sở dữ liệu quản trị , được suy ra bằng cách sử dụng sudokhi chạy lệnh này. Bạn sẽ thấy đầu ra như thế này:

Output
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 8.0.19-0ubuntu5 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

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, hãy nhập:

exit

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 là người dùng gốc , mặc dù bạn đã xác định mật khẩu khi chạy mysql_secure_installationtập lệnh. Đó là bởi vì phương pháp xác thực mặc định cho người dùng MySQL quản trị là unix_socket thay vì password. Mặc dù điều này thoạt đầu có thể trông giống như một mối lo ngại về bảo mật, nhưng nó làm cho máy chủ cơ sở dữ liệu an toàn hơn vì những người dùng duy nhất được phép đăng nhập với tư cách là người dùng MySQL gốc là người dùng hệ thống có đặc quyền sudo kết nối từ bảng điều khiển 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 cơ sở dữ liệu quản trị để kết nối từ ứng dụng PHP của mình. Đặt mật khẩu cho gốcTài khoản MySQL hoạt động như một biện pháp bảo vệ, trong trường hợp phương thức xác thực mặc định được thay đổi từ unix_socket thành password.

Để 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 chuyên dụng với ít đặc quyền mở rộng hơn cho mọi cơ sở dữ liệu, đặc biệt nếu bạn có kế hoạch lưu trữ nhiều cơ sở dữ liệu trên máy chủ của mình.

Máy chủ MySQL của bạn hiện đã được cài đặt và bảo mật. Tiếp theo, chúng ta sẽ cài đặt PHP, thành phần cuối cùng trong ngăn xếp LEMP.

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

Bạn đã cài đặt Nginx để 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. Bây giờ bạn có thể cài đặt PHP để xử lý mã và tạo nội dung động cho máy chủ web.

Trong khi Apache nhúng trình thông dịch PHP trong mỗi yêu cầu, Nginx yêu cầu một chương trình bên ngoài để xử lý quá trình xử lý PHP và hoạt động như một cầu nối giữa chính trình thông dịch PHP và máy chủ web. Điều này cho phép hiệu suất tổng thể tốt hơn trong hầu hết các trang web dựa trên PHP, nhưng nó yêu cầu cấu hình bổ sung. Bạn sẽ cần cài đặt php-fpm, viết tắt của “PHP fastCGI process manager” và yêu cầu Nginx chuyển các yêu cầu PHP đến phần mềm này để xử lý. Ngoài ra, bạn sẽ cần php-mysqlmột mô-đun 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 dưới dạng các gói phụ thuộc.

Để cài đặt php-fpm và php-mysql các gói, hãy chạy:

sudo apt install php-fpm php-mysql

Khi được nhắc, hãy nhập Y và ENTER để xác nhận cài đặt.

Bây giờ bạn đã cài đặt các thành phần PHP của mình. Tiếp theo, bạn sẽ định cấu hình Nginx để sử dụng chúng.

Bước 4 – Định cấu hình Nginx để sử dụng Bộ xử lý PHP

Khi sử dụng máy chủ web Nginx, chúng ta có thể tạo các khối máy chủ (tương tự như máy chủ ảo trong Apache) để đóng gói chi tiết cấu hình và lưu trữ nhiều hơn một miền trên một máy chủ duy nhất. Trong hướng dẫn này, chúng tôi sẽ sử dụng thietkewebs.net làm tên miền mẫu.

Trên Ubuntu 20.04, Nginx có một khối máy chủ được bật theo mặc định và được định cấu hình để cung cấp tài liệu ra khỏi một thư mục tại /var/www/html. Mặc dù điều này hoạt động tốt cho một trang web nhưng có thể trở nên khó quản lý nếu bạn đang lưu trữ nhiều trang web. Thay vì sửa đổi /var/www/html, chúng tôi sẽ tạo cấu trúc thư mục bên trong /var/wwwcho trang web your_domain , giữ nguyên /var/www/htmlvị trí này làm thư mục mặc định được phục vụ nếu yêu cầu của khách hàng không khớp với bất kỳ trang web nào khác.

Tạo thư mục web gốc cho thietkewebs.net như sau:

sudo mkdir /var/www/thietkewebs.net

Tiếp theo, chỉ định quyền sở hữu thư mục với biến môi trường $ USER, biến môi trường 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/thietkewebs.net

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

sudo nano /etc/nginx/sites-available/thietkewebs.net

Thao tác này sẽ tạo một tệp trống mới. Dán vào cấu hình cơ bản sau:

server {
    listen 80;
    server_name thietkewebs.net www.thietkewebs.net;
    root /var/www/thietkewebs.net;

    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
     }

    location ~ /\.ht {
        deny all;
    }

}

Đây là những gì mỗi lệnh và khối vị trí này làm:

  • listen– Xác định cổng nào mà Nginx sẽ lắng nghe. Trong trường hợp này, nó sẽ lắng nghe trên cổng 80, cổng mặc định cho HTTP.
  • root – Xác định gốc tài liệu nơi lưu trữ các tệp do trang web này cung cấp.
  • index– Xác định thứ tự mà Nginx sẽ ưu tiên các tệp chỉ mục cho trang web này. Một thực tế phổ biến là liệt kê index.html các tệp có mức độ ưu tiên cao hơn index.phpcác tệp để cho phép nhanh chóng thiết lập trang đích bảo trì trong các ứng dụng PHP. Bạn có thể điều chỉnh các cài đặt này để phù hợp hơn với nhu cầu ứng dụng của mình.
  • server_name– Xác định tên miền và / hoặc địa chỉ IP mà khối máy chủ này sẽ phản hồi. Trỏ chỉ thị này tới tên miền hoặc địa chỉ IP công cộng của máy chủ của bạn.
  • location /– Khối vị trí đầu tiên bao gồm một try_files chỉ thị, kiểm tra sự tồn tại của các tệp hoặc thư mục phù hợp với yêu cầu URI. Nếu Nginx không thể tìm thấy tài nguyên thích hợp, nó sẽ trả về lỗi 404.
  • location ~ \.php$– Khối vị trí này xử lý quá trình PHP thực tế bằng cách trỏ Nginx đến fastcgi-php.conf tệp cấu hình và php7.4-fpm.sock tệp, tệp khai báo socket được liên kết với php-fpm.
  • location ~ /\.ht– Khối vị trí cuối cùng xử lý .htaccess các tệp mà Nginx không xử lý. Bằng cách thêm deny all chỉ thị, nếu bất kỳ .htaccess tệp nào tình cờ tìm thấy đường vào gốc tài liệu, chúng sẽ không được cung cấp cho khách truy cập.

Khi bạn chỉnh sửa xong, hãy lưu và đóng tệp. Nếu bạn đang sử dụng nano, bạn có thể làm như vậy bằng cách nhập CTRL+Xvà sau đó yvà ENTERđể xác nhận.

Kích hoạt cấu hình của bạn bằng cách liên kết đến tệp cấu hình từ sites-enabled thư mục của Nginx :

sudo ln -s /etc/nginx/sites-available/thietkewebs.net /etc/nginx/sites-enabled/

Sau đó, hủy liên kết tệp cấu hình mặc định khỏi /sites-enabled/thư mục:

sudo unlink /etc/nginx/sites-enabled/default

Điều này sẽ thông báo cho Nginx sử dụng cấu hình vào lần tải lại tiếp theo. Bạn có thể kiểm tra cấu hình của mình để tìm lỗi cú pháp bằng cách nhập:

sudo nginx -t

Nếu có bất kỳ lỗi nào được báo cáo, hãy quay lại tệp cấu hình của bạn để xem lại nội dung của nó trước khi tiếp tục.

Khi bạn đã sẵn sàng, hãy tải lại Nginx để áp dụng các thay đổi:

sudo systemctl reload nginx

Trang web mới của bạn hiện đang hoạt động, nhưng trang web gốc vẫn trống. Tạo tệp ở vị trí đó để chúng tôi có thể kiểm tra xem khối máy chủ mới của bạn có hoạt động như mong đợi hay không:/var/www/thietkewebs.net/index.html

nano /var/www/thietkewebs.net/index.html
<html>
  <head>
    <title>hello netweb.vn</title>
  </head>
  <body>
    <h1>hello netweb.vn</h1>

    <p>This is <strong>netweb.vn</strong>.</p>
  </body>
</html>

Bây giờ, hãy truy cập trình duyệt của bạn và truy cập vào tên miền hoặc địa chỉ IP của máy chủ, như được liệt kê trong lệnh server_name trong tệp cấu hình khối máy chủ của bạn:

http://thietkewebs.net
Nếu bạn thấy trang này, điều đó có nghĩa là khối máy chủ Nginx của bạn đang hoạt động như mong đợi.

Bước 5 – Kiểm tra PHP với Nginx

LEMP của bạn bây giờ sẽ được thiết lập hoàn toàn. Bạn có thể kiểm tra nó để xác nhận rằng Nginx có thể chuyển .phptệp đúng cách cho bộ xử lý PHP của bạn.

Bạn có thể làm điều này bằng cách tạo một tệp PHP thử nghiệm trong gốc tài liệu của bạn. Mở một tệp mới có tên info.php trong gốc tài liệu của bạn trong trình soạn thảo văn bản của bạn:

nano /var/www/thietkewebs.net/info.php

Nhập hoặc dán các dòng sau vào tệp mới. Đây là mã PHP hợp lệ sẽ trả về thông tin về máy chủ của bạn:

<?php
phpinfo();

Khi bạn hoàn tất, hãy lưu và đóng tệp bằng cách nhập CTRLX rồi nhấn y và ENTER để xác nhận.

Giờ đây, bạn có thể truy cập trang này trong trình duyệt web của mình bằng cách truy cập vào tên miền hoặc địa chỉ IP công cộng mà bạn đã thiết lập trong tệp cấu hình Nginx của mình, tiếp theo là /info.php:

http://thietkewebs.net/info.php
Bạn sẽ thấy một trang web chứa thông tin chi tiết về máy chủ của bạn:

Bước 6 – Kiểm tra kết nối cơ sở dữ liệu

Nếu bạn muốn kiểm tra xem PHP có thể kết nối với MySQL 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 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. Trước khi có thể làm điều đó, chúng ta cần tạo một cơ sở dữ liệu thử nghiệm và một người dùng MySQL mới được định cấu hình đúng cách để truy cập nó.

Tại thời điểm viết bài này, thư viện MySQL PHP gốc mysqlnd không hỗ trợ caching_sha2_authentication , phương thức xác thực mặc định cho MySQL 8. Chúng tôi sẽ cần tạo một người dùng mới với mysql_native_passwordphương thức xác thực để có thể kết nối với cơ sở dữ liệu MySQL từ PHP.

Chúng tôi sẽ tạo cơ sở dữ liệu có tên example_database và người dùng có tên example_user , nhưng bạn có thể thay thế các tên này bằng các giá trị khác nhau.

Đầu tiên, kết nối với bảng điều khiển MySQL bằng tài khoản gốc :

sudo mysql

Lệnh show database

SHOW DATABASES;
exit

Bước 7: setup phpmyadmin quản lý cơ sở dữ liệu

các bạn truy cập bài viết này để setup phpmyadmin nhé!

Bài viết mới cập nhập

  • Hướng dẫn Plugin floating contact

    Hướng dẫn Plugin floating contact

    10 tháng trước, 337 Lượt xem

    Netweb xin hướng dẫn cách quản lý Plugin floating contact các bạn nhớ làm theo kỹ tường bước để plugin hoạt động Tính năng: Hiển…

  • Backup Yandex Mail

    Backup Yandex Mail

    12 tháng trước, 228 Lượt xem

    Khác với dịch vụ email theo tên của microsoft và google với chi phí đắt đỏ tầm 1tr/năm/1user, vì thế nên netweb khuyên dùng dịch…

Bình luận trên facebook netweb.vn

Đam mê thiết kế web, kinh nghiệm 9 năm trong nghề thiết kế website, đang thiết kế web dạo tại netweb.vn, Callme: 08.9898.2526 (Mr Hải)