Bash script block 02: Kiểm tra trước môi trường của server

Block 02 phục vụ mục đích kiểm tra trước môi trường của người dùng, bao gồm quyền của user & VPS có phải đang ở trạng thái OS sạch (clean OS) không, tức là chưa cài gì ngoài Ubuntu LTS mặc định.

echo "--------------------------------------------------"
echo "Dang kiem tra moi truong VPS (Clean OS Check)..."
echo "--------------------------------------------------"

# --- BƯỚC 1: KIỂM TRA QUYỀN ROOT ---
# Bắt buộc phải chạy bằng root để cài đặt phần mềm
if [[ $EUID -ne 0 ]]; then
   echo -e "${RED}Loi: Ban phai chay script nay bang quyen Root.${NC}"
   echo -e "Vui long vao terminal voi quyen Root, sau do chay lai lenh."
   exit 1
fi

# --- BƯỚC 2: KIỂM TRA CỔNG 80 (Dùng lệnh ss) ---
# Mục đích: Phát hiện Nginx, Apache, OpenLiteSpeed hoặc bất kỳ Web Server nào đang chạy.
# ss -tuln: Hien thi TCP/UDP, Listening, Numeric ports
# grep -q ":80 ": Tim chuoi ":80 " (co dau cach de tranh nham voi 8080)
if ss -tuln | grep -q ":80 "; then
    echo -e "${RED}[X] LOI NGHIEM TRONG: Cong 80 (HTTP) dang ban!${NC}"
    echo -e "${YELLOW}Nguyen nhan:${NC} VPS nay dang chay mot Web Server nao do (Caddy, Nginx, Apache, hoac Docker...)."
    echo -e "${YELLOW}Giai phap:${NC} Vui long su dung mot VPS moi tinh (Clean OS) de tranh xung dot va loi he thong."
    echo -e "Script da dung lai de bao ve VPS cua ban."
    exit 1
fi

# --- BƯỚC 3: KIỂM TRA USER "CADDY" ---
# Mục đích: Phát hiện tàn dư của Caddy cũ (dù đã tắt nhưng còn config rác).
if id "caddy" &>/dev/null; then
    echo -e "${RED}[X] LOI: User 'caddy' da ton tai.${NC}"
    echo -e "${YELLOW}Nguyen nhan:${NC} VPS nay da tung duoc cai dat Caddy Web Server truoc day."
    echo -e "${YELLOW}Giai phap:${NC} De dam bao on dinh, vui long Reinstall OS (Cai lai he dieu hanh) ve trang thai ban dau."
    exit 1
fi

# --- NẾU VƯỢT QUA TẤT CẢ ---
echo -e "${GREEN}[OK] Kiem tra hoan tat. Moi truong sach se.${NC}"
echo "Dang bat dau qua trinh cai dat..."
sleep 2

a. Thông báo

echo "--------------------------------------------------"
echo "Dang kiem tra moi truong VPS (Clean OS Check)..."
echo "--------------------------------------------------"

Đơn giản in ra màn hình dòng thông báo để cho người dùng biết là bash đang tiến hành kiểm tra OS.

b. Kiểm tra quyền root

# --- BƯỚC 1: KIỂM TRA QUYỀN ROOT ---
# Bắt buộc phải chạy bằng root để cài đặt phần mềm
if [[ $EUID -ne 0 ]]; then
   echo -e "${RED}Loi: Ban phai chay script nay bang quyen Root.${NC}"
   echo -e "Vui long vao terminal voi quyen Root, sau do chay lai lenh."
   exit 1
fi

Với bash này mục đích là để cài Caddy Web Server rồi cài tiếp WordPress trên nền đó, nên nó cần quyền root để thực thi. Do vậy ở phần đầu của bash sẽ tiến hành kiểm tra quyền này trước.

  • if then fi: câu lệnh điều kiện, fi là để kết thúc lệnh điều kiện.
  • $EUID: biến môi trường chứa số ID của người dùng hiện tại (Effective User ID). Root, người dùng cao nhất có ID là 0
  • -ne: viết tắt của not equal, nghĩa là không bằng, tóm tắt if [[ $EUID -ne 0 ]] nghĩa là nếu ID của người dùng hiện tại khác 0 (không phải root)
  • ${RED}Loi: Ban phai chay script nay bang quyen Root.${NC}: đưa ra thông báo với dòng chữ màu đỏ báo cần phải dùng quyền root.
  • exit 1: rất quan trọng, nó là lệnh để dừng chương trình.

c. Kiểm tra cổng 80

if ss -tuln | grep -q ":80 "; then
    echo -e "${RED}[X] LOI NGHIEM TRONG: Cong 80 (HTTP) dang ban!${NC}"
    echo -e "${YELLOW}Nguyen nhan:${NC} VPS nay dang chay mot Web Server nao do (Caddy, Nginx, Apache, hoac Docker...)."
    echo -e "${YELLOW}Giai phap:${NC} Vui long su dung mot VPS moi tinh (Clean OS) de tranh xung dot va loi he thong."
    echo -e "Script da dung lai de bao ve VPS cua ban."
    exit 1
fi

Cái này dùng để phòng tránh chạy script trên server đã cài dịch vụ web nào đó, chẳng hạn như nginx, apache, caddy,… Tóm lại đã cài rồi thì cổng 80 sẽ bị chiếm, và chuỗi lệnh trên kiểm tra xem cổng 80 còn trống không. Đây là dự phòng quan trọng để tránh thiệt hại cho người dùng khi họ có nhiều VPS, và vô tình lẫm lẫn chạy script trên VPS đang hoạt động bình thường, câu lệnh sẽ chặn hành động lại, dừng chạy.

Ngay cả người dùng không nhầm lẫn (nghĩa là đúng họ đang muốn chạy script trên VPS họ đang thao tác), thì câu lệnh cũng nhắc nhở họ phải có VPS có OS sạch thì mới cài được thuận lợi và giảm tối đa các rắc rối do cài chồng chéo.

d. Kiểm tra tiếp user caddy

Cái này mục đích là phòng thêm lớp nữa, vì script cài caddy, nên nó sẽ không bao giờ cài lại trên server đã có user caddy rồi!

if id "caddy" &>/dev/null; then
    echo -e "${RED}[X] LOI: User 'caddy' da ton tai.${NC}"
    echo -e "${YELLOW}Nguyen nhan:${NC} VPS nay da tung duoc cai dat Caddy Web Server truoc day."
    echo -e "${YELLOW}Giai phap:${NC} De dam bao on dinh, vui long Reinstall OS (Cai lai he dieu hanh) ve trang thai ban dau."
    exit 1
fi

Đoạn mã tìm xem có user caddy trên hệ thống không, nếu có nó sẽ dừng chạy script.

e. Thông báo môi trường OS sạch

echo -e "${GREEN}[OK] Kiem tra hoan tat. Moi truong sach se.${NC}"
echo "Dang bat dau qua trinh cai dat..."
sleep 2

Nếu nó vượt qua 2 cửa, khả năng OS sạch là gần như chắc chắn. Script tự tin để đi đến các bước cài đặt chính thức, nó gửi thông báo này cho người dùng biết.

sleep 2 là để tạm dừng chạy lệnh trong vòng 2s, nếu không dùng nó, script sẽ chạy luôn và rất nhanh hiển thị thêm các thông báo khác => đẩy các thông báo trên ra ngoài màn hình => người dùng không kịp đọc => việc dừng nghỉ 2s này giúp người dùng đọc các thông báo quan trọng.

Viết một bình luận