Cách cài đặt Linux, Nginx, MySQL, PHP (LEMP Stack) trên Debian 8
Phần mềm LEMP là một group phần mềm được dùng để phục vụ các trang web động và ứng dụng web. Đây là từ viết tắt mô tả hệ điều hành Linux, với web server Nginx. Dữ liệu backend được lưu trữ trong database MySQL và xử lý bởi PHP.Trong hướng dẫn này, bạn sẽ cài đặt LEMP trên server Debian bằng các gói do hệ điều hành cung cấp.
Yêu cầu
Để hoàn thành hướng dẫn này, bạn cần :
- Server Debian 8 có user không phải root có quyền
sudo
. Bạn có thể cài đặt user có các quyền này trong hướng dẫn Cài đặt Server Ban đầu với Debian 8 của ta .
Bước 1 - Cài đặt Web server Nginx
Để hiển thị các trang web cho khách truy cập trang web của ta , ta sẽ sử dụng Nginx, một web server hiện đại, hiệu quả.
Tất cả phần mềm ta sẽ sử dụng cho quy trình này sẽ đến trực tiếp từ repository mặc định của Debian. Điều này nghĩa là ta có thể sử dụng trình quản lý gói apt
để hoàn tất cài đặt.
Vì đây là lần đầu tiên ta sử dụng apt
cho phiên này, ta nên bắt đầu bằng cách cập nhật index gói local của bạn . Sau đó, ta có thể cài đặt server :
- sudo apt-get update
- sudo apt-get install nginx
Trên Debian 8, Nginx được cấu hình để bắt đầu chạy khi cài đặt.
Nếu bạn đang chạy firewall ufw
, bạn cần cho phép kết nối với Nginx. Bạn nên kích hoạt cấu hình chặn tối đa mà vẫn cho phép lưu lượng truy cập bạn muốn. Vì ta chưa cấu hình SSL cho server của bạn nên trong hướng dẫn này, ta chỉ cần cho phép lưu lượng truy cập trên cổng 80
.
Bạn có thể kích hoạt tính năng này bằng lệnh :
- sudo ufw allow 'Nginx HTTP'
Bạn có thể kiểm tra thay đổi bằng lệnh :
- sudo ufw status
Bạn sẽ thấy truy cập HTTP được phép trong kết quả được hiển thị:
OutputStatus: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)
Bây giờ, hãy kiểm tra xem server có hoạt động hay không bằng cách truy cập vào domain hoặc địa chỉ IP công khai của server trong trình duyệt web . Nếu bạn không có domain được trỏ đến server của bạn và bạn không biết địa chỉ IP công khai của server , bạn có thể tìm thấy nó bằng lệnh một trong những thông tin sau vào terminal của bạn:
- ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Thao tác này sẽ in ra một vài địa chỉ IP. Bạn có thể thử lần lượt từng cái trong trình duyệt web của bạn .
Một cách khác, bạn có thể tìm địa chỉ IP của bạn với nào có thể truy cập được khi xem từ các vị trí khác trên internet:
- curl -4 icanhazip.com
Nhập một trong các địa chỉ mà bạn nhận được trong trình duyệt web của bạn . Nó sẽ đưa bạn đến trang đích mặc định của Nginx:
http://server_domain_or_IP
Nếu bạn nhìn thấy trang trên, bạn đã cài đặt thành công Nginx.
Bước 2 - Cài đặt MySQL để quản lý dữ liệu trang web
Bây giờ ta đã có web server , ta cần cài đặt MySQL, một hệ quản trị database , để lưu trữ và quản lý dữ liệu cho trang web của ta .
Bạn có thể cài đặt cái này dễ dàng bằng lệnh :
- sudo apt-get install mysql-server
Bạn cần cung cấp password root (quản trị) để sử dụng trong hệ thống MySQL và bạn cần xác nhận password đó.
Phần mềm database MySQL hiện đã được cài đặt, nhưng cấu hình của nó vẫn chưa hoàn chỉnh.
Để bảo mật cài đặt, ta có thể chạy một tập lệnh bảo mật đơn giản sẽ hỏi liệu ta có muốn sửa đổi một số mặc định không an toàn hay không. Bắt đầu tập lệnh bằng lệnh :
- sudo mysql_secure_installation
Bạn cần nhập password bạn đã đặt cho account gốc MySQL. Sau đó, bạn sẽ được hỏi bạn có muốn thay đổi password đó không. Nếu bạn hài lòng với password hiện tại của bạn , hãy nhập N
cho “no” ở dấu nhắc :
Using existing password for root. Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. You already have a root password set, so you can safely answer 'n'. Change the root password? [Y/n] n ... skipping.
Đối với các câu hỏi còn lại mà kịch bản yêu cầu, bạn nên nhấn Y
, sau đó nhấn ENTER
tại mỗi dấu nhắc . Thao tác này sẽ xóa một số user ẩn danh và database thử nghiệm, vô hiệu hóa đăng nhập root từ xa và tải các luật mới này để MySQL áp dụng ngay những thay đổi bạn đã thực hiện.
Đến đây, hệ thống database của bạn đã được cài đặt và bảo mật. Hãy cài đặt PHP.
Bước 3 - Cài đặt PHP để xử lý
Bây giờ ta đã cài đặt Nginx để phục vụ các trang của ta và MySQL được cài đặt để lưu trữ và quản lý dữ liệu của ta . Tuy nhiên, ta vẫn chưa có bất kỳ thứ gì có thể tạo ra nội dung động. Đó là nơi PHP xuất hiện.
Vì Nginx không chứa PHP processor root như một số web server khác, ta cần cài đặt fpm
, viết tắt của “fastCGI process manager”. Ta sẽ yêu cầu Nginx chuyển các yêu cầu PHP đến phần mềm này để xử lý. Ta cũng sẽ cài đặt một gói trợ giúp bổ sung cho phép PHP giao tiếp với backend database MySQL của ta . Quá trình cài đặt sẽ kéo các file lõi PHP cần thiết để làm cho việc đó hoạt động.
Các gói này không có sẵn trong repository lưu trữ mặc định do các vấn đề cấp phép, vì vậy ta sẽ phải sửa đổi các nguồn repository để đưa chúng vào.
Mở /etc/apt/sources.list
trong editor của bạn:
- sudo nano /etc/apt/sources.list
Sau đó, đối với mỗi nguồn, hãy thêm các kho contrib
và repository non-free
vào mỗi nguồn. Tệp của bạn sẽ trông giống như sau sau khi bạn thực hiện những thay đổi đó:
... deb http://mirrors.digitalocean.com/debian jessie main contrib non-free deb-src http://mirrors.digitalocean.com/debian jessie main contrib non-free deb http://security.debian.org/ jessie/updates main contrib non-free deb-src http://security.debian.org/ jessie/updates main contrib non-free # jessie-updates, previously known as 'volatile' deb http://mirrors.digitalocean.com/debian jessie-updates main contrib non-free deb-src http://mirrors.digitalocean.com/debian jessie-updates main contrib non-free
Lưu và thoát khỏi file . Sau đó cập nhật các nguồn của bạn:
- sudo apt-get update
Sau đó cài đặt các module php5-fpm
và php5-mysql
:
- sudo apt-get install php5-fpm php5-mysql
Bây giờ ta đã cài đặt các thành phần PHP của bạn , nhưng ta cần thực hiện một chút thay đổi cấu hình để giúp cài đặt của ta an toàn hơn.
Mở file cấu hình php-fpm
với quyền root:
- sudo nano /etc/php5/fpm/php.ini
Tìm tham số đặt cgi.fix_pathinfo
trong file . Điều này sẽ được comment bằng dấu chấm phẩy (;) và được đặt thành “1” theo mặc định.
Đây là một cài đặt cực kỳ không an toàn vì nó yêu cầu PHP cố gắng thực thi file gần nhất mà nó có thể tìm thấy nếu không tìm thấy file PHP được yêu cầu. Điều này về cơ bản sẽ cho phép user tạo các yêu cầu PHP theo cách cho phép họ thực thi các tập lệnh mà họ không được phép thực thi.
Ta sẽ thay đổi cả hai điều kiện này bằng cách bỏ comment và đặt nó thành “0” như sau:
cgi.fix_pathinfo=0
Lưu file khi bạn hoàn tất.
Bây giờ, ta chỉ cần khởi động lại PHP processor của bạn bằng lệnh :
- sudo systemctl restart php5-fpm
Điều này sẽ thực hiện thay đổi mà ta đã thực hiện.
Bước 4 - Cấu hình Nginx để sử dụng PHP processor
Bây giờ, ta đã cài đặt tất cả các thành phần cần thiết. Thay đổi cấu hình duy nhất mà ta vẫn cần là yêu cầu Nginx sử dụng PHP processor của ta cho nội dung động.
Ta thực hiện việc này ở cấp độ khối server (các khối server tương tự như các server ảo của Apache). Mở file cấu hình khối server Nginx mặc định bằng lệnh :
- sudo nano /etc/nginx/sites-available/default
Hiện tại, với các comment đã bị xóa, file khối server mặc định của Nginx trông giống như sau:
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name _; location / { try_files $uri $uri/ =404; } }
Ta cần thực hiện một số thay đổi đối với file này cho trang web của bạn .
- Đầu tiên, ta cần thêm
index.php
làm giá trị đầu tiên củaindex
thịindex
của ta để các file có tênindex.php
được phục vụ, nếu có, khi một folder được yêu cầu. - Ta có thể sửa đổi chỉ thị
server_name
để trỏ đến domain hoặc địa chỉ IP công cộng của server . - Đối với quá trình PHP processor thực tế, ta chỉ cần bỏ ghi chú một đoạn của file xử lý các yêu cầu PHP. Đây sẽ là khối
location ~\.php$
, đoạn mãfastcgi-php.conf
và socket được liên kết vớiphp-fpm
. - Ta cũng sẽ bỏ ghi chú khối vị trí xử lý các
.htaccess
. Nginx không xử lý các file này. Nếu các file nào trong số này tình cờ tìm thấy đường vào root tài liệu, chúng sẽ không được cung cấp cho khách truy cập.
Những thay đổi bạn cần thực hiện có màu đỏ trong văn bản bên dưới:
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; server_name your_server_ip; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php5-fpm.sock; } location ~ /\.ht { deny all; } }
Khi bạn đã áp dụng các thay đổi ở trên, bạn có thể lưu file .
Kiểm tra file cấu hình của bạn để tìm lỗi cú pháp bằng lệnh :
- sudo nginx -t
Nếu có lỗi , hãy quay lại và kiểm tra lại file của bạn trước khi tiếp tục.
Khi đã sẵn sàng , hãy reload Nginx để áp dụng các thay đổi cần thiết:
- sudo systemctl reload nginx
Bước 5 - Tạo file PHP để kiểm tra cấu hình
LEMP của bạn bây giờ sẽ được cài đặt hoàn chỉnh. Ta có thể kiểm tra nó để xác nhận Nginx có thể xử lý chính xác các file .php
cho PHP processor của ta .
Ta có thể làm điều này bằng cách tạo một file PHP thử nghiệm trong root tài liệu của ta . Mở một file mới có tên là info.php
trong root tài liệu của bạn trong editor của bạn:
- sudo nano /var/www/html/info.php
Nhập hoặc dán các dòng sau vào file mới. Đây là mã PHP hợp lệ sẽ trả về thông tin về server của ta :
<?php phpinfo(); ?>
Khi bạn hoàn tất, hãy lưu file .
Bây giờ, bạn có thể truy cập trang này trong trình duyệt web của bạn bằng cách truy cập vào domain của server hoặc địa chỉ IP công cộng, theo sau là /info.php
:
http://server_domain_or_IP/info.php
Bạn sẽ thấy một trang web được tạo bởi PHP với thông tin về server của bạn:
Nếu bạn thấy một trang giống như thế này, bạn đã cài đặt PHP processor với Nginx thành công.
Sau khi xác minh Nginx hiển thị trang chính xác, tốt nhất là xóa file bạn đã tạo vì nó có thể cung cấp cho user lạ một số gợi ý về cấu hình của bạn có thể giúp họ xâm nhập trái phép.
Hiện tại, hãy xóa file bằng lệnh :
- sudo rm /var/www/html/info.php
Bạn luôn có thể tạo lại file này nếu sau này bạn cần.
Kết luận
Đến đây bạn sẽ có một LEMP được cấu hình trên server Debian của bạn . Điều này mang lại cho bạn một nền tảng rất linh hoạt để cung cấp nội dung web cho khách truy cập của bạn.
Các tin liên quan
Cách thiết lập xác thực Linux tập trung với FreeIPA trên CentOS 72016-12-15
Cách bảo vệ server của bạn chống lại lỗ hổng Linux COW bẩn
2016-10-31
Cách cấu hình TRIM định kỳ cho bộ lưu trữ SSD trên server Linux
2016-08-25
Cách bảo vệ server của bạn chống lại lỗ hổng HTTPoxy
2016-07-18
Cách phân vùng và định dạng thiết bị lưu trữ trong Linux
2016-07-13
Cách thực hiện các tác vụ quản trị cơ bản cho thiết bị lưu trữ trong Linux
2016-07-13
Giới thiệu về thuật ngữ và khái niệm lưu trữ trong Linux
2016-07-13
Cách cấu hình BIND làm server DNS Mạng riêng trên Ubuntu 16.04
2016-05-09
cách cấu hình bind làm server lưu trữ hoặc chuyển tiếp DNS trên Ubuntu 16.04
2016-05-02
Cách cài đặt và cấu hình Postfix làm server SMTP chỉ gửi trên Ubuntu 16.04
2016-04-29