Quay lại danh sách
Tin tức công nghệ

Hướng dẫn thiết lập hệ thống thông báo đẩy tập trung Gotify trên VPS để quản lý alert từ script tự động

29 tháng 5, 2026

Giới thiệu về bài toán quản lý cảnh báo trong vận hành hệ thống

Trong kỷ nguyên chuyển đổi số và tự động hóa, việc giám sát hiệu năng hệ thống, theo dõi trạng thái sao lưu dữ liệu (backup) hay kiểm soát bảo mật là nhiệm vụ sống còn của mọi doanh nghiệp. Các kỹ sư hệ thống thường thiết lập hàng chục, thậm chí hàng trăm script tự động hoặc cron job để thực hiện các công việc này hàng ngày. Tuy nhiên, một thách thức lớn phát sinh: Làm thế nào để nhận cảnh báo ngay lập tức khi một script gặp lỗi hoặc phát hiện bất thường?

Nhiều đơn vị lựa chọn gửi thông báo qua Email, Telegram, Slack hoặc Discord. Mặc dù các giải pháp này rất phổ biến, chúng lại tồn tại một số nhược điểm cố hữu đối với môi trường doanh nghiệp:

  • Rủi ro bảo mật và quyền riêng tư: Dữ liệu cảnh báo hệ thống nhạy cảm bị chuyển qua máy chủ của bên thứ ba.
  • Giới hạn tần suất (Rate Limiting): Các nền tảng miễn phí thường giới hạn số lượng tin nhắn gửi đi trong một khoảng thời gian.
  • Sự phụ thuộc: Khi dịch vụ của bên thứ ba gặp sự cố hoặc thay đổi chính sách API, hệ thống giám sát của bạn sẽ bị gián đoạn.

Chính vì vậy, tự triển khai một máy chủ thông báo đẩy độc lập là giải pháp tối ưu. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách thiết lập Gotify trên VPS – một nền tảng mã nguồn mở mạnh mẽ, bảo mật và hoàn toàn thuộc quyền sở hữu của bạn.

---

Gotify là gì? Tại sao nên chọn Gotify cho doanh nghiệp?

Gotify là một máy chủ thông báo đẩy (push notification server) đơn giản, hoạt động dựa trên kiến trúc WebSockets. Nó được thiết kế chuyên biệt để gửi và nhận thông báo theo thời gian thực từ các ứng dụng, script hoặc hệ thống ngoại vi.

Dưới đây là những lý do Gotify trở thành lựa chọn hàng đầu cho các nhà quản trị:

  • Tự lưu trữ (Self-hosted): Toàn bộ dữ liệu nằm trên VPS của bạn, đảm bảo tính bảo mật và tuân thủ các quy định về an toàn thông tin doanh nghiệp.
  • Hiệu năng cực cao & Tiết kiệm tài nguyên: Viết bằng ngôn ngữ Go, Gotify tiêu tốn rất ít RAM và CPU, phù hợp chạy trên cả các gói VPS cấu hình thấp.
  • Giao diện trực quan: Cung cấp Web UI thân thiện để quản lý ứng dụng, client và xem lịch sử thông báo.
  • Hỗ trợ đa nền tảng: Có ứng dụng chính thức trên Android và hỗ trợ giao diện web phản hồi tốt trên iOS.
  • API đơn giản: Việc gửi thông báo chỉ gói gọn trong một yêu cầu HTTP POST (REST API), cực kỳ dễ tích hợp vào bất kỳ ngôn ngữ lập trình nào (Bash script, Python, Node.js, v.v.).
---

Quy trình chuẩn bị trước khi cài đặt

Để hệ thống hoạt động ổn định và bảo mật, doanh nghiệp cần chuẩn bị các thành phần sau:

  1. Một máy chủ VPS: Hệ điều hành Ubuntu Server (khuyến nghị bản 22.04 LTS trở lên), có địa chỉ IP công cộng (Public IP).
  2. Một tên miền (Domain/Subdomain): Đã trỏ bản ghi A về IP của VPS (ví dụ: gotify.company.com).
  3. Docker và Docker Compose: Đã được cài đặt sẵn trên VPS để đơn giản hóa quá trình triển khai và nâng cấp sau này.
---

Hướng dẫn chi tiết các bước thiết lập Gotify bằng Docker Compose

Bước 1: Tạo cấu trúc thư mục dự án

Đầu tiên, hãy kết nối SSH vào VPS của bạn và tạo một thư mục riêng biệt để lưu trữ cấu hình Gotify nhằm dễ dàng quản lý và sao lưu:

mkdir -p ~/gotify/data
cd ~/gotify

Bước 2: Cấu hình file docker-compose.yml

Tạo một file có tên docker-compose.yml bằng trình soạn thảo văn bản (như nano hoặc vim) và dán nội dung cấu hình sau:version: "3" services: gotify: image: gotify/server:latest container_name: gotify_server restart: always ports: - "8080:80" environment: - GOTIFY_SERVER_PORT=80 - GOTIFY_SERVER_KEEPALIVEDURATION=0 - TZ=Asia/Ho_Chi_Minh volumes: - "./data:/app/data"

Lưu ý: Trong cấu hình trên, chúng tôi mở cổng nội bộ 8080 trên VPS để ánh xạ vào cổng 80 của container Gotify. Thư mục ./data sẽ là nơi lưu trữ cơ sở dữ liệu SQLite và cấu hình hệ thống, đảm bảo dữ liệu không bị mất khi container khởi động lại.

Bước 3: Khởi chạy Gotify Container

Kích hoạt service bằng lệnh Docker Compose ở chế độ chạy ngầm (detached mode):

docker compose up -d

Kiểm tra trạng thái container bằng lệnh docker ps để đảm bảo Gotify đã khởi chạy thành công.

---

Cấu hình Reverse Proxy với Nginx và mã hóa SSL Let's Encrypt

Để bảo vệ thông tin đăng nhập và dữ liệu cảnh báo trên đường truyền mạng, việc cấu hình HTTPS là bắt buộc đối với doanh nghiệp. Chúng ta sẽ sử dụng Nginx làm Reverse Proxy.

Bước 1: Cài đặt Nginx và Certbot

sudo apt update
sudo apt install nginx certbot python3-certbot-nginx -y

Bước 2: Tạo file cấu hình Nginx cho Gotify

Tạo file cấu hình mới tại đường dẫn /etc/nginx/sites-available/gotify với nội dung:

server {
    listen 80;
    server_name gotify.company.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Hỗ trợ WebSockets - Rất quan trọng đối với Gotify
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }
}

Kích hoạt cấu hình và khởi động lại Nginx:

sudo ln -s /etc/nginx/sites-available/gotify /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

Bước 3: Cài đặt chứng chỉ SSL miễn phí

Chạy lệnh Certbot để tự động cấu hình SSL Let's Encrypt:

sudo certbot --nginx -d gotify.company.com

Chọn tùy chọn tự động chuyển hướng (Redirect) từ HTTP sang HTTPS để tối ưu hóa bảo mật.

---

Khởi tạo Ứng dụng và Client trên Giao diện Gotify

Bây giờ, bạn truy cập vào đường dẫn [https://gotify.company.com](https://gotify.company.com) từ trình duyệt. Đăng nhập với tài khoản mặc định là admin / admin. Hãy đổi ngay mật khẩu này tại mục "Users" sau khi đăng nhập thành công để bảo mật hệ thống.

Để hệ thống hoạt động, bạn cần hiểu hai khái niệm cốt lõi trong Gotify:

  • Apps (Ứng dụng): Nơi tạo ra các token đóng vai trò là "Người gửi". Mỗi script hoặc hệ thống tự động sẽ được cấp một App Token riêng để gửi tin nhắn về.
  • Clients (Thiết bị nhận): Nơi quản lý các thiết bị nhận thông báo (Trình duyệt web, ứng dụng Android).

Hãy truy cập tab Apps, nhấn Create Application, đặt tên là "Backup Script" và nhấn Create. Hệ thống sẽ cung cấp cho bạn một chuỗi ký tự dạng token (ví dụ: A1b2C3d4E5f6G7h). Lưu lại mã này để sử dụng trong bước tiếp theo.

---

Tích hợp Alert vào Script tự động hóa (Bash & Python)

Sức mạnh của Gotify nằm ở sự đơn giản khi tích hợp. Dưới đây là hai ví dụ thực tế giúp bạn tích hợp cảnh báo vào các kịch bản tự động hóa doanh nghiệp.

Ví dụ 1: Gửi alert từ Bash Script (Ứng dụng giám sát dung lượng đĩa cứng)

Đoạn script dưới đây sẽ kiểm tra dung lượng ổ đĩa của VPS, nếu vượt quá 85%, hệ thống sẽ tự động bắn cảnh báo khẩn cấp về điện thoại của nhà quản trị:

#!/bin/bash

CURRENT_USAGE=$(df / | grep / | awk '{ print $5 }' | sed 's/%//g')
THRESHOLD=85
GOTIFY_URL="[https://gotify.company.com/message?token=A1b2C3d4E5f6G7h](https://gotify.company.com/message?token=A1b2C3d4E5f6G7h)"

if [ "$CURRENT_USAGE" -gt "$THRESHOLD" ]; then
    curl -X POST "$GOTIFY_URL" \
        -F "title=CẢNH BÁO: Hết dung lượng đĩa cứng" \
        -F "message=Ổ đĩa trên VPS chính đã đạt mức $CURRENT_USAGE%. Vui lòng kiểm tra ngay!" \
        -F "priority=8"
fi

Ví dụ 2: Tích hợp vào Python Script (Giám sát trạng thái dịch vụ)

Nếu doanh nghiệp của bạn vận hành các ứng dụng bằng Python, việc gửi alert khi gặp lỗi ngoại lệ (Exception) trở nên vô cùng đơn giản:

import requests

GOTIFY_URL = "[https://gotify.company.com/message?token=A1b2C3d4E5f6G7h](https://gotify.company.com/message?token=A1b2C3d4E5f6G7h)"

def send_alert(title, message, priority=5):
    payload = {
        "title": title,
        "message": message,
        "priority": priority
    }
    try:
        response = requests.post(GOTIFY_URL, json=payload)
        if response.status_code == 200:
            print("Alert sent successfully.")
    except Exception as e:
        print(f"Failed to send alert: {e}")

try:
    # Giả lập logic kết nối Database của doanh nghiệp
    raise ConnectionError("Không thể kết nối tới Database Server tại 10.0.0.5")
except Exception as err:
    send_alert("LỖI HỆ THỐNG: Database Down", str(err), priority=10)

Trong Gotify, tham số priority (độ ưu tiên) chạy từ 0 đến 10. Với mức priority cao (từ 8 trở lên), ứng dụng trên điện thoại Android sẽ tự động bỏ qua chế độ im lặng hoặc hiển thị cảnh báo nổi bật để thu hút sự chú ý tức thì của kỹ sư trực ca.

---

Kết luận và các lưu ý về bảo mật nâng cao

Xây dựng một hệ thống thông báo đẩy tập trung với Gotify không chỉ giúp doanh nghiệp tối ưu hóa quy trình giám sát tự động mà còn đảm bảo an toàn tuyệt đối cho dữ liệu nội bộ. Thay vì phân tán cảnh báo ở nhiều nền tảng chat công cộng, giờ đây bạn đã có một "trung tâm chỉ huy" cảnh báo chuyên nghiệp, gọn nhẹ và miễn phí hoàn toàn.Để vận hành hệ thống Gotify một cách an toàn nhất trong môi trường Production, hãy luôn ghi nhớ ba nguyên tắc sau:

  • Luôn cập nhật phiên bản Docker Image của Gotify định kỳ để vá các lỗ hổng bảo mật.
  • Sử dụng tính năng phân quyền, tạo mỗi script một App Token riêng biệt. Tuyệt đối không dùng chung một token cho toàn bộ hệ thống để dễ dàng cô lập khi bị rò rỉ.
  • Cấu hình tự động gia hạn chứng chỉ SSL Let's Encrypt bằng cron job của hệ thống để tránh gián đoạn dịch vụ.
Hướng dẫn thiết lập hệ thống thông báo đẩy tập trung Gotify trên VPS để quản lý alert từ script tự động | DPTCloud