LEMP là một bộ phần mềm máy chủ web nổi tiếng bao gồm PHP (PHP-FPM), NginX, MySQL (MariaDB) trên nền hệ điều hành Linux. Một bộ phần mềm máy chủ khác cũng rất nổi tiếng là LAMP (là chữ đầu trong các thành phần: Nền tảng Linux, máy chủ web Apache, CSDL MySQL-sử dụng MariaDB, ngôn ngữ PHP). Các thành phần của LEMP bao gồm:
- LEMP thay thế máy chủ web Apache bởi NginX (đọc là engine X), một webserver nhỏ gọn, ít tốn RAM nhưng hoạt động rất mạnh mẽ và ổn định.
- MariaDB là phiên bản mã nguồn mở hoạt động giống như MySQL và cũng do chính nhóm phát triển MySQL tạo ra, sau khi MySQL về tay Oracle, MySQL đã dừng lại và cộng đồng phát triển hướng sang MariaDB.
- LEMP hỗ trợ ngôn ngữ PHP phiên bản >=5.3.*, 7.0
Bài hướng dẫn này sử dụng máy chủ VPS chạy CentOS 7 tại Vultr. Trước khi bắt đầu hướng dẫn này, bạn nên có một tài khoản khác tài khoản root được thiết lập trên server. Tạo nhanh một tài khoản adshare như dưới đây:
[root@adshare01 ~]# adduser adshare
[root@adshare01 ~]# passwd adshare
Changing password for user adshare.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@adshare01 ~]# gpasswd -a adshare wheel
Adding user adshare to group wheel
Một số hành động cài đặt, chạy các dịch vụ cần quyền root, sử dụng lệnh sudo su để lấy quyền root
[adshare@adshare01 ~]$ sudo su
[sudo] password for adshare:
[root@adshare01 adshare]#
Bước 1: Cài đặt NginX
Đầu tiên chúng ta cài repo EPEL và REMI vào trước. EPEL (Extra Packages for Enterprise Linux) là một dự án repository cung cấp bởi Fedora team nó chứa rất nhiều các gói add-on hay dùng cho các phiên bản Linux nhưu RedHat, CentOS... Câu lệnh để cài đặt repo EPEL như sau:
yum install epel-release
Tiếp đến cài đặt repo REMI, đây cũng là repository miễn phí được duy trì bởi Remi Collect. Sở dĩ nên cài đặt cả hai kho các gói addon để giúp cho hệ thống có thể tải được các gói một cách tốt nhất.
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Với các phiên bản CentOS 5, 6 sử dụng các lệnh tương ứng sau:
# CentOS 5
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
# CentOS 6
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rp
Tiếp theo chúng ta sẽ cài đặt repository NginX:
[root@adshare01 adshare]# yum install nginx
Sau khi đã cài đặt xong webserver NginX, khởi động webserver nên và kiểm tra thôi:
[root@adshare01 adshare]# sudo systemctl start nginx
Kiểm tra xem máy chủ web đã chạy chưa, mở trình duyệt gõ vào đường dẫn http://dia_chi_ip_public hoặc http://domain_name nếu đã cấu hình DNS. Để xem địa chỉ IP public của máy chủ, sử dụng lệnh:
[root@adshare01 adshare]# ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Nếu mọi thứ ok, trang mặc định của webserver NginX như sau: Nếu bạn chưa thể vào được trang mặc định này, có thể trên VPS của bạn đang thiết lập firewall, thực hiện các lệnh sau cho phép các giao thức HTTP và HTTPS chạy qua firewall:
[root@adshare01 adshare]# firewall-cmd --permanent --zone=public --add-service=http
[root@adshare01 adshare]# firewall-cmd --permanent --zone=public --add-service=https
[root@adshare01 adshare]# firewall-cmd --reload
Cấu hình để NginX start khi khởi động máy chủ:
[root@adshare01 adshare]# systemctl enable nginx
Bước 2: Cài đặt CSDL MySQL (hiện nay là MariaDB)
Chúng ta sử dụng yum để yêu cầu và cài đặt mariaDB
[root@adshare01 adshare]# yum install mariadb-server mariadb
Sau khi cài đặt xong, bật MariaDB lên:
[root@adshare01 adshare]# systemctl start mariadb
Như vậy, MariaDB đã chạy, tuy nhiên chúng ta cần chạy một script nữa về bảo mật, nó giúp loại bỏ một số mặc định nguy hiểm bằng lệnh sau:
- Thay đổi mật khẩu root trên CSDL
- Loại bỏ những user nặc danh
- Không cho phép root remote từ xa
- Loại bỏ các CSDL test
- Reload privilege tables
[root@adshare01 adshare]# mysql_secure_installation
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
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
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!
Để khởi động MariaDB cùng máy chủ sử dụng lệnh
[root@adshare01 adshare]# systemctl enable mariadb
Bước 3: Cài đặt PHP
Cài đặt hai gói php-mysql và php-fpm
[root@adshare01 adshare]# yum install php php-mysql php-fpm
Tiếp đó, chúng ta cấu hình các thông số cho PHP: Mở file cấu hình php-fpm chính từ dòng lệnh:
[root@adshare01 adshare]# nano /etc/php.ini
Tìm đến tham số cgi.fix_pathinfo đang được comment lại bằng dấu ; và thiết lập giá trị cho tham số này bằng 0. Đây là một thiết lập cực lỏng lẻo về bảo mật, tham số này cho phép PHP sẽ thực thi một file gần nó nhất nếu không có file PHP nào phù hợp. Sử dụng Ctrl + W để tìm kiếm trong nano.
cgi.fix_pathinfo=0
Save và close file này (Ctrl+O để save file và Ctrl+X để thoát). Tiếp đến mở file cấu hình php-fpm www.conf
[root@adshare01 adshare]# nano /etc/php-fpm.d/www.conf
Tìm đến tham số listen và thay bằng:
listen = /var/run/php-fpm/php-fpm.sock
Tìm đến listen.owner và listen.group rồi bỏ comment đi
listen.owner = nobody
listen.group = nobody
Tìm đến tham số user = apache, group = apache và thay đổi bằng:
user = nginx
group = nginx
Như vậy đã cấu hình xong file www.conf thực hiện save và thoát. Start PHP processor lên bằng lệnh:
[root@adshare01 adshare]# systemctl start php-fpm
Sau đó, cho phép nó start cùng hệ thống khi khởi động:
[root@adshare01 adshare]# systemctl enable php-fpm
Bước 4: Cấu hình NginX để xử lý các trang PHP
3 bước đầu chúng ta đã cài đặt đủ các thành phần để một webserver hoạt động, trong bước 4 này chúng ta sẽ thực hiện cấu hình NginX để NginX hiểu và xử lý các trang PHP. Chúng ta cấu hình NginX trên server block level (tương tự như việc thiết lập virtual host trên Apache). Để mở NginX server block sử dụng:
nano /etc/nginx/conf.d/default.conf
mặc định cấu hình NginX server block như sau:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Chúng ta cần thực hiện một số thay đổi để NginX xử lý được trang PHP:
- Đầu tiên, chúng ta cần thêm index.php vào giá trị index để cho phép chạy index.php khi một thư mục được yêu cầu.
- Tiếp theo, thay đổi server_name trỏ tới tên miền hoặc địa chỉ IP public.
- Bỏ comment ở một số cấu hình xử lý lỗi yêu cầu như 404.
Thêm try_files để đảm bảo Nginx không truyền các yêu cầu khác PHP đến phần xử lý PHP. Kết quả, chúng ta có cấu hình cho Nginx server block.
server {
listen 80;
erver_name server_domain_name_or_IP;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Khởi động lại Nginx để nhận cấu hình mới.
systemctl restart nginx
Bước 5: Kiểm tra webserver xử lý trang PHP tốt chưa?
Chúng ta sẽ tạo một trang PHP và test chạy từ trình duyệt xem web server đã chạy ổn chưa. Thư mục Nginx mặc định là /usr/share/nginx/html/, tạo một file info.php với nội dung: Sau đó, mở trình duyệt và chạy đường dẫn: http://địa_chỉ_ip_public/info.php, nếu trang thông tin PHP hiện ra thì mọi bước cài đặt đã tốt. Chú ý, xóa file info.php tránh để thông tin bị lộ.
Bonus: Cài đặt wordpress trên CentOS 7 với LEMP (PHP, NginX, MariaDB)
Tạo database cho wordpress
Đăng nhập vào MySQL (MariaDB) với quyền root
mysql -u root -p
Tạo database
CREATE DATABASE wordpress;
Tạo một user trên database
CREATE USER wordpressuser@localhost IDENTIFIED BY 'password';
Gán quyền cho user này với database mới tạo
GRANT ALL PRIVILEGES ON wordpress.* TO wordpressuser@localhost IDENTIFIED BY 'password';
Bắt buộc MySQL cập nhật lại quyền
FLUSH PRIVILEGES;
Tải bộ cài wordpress
Cài đặt module php-gd phục vụ cho việc thay đổi kích thước ảnh trong wordpress phục vụ chức năng thumbnails:
yum install php-gd
Tải file nén chứa wordpress về máy chủ
wget http://wordpress.org/latest.tar.gz
Giải nén file vừa tải về, khi giải nén được thư mục wordpress
tar xzvf latest.tar.gz
Copy toàn bộ nội dung thư mục này sang thư mục /var/www/html/ cùng với toàn bộ quyền mặc định
rsync -avP ~/wordpress/ /var/www/html/
Tạo một thư mục uploads chứa các file cần tải lên wordpress
mkdir /var/www/html/wp-content/uploads
Gán quyền để wordpress có thể xử lý được các thư mục này
chown -R nginx:nginx /var/www/html/*
Cấu hình Wordpress
Chuyển đến thư mục gốc chứa wordpress
cd /var/www/html
Copy file cấu hình mẫu sang thành wp-config.php
cp wp-config-sample.php wp-config.php
Chỉnh sửa nội dung file cấu hình
nano wp-config.php
Thêm vào các thông tin về tên CSDL, username, password vào wp-config.php
/ ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'wordpressuser');
/** MySQL database password */
define('DB_PASSWORD', 'password');
Thay đổi Nginx server block xử lý đường dẫn gốc web:
nano /etc/nginx/conf.d/default.conf
Tìm đến dòng root /usr/share/nginx/html; và chuyển về thư mục gốc của wordpress
root /var/www/html;
Ok, done. Chạy wordpress installer từ trình duyệt bằng đường dẫn http://địa_chỉ_ip_public. Bạn nhớ khởi động lại nginx để cập nhật cấu hình.
CÁC BÀI VIẾT KHÁC
Quang Liêm
6 years ago
Phản hồiHalo IT
6 years ago
Phản hồitrung kiên
6 years ago
Phản hồiHalo IT
6 years ago
Phản hồiHalo IT
6 years ago
Phản hồi