Từ viết tắt "LEMP" là viết tắt của một nhóm phần mề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. Thuật ngữ này thực chất là từ viết tắt đại diện cho bốn thành phần chính:
Trong hướng dẫn này, bạn sẽ cài đặt ngăn xếp LEMP trên máy chủ chạy Ubuntu 20.04. Chúng tôi cũng sẽ cài đặt phpMyAdmin, Redis, Opcache và Let's Encrypt SSL.
[*]
Một số gói mà hệ thống của bạn cần.
Một số gói này có thể đã được cài đặt trên hệ thống của bạn.
Kiểm tra xem tường lửa có đang chạy không.
Bạn sẽ nhận được kết quả sau.
Cho phép cổng SSH để tường lửa không làm gián đoạn kết nối hiện tại khi bật nó.
Cho phép cả cổng HTTP và HTTPS.
Kích hoạt Tường lửa
Kiểm tra lại trạng thái của tường lửa.
Bạn sẽ thấy thông báo tương tự đầu ra.
Cài đặt kho lưu trữ PHP của Ondrej.
Cài đặt PHP 7.4 cùng với một số gói.
Kiểm tra xem PHP có hoạt động chính xác không.
Bạn sẽ thấy một output.
Ubuntu 20.04 theo mặc định đi kèm với MariaDB 10.3, phiên bản này hơi lỗi thời. Để có phiên bản ổn định mới nhất của Mariadb, chúng ta sẽ cài đặt kho lưu trữ chính thức của nó.
Thêm kho lưu trữ chính thức của Mariadb.
Để cài đặt MariaDB, hãy đưa ra lệnh sau.
Kiểm tra xem MariaDB đã được cài đặt chưa chính xác.
Bạn sẽ thấy kết quả sau.
Kích hoạt MariaDB dịch vụ.
Chạy lệnh sau để thực hiện cấu hình mặc định như cung cấp mật khẩu gốc, xóa người dùng ẩn danh, không cho phép đăng nhập gốc từ xa và xóa các bảng thử nghiệm.
Với MariaDB 10.4, giờ đây bạn sẽ được hỏi giữa việc sử dụng mật khẩu gốc hay plugin unix_socket. Plugin unix_socket cho phép bạn đăng nhập vào MariaDB bằng thông tin đăng nhập người dùng Linux của bạn. Mặc dù vậy, plugin này được coi là an toàn hơn vì bạn sẽ cần tên người dùng/mật khẩu truyền thống để sử dụng các ứng dụng của bên thứ 3 như phpMyAdmin. Chúng tôi sẽ sử dụng plugin unix_socket cho hướng dẫn này. Bạn vẫn có thể sử dụng phpMyAdmin thông qua bất kỳ người dùng nào mà bạn tạo cho cơ sở dữ liệu của mình.
Nhấn Enter sẽ chọn tùy chọn mặc định (tùy chọn được viết hoa, trong trường hợp này là Y).
Vậy là xong. Lần tới khi bạn muốn đăng nhập vào MySQL, hãy sử dụng lệnh sau
Nhập mật khẩu gốc của bạn khi được nhắc.
Mở tệp
Bên trong tệp, hãy định vị Chỉ thị
Nếu bạn muốn máy khách từ xa kết nối với phiên bản Redis của mình thì hãy tìm dòng
Bạn cũng có thể thay đổi cổng mặc định mà Redis lắng nghe từ 6379 thành giá trị của bạn lựa chọn.
Để cấu hình Redis làm máy chủ bộ nhớ đệm, hãy đặt các giá trị sau như đã cho.
Điều này yêu cầu Redis xóa bất kỳ khóa nào bằng thuật toán LRU khi bộ nhớ tối đa đạt đến 256MB. Bạn có thể thiết lập giá trị bộ nhớ theo yêu cầu của bạn và máy chủ bạn đang sử dụng.
Bạn có thể thiết lập mật khẩu để bất kỳ máy khách nào cần Redis sẽ được yêu cầu xác thực trước. Để thực hiện việc đó, hãy thiết lập mật khẩu bằng lệnh sau.
Bạn có thể tìm thấy nhiều lệnh hơn để thay đổi trong tệp cấu hình. Sau khi hoàn tất, hãy nhấn Ctrl + X và nhập Y khi được nhắc lưu tệp.
Khởi động lại máy chủ Redis để áp dụng các thay đổi.
Chúng ta cũng sẽ cần thêm quy tắc vào Tường lửa của mình nếu bạn muốn các máy khách từ xa kết nối với quy tắc đó. Nếu không, bạn có thể bỏ qua bước này.
Bạn sẽ cần phải thay đổi giá trị trong lệnh trên để khớp với bất kỳ cổng nào bạn đã chọn trong tệp cấu hình ở trên.
Trước tiên, hãy cài đặt một số điều kiện tiên quyết.
Một số trong số này đã được cài đặt trên hệ thống của bạn.
Thêm kho lưu trữ của Nginx.
Cài đặt Nginx.
Kiểm tra xem nó có hoạt động bình thường không.
Bạn sẽ thấy đầu ra sau tùy thuộc vào phiên bản Nginx bạn chọn cài đặt.
Khởi động và bật Nginx.
Mở địa chỉ IP của máy chủ trong trình duyệt để xem trang sau. Điều này có nghĩa là Nginx đang hoạt động bình thường.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22385%22%3E%3C/svg%3E
Tạo thư mục nơi trang web của bạn sẽ trực tiếp.
Sử dụng lệnh -p sẽ tạo các thư mục cha không tồn tại trước đó.
Chạy lệnh sau để thêm tệp cấu hình cho trang web của bạn.
Dán mã sau vào biên tập viên.
Nhấn Ctrl + X để đóng trình biên tập và nhấn Y khi được nhắc lưu tệp.
Tệp này giả định rằng chúng tôi sẽ lưu trữ
Kích hoạt tệp cấu hình này bằng cách liên kết nó tới thư mục
Mở
Dán các dòng sau sau dòng
Nhấn Ctrl + X để đóng trình soạn thảo và nhấn Y khi được nhắc lưu tệp. Kiểm tra cấu hình Nginx.
Bạn sẽ thấy đầu ra sau cho biết cấu hình của bạn là chính xác.
Tải lại Nginx dịch vụ.
Chúng ta cần đặt người dùng/nhóm Unix của các tiến trình PHP thành nginx. Tìm các dòng
Ngoài ra, hãy tìm các dòng
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Khởi động lại PHP-fpm quá trình.
Để kiểm tra thiết lập PHP của bạn, hãy tạo một tệp
Thêm nội dung sau vào đó và lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
- Linux: Hệ điều hành. Linux là hệ điều hành mã nguồn mở phổ biến đóng vai trò là nền tảng cho máy chủ.
- Engine-X (phát âm là "nginx"): Máy chủ web. Nginx là máy chủ web hiệu suất cao được biết đến với tính ổn định, bộ tính năng phong phú, cấu hình đơn giản và mức tiêu thụ tài nguyên thấp.
- MySQL hoặc MariaDB: Hệ thống cơ sở dữ liệu. MySQL là hệ thống quản lý cơ sở dữ liệu quan hệ được sử dụng rộng rãi để lưu trữ và quản lý dữ liệu cho trang web hoặc ứng dụng. Lưu ý rằng MySQL đôi khi được thay thế bằng MariaDB, một nhánh nâng cao, hoàn toàn mã nguồn mở, do cộng đồng phát triển của MySQL.
- PHP: Ngôn ngữ lập trình. PHP là ngôn ngữ kịch bản phía máy chủ được thiết kế cho phát triển web, nhưng cũng được sử dụng như một ngôn ngữ lập trình mục đích chung.
Trong hướng dẫn này, bạn sẽ cài đặt ngăn xếp LEMP trên máy chủ chạy Ubuntu 20.04. Chúng tôi cũng sẽ cài đặt phpMyAdmin, Redis, Opcache và Let's Encrypt SSL.
Điều kiện tiên quyết
-
Máy chủ chạy Ubuntu 20.04.
-
Người dùng sudo không phải root.
-
Đảm bảo mọi thứ được cập nhật.
Mã:
$ sudo apt update
$ sudo apt upgrade
Một số gói mà hệ thống của bạn cần.
Mã:
$ sudo apt install wget curl nano -y
Cấu hình Tường lửa
Bước đầu tiên là cấu hình tường lửa. Ubuntu đi kèm với ufw (Uncomplicated Firewall) theo mặc định.Kiểm tra xem tường lửa có đang chạy không.
Mã:
$ sudo ufw status
Mã:
Status: inactive
Mã:
$ sudo ufw allow OpenSSH
Mã:
$ sudo ufw allow 80
$ sudo ufw allow 443
Mã:
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Mã:
$ sudo ufw status
Mã:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80 ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
Cài đặt PHP
Theo mặc định, Ubuntu 20.04 đi kèm với PHP 7.4 nhưng để có kho lưu trữ PHP được cập nhật, chúng tôi sẽ thêm kho lưu trữ PHP của Ondrej.Cài đặt kho lưu trữ PHP của Ondrej.
Mã:
$ sudo add-apt-repository ppa:ondrej/php
Mã:
$ sudo apt install php-cli php-fpm php-mysql -y
Mã:
$ php --version
Mã:
PHP 7.4.5 (cli) (built: Apr 28 2020 14:49:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies
Cài đặt MariaDB
MariaDB là một sự thay thế trực tiếp cho MySQL, có nghĩa là các lệnh để chạy và vận hành MariaDB giống như các lệnh dành cho MySQL.Ubuntu 20.04 theo mặc định đi kèm với MariaDB 10.3, phiên bản này hơi lỗi thời. Để có phiên bản ổn định mới nhất của Mariadb, chúng ta sẽ cài đặt kho lưu trữ chính thức của nó.
Thêm kho lưu trữ chính thức của Mariadb.
Mã:
$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$ sudo add-apt-repository 'deb [arch=amd64] http://mirror.lstn.net/mariadb/repo/10.4/ubuntu focal main'
Mã:
$ sudo apt install mariadb-server -y
Mã:
$ mysql --version
Mã:
mysql Ver 15.1 Distrib 10.4.13-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
Mã:
$ sudo systemctl enable mariadb
Mã:
$ sudo mysql_secure_installation
Nhấn Enter sẽ chọn tùy chọn mặc định (tùy chọn được viết hoa, trong trường hợp này là Y).
Mã:
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none): [PRESS ENTER]
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Enabled successfully!
Reloading privilege tables.. ... Success!
You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n] [ANSWER n]
... skipping.
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] [PRESS ENTER] ... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] [PRESS ENTER] ... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] [PRESS ENTER] \- Dropping test database... ... Success! \- Removing privileges on test database... ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] [PRESS ENTER] ... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Mã:
$ sudo mysql
Cài đặt Redis
Sử dụng lệnh sau để cài đặt Redis và tiện ích mở rộng PHP Redis tương ứng.
Mã:
$ sudo apt install redis php-redis
Cấu hình Redis Máy chủ
Chúng ta hãy thực hiện một số cấu hình cơ bản trên máy chủ Redis.Mở tệp
/etc/redis/redis.conf
bằng trình soạn thảo Nano.
Mã:
$ sudo nano /etc/redis/redis.conf
supervised
. Chỉ thị này cho phép bạn khai báo hệ thống init để quản lý Redis dưới dạng dịch vụ. Theo mặc định, chỉ thị này được đặt thành no
. Vì chúng ta đang sử dụng Ubuntu sử dụng hệ thống khởi tạo systemd
, hãy thay đổi giá trị của nó từ no
thành systemd
như sau.
Mã:
supervised systemd
bind 127.0.0.1
và đổi thành dòng sau.
Mã:
bind 0.0.0.0
Mã:
port 3458
Mã:
maxmemory 256mb
maxmemory-policy allkeys-lru
Bạn có thể thiết lập mật khẩu để bất kỳ máy khách nào cần Redis sẽ được yêu cầu xác thực trước. Để thực hiện việc đó, hãy thiết lập mật khẩu bằng lệnh sau.
Mã:
requirepass
Khởi động lại máy chủ Redis để áp dụng các thay đổi.
Mã:
$ sudo systemctl restart redis
Mã:
$ sudo ufw allow 6379/tcp
Cài đặt Nginx
Theo mặc định, Ubuntu 20.04 đi kèm với phiên bản Mainline mới nhất của Nginx. (1.17.10). Tuy nhiên, chúng tôi sẽ chuyển sang sử dụng kho lưu trữ ổn định chính thức của Nginx.Trước tiên, hãy cài đặt một số điều kiện tiên quyết.
Mã:
$ sudo apt install curl gnupg2 ca-certificates lsb-release
Thêm kho lưu trữ của Nginx.
Mã:
$ echo "deb [arch=amd64] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
$ curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
Mã:
$ sudo apt update
$ sudo apt install nginx -y
Mã:
$ nginx -v
Mã:
nginx version: nginx/1.18.0
Mã:
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22385%22%3E%3C/svg%3E
Cấu hình Nginx
Thiết lập các thư mục nơi các khối máy chủ sẽ tồn tại.
Mã:
$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled
Mã:
$ sudo mkdir /var/www/example.com/html -p
Chạy lệnh sau để thêm tệp cấu hình cho trang web của bạn.
Mã:
$ sudo nano /etc/nginx/sites-available/example.com.conf
Mã:
server { listen *:80; server_name example.com; root /var/www/example.com/html; index index.php index.html; location / { try_files $uri $uri/ =404; } access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; include fastcgi_params; }
}
Tệp này giả định rằng chúng tôi sẽ lưu trữ
example.com
trong thư mục /var/www/html
. Nếu bạn không sử dụng bất kỳ tên miền nào và cấu hình máy chủ của mình để có thể truy cập chỉ thông qua địa chỉ IP/localhost, bạn sẽ cần xóa các thiết lập khối máy chủ tương ứng khỏi tệp nginx.conf
nếu không, nó sẽ làm hỏng khối máy chủ mà bạn sẽ tạo.Kích hoạt tệp cấu hình này bằng cách liên kết nó tới thư mục
sites-enabled
.
Mã:
$ sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
/etc/nginx/nginx.conf
tệp để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf
Mã:
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
types_hash_max_size 4096;
Mã:
$ sudo nginx -t
Mã:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Mã:
$ sudo systemctl reload nginx
Cấu hình PHP-FPM
Mở tệp/etc/php-fpm.d/www.conf
.
Mã:
$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf
user=www-data
và group=www-data
trong tệp và thay đổi chúng thành nginx
.
Mã:
...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...
listen.owner=www-data
và listen.group=www-data
trong tệp và thay đổi chúng thành nginx
.
Mã:
listen.owner = nginx
listen.group = nginx
Khởi động lại PHP-fpm quá trình.
Mã:
$ sudo systemctl restart php7.4-fpm
test.php
trong html
thư mục.
Mã:
$ sudo nano /var/www/example.com/html/test.php
Mã: