Ngăn xếp LEMP Linux là một gói phần mềm phổ biến để phát triển và lưu trữ ứng dụng web. Nó bao gồm bốn thành phần chính: Linux, Nginx (phát âm là "Engine-X"), MySQL hoặc MariaDB (một cơ sở dữ liệu quan hệ) và PHP (một ngôn ngữ lập trình web phổ biến). Trong thiết lập này, Linux là hệ điều hành và Nginx là máy chủ web xử lý các yêu cầu HTTP và phục vụ nội dung tĩnh như hình ảnh và tệp .css. MySQL hoặc trong trường hợp của chúng tôi, MariaDB được sử dụng làm hệ thống cơ sở dữ liệu. PHP là ngôn ngữ kịch bản được sử dụng để tạo nội dung web và tương tác với cơ sở dữ liệu một cách động. Các thành phần này tạo thành một môi trường mạnh mẽ và có thể mở rộng để xây dựng và triển khai các trang web và ứng dụng web.
Hướng dẫn này sẽ hướng dẫn bạn cách cài đặt Ngăn xếp LEMP trên máy chủ Debian 12 (bookworm) đã phát hành cách đây vài ngày. Bạn cũng sẽ học cách cài đặt các ứng dụng như phpMyAdmin.
[*]
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 trạng thái của tường lửa.
Bạn sẽ thấy nội dung tương tự như sau.
Cho phép các cổng HTTP và HTTPs.
Kiểm tra lại trạng thái để xác nhận.
Chúng tôi đã cài đặt MySQL, CLI, GD, Mbstring và các tiện ích mở rộng XML của PHP. Bạn có thể cài đặt bất kỳ tiện ích mở rộng nào theo yêu cầu của mình.
Để luôn sử dụng phiên bản PHP mới nhất hoặc nếu bạn muốn cài đặt nhiều phiên bản PHP, hãy thêm kho lưu trữ PHP của Ondrej.
Đầu tiên, hãy nhập khóa GPG PHP của kho lưu trữ Sury.
Thêm PHP của Ondrej Sury kho lưu trữ.
Cập nhật danh sách kho lưu trữ hệ thống.
Bây giờ, bạn có thể cài đặt bất kỳ phiên bản nào của PHP.
Kiểm tra phiên bản PHP đã cài đặt.
Kiểm tra phiên bản MySQL.
Chạy cài đặt an toàn MariaDB script.
Bạn sẽ được yêu cầu nhập mật khẩu root. Nhấn Enter vì chúng tôi chưa đặt bất kỳ mật khẩu nào cho nó.
Tiếp theo, bạn sẽ được hỏi có muốn chuyển sang phương pháp xác thực socket Unix không. Plugin
Tiếp theo, bạn sẽ được hỏi xem bạn có muốn thay đổi mật khẩu root của mình không. Trên Debian 12, mật khẩu root gắn chặt với việc bảo trì hệ thống tự động, vì vậy bạn nên để nguyên. Nhập
Tiếp theo, bạn sẽ được hỏi một số câu hỏi nhất định để cải thiện tính bảo mật của MariaDB. Nhập Y để xóa người dùng ẩn danh, không cho phép đăng nhập root từ xa, xóa cơ sở dữ liệu thử nghiệm và tải lại các bảng đặc quyền.
Bạn có thể vào shell MariaDB bằng cách nhập
Tạo mẫu cơ sở dữ liệu.
Tạo một tài khoản người dùng SQL.
Cấp tất cả các quyền trên cơ sở dữ liệu cho người dùng.
Vì chúng ta không sửa đổi người dùng gốc, bạn nên tạo một người dùng SQL khác để thực hiện các tác vụ quản trị sử dụng xác thực mật khẩu. Chọn một mật khẩu mạnh cho mật khẩu này.
Xóa quyền của người dùng.
Thoát khỏi shell.
Chúng ta hãy đăng nhập lại vào shell MySQL bằng người dùng mới tạo.
Tạo một bài kiểm tra bảng.
Chèn dữ liệu thử nghiệm.
Lặp lại lệnh trên nhiều lần để thêm nhiều mục nhập hơn. Chạy lệnh sau để kiểm tra nội dung của bảng.
Bạn sẽ nhận được kết quả sau.
Thoát khỏi MySQL vỏ.
Nhập khóa ký của Nginx.
Thêm kho lưu trữ cho phiên bản ổn định của Nginx.
Cập nhật hệ thống kho lưu trữ.
Cài đặt Nginx.
Xác minh cài đặt. Trên hệ thống Debian, lệnh sau chỉ hoạt động với
Bắt đầu Nginx.
Kiểm tra trạng thái dịch vụ.
Để đặt kích thước tải tệp lên, hãy thay đổi các giá trị của
Cấu hình giới hạn bộ nhớ của PHP tùy thuộc vào tài nguyên và yêu cầu máy chủ của bạn.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Bạn cũng có thể sử dụng các lệnh sau để thực hiện chỉnh sửa mà không cần mở tập tin.
Mở tập tin
Chúng ta cần đặt người dùng/nhóm Unix của các quy 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.
Tạo thư mục công khai cho trang web.
Giải nén kho lưu trữ để công khai thư mục.
Chuyển sang thư mục công khai.
Đổi tên thư mục đã giải nén thành tên nào đó khó hiểu để cải thiện bảo mật.
Mở tệp cấu hình cho đang chỉnh sửa.
Tìm dòng
Bạn có thể sử dụng trình tạo blowfish trực tuyến của phpSolved hoặc thực hiện thông qua dòng lệnh.
Sao chép giá trị và dán dưới dạng đã hiển thị.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Thay đổi quyền sở hữu của trang web và phpMyAdmin thành máy chủ Nginx.
Xóa cài đặt phpMyAdmin thư mục.
Điều này cho chúng ta biết rằng Opcache đã được cài đặt và khả dụng. Trong trường hợp nó không hiển thị ở đây, bạn có thể cài đặt thủ công bằng cách chạy lệnh sau.
Để thay đổi cài đặt Opcache, hãy mở tệp
Các thiết lập sau đây sẽ giúp bạn bắt đầu sử dụng Opcache và thường được khuyến nghị để có hiệu suất tốt. Bạn có thể bật tính năng này bằng cách thêm các dòng sau vào cuối.
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.
Bạn có thể cài đặt Certbot bằng kho lưu trữ của Debian hoặc tải phiên bản mới nhất bằng công cụ Snapd. Chúng ta sẽ sử dụng phiên bản Snapd.
Debian 12 không cài đặt Snapd. Cài đặt gói Snapd.
Chạy các lệnh sau để đảm bảo phiên bản Snapd của bạn được cập nhật.
Cài đặt Certbot.
Sử dụng lệnh sau để đảm bảo lệnh Certbot có thể chạy được bằng cách tạo liên kết tượng trưng đến
Xác minh xem Certbot có hoạt động bình thường không.
Dán mã sau vào đó.
Hướng dẫn này sẽ hướng dẫn bạn cách cài đặt Ngăn xếp LEMP trên máy chủ Debian 12 (bookworm) đã phát hành cách đây vài ngày. Bạn cũng sẽ học cách cài đặt các ứng dụng như phpMyAdmin.
Điều kiện tiên quyết
-
Máy chủ chạy Debian 12.
-
Người dùng không phải root có quyền sudo.
-
Tên miền đủ điều kiện (FQDN) nhưexample.com
trỏ đến máy chủ.
-
Tường lửa đơn giản (UFW) được bật và đang chạy.
-
Mọi thứ đều đã 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 ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y
Bước 1 - Cấu hình Tường lửa
Bước đầu tiên trước khi cài đặt bất kỳ gói nào là cấu hình tường lửa để cho phép kết nối HTTP và HTTPS.Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo ufw status
Mã:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Mã:
$ sudo ufw allow http
$ sudo ufw allow https
Mã:
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
Bước 2 - Cài đặt PHP
Debian 12 được tích hợp sẵn PHP 8.2 theo mặc định. Bạn có thể cài đặt bằng cách chạy lệnh sau.
Mã:
$ sudo apt install php-fpm php-cli php-mysql php-mbstring php-xml php-gd
Để luôn sử dụng phiên bản PHP mới nhất hoặc nếu bạn muốn cài đặt nhiều phiên bản PHP, hãy thêm kho lưu trữ PHP của Ondrej.
Đầu tiên, hãy nhập khóa GPG PHP của kho lưu trữ Sury.
Mã:
$ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
Mã:
$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
Mã:
$ sudo apt update
Mã:
$ sudo apt install php8.1-fpm php8.1-cli
Mã:
$ php --version
PHP 8.2.7 (cli) (built: Jun 9 2023 19:37:27) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.7, Copyright (c) Zend Technologies with Zend OPcache v8.2.7, Copyright (c), by Zend Technologies
Bước 3 - Cài đặt MariaDB
Debian 12 không đi kèm MySQL theo mặc định và họ vẫn chưa phát hành gói chính thức cho MySQL. Do đó, chúng tôi sẽ sử dụng MariaDB cho nó. MariaDB cũng không có gói chính thức cho Debian 12 nhưng Debian đi kèm với nó. Do đó, hãy cài đặt nó bằng lệnh sau.
Mã:
$ sudo apt install mariadb-server
Mã:
$ mysql --version
mysql Ver 15.1 Distrib 10.11.3-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
Mã:
$ sudo mysql_secure_installation
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):
unix_socket
cho phép bạn sử dụng thông tin xác thực hệ điều hành của mình để kết nối với máy chủ MariaDB. Vì bạn đã có tài khoản root được bảo vệ, hãy nhập n
để tiếp tục.
Mã:
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] n
n
để tiếp tục.
Mã:
... skipping.
You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n] n
Mã:
... 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] y ... 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] y ... 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] y - 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] y ... 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!
sudo mysql
hoặc sudo mariadb
trên dòng lệnh.Bước 4 - Cấu hình MariaDB
Đăng nhập vào shell MariaDB.
Mã:
$ sudo mysql
Mã:
MariaDB> CREATE DATABASE exampledb;
Mã:
MariaDB> CREATE USER 'exampleuser'@'localhost' IDENTIFIED BY 'YourPassword2!';
Mã:
MariaDB> GRANT ALL PRIVILEGES ON exampledb.* TO 'exampleuser'@'localhost';
Mã:
MariaDB> GRANT ALL ON *.* TO 'navjot'@'localhost' IDENTIFIED BY 'Yourpassword32!' WITH GRANT OPTION;
Mã:
MariaDB> FLUSH PRIVILEGES;
Mã:
MariaDB> exit
Mã:
$ sudo mysql -u exampleuser -p
Mã:
MariaDB> CREATE TABLE exampledb.name_list ( sno INT AUTO_INCREMENT, content VARCHAR(255), PRIMARY KEY(sno) );
Mã:
MariaDB> INSERT INTO exampledb.name_list (content) VALUES ("Navjot");
Mã:
MariaDB> SELECT * FROM exampledb.name_list;
Mã:
+-----+---------+
| sno | content |
+-----+---------+
| 1 | Navjot |
| 2 | Adam |
| 3 | Josh |
| 4 | Peter |
+-----+---------+
4 rows in set (0.00 sec)
Mã:
MariaDB> exit
Bước 5 - Cài đặt Nginx
Debian 12 tích hợp sẵn phiên bản Nginx cũ hơn. Để cài đặt phiên bản mới nhất, bạn cần tải xuống kho lưu trữ Nginx chính thức.Nhập khóa ký của Nginx.
Mã:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Mã:
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Mã:
$ sudo apt update
Mã:
$ sudo apt install nginx
sudo
.
Mã:
$ sudo nginx -v
nginx version: nginx/1.24.0
Mã:
$ sudo systemctl start nginx
Mã:
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled) Active: active (running) since Thu 2023-06-15 16:33:46 UTC; 1s ago Docs: https://nginx.org/en/docs/ Process: 2257 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 2258 (nginx) Tasks: 2 (limit: 1108) Memory: 1.8M CPU: 6ms CGroup: /system.slice/nginx.service ??2258 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??2259 "nginx: worker process"
Bước 6 - Cấu hình PHP-FPM
Mởphp.ini
để chỉnh sửa.
Mã:
$ sudo nano /etc/php/8.2/fpm/php.ini
upload_max_filesize
và post_max_size
biến.
Mã:
upload_max_filesize = 50M
...
post_max_size = 50M
Mã:
memory_limit = 256M
Bạn cũng có thể sử dụng các lệnh sau để thực hiện chỉnh sửa mà không cần mở tập tin.
Mã:
$ sudo sed -i 's/post_max_size = 8M/post_max_size = 50M/' /etc/php/8.2/fpm/php.ini
$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 50M/' /etc/php/8.2/fpm/php.ini
$ sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php/8.2/fpm/php.ini
/etc/php/8.0/fpm/pool.d/www.conf
.
Mã:
$ sudo nano /etc/php/8.2/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.
user = nginx
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 php8.2-fpm
Bước 7 - Cài đặt phpMyAdmin
Tải xuống tệp lưu trữ phpMyAdmin cho ngôn ngữ tiếng Anh. Tải xuống liên kết cho phiên bản mới nhất từ trang Tải xuống phpMyAdmin.
Mã:
$ wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-english.tar.gz
Mã:
$ sudo mkdir /var/www/html/example.com -p
Mã:
$ sudo tar -xzf phpMyAdmin-5.2.1-english.tar.gz -C /var/www/html/example.com
Mã:
$ cd /var/www/html/example.com
Mã:
$ sudo mv phpMyAdmin-5.2.1-english sm175
Bước 8 - Cấu hình phpMyAdmin
Sao chép tệp cấu hình mẫu.
Mã:
$ sudo cp sm175/config.sample.inc.php sm175/config.inc.php
Mã:
$ sudo nano sm175/config.inc.php
$cfg['blowfish_secret'] = '';
và nhập chuỗi ngẫu nhiên gồm 32 ký tự để xác thực dựa trên cookie.Bạn có thể sử dụng trình tạo blowfish trực tuyến của phpSolved hoặc thực hiện thông qua dòng lệnh.
Sao chép giá trị và dán dưới dạng đã hiển thị.
Mã:
$cfg['blowfish_secret'] = 'Tc/HfLPBOAPxJ-rhQP}HJoZEK69c3j:m';
Thay đổi quyền sở hữu của trang web và phpMyAdmin thành máy chủ Nginx.
Mã:
$ sudo chown -R nginx:nginx /var/www/html/example.com
Mã:
$ sudo rm -rf /var/www/html/example.com/sm175/setup
Bước 9 - Cấu hình Opcache
Opcache là hệ thống lưu trữ đệm của PHP. Nó hoạt động bằng cách lưu mã bytecode của tập lệnh được biên dịch trước trong bộ nhớ, vì vậy mỗi lần người dùng truy cập một trang, trang đó sẽ tải nhanh hơn. Opcache được cài đặt theo mặc định. Để xác minh, hãy kiểm tra phiên bản PHP.
Mã:
$ php --version
PHP 8.2.7 (cli) (built: Jun 9 2023 19:37:27) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.7, Copyright (c) Zend Technologies with Zend OPcache v8.2.7, Copyright (c), by Zend Technologies
Mã:
$ sudo apt install php-opcache
/etc/php/8.2/fpm/conf.d/10-opcache.ini
để chỉnh sửa.
Mã:
$ sudo nano /etc/php/8.2/fpm/conf.d/10-opcache.ini
Mã:
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
Khởi động lại PHP-FPM.
Mã:
$ sudo systemctl restart php8.2-fpm
Bước 10 - Cài đặt Certbot cho SSL
Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL miễn phí do Let's Encrypt cung cấp.Bạn có thể cài đặt Certbot bằng kho lưu trữ của Debian hoặc tải phiên bản mới nhất bằng công cụ Snapd. Chúng ta sẽ sử dụng phiên bản Snapd.
Debian 12 không cài đặt Snapd. Cài đặt gói Snapd.
Mã:
$ sudo apt install snapd
Mã:
$ sudo snap install core
$ sudo snap refresh core
Mã:
$ sudo snap install --classic certbot
/usr/bin
thư mục.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Mã:
$ certbot --version
certbot 2.6.0
Bước 11 - Kiểm tra trang web demo
Tạo trang web
Tạo và mở trang thử nghiệm cho chỉnh sửa.
Mã:
$ sudo nano /var/www/html/example.com/index.php
Mã: