Trang chủ » Kiến thức

Quy trình build VPS chuẩn

Cấu hình yêu cầu:

  • Cent OS 7 64bit (Without SElinux)
  • PHP 7.3 : Ưu tiên dùng 7.3 để có thể cài đặt được module ionCube Loader theo hướng dẫn (Hiện tại ionCube Loader đã hỗ trợ PHP 7.4)

Đây là module php sử dụng cho plugin review sản phẩm sử dụng cho moneysite.

Quy trình build:

Bước 1: Test tốc độ VPS có đảm bảo chất lượng không bằng việc sử dụng dòng lệnh:

curl -Lso- tocdo.net | bash

Các chỉ số chính cần xem:

Bước 2: Cài đặt VPS với hocvps chọn php 7.3 sử dụng dòng lệnh:

curl -sO https://hocvps.com/install && bash install

Lưu ý: Sau khi cài đặt xong thì truy cập VPS qua port 2222, tra cứu thông tin truy cập các phần mở rộng qua file hocvps-script.txt ở thư mục gốc (Sử dụng lệnh ls sau khi cd

Bước 3: Cài các phần mở rộng php phục vụ cho MoneySite và CRM, SMA.

Nếu chỉ sử dụng VPS cho PBN thì có thể bỏ qua bước này

PHP IMAP – Phục vụ cho SMA

yum install php-imap
service php-fpm restart

ionCube Loader

Sử dụng lần lượt từng dòng lệnh sau để cài đặt (áp dụng cho Cent OS 64bit)

cd /tmp
wget http://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
tar xfz ioncube_loaders_lin_x86-64.tar.gz

Tiếp theo cần lựa chọn phiên bản ionCube Loader

ls /tmp/ioncube

Sẽ thấy xuất hiện nhiều phiên bản có đuôi tương ứng với phiên bản PHP đang sử dụng

Ví dụ: ioncube_loader_lin_7.3.so – Đây là phiên bản dùng cho PHP 7.3

Tìm kiếm thư mục chứa thư viện mở rộng của PHP

php -i | grep extension_dir

Kết quả trả về có thể như sau:

extension_dir => /usr/lib64/php/modules => /usr/lib64/php/modules
sqlite3.extension_dir => no value => no value

Cuối cùng: Cần đưa phiên bản ionCube Loader về thư mục chứa thư viện mở rộng của PHP bằng dòng lệnh

cp /tmp/ioncube/ioncube_loader_lin_7.3.so /usr/lib64/php/modules

Mở file cấu hình PHP

nano /etc/php.ini

Thêm đoạn sau vào cuối file

[ionCube Loader]
 zend_extension = /usr/lib64/php/modules/ioncube_loader_lin_7.3.so

Khởi động lại service

service php-fpm restart
service nginx restart

Nếu không có vấn đề gì xảy ra, khi sử dụng lệnh php -v bạn sẽ thấy thêm một dòng ionCube PHP Loader xuất hiện bên dưới.

PHP 7.3.20 (cli) (built: Jul  7 2020 07:53:49) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.20, Copyright (c) 1998-2018 Zend Technologies
    with the ionCube PHP Loader + ionCube24 v10.4.1, Copyright (c) 2002-2020, by ionCube Ltd.
    with Zend OPcache v7.3.20, Copyright (c) 1999-2018, by Zend Technologies

Imagick Extension (Phần mở rộng theo yêu cầu của WordPress)

yum install ImageMagick ImageMagick-devel

yum install gcc make automake php-pear php-devel

pecl install imagick

Tiếp tục phân quyền

cd /usr/lib64/php/modules/

chmod 755 imagick.so

Cấu hình php.ini

echo extension=imagick.so >> /etc/php.ini

Khởi động lại PHP-FPM

systemctl restart php-fpm.service

Kiểm tra

php -m | grep imagick

Xuất hiện kết quả: imagick là thành công

Tạo SWAP cho VPS

sudo dd if=/dev/zero of=/swapfile bs=1024 count=4096k
  • Lệnh trên sẽ tạo một SWAP có dung lượng: 4GB
  • SWAP tối đa chỉ nên gấp đôi RAM vật lý
sudo dd if=/dev/zero of=/swapfile bs=1024 count=2048k
  • Lệnh trên sẽ tạo một SWAP có dung lượng: 2GB

Phân vùng SWAP

mkswap /swapfile

Kích hoạt SWAP

swapon /swapfile

Kiểm tra kích hoạt SWAP

swapon -s

Thiết lập SWAP tự động được kích hoạt mỗi khi VPS khởi động lại

echo /swapfile none swap defaults 0 0 >> /etc/fstab

Bảo mật SWAP bằng CHMOD

chown root:root /swapfile
chmod 0600 /swapfile

Cấu hình Swappiness

sysctl vm.swappiness=10

Sửa file swap

nano /etc/sysctl.conf

Thêm dòng sau vào cuối nếu chưa có, nếu có rồi thì update lại giá trị:

vm.swappiness = 10

Lưu ý:
Với CentOS 7 có thể tune profile sẽ overwrite vm.swappiness mỗi lần reboot, bạn cần kiểm tra profile nào đang overwrite để cấu hình lại thủ công.

grep vm.swappiness /usr/lib/tuned/*/tuned.conf

Output có thể như sau:

[root@vultr ~]# grep vm.swappiness /usr/lib/tuned/*/tuned.conf
/usr/lib/tuned/latency-performance/tuned.conf:vm.swappiness=10
/usr/lib/tuned/throughput-performance/tuned.conf:vm.swappiness=10
/usr/lib/tuned/virtual-guest/tuned.conf:vm.swappiness = 30

Lúc này

nano /usr/lib/tuned/virtual-guest/tuned.conf

tìm vm.swappiness và thay đổi vm.swappiness = 30 thành vm.swappiness = 10.

Cấu hình PHP Zend OPcache

Kiểm tra số lượng file chạy ở thư mục home của VPS

cd /home
find . -type f -print | grep php | wc -l

Dựa trên số lượng file tìm được, cấu hình file trong OPcache tương ứng: 7963, 16229, 32531, 65407, 130987

nano /etc/php.d/10-opcache.ini

Các thông tin cần chỉnh

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=4000
opcache.max_wasted_percentage=5
opcache.use_cwd=1
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.blacklist_filename=/etc/php.d/opcache-default.blacklist  

Tăng hoặc giảm bộ nhớ làm sao giữ cho memory usage <= 70% là ổn, bộ nhớ còn trống sẽ được dùng cho các việc khác.

Cài đặt và cấu hình Memcached

yum install memcached

Cấu hình Memcached

nano /etc/sysconfig/memcached

Thông số quan trọng nhất bạn cần lưu ý đó là CACHESIZE, đơn vị tính là MB và MAXCONN. Ví dụ như bên dưới mình sử dụng 256MB để cache (mặc định 64MB). OPTIONS cấu hình bảo mật chỉ cho local connect được tới port 11211 mà thôi.

PORT="11211"
USER="memcached"
MAXCONN="10240"
CACHESIZE="256"
OPTIONS="-l 127.0.0.1 -U 0"

Khởi động Memcached

chkconfig memcached on
service memcached start

Cài đặt Memcached PHP Module
Để Memcached có thể hoạt động được với PHP, chúng ta cần cài đặt thêm PHP module tương ứng với phiên bản PHP đang sử dụng.

yum –enablerepo=remi,remi-php73 install php-pecl-memcached php-pecl-memcache

Cuối cùng khởi động PHP và web server

service php-fpm restart
service nginx restart

Nếu không dùng nữa và muốn xóa hoàn toàn Memcached khỏi server, bạn hãy chạy lệnh bên dưới:

yum remove memcached php-pecl-memcached php-pecl-memcache
service php-fpm restart
service nginx restart

Sau đó tìm và cài đặt các plugin có hỗ trợ Memcached như: W3 Total Cache

Sau khi cài đặt xong plugin, các bạn hãy kích hoạt Page Cache, Database cache và Object Cache sử dụng method là Memcached. Ngoài ra, cũng cần kích hoạt Browser Cache và CDN nếu có thể.

Để tiếp tục tối ưu hơn hãy đọc các bài viết về cài đặt và cấu hình Varnish cho VPS

Bước 5: Tối ưu SSL cho VPS

Tạo thư mục chứ chứng chỉ

mkdir -p /etc/nginx/ssl/

Tạo file dhparam một lần duy nhất cho vps

openssl dhparam 2048 -out /etc/nginx/ssl/dhparam.pem

Trường hợp sử dụng CDN và SSL Cloudflare

Sử dụng CDN của Cloudfare là bật đám mây màu vàng trong phần quản trị DNS của các bản ghi phù hợp.

SSL của Cloudflare được tạo miễn phí trong phần quản trị domain. Khi tạo xong sẽ có 2 file ssl-bundle.crtprivate.key hiện tại đã được lưu riêng cho từng domian PBN

Tạo thư mục chứa file chứng chỉ (Lưu ý thay domain tương ứng)

mkdir -p /etc/nginx/ssl/tuhoctainha_com/ && cd /etc/nginx/ssl/tuhoctainha_com/

Lưu nội dung file chứng chỉ ở thư mục này, copy/paste dùng nano

nano ssl-bundle.crt
nano private.key

Chỉnh sửa cấu hình Nginx domain với Nano Editor. Lưu ý: thay domain tương ứng

nano /etc/nginx/conf.d/tuhoctainha.com.conf

Kiểm tra lại cấu hình Nginx xem đã chuẩn chưa

nginx -t

Reload lại Nginx  đối với CentOS7

systemctl restart nginx.service

Trường hợp không sử dụng CDN và SSL Cloudflare (Thường áp dụng cho MoneySite kết hợp kèm CRM, SMA)

Nếu không sử dụng SSL cloudflare thì

Sử dụng SSL trả phí – Thường mua của NameCheap. Cấu hình tương tự như trên

Sử dụng SSL miễn phí – Let’s Encrypt Wildcard (Loại hỗ trợ cả tên miền phụ)

Cài đặt Let’s Encrypt (Nếu máy chủ đã cài có thể bỏ qua)

yum -y install git && git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Cập nhật Cerbot phiên bản mới nhất

Chạy 02 lệnh sau:

cd /opt/letsencrypt
./certbot-auto --version

Kích hoạt chứng chỉ Let’s Encrypt Wildcard SSL

cd /opt/letsencrypt
./certbot-auto certonly --server https://acme-v02.api.letsencrypt.org/directory --manual --preferred-challenges dns -d tenmiencuaban.com -d *.tenmiencuaban.com

Lưu ý: Nếu gia hạn tự động và thủ công không được thì sử dụng lệnh này để gia hạn lại với cách phải cập nhật lại bản ghi TXT cho domain

Điền email

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): emailcuaban@gmail.com
-------------------------------------------------------------------------------

Cấu hình trả lời như sau

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A
-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: N
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for tenmiencuaban.com
dns-01 challenge for tenmiencuaban.com
-------------------------------------------------------------------------------
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.
Are you OK with your IP being logged?
-------------------------------------------------------------------------------
(Y)es/(N)o: Y
-------------------------------------------------------------------------------

Cấu hình TXT record. Lưu ý kích hoạt từng cái một và sử dụng TXT Lookup để kiểm tra bản ghi đã nhận hay chưa

Please deploy a DNS TXT record under the name
_acme-challenge.tenmiencuaban.com with the following value:
5am86r64Bbx0cd1rCT2NapwNGsVLQkInx73WgM4vp-w
Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue
-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.tenmiencuaban.com with the following value:
dWY-f4K22BSI1DEOqnfJ-v0TXPgcaXLhsKx7lAgRLNs
Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue

Nếu không có vấn đề gì xảy ra, bạn xe nhận được thông báo chúc mừng Congratulations! như bên dưới:

Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/tenmiencuaban.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/tenmiencuaban.com/privkey.pem
   Your cert will expire on 2020-06-16. To obtain a new or tweaked
   version of this certificate in the future, simply run
   certbot-auto again. To non-interactively renew *all* of your
   certificates, run "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Kiểm tra nội dung chứng chỉ

./certbot-auto certificates

Kết quả nhận được như sau là thành công

Saving debug log to /var/log/letsencrypt/letsencrypt.log
-------------------------------------------------------------------------------
Found the following certs:
Certificate Name: tenmiencuaban.com
    Domains: tenmiencuaban.com *.tenmiencuaban.com
    Expiry Date: 2020-06-16 14:51:20+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/tenmiencuaban.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/tenmiencuaban.com/privkey.pem
-------------------------------------------------------------------------------

Cấu hình Nginx

Chúng ta sẽ dùng hai đường link bôi đỏ bên trên để hoàn thiện tiếp việc cấu hình Nginx

Gia hạn chứng chỉ

Sử dụng lệnh sau:

whereis service

Kết quả trả về sẽ có thể có nhiều dạng khác nhau, ví dụ:

service: /usr/sbin/service /usr/share/man/man8/service.8.gz
service: /sbin/service

Gia hạn chứng chỉ thủ công

Ví dụ, khi là /sbin/service thì câu lệnh chạy như sau:

 /opt/letsencrypt/certbot-auto renew --pre-hook "/sbin/service nginx stop" --post-hook "/sbin/service nginx start"

Đối với sever /usr/sbin/service thì chạy câu lệnh thông thường như sau:

/opt/letsencrypt/certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start"

Tạo crontab tự động gia hạn chứng chỉ

Ví dụ, khi là /sbin/service thì câu lệnh chèn vào crontab sẽ như sau:

30 2 * * * /opt/letsencrypt/certbot-auto renew --pre-hook "/sbin/service nginx stop" --post-hook "/sbin/service nginx start" >> /var/log/le-renew.log

Đối với các server bình thường như ở Vultr thì sẽ như sau:

30 2 * * * /opt/letsencrypt/certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start" >> /var/log/le-renew.log

Sử dụng lệnh sau để mở cron file

EDITOR=nano crontab -e

Copy câu lệnh trên, Nhấn Ctrl+O, Enter để lưu và Ctrl+X để thoát. Bạn nhận được thông báo sau là thành công

crontab: installing new crontab
Viết một bình luận

Giúp Bạn Làm Marketing Và Kinh Doanh Tốt Hơn

Đăng ký ngay hôm nay để nhận những nội dung đầy giá trị trong hộp thư đến của bạn. Một đến hai lần mỗi tháng.

Hoàn toàn miễn phí. Cam kết không spam. Bảo mật thông tin vĩnh viễn.