Tạo bash script cài đặt cho bibica.net

Trước đây thi thoảng mình có dùng CyberPanel, lý do chủ yếu nhất là trên CyberPanel config các thứ khá nhanh, không phải cấu hình Nginx, các headers sạch sẽ, cụ thể bạn có thể xem bài cấu hình ở năm 2022, dùng Nginx các lệnh chi chít luôn 😀

Dạo này mình dùng lại Webinoly, tiện thể viết 1 bash script đơn giản, nó cứ chạy tuần tự các lệnh từ trên xuống 😀 thay vì bạn phải gõ từng dòng lệnh, phải chờ chạy xong mới gõ dòng tiếp theo, thì giờ đỡ phải chờ, sau này chuyển VPS, restore lại bibica.net chỉ cần gõ 1-2 dòng code là xong 😀 vừa nhanh vừa đỡ quên 😛

Về các dòng code thì mình nghĩ đơn giản nhất bạn cứ viết ở github, chỉnh sửa gì nó có log lưu lại, không lo sập 😀

Mình sẽ viết theo quan điểm người đọc cũng giống mình, nghĩa là không biết bất cứ 1 dòng code hay ngôn ngữ lập trình nào hết 😀 mọi thứ mình viết trong bài, đều là vướng ở đâu thì …. google ở đó 😛

Cụ thể file setup.sh của thèng bibica.net nội dung như sau:

#!/bin/bash
# setup Webinoly php 7.4
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/Webinoly-Optimization/master/webinoly74.sh -O webinoly_mod.sh && sudo chmod +x webinoly_mod.sh && sudo ./webinoly_mod.sh
# setup wp-cli
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
# setup rclone
sudo -v ; curl https://rclone.org/install.sh | sudo bash
# setup crontab cho wp_cron and simply-static
mkdir -p /var/www/bibica.net/static-files-temp
chmod 777 /var/www/bibica.net/static-files-temp
crontab -l > simply-static
echo "0 3 * * * /usr/local/bin/wp --path='/var/www/bibica.net/htdocs' simply-static run --allow-root" >> simply-static
echo "*/1 * * * * curl https://bibica.net/wp-cron.php?doing_wp_cron > /dev/null 2>&1" >> simply-static
crontab simply-static
# setup wordpress bibica.net and off httpauth
sudo site bibica.net -wp
sudo httpauth bibica.net -wp-admin=off
# setup proxy api.bibica.net
sudo site api.bibica.net -proxy=[https://api.bibica.net/] -dedicated-reverse-proxy=simple
# setup ssl
mkdir -p /root/ssl
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/bibica.net.pem -O /root/ssl/bibica.net.pem
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/bibica.net.key -O /root/ssl/bibica.net.key
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/bibica.net.crt -O /root/ssl/bibica.net.crt
# setup ssl for bibica.net and api.bibica.net
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/bibica.net -O /etc/nginx/sites-available/bibica.net
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/api.bibica.net -O //etc/nginx/sites-available/api.bibica.net
# nginx reload
nginx -t
sudo service nginx reload
# mariadb config
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/my.cnf -O /etc/mysql/my.cnf
sudo service mysql restart
# delete all file in foder htdocs
cd /var/www/bibica.net/htdocs
rm -rf *

Nội dung chú thích thì bạn có thể dùng dấu # đằng trước, sau đó ghi chú để nhớ

Dòng đầu tiên của bash script sẽ là

#!/bin/bash

Dòng tiếp theo là cài đặt Webinoly

# setup Webinoly php 7.4
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/Webinoly-Optimization/master/webinoly74.sh -O webinoly_mod.sh && sudo chmod +x webinoly_mod.sh && sudo ./webinoly_mod.sh

Tiếp theo là cài đặt WP-CLI, Rclone

# setup wp-cli
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
# setup rclone
sudo -v ; curl https://rclone.org/install.sh | sudo bash

Tiếp theo là cài đặt crontab

# setup crontab cho wp_cron and simply-static
mkdir -p /var/www/bibica.net/static-files-temp
chmod 777 /var/www/bibica.net/static-files-temp
crontab -l > simply-static
echo "0 3 * * * /usr/local/bin/wp --path='/var/www/bibica.net/htdocs' simply-static run --allow-root" >> simply-static
echo "*/1 * * * * curl https://bibica.net/wp-cron.php?doing_wp_cron > /dev/null 2>&1" >> simply-static
crontab simply-static

Thường khi ở root, mình hay gõ crontab -e, sau đó điền các dòng vào, nhưng ở set chạy tự động, phải thông qua việc đặt tên 1 crontab mới, sau đó echo từng dòng vào, sau đó chạy crontab tab

Cụ thể nhất, trên Wordpress set chạy wp_cron thì bạn dùng 3 dòng như bên dưới

crontab -l > simply-static
echo "*/1 * * * * curl https://bibica.net/wp-cron.php?doing_wp_cron > /dev/null 2>&1" >> simply-static
crontab simply-static

Mình dùng thêm Simply Static Pro để cứ 3h sáng, tự chạy tạo trang tĩnh qua WP-CLI, mà do thư mục mình set static-files-temp, nó nằm ngoài thư mục root của Wordpress, khi vừa cài mới vào, Simply Static Pro không thể tự tạo thư mục static-files-temp và phân quyền được, nên cần tạo riêng

mkdir -p /var/www/bibica.net/static-files-temp
chmod 777 /var/www/bibica.net/static-files-temp

2 dòng bên trên là để tạo thư mục static-files-temp sau đó chmod thành 777

Nhìn khá dễ hiểu đúng không 😀

Tiếp theo là cài đặt Wordpress và tắt httpauth trên bibica.net

# setup wordpress bibica.net and off httpauth
sudo site bibica.net -wp
sudo httpauth bibica.net -wp-admin=off

2 dòng này thì là lệnh của Webinoly, bạn dùng các script khác thì điền code của script đó vào

Tiếp theo là cài đặt proxy cho subdomain api.bibica.net

# setup proxy api.bibica.net
sudo site api.bibica.net -proxy=[https://api.bibica.net/] -dedicated-reverse-proxy=simple

Tiếp theo là sử lý vấn đề ssl

# setup ssl
mkdir -p /root/ssl
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/bibica.net.pem -O /root/ssl/bibica.net.pem
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/bibica.net.key -O /root/ssl/bibica.net.key
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/bibica.net.crt -O /root/ssl/bibica.net.crt

Mình dùng ssl của Cloudflare, mỗi lần đổi VPS là sẽ phải upload file .pem .key .crt lên VPS mới

Cụ thể thì dòng 1 sẽ tạo thư mục ssl trong root

Sau đó wget kéo cái file vào /root/ssl/ đặt thành 1 tên cụ thể

sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/bibica.net.pem -O /root/ssl/bibica.net.pem

Cụ thể như đoạn code trên là kéo file bibica.net.pem từ githubusercontent.com vào /root/ssl/ sau đó đặt tên mới là bibica.net.pem

Sau đó sẽ tích hợp ssl vào 2 domain đang dùng là bibica.net và api.bibica.net

# setup ssl for bibica.net and api.bibica.net
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/bibica.net -O /etc/nginx/sites-available/bibica.net
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/api.bibica.net -O //etc/nginx/sites-available/api.bibica.net

Bóp trán si nghĩ, thấy đoạn code thêm vào nếu dùng ssl khá lằng nhằng, chưa kể các đoạn code khi dùng proxy cho api.bibica.net vị trí điền cũng khó

Nên thôi, dùng cục súc nhất, là vào trang cũ, chép 2 file cấu hình của bibica.net và api.bibica.net cho lên github, sau đó wget chép đè vào file có sẵn 😀

Xong thì reload hoặc restart lại nginx

# nginx reload
nginx -t
sudo service nginx reload

Cấu hình 1 chút ở mysql

# mariadb config
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/my.cnf -O /etc/mysql/my.cnf
sudo service mysql restart

Tiếp tục dùng mưu hèn kế bẩn, kéo file đã cấu hình sẵn, ghi đè vào my.cnf, sau đó khởi động lại mysql

Việc restore thì 5-6 năm nay mình vẫn dùng Duplicator Pro, upload 2 file archive.zip và installer.php vào thư mục root của wordpress là xong

Để tránh các file rác, thì vào thư mục htdocs chạy rm -rf * để xóa tất cả các file và thư mục bên trong

# delete all file in foder htdocs
cd /var/www/bibica.net/htdocs
rm -rf *

Cụ thể trên github, tổng cộng các file mình cấu hình mình cho vào sẽ như ảnh bên dưới

2023-06-29_20-53-32

Bash script này nó chỉ thiếu công đoạn upload 2 file archive.zip và installer.php vào thư mục /var/www/bibica.net/htdocs, phải upload bằng tay, thực tế thì bản thân mình cũng phải lựa chọn bản backup ngày nào để restore, nên bước này làm tay cũng ổn 😀

Để chạy file setup.sh trên VPS thì cấu trúc cơ bản như bên dưới

sudo wget https://domain.com/setup.sh && sudo chmod +x setup.sh.sh && sudo ./setup.sh.sh

wget file setup.sh về, sau đó chmod để nó có quyền chạy, rồi chạy bằng cách ./ đằng trước tên file

Webserver + remote + proxy trên 2 VM Oracle FREE

Cá nhân thì mình rất không thích chuyện tách webserver và database ra 2 nơi khác nhau vì phải cấu hình nhiều hơn và thường tốc độ cũng không nhanh bằng dùng localhost chưa kể các vấn đề liên quan tới bảo mật cũng kém hơn =))

Chủ yếu do VM Oracle Always Free phần cứng rất yếu, chạy 1 con cứ có cảm giác muốn sập tới nơi, mà chạy 2 con thì lại rất là ổn định 😀 sau khi dùng 2 tuần không thấy vấn đề gì, nên mình cố gắng tạo bash script cho cấu hình này luôn

Đây là combo mình đang sử dụng, cụ thể trang bibica.net sẽ là trang chính, cài đặt Nginx và PHP

Trang api.bibica.net là trang proxy ảnh và chứa database, cài đặt Nginx và Mysql

Việc tạo bash script cho 2 VPS cùng lúc về tương tự như cấu hình 1 VPS, có điều hơi mất thời gian một chút, vì khá dễ nhầm, chưa kể các câu lệnh từ Webinoly sẽ hơi khác một chút  😀

  • Remote server và proxy
#!/bin/bash
sudo apt remove iptables-persistent -y
sudo ufw disable
sudo iptables -F
locale-gen en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
sudo apt update -y
sudo apt install zip -y
sudo apt install unzip -y
sudo apt install htop -y
sudo apt install screen -y
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/webinoly/master/weby -O weby && sudo chmod +x weby && sudo ./weby -clean
sudo rm /opt/webinoly/webinoly.conf
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/Webinoly-Optimization/master/webinoly_php74.conf -O /opt/webinoly/webinoly.conf
sudo stack -mysql -build=light
sudo stack -nginx -build=light
# setup proxy api.bibica.net
sudo site api.bibica.net -proxy=[https://api.bibica.net/] -dedicated-reverse-proxy=simple
# setup ssl
mkdir -p /root/ssl
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/bibica.net.pem -O /root/ssl/bibica.net.pem
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/bibica.net.key -O /root/ssl/bibica.net.key
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/bibica.net.crt -O /root/ssl/bibica.net.crt
# setup ssl for bibica.net and api.bibica.net
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/api.bibica.net -O //etc/nginx/sites-available/api.bibica.net
# nginx reload
nginx -t
sudo service nginx reload
# mariadb config
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/my.cnf -O /etc/mysql/my.cnf
sudo service mysql restart
sudo webinoly -mysql-public-access=on -create-master-user=[masteruser,abcdefgh]
sudo site -mysql -external-db=[masteruser,abcdefgh]

Chạy xong ở remote server sẽ tự tạo ra 1 database mới để dùng

  • Webserver
#!/bin/bash
# setup Webinoly
sudo apt remove iptables-persistent -y
sudo ufw disable
sudo iptables -F
locale-gen en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
sudo apt update -y
sudo apt install zip -y
sudo apt install unzip -y
sudo apt install htop -y
sudo apt install screen -y
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/webinoly/master/weby -O weby && sudo chmod +x weby && sudo ./weby -clean
sudo rm /opt/webinoly/webinoly.conf
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/Webinoly-Optimization/master/webinoly_php74.conf -O /opt/webinoly/webinoly.conf
sudo stack -nginx -build=light
sudo stack -php -build=light
sudo apt update && sudo apt upgrade -y
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/Webinoly-Optimization/master/php.ini -O /etc/php/7.4/fpm/php.ini
sudo service php7.4-fpm restart
# setup wp-cli
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
# setup rclone
curl https://rclone.org/install.sh | sudo bash
# setup crontab cho wp_cron and simply-static
mkdir -p /var/www/bibica.net/static-files-temp
chmod 777 /var/www/bibica.net/static-files-temp
crontab -l > simply-static
echo "0 3 * * * /usr/local/bin/wp --path='/var/www/bibica.net/htdocs' simply-static run --allow-root" >> simply-static
echo "*/1 * * * * curl https://bibica.net/wp-cron.php?doing_wp_cron > /dev/null 2>&1" >> simply-static
crontab simply-static
# setup wordpress bibica.net and off httpauth
sudo site bibica.net -php

# setup ssl
mkdir -p /root/ssl
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/bibica.net.pem -O /root/ssl/bibica.net.pem
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/bibica.net.key -O /root/ssl/bibica.net.key
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/bibica.net.crt -O /root/ssl/bibica.net.crt
# setup ssl for bibica.net
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/bibica.net -O /etc/nginx/sites-available/bibica.net
# nginx reload
nginx -t
sudo service nginx reload
# go to root bibica.net
cd /var/www/bibica.net/htdocs

Oracle 24GB RAM cho bibica.net, api.bibica.net, warp-up-cache

Đây là bash script hiện tại mình đang sử dụng cho thèng bibica.net

Cấu hình cụ thể bao gồm 3 VM tại Home Region US West (San Jose), đã set sẵn bypsas các rule của Cloudflare cho phù hợp từng VM riêng

  • bibica.net sẽ chạy trên VM.Standard.A1.Flex 4 core 24 GB RAM 100 GB HDD
  • api.bibica.net sẽ chạy trên VM.Standard.E2.1.Micro 2 core 1 GB RAM 50 GB HDD
  • warp-up-cache sẽ chạy trên VM.Standard.E2.1.Micro 2 core 1 GB RAM 50 GB HDD
Setup bibica.net
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/bibica.net/main/stable.sh -O webinoly_oracle.sh && sudo chmod +x webinoly_oracle.sh && sudo ./webinoly_oracle.sh

Restore bằng Duplicator Pro, upload archive.zip và installer.php vào (có thể sử dụng wget cho nhanh)

/var/www/bibica.net/htdocs

Đổi 2 domain bên dưới về IP mới

bibica.net
www.bibica.net

Chạy file installer.php để restore

Setup api.bibica.net
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/Webinoly-Reverse-Proxy/main/setup.sh -O webinoly_reverse_proxy.sh && sudo chmod +x webinoly_reverse_proxy.sh && sudo ./webinoly_reverse_proxy.sh

Đổi domain bên dưới về IP mới

api.bibica.net
Setup warp-up-cache
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/Warm-Up-Cache/main/setup.sh -O warm_up.sh && sudo chmod +x warm_up.sh && sudo ./warm_up.sh

Do phần cứng của combo này quá mạnh, gấp 10-20 lần so với nhu cầu thèng bibica.net cần 😀 vấn đề hiệu năng không cần bàn tới nữa, chủ yếu nhất là hướng tới tính ổn định, cố gắng đạt uptime tốt nhất có thể (Oracle họ có thông báo về vấn đề bảo trì hệ thống định kì, mỗi cái không rõ họ có tự reboot lại VM không? gặp quả này thì …. chịu vậy 😀 dù rằng trên vài con VPS khác mình từng dùng trong khoảng 6 tháng qua thì không thấy vụ này)

Không quá tối ưu về cấu hình cho PHP và Mysql, mỗi cái RAM thừa mứa quá thì cấu hình sao cũng vẫn thừa 😀

Trước đây mỗi lần chuyển VPS, phải upload các file ssl, copy paste các lệnh khá ngu người 😛 giờ khi cần restore thì cứ vào thẳng github, copy vài dòng lệnh bên trên vào là xong, mọi thứ đã được cấu hình sẵn, không lo làm sót hay nhầm 😀

Comment policy: We love comments and appreciate the time that readers spend to share ideas and give feedback.
Notes: However, those deemed to be spam or solely promotional will be deleted.

You can create a Gravatar account, add avatar, then use that email to comment here, your account will have a more beautiful Avatar, easier to recognize with other members.

Please use real emails, you can receive notifications when comments are replied