Cài Nginx, MySQL, PHP (LEMP) trên Ubuntu 16.04

LEMP Web Server là gì chắc không phải giải thích dài dòng nữa, trên blog của mình đã có đủ thông tin hết rồi.

Những bài trước mình đã giới thiệu và hướng dẫn cài hệ thống LEMP hoàn chỉnh trên CentOS. Trong bài này mình sẽ hướng dẫn thêm cách cài LEMP trên Ubuntu. Như vậy là đủ bộ tài liệu để xây dựng Web Server trên Linux với các Distro phổ biến nhất hiện nay, giờ bắt tay vào việc thôi.

Hướng dẫn cài LEMP trên Ubuntu 16.04

Nội dung

Trong khuôn khổ bài này mình hướng dẫn cài đặt các thành phần chính của LEMP (Nginx 1.10, PHP7, MySQL 5.7) để tạo Web Server, cách thêm Virtualhost và cài đặt wordpress cho LEMP Server hoàn chỉnh.

Các thông số cấu hình và ý nghĩa của nó các bạn đọc lại tài liệu được tham chiếu cùng nội dung bài viết. Các thông số cần thiết mình vẫn thêm vào để các bạn tiện theo dõi tránh chồng chéo phải xem nhiều tài liệu cùng lúc.

Yêu cầu

– VPS: tối thiểu phải có VPS bạn nào có server riêng càng tốt, tham khảo một số nhà cung cấp SSD VPS tốc độ cao mà thuysys.com đã dùng.
– Hệ điều hành: Ubuntu 16.04 cấu hình dùng được cho cả hệ điều hành Ubuntu 15/14/13/12.
– Domain: demo.thuysys.com dùng để tạo virtualhost trên LEMP, domain chính mình chạy website rồi nên mình dùng subdomain để demo cho các bạn. Subdomain hay root domain không quan trọng, bạn chỉ cần thay subdomain thành domain của bạn là được.

1. Cài nginx 1.10

Đây là phiên bản NGINX mới nhất tại thời điểm viết bài, tiến hành cài đặt bạn nhập lệnh như bên dưới.

apt-get install nginx

Các packages sẽ được cài .

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
 fontconfig-config fonts-dejavu-core geoip-database libfontconfig1 libgd3
 libgeoip1 libjbig0 libjpeg-turbo8 libjpeg8 libtiff5 libvpx3 libxpm4
 libxslt1.1 nginx-common nginx-core
Suggested packages:
 libgd-tools geoip-bin fcgiwrap nginx-doc ssl-cert
The following NEW packages will be installed:
 fontconfig-config fonts-dejavu-core geoip-database libfontconfig1 libgd3
 libgeoip1 libjbig0 libjpeg-turbo8 libjpeg8 libtiff5 libvpx3 libxpm4
 libxslt1.1 nginx nginx-common nginx-core
0 upgraded, 16 newly installed, 0 to remove and 0 not upgraded.
Need to get 2,206 kB/4,742 kB of archives.
After this operation, 15.6 MB of additional disk space will be used.
Do you want to continue? [Y/n]

File config nginx : /etc/nginx/nginx.conf

Đây là file các bạn sẽ phải chỉnh sửa để cấu hình nginx.

Mở nginx.conf sửa worker_processes 1 là số CPU Core của bạn, worker_connections 1024 là số connections đồng thời trên 1 CPU Core. Tùy thuộc vào lượng truy cập bạn set cho phù hợp, website mới cử để default cũng được, tham khảo:

2. Cài MySQL 5.7

Bài này đổi gió, mình cài đặt MySQL 5.7 trên Ubuntu thay cho MariaDB như thường lệ, không lại kêu thiên vị MariaDB quá.

apt-get install mysql-server

Gói cài đặt cần thiết đi theo phiên bản MySQL 5.7

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
 libaio1 libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libfcgi-perl
 libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl
 libhttp-date-perl libhttp-message-perl libio-html-perl
 liblwp-mediatypes-perl libtimedate-perl liburi-perl mysql-client-5.7
 mysql-client-core-5.7 mysql-common mysql-server-5.7 mysql-server-core-5.7
Suggested packages:
 libdata-dump-perl libipc-sharedcache-perl libwww-perl mailx tinyca
The following NEW packages will be installed:
 libaio1 libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libfcgi-perl
 libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl
 libhttp-date-perl libhttp-message-perl libio-html-perl
 liblwp-mediatypes-perl libtimedate-perl liburi-perl mysql-client-5.7
 mysql-client-core-5.7 mysql-common mysql-server mysql-server-5.7
 mysql-server-core-5.7
0 upgraded, 20 newly installed, 0 to remove and 0 not upgraded.
Need to get 17.9 MB/18.6 MB of archives.
After this operation, 162 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Chọn Y quá trình cài đặt tự diễn ra, bạn tạo mật khẩu cho account root quản trị DB.

Đặt mật khẩu root MySQL

Xác nhận lại lần nữa

Xác nhận mật khẩu mysql

Sau đó chúng ta hiệu chỉnh một số cài đặt để cấu hình bảo mật database, với MySQL sẽ có thêm tùy chọn hơi khác MariaDB một chút.

 mysql_secure_installation
Securing the MySQL server deployment.

Enter password for user root: <-- Nhập mật khẩu root của database được tạo ở bước trên

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: <-- Nhập y, đây là plugin kiểm tra độ mạnh của mật khẩu

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: <-- Nhập 2, để tạo mật khẩu có độ mạnh cao
Using existing password for root.

Estimated strength of the password: 25
Change the password for root ? ((Press y|Y for Yes, any other key for No) : <-- Nhập No, vì mật khẩu root đã được đặt ở bước trên rồi.

... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL 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? (Press y|Y for Yes, any other key for No) : <-- Nhập 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? (Press y|Y for Yes, any other key for No) : <-- Nhập y
Success.

By default, MySQL 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? (Press y|Y for Yes, any other key for No) : <-- Nhập 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? (Press y|Y for Yes, any other key for No) : <-- Nhập y
Success.

All done!

3. Cài PHP 7.0

Chạy lệnh

 apt-get install php php-mysql

Các thành phần cài đặt đi theo rất quan trọng bạn chú ý.

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
 php-common php7.0 php7.0-cli php7.0-common php7.0-fpm php7.0-json php7.0-mysql php7.0-opcache php7.0-readline
Suggested packages:
 php-pear
The following NEW packages will be installed:
 php php-common php-mysql php7.0 php7.0-cli php7.0-common php7.0-fpm php7.0-json php7.0-mysql php7.0-opcache php7.0-readline
0 upgraded, 11 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,289 kB/3,289 kB of archives.
After this operation, 14.2 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Bạn có thể nhìn thấy PHP được cài là bản 7.0 và php7.0-fpm cũng được cài theo luôn.

Đã có đủ các thành phần cần thiết cho một web server bạn test các service nginx, php-fpm, mysql xem chạy ok chưa. Sau đó mới chuyển qua cấu hình Virtual host để chạy nhiều website trên server được.

Test Nginx, MySQL và php7.0-fpm

Chạy cho mình 3 lệnh:

systemctl status nginx
systemctl status mysql
systemctl status php7.0-fpm

Kiểm tra nginx, mysql, php

Tất cả đều running rồi khỏi phải mở trình duyệt kiểm tra mần chi nữa.

4. Cấu hình Virtual Host

Đây là bước liên kết các thành phần của LEMP lại với nhau. Sau khi cài đặt chúng chỉ là các dịch vụ riêng lẻ thôi.  Muốn tạo virtualhost bạn phải cấu hình để nginx làm việc được với PHP, ở đây là php-fpm phiên bản 7.0. Tiếp sau đó phải tạo database trên MySQL để lưu trữ dữ liệu cho website.

4.1 Tạo cấu trúc thư mục .

Với mỗi trang web bất kỳ mình sẽ tạo 3 thư mục, public_html để chứa code trang web, logs lưu log hoạt động của trang web, backup lưu các file cài đặt hoặc cấu hình, dùng lệnh:

mkdir -p /var/www/demo.thuysys.com/{public_html,logs,backup}

4.2 Cấu hình NGINX

Web server trên Ubuntu quản lý Virtualhost hơi khác một chút so với CentOS. Toàn bộ file config Virtualhost phải nằm trong /etc/nginx/sites-available. Bạn tạo file cấu hình hots ảo cho demo.thuysys.com rồi  để trong thư mục này.

vi /etc/nginx/sites-available/demo.thuysys.com

Paste nguyện đoạn code bên dưới vào là xong, nhớ đổi thành domain của bạn nhé.

server {
 listen 80;

root /var/www/demo.thuysys.com/public_html;

index.html index.htm index.php;

server_name demo.thuysys.com;
 
 access_log /var/www/demo.thuysys.com/logs/access.log;
 error_log /var/www/demo.thuysys.com/logs/error.log;

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

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

location ~ /\.ht {
 deny all;
 }
}

Muốn nginx đọc được file cấu hình bạn phải tạo một symbolic link đến sites-enabled

ln -s /etc/nginx/sites-available/demo.thuysys.com /etc/nginx/sites-enabled/

Như thường lệ để test nginx đã hoạt động với php7.0-fpm hay chưa, chúng ta tạo file info.php.

vi /var/www/demo.thuysys.com/public_html/info.php

Nội dung file như bên dưới

<?php phpinfo(); ?>

Khởi động lại nginx.

systemctl restart nginx

Kiểm tra kết quả.

Mở trình duyệt lên nhập vào http://server_ip/info.php hoặc http://your_domain/info.php. Với bài này mình gõ vào http://demo.thuysys.com/info.php.

test php

Kết quả như trên là thành công. Bạn thấy đấy cấu hình chỉ có vỏn vẹn mấy dòng, các thông số khi cài đặt trên ubuntu hầu như đã được tạo sẵn. Nếu đã từng cấu hình LEMP trên CentOS bạn sẽ thấy mất thời gian hơn nhiều.

5. Cài phpmyadmin

Phần này mình bổ sung thêm để bạn nào thích dùng command thì dùng mà dùng giao diện web cũng được. Ubuntu 16.04 dùng phpmyadmin 4.5.4 để cài bạn gõ cho mình lệnh:

apt-get install phpmyadmin php-mbstring php-gettext

Nếu chưa cài hai gói php-mbstring và php-gettext khi cài PHP thì bổ sung ở đây, không có lại lỗi loạn lên đấy.

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
 dbconfig-common dbconfig-mysql javascript-common libjs-jquery
 libjs-sphinxdoc libjs-underscore libmcrypt4 php-gd php-mcrypt php-phpseclib
 php-tcpdf php7.0-gd php7.0-mcrypt php-mbstring php-gettext
Suggested packages:
 libmcrypt-dev mcrypt php-libsodium php-gmp php-imagick www-browser
The following NEW packages will be installed:
 dbconfig-common dbconfig-mysql javascript-common libjs-jquery
 libjs-sphinxdoc libjs-underscore libmcrypt4 php-gd php-mcrypt php-phpseclib
 php-tcpdf php7.0-gd php7.0-mcrypt phpmyadmin php-mbstring php-gettext
0 upgraded, 14 newly installed, 0 to remove and 0 not upgraded.
Need to get 12.9 MB of archives.
After this operation, 49.3 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Chọn Y để tiếp tục, cửa sổ mới hiện ra hỏi bạn dùng web server nào cho phpmyadmin, hix mặc dù cài NGINX bạn vẫn chọn Apache2 cho mình -> OK.

Chọn Web Server chạy phpMyAdmin

Chọn Yes tiếp để tạo database phpmyadmin

Cấu hình PHPMyAdmin

Tạo mật khẩu cho database phpmyadmin vừa tạo.

Tạo mật khẩu cho DB phpmyadmin

Xác nhận lại lần cuối

Xác nhận mật khẩu phpmyadmin

Mở trình duyệt nhập vào http://server_ip/phpmyadmin hoặc http://demo.thuysys.com/phpmyadmin, kết quả như bên dưới là được.

Cài phpmyadmin trên LEMP với Ubuntu 16.04

Tham khảo : Hướng dẫn sử dụng phpmyadmin

6. Cài WordPress trên LEMP

Muốn làm gì thì làm cứ tải mã nguồn wordpress trước đã, dùng wget hoặc curl đều được, lệnh.

curl -O https://wordpress.org/latest.tar.gz
wget https://wordpress.org/latest.tar.gz

Giải nén file cài đặt wordpress

tar -xvf latest.tar.gz

Bạn được thư mục wordpress chứa toàn bộ file cài đặt, bây giờ cần chuyển toàn bộ file cài đặt này vào Document Root của demo.thuysys.com

mv wordpress/* /var/www/demo.thuysys.com/public_html/

Công đoạn không thể thiếu là phải gán quyền quản lý folder public_html cho web server NGINX. Trên Ubuntu mặc định NGINX và PHP7.0-FPM dùng user www-datagroup www-data để làm việc. Do đó bạn dùng www-data cho public_html luôn.

Bỏ quên bước này thường sẽ gặp lỗi yêu cầu tài khoản FPT khi xóa hoặc cài mới plugin, hay lỗi không upload được file.

chown -R www-data:www-data /var/www/demo.thuysys.com/public_html/

Tạo database

Bạn có thể dùng phpMyAdmin cài ở bước trên để tạo database, cách làm thì xem link hướng dẫn bện dưới.

Trong bài này mình hướng dẫn các bạn cách tạo cơ sở dữ liệu thủ công bằng command cho tiện copy paste.

Bạn đăng nhập vào MySQL,lệnh.

mysql -u root -p

Nhập vào thông tin tài root quản trị mysql đã tạo ở bước trên, rồi chạy cho mình 2 lệnh.

create database demodb;
grant all on demodb.* to 'demouser'@localhost identified by '123456';

Sẽ tạo database có tên demodb và demouser, user này có full quyền trên demodb.

Tiếp theo mở trình duyệt lên và nhập vào http://server_IP hoặc http://your_domain

Cài WP trên LEMP Ubuntu 16.04

Ngon, nhìn thấy logo hình chữ w là nhẹ nhõm người bạn ấn nút Continue và làm theo hướng dẫn là được.

7. Kết bài

Mình dừng bài ở đây nhé, giờ bạn thoải mái chọn Web Server cho mình rồi thích LAMP hay LEMP gì cũng có, trên Ubuntu & CentOS cũng đủ cả.

Các bạn chú ý, đừng ảo tưởng sức mạnh của bất kỳ Web Server nào. Mình thấy rất nhiều bạn cứ hỏi nên chọn Web Server nào là tốt nhất, hay chọn script nào để tối ưu Website. Xin thưa, chẳng có cái nào tốt nhất đâu mấy thánh cứ cài lên bảo nó tốt thì mấy thằng sysadmin giải nghệ rồi.

Muốn tăng tốc website thì xem mấy bài viết này:

Hẹn ở bài tới, see you again !

 

16 Comments

  1. Huân August 20, 2017 Reply
  2. Nguyen April 12, 2017 Reply
    • Mr Thủy April 12, 2017 Reply
  3. Hưng March 30, 2017 Reply
    • Mr Thủy March 30, 2017 Reply
      • Hưng March 30, 2017 Reply
        • Mr Thủy March 30, 2017 Reply
          • Hưng March 30, 2017
          • Hưng March 30, 2017
          • Mr Thủy March 30, 2017
          • Hưng March 30, 2017
  4. hung May 6, 2016 Reply
    • admin May 6, 2016 Reply
    • Hưng March 30, 2017 Reply
    • Hưng March 30, 2017 Reply

Leave a Reply