EasyEngine – Tự cài NGINX dành riêng cho WordPress
Chúng ta đã quá quen với các script tự động cài webserver tối ưu như Centminmod là một ví dụ điển hình, hoặc là mình cũng đã có serie cài đặt LEMP khá chi tiết để bạn có thể tự cài cho mình một webserver NGINX + PHP-FPM để sử dụng vì nó đã được chứng mình là có hiệu suất làm việc tốt hơn Apache rất nhiều.
Nhưng mà việc tự động cài đặt hay sử dụng Centminmod cũng đều phải sử dụng qua nhiều dòng lệnh khá rườm rà, và nhất là hiện nay các script tự cài đặt webserver chúng ta biết đều không tập trung riêng dành cho WordPress, nên muốn dùng được cho WordPress bạn phải cấu hình lại rất nhiều.
Vậy, nếu bạn cần một script tự động cài webserver dành riêng cho WordPress, được tối ưu để chạy WordPress từ bình thường đến multi site, tự động thiết lập cho các plugin quan trọng như W3 Total Cache, WP Super Cache hay sử dụng FastCGI Cache thì có thể xem bài hướng dẫn này để biết cách sử dụng EasyEngine Script - một script tự cài đặt webserver được tối ưu riêng cho WordPress và rất dễ sử dụng.
Hãy nên nhớ rằng cách sử dụng Ubuntu khác với CentOS nên chịu khó lên Google search nếu bạn gặp vấn đề gì đó về Ubuntu.
Video hướng dẫn
EasyEngine là một bash script có chức năng tự động cài đặt webserver toàn diện dành riêng cho WordPress trên hệ điều hành Debian/Ubuntu, đây quả thực là điều khá bất ngờ vì đại đa số các bash script hiện nay đều hoạt động tốt nhất và chú trọng vào RHEL/CentOS.
Các chức năng chính của EasyEngine
- Tự động cài đặt NGINX + PHP-FPM kèm theo các modules quan trọng nhất như Zend Opcache, Zend Optimizer, Ioncube,…
- Tự động cài đặt và cấu hình Postfix để gửi mail không vào spam box.
- Tự động cài đặt phpMyAdmin và cấu hình bảo mật.
- Cài đặt Memcached và cấu hình tối ưu.
- Hỗ trợ các ứng dụng GUI theo gõi cache.
- Cấu hình riêng dành cho WordPress.
- Hỗ trợ các plugin cache của WordPress.
- Tạo website nhanh với 1 dòng lệnh duy nhất.
- Tích hợp WP CLI.
- Sử dụng ít tài nguyên nhất.
- Tự động update script và các ứng dụng bên trong.
- Có thể cấu hình như một host bình thường, tức là mỗi user sẽ có 1 tài khoản sFTP riêng để quản trị website của họ.
Tuy nhiên, nhược điểm của script này là nếu bạn tạo một website mới dễ dàng bấy nhiêu thì việc chuyển website về đây có thể mất thời gian hơn bình thường
Cấu hình yêu cầu
Để có thể sử dụng tốt script này, mình khuyến khích bạn nên có một máy chủ với cấu hình như sau:
- Hệ điều hành: 12.04 32-bits hay 64-bits đều được. Bản 14.04 mình test thì lúc được lúc không.
- RAM: 512MB trở lên
Bạn có thể sử dụng VPS tại DigitalOcean, Site5,..đều rất tốt để sử dụng script này.
Xem thêm: Các nhà cung cấp VPS tốt nhất.
Cài đặt EasyEngine Script
Để cài EasyEngine Script, chúng ta có 2 bước.
Đầu tiên là chạy lệnh dưới đây để tải script về và nạp script vào máy chủ.
wget -qO ee rt.cx/ee && sudo bash ee
Đợi một xíu để nó chạy và sẽ hỏi, điền kết quả và ấn Enter:
- Enter your name [root]: Nhập tên của bạn vào, không dấu nhé.
- Enter your email address [root@eescript]: Nhập email của bạn vào.
Sau khi bước cài đặt ban đầu hoàn tất, hãy gõ thêm lệnh dưới đây để cài các ứng dụng như webserver, postfix,….
ee stack install
Trường hợp bạn làm bước này mà nó có hiện dòng nào lỗi kiểu “Unable to download xx, exit status = xx” thì hãy gõ lại lệnh ee stack install để chạy lại. Sau khi cài xong, bạn truy cập vào IP của máy chủ sẽ thấy trang welcome của NGINX hiện ra thế này:

Trang Welcome của
NGINXNhưng chưa hết, để tránh lỗi cú pháp PHP trong các themes/plugin thì bạn nên mở file /etc/php5/fpm/php.ini và tìm:
short_open_tag = Off
thay Off thành On nhé. Sau đó khởi động lại PHP-FPM:
service php5-fpm restart
Trong vài trường hợp nó sẽ bị lỗi xung đột cổng 80, tốt nhất bạn cứ chạy lệnh này 1 lần sau khi cài đặt:
sudo fuser -k 80/tcp
Cài mới một website WordPress
Việc cài mới một website WordPress trên EasyEngine dễ dàng vô cùng, chỉ với một câu lệnh sau đây:
ee site create example.com --wp

Ở đoạn trên, nó sẽ tự thêm domain example.com vào máy chủ, đồng thời tự setup một website WordPress với username và email là thông tin mà bạn đã nhập lúc cài đặt EasyEngine script, tên database cũng tự đặt luôn. Thế nhưng, câu lệnh trên là cài đặt một website WordPress không có bất cứ plugin cache nào, nếu bạn muốn cài đặt kèm theo các plugin cache thì có thể chọn 1 trong 3 câu lệnh dưới đây:
# WordPress + WP Super Cạcheee site create example.com --wpsc
# WordPress + W3 Total Cache
ee site create example.com --w3tc
# WordPress + FastCGI_Cache
ee site create example.com --wpfc
Cái nào cũng tốt cả, bạn có thể chọn 1 trong 3. Mình thì hay dùng W3 Total Cache.
Hoặc nếu bạn cần tự cài đặt một website WordPress Multi Site thì chỉ cần thêm tham số --wpsubdirhoặc --wpsubdom vào. Ví dụ:
# WordPress Multi Site for Sub Directory + W3 Total Cacheee site create example.com --wpsubdir --w3tc
Trong đó,
- –wpsubdir: Website multi site sử dụng tên miền dạng example.com/site1, example.com/site2
- –wpsubdom: Website multi site sử dụng tên miền dạng site1.example.com, site2.example.com
Easy, right?
Nhưng không chỉ chạy website WordPress trên máy chủ với EasyEngine, bạn còn có thể thêm domain vào và sử dụng với mục đích khác bằng các câu lệnh sau:
# Thêm domain để chạy website HTMLee site create example.com --html
# Thêm domain để chạy website PHP
ee site create example.com --php
# Thêm domain để chạy website PHP + MySQL
ee site create example.com --mysql
Cấu trúc thư mục & cấu hình EasyEngine
Để có thể sử dụng tốt script này thì bạn nên nắm rõ cấu trúc phân chia thư mục của nó và nơi lưu các file cấu hình của những ứng dụng cần thiết. Dưới đây là danh sách các khu vực mà bạn nên biết.
Nginx
Configuration Files:
- /etc/nginx/ – Tất cả các file cấu hình liên quan tới NGINX đều lưu ở đây.
- /etc/nginx/nginx.conf – File cấu hình chính của NGINX.
- /etc/nginx/sites-available/ – File cấu hình của các domain đã thêm vào máy chủ. Nếu cần sửa gì ở từng domain thì nên sửa trong đây.
- /etc/nginx/sites-enables/ – Thư mục chứa các symbolic link dẫn đến file cấu hình của domain tương ứng, nó chỉ có trong đây nếu domain đó đang kích hoạt. Không cần sửa/xem.
Log Files:
- /var/log/nginx/ – Thư mục chứa toàn bộ các file log của NGINX.
- /var/log/nginx/example.com.access.log – File access log của domain example.com.
- /var/log/nginx/example.com.error.log – File error log của domain example.com.
PHP
Configuration Files:
- /etc/php5/ – Tất cả các file cấu hình của PHP nằm trong đây.
- /etc/php5/fpm/php.ini – File cấu hình chính của PHP.
- /etc/php5/fpm/php-fpm.conf – Các cài đặt của PHP-FPM.
- /etc/php5/fpm/conf.d/www.conf – File cấu hình PHP-FPM riêng lẻ, bạn có thể tạo ra nhiều file với tên khác nhau nếu có nhu cầu.
Log Files:
- /var/log/php5-fpm/ – Tất cả các log liên quan đến PHP-FPM đều nằm ở đây.
- /var/log/php5-fpm/slow.log – Xem log các script thực thi chậm.
- /var/log/php5-fpm/php.log – Log liên quan đến PHP.
MySQL – Configuration & logs
Configuration Files:
- /etc/mysql/my.cnf – Đây là file cấu hình chính dành cho MySQL.
- /root/.my.cnf – File này chứa user & pass root của MySQL.
Log Files:
- /var/log/mysql/mysql.log – Các log chung liên quan đến MySQL.
- /var/log/mysql/mysql-slow.log – Log ghi lại các query thực thi lâu đến MySQL.
Cấu trúc thư mục website
Following is the convention we will be using for WordPress as well as non-WordPress sites.
- /var/www – Tất cả các thư mục của từng domain sẽ được lưu trong đây.
- /var/www/example.com – Tất cả dữ liệu liên quan đến domain example.com đều lưu trong đây. Thư mục này cũng chứa file wp-config.php của WordPress.
- /var/www/example.com/htdocs – Thư mục gốc chứa dữ liệu website mà nó sẽ hiển thị ra ngoài, đây chính là thư mục public_html mà bạn hay gặp.
- /var/www/example.com/logs – Thư mục chứa log liên quan đến domain example.com
Công cụ quản trị (phpMyAdmin, Cache GUI,…)
Như ở đầu bài mình có đề cập EasyEngine có cài sẵn phpMyAdmin và các công cụ khác, cũng như đã bảo mật nó.
Mặc định thư mục chứa các công cụ này được bảo vệ bằng một lớp mật khẩu nên bạn cần thiết lập lại mật khẩu để có thể truy cập nó (HTTP Authentication). Để thiết lập lại mật khẩu này, bạn chạy lệnh sau:
ee secure --auth
Lúc này nó sẽ hỏi bạn thiết lập lại username/mật khẩu, điền và ấn Enter để kết thúc.
Cuối cùng là truy cập vào trang công cụ quản trị bằng đường dẫn https://123.456.78.9:22222. Trong đó, 123.456.78.9 là IP của máy chủ bạn đang dùng. Bạn không cần quan tâm đến cảnh báo lỗi SSL/HTTPS mà cứ ấn bỏ qua và nhập username/mật khẩu bảo vệ vào.

Tại đây, bạn cứ di chuyển tới thư mục của công cụ cần sử dụng là được, phpMyAdmin nằm ở db/pma.
Cách chuyển website về máy chủ đang dùng EasyEngine
Do EasyEngine chúng ta không nên tự thêm domain thủ công mà sử dụng các lệnh của nó để thêm, cũng như tận dụng tối đa sức mạnh của nó nên quy trình chuyển website về có thể hơi rườm rà một xíu. Trước hết, để chuyển một website WordPress về máy chủ đang dùng EasyEngine Script, bạn hãy làm lần lượt các bước sau:
- Bước 1: Tạo website WordPres bằng lệnh của EasyEngine.
- Bước 2: Vào thư mục /var/www/example.com/htdocs và xóa toàn bộ file/folder trong đó.
- Bước 3: Tải source của website cần chuyển về, kèm theo database.
- Bước 4: Mở file /var/www/example.com/wp-config.php lên để xem thông tin database của website đã được tạo ra ở bước 1.
- Bước 5: Truy cập vào MySQL Server theo thông tin database đó bằng lệnhmysql -u [database username] -p. Sau đó xóa database bằng lệnhDROP DATABASE [tên database] và tạo lại một cái tên giống hệt vậy bằng lệnhCREATE DATABASE [tên database].
- Bước 6: Import database từ file .sql đã backup từ máy chủ cũ vào database trên máy chủ có EasyEngine bằng lệnh mysql -u [database username -p [tên database] < tên-file.sql.
- Bước 7: Kiểm tra file wp-config.php, phần $table_prefix xem tiền tố của database có trùng với database mà bạn vừa import vào không, vì có thể bạn đã đổi tiền tố database nhằm bảo mật.
- Bước 8. Chown lại thư mục /var/www/example.com cho user và group www-data với lệnhchown -R www-data:www-data /var/www/example.com.
- Bước 8: Trỏ domain về.
Mình chỉ cần bạn nhớ như vậy, nếu bạn chưa có kinh nghiệm việc chuyển dữ liệu từ website cũ về máy chủ thì hãy tạm tham khảo qua 2 clip của mình phía dưới. Mình sẽ có video riêng về việc chuyển website dành riêng cho EasyEngine.
Thiết lập sFTP riêng cho từng domain
Cách này vô cùng hữu dụng nếu bạn cần cho phép người khác có thể quản lý dữ liệu của từng domain, giống như WPNode đang làm ở gói host miễn phí của họ vậy đó. Cách làm hơi rườm rà một xíu nhưng làm riết sẽ quen thôi.
Trong hướng dẫn này, mình sẽ lấy ví dụ là tạo một user tên thachpham và nó sở hữu domain thachpham.dev trên máy chủ.
Bước 1. Tạo user
useradd -G www-data -ms /bin/false thachpham
Đừng quên thiết lập mật khẩu cho nó.
passwd thachpham
Bước 2. Tạo thư mục trong /home
Như ở bài quản lý user & sudo mình có nói rằng, mặc định trên Linux nó sẽ có một thư mục được tạo ra mang tên user nằm trong /home. Và ở đây cũng vậy, mình đã tạo user tên thachpham thì bây giờ mình đã có một thư mục là /home/thachpham.
Nhưng ở đây, mình sẽ cần tạo thêm một thư mục tên domain cần quản trị để tránh cấp quyền cho user vào thư mục /var vì khá nhạy cảm.
mkdir -p /home/thachpham/thachpham.dev/htdocs
Bước 3. Phân quyền cho từng thư mục
chown thachpham:www-data /home/thachpham/thachpham.dev/htdocschown root:root /home/thachpham/
chown root:root /home/
Giải nghĩa:
- Thư mục /home/thachpham/thachpham.dev/htdocs sẽ được sở hữu bởi user thachpham và group www-data.
- Thư mục /home/thachpham/ sẽ được sở hữu bởi user root và group root.
- Thư mục /home/ sẽ được sở hữu bởi user root và group root.
Bước 4. Thiết lập sFTP
Bạn hãy mở file /etc/ssh/sshd_config và tìm:
Subsystem sftp /usr/lib/openssh/sftp-server
thay thành
Subsystem sftp internal-sftp
Đồng thời chèn mấy đoạn dưới đây vào cuối file đó:
Match group www-dataX11Forwarding no
ChrootDirectory %h
AllowTcpForwarding no
ForceCommand internal-sftp
Cuối cùng là khởi động lại SSH.
service ssh restart
Bước 5. CHMOD lại thư mục chứa web
chmod g+s /var/www/thachpham.dev/htdocs/chmod 775 /var/www/thachpham.dev/htdocs
Bước 6. Mount thư mục chứa web gốc vào thư mục của user
mount --bind /var/www/thachpham.dev/htdocs /home/thachpham/thachpham.dev/htdocs
Bạn lưu ý rằng, sau khi mount xong thì dù bạn có chép dữ liệu vào /home/thachpham/thachpham.dev/htdocs hay /var/www/thachpham.dev/htdocs đều như nhau cả.
Xong, bây giờ hãy thử sử dụng một phần mềm kết nối vào sFTP như WinSCP hay FileZilla và kết nối vào máy chủ của bạn với user mà bạn vừa tạo ra thì sẽ thấy bạn đã có quyền sửa file trong domain mà bạn sở hữu rồi đó.
Cài đặt phpMyAdmin
Ở phiên bản mới, EasyEngine mặc định không có cài sẵn phpMyAdmin mà bạn sẽ cần tự cài thông qua một lệnh có sẵn của nó. Để cài đặt phpMyAdmin, bạn sử dụng lệnh sau:
ee stack install --phpmyadmin
Sau đó truy cập vào phpMyAdmin với đường dẫn https://IP-của-bạn:22222/db/pma