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.
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.
Xác nhận lại lần nữa
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
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.
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 Yes tiếp để tạo database phpmyadmin
Tạo mật khẩu cho database phpmyadmin vừa tạo.
Xác nhận lại lần cuối
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.
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-data và group 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
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 !
Anh ơi em chưa thấy chỗ anh sử dụng VPS ở đâu ạ?
Có nhiều bài viết dùng vps trên blog của mình, bạn có thể xem ở đây https://www.thuysys.com/category/providers
minh muon cai zend framework 1.12 voi nginx tren ubuntu thi lam sao
Bạn phải search google thôi, cái này mình không rõ rồi.
Bạn ơi,mình đã làm đến phần 4 nhưng ko thể chạy phpmyadmin trên trình duyệt như trong hình
https://goo.gl/photos/Z8Spd1FywYtxP2pcA
Bạn giải đáp dùm mình nhé
bạn kiểm tra lại PHP xem đã run chưa
Mình đã kiểm tra php.Nó đang chạy
https://goo.gl/photos/i3zy2NKuvuqbrc6N9
Nhưng vẫn chưa chạy được phpmyadmin và các file php
Cấu hình nginx của bạn như nào
Mình cấu hình như hướng dẫn của bạn
hình như nó chỉ đọc được file html,còn file php nó ko đọc được
Đúng rồi bạn xem lại cấu hình nginx phần virtualhost đã thêm
index.php
chưaVẫn ko được bạn ah.Nó vẫn giống lỗi ở trên
https://goo.gl/photos/sBTabXFHwSQzGG3V6
Bai viet hay. Cai 5 cai wordpress ma khong huong dan cai cache can thiet webserver. Cai MariaDB voi MySQL thi cai nao tot hon
Bạn dùng mariadb nhé, mình sẽ có bài viết về cache cho webserver thời gian tới.
Mình đã kiểm tra php.Nó đang chạy
https://goo.gl/photos/i3zy2NKuvuqbrc6N9
hình như nó chỉ đọc được file html,còn file php nó ko đọc được