Back to articles
Technology Insight

Tự host Gotify trên VPS: Hệ thống tự gửi thông báo đẩy (Push Notification) về Android tức thì qua API

June 3, 2026

Giới thiệu về Gotify và giải pháp thông báo đẩy độc lập

Trong kỷ nguyên số hóa và quản trị hệ thống hiện đại, việc nhận thông tin cảnh báo tức thì (real-time alerts) đóng vai trò sống còn đối với các kỹ sư hệ thống, nhà phát triển và doanh nghiệp. Khi một sao lưu (backup) bị lỗi lúc 2 giờ sáng, hoặc dung lượng ổ đĩa của máy chủ (VPS) cạn kiệt, mỗi phút chậm trễ đều có thể dẫn đến thiệt hại tài chính nghiêm trọng.

Thông thường, chúng ta hay phụ thuộc vào các dịch vụ bên thứ ba như Firebase Cloud Messaging (FCM), Pushover, Telegram Bot hoặc Slack. Tuy nhiên, các giải pháp này luôn đi kèm rủi ro về bảo mật dữ liệu, giới hạn băng thông lưu lượng miễn phí, hoặc nguy cơ gián đoạn dịch vụ từ nhà cung cấp. Đó là lý do Gotify ra đời.

Gotify là một máy chủ thông báo đẩy mã nguồn mở, siêu nhẹ, được thiết kế để self-host (tự cài đặt trên hạ tầng riêng). Giải pháp này cung cấp một REST API đơn giản và kết nối WebSocket thời gian thực để chuyển tiếp thông báo đến thiết bị Android hoặc trình duyệt web ngay lập tức.

Tại sao doanh nghiệp và DevOps nên chọn Gotify?

  • Hoàn toàn làm chủ dữ liệu: Mọi thông tin thông báo, log hệ thống đều nằm trọn trong VPS của bạn, đảm bảo tính bảo mật tuyệt đối cho doanh nghiệp.
  • Tốc độ tức thì (Zero-latency): Nhờ kết nối duy trì liên tục qua giao thức WebSocket, thông báo được đẩy về điện thoại Android gần như không có độ trễ.
  • API cực kỳ tối giản: Chỉ với một dòng lệnh curl cơ bản, bất kỳ script hệ thống (Bash, Python), Cron job hay ứng dụng nào cũng có thể gửi thông báo.
  • Tiết kiệm tài nguyên: Gotify được viết bằng ngôn ngữ Go, tiêu tốn chưa đến 50MB RAM, hoạt động mượt mà trên cả các gói VPS cấu hình thấp nhất.
---

Kiến trúc hoạt động của Gotify

Hệ thống Gotify vận hành dựa trên mô hình ba thành phần cốt lõi rất chặt chẽ:

  1. Sender (Nguồn gửi): Bất kỳ ứng dụng, máy chủ giám sát (như Uptime Kuma, Grafana), hoặc các đoạn mã tự động hóa nào có khả năng thực thi yêu cầu HTTP POST API.
  2. Gotify Server (Máy chủ trung tâm): Nhận dữ liệu từ Sender qua cổng API bảo mật bằng Token, lưu trữ vào cơ sở dữ liệu nội bộ và phát sóng thông tin qua WebSocket.
  3. Client (Thiết bị nhận): Ứng dụng Gotify trên hệ điều hành Android hoặc giao diện Web UI liên tục lắng nghe kết nối WebSocket để hiển thị thông báo đẩy lên màn hình điện thoại.
Lưu ý: Khác với cơ chế tối ưu pin của một số hệ điều hành, ứng dụng Android của Gotify sử dụng một dịch vụ chạy ngầm (foreground service) duy trì kết nối trực tiếp đến VPS của bạn, giúp loại bỏ hoàn toàn sự phụ thuộc vào dịch vụ Google Play Services.
---

Hướng dẫn cài đặt Gotify trên VPS bằng Docker Compose

Để đảm bảo tính nhất quán, dễ nâng cấp và cô lập môi trường, phương pháp triển khai Gotify tối ưu nhất hiện nay là sử dụng Docker và Docker Compose.

1. Chuẩn bị tiền đề

Trước khi bắt đầu, hãy đảm bảo VPS của bạn đã cài đặt sẵn Docker và đang chạy một hệ điều hành Linux phổ biến (Ubuntu, Debian). Bạn cũng cần một tên miền (Domain) đã trỏ bản ghi A về địa chỉ IP của VPS để thiết lập chứng chỉ SSL sau này.

2. Cấu hình file Docker Compose

Truy cập vào VPS qua SSH, tạo một thư mục dự án riêng biệt và tiến hành thiết lập cấu hình hệ thống:

mkdir -p /opt/gotify-server && cd /opt/gotify-server
nano docker-compose.yml

Sao chép và dán nội dung cấu hình dưới đây vào file docker-compose.yml:

version: "3.8"

services:
  gotify:
    image: gotify/server:latest
    container_name: gotify_server
    restart: unless-stopped
    ports:
      - "8080:80"
    environment:
      - TZ=Asia/Ho_Chi_Minh
      - GOTIFY_DEFAULTUSER_NAME=admin
      - GOTIFY_DEFAULTUSER_PASS=ThayDoiMatKhauBaoMatNay
    volumes:
      - ./gotify_data:/app/data

Hãy chắc chắn rằng bạn đã thay đổi giá trị GOTIFY_DEFAULTUSER_PASS thành một mật khẩu mạnh để bảo vệ quyền quản trị tối cao của hệ thống.

3. Khởi chạy dịch vụ

Kích hoạt container chạy ngầm bằng lệnh sau:

docker compose up -d

Kiểm tra trạng thái hoạt động bằng lệnh docker compose ps. Lúc này, giao diện quản trị của Gotify đã sẵn sàng hoạt động tại địa chỉ IP máy chủ của bạn qua cổng 8080 (Ví dụ: http://123.45.67.89:8080).

---

Cấu hình Reverse Proxy Nginx và kích hoạt mã hóa SSL

Để ứng dụng di động Android có thể kết nối an toàn và duy trì luồng dữ liệu WebSocket ổn định, việc cấu hình một Reverse Proxy tích hợp chứng chỉ bảo mật HTTPS (SSL) là bắt buộc cho môi trường doanh nghiệp.

Dưới đây là đoạn cấu hình mẫu của Nginx để xử lý chính xác các tiêu đề (headers) nâng cấp giao thức của WebSocket:

server {
    listen 443 ssl http2;
    server_name gotify.domaincuaban.com;

    ssl_certificate /etc/letsencrypt/live/gotify.domaincuaban.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/gotify.domaincuaban.com/privkey.pem;

    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;

        # Cấu hình quan trọng dành riêng cho kết nối WebSocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";

        # Tăng thời gian timeout để tránh ngắt kết nối ngầm
        proxy_read_timeout 86400;
    }
}
---

Tích hợp và kiểm tra gửi thông báo đẩy qua REST API

Sau khi đăng nhập vào giao diện Web UI bằng tài khoản admin, bạn cần tạo một Application Token để cấp quyền cho nguồn gửi thông báo.

  1. Điều hướng đến menu Apps trên thanh công cụ bên trái.
  2. Nhấp chọn Create Application, đặt tên ứng dụng (ví dụ: VPS-Monitor) và nhấn Create.
  3. Hệ thống sẽ cung cấp một chuỗi ký tự duy nhất dạng Axxxxxxxxx. Đây chính là Token API bảo mật của bạn.

Kiểm tra gửi thông báo bằng Curl

Bạn có thể mở Terminal trên máy tính cá nhân hoặc chạy trực tiếp từ bất kỳ máy chủ nào để kiểm tra tính năng gửi tin nhắn tức thì bằng cú pháp lệnh dưới đây:

curl -X POST "https://gotify.domaincuaban.com/message?token=TOKEN_CUA_BAN_TAI_DAY" \
     -F "title=Cảnh Báo Hệ Thống" \
     -F "message=Dung lượng ổ đĩa SSD trên VPS đã vượt ngưỡng 90%. Vui lòng kiểm tra ngay!" \
     -F "priority=8"

Trong cấu trúc API của Gotify, tham số priority (độ ưu tiên) đóng vai trò điều phối hành vi của thiết bị nhận từ mức 0 (không gây tiếng động) đến mức 10 (áp đặt âm thanh cảnh báo lớn và duy trì liên tục trên màn hình khóa Android).

---

Kết nối ứng dụng Android để nhận thông báo theo thời gian thực

Để hoàn tất giải pháp hạ tầng thông báo đẩy độc lập này, bạn hãy thực hiện theo các bước thiết lập cuối cùng trên thiết bị di động:

  • Tải và cài đặt ứng dụng Gotify từ kho ứng dụng mã nguồn mở F-Droid hoặc trực tiếp từ mục Release trên kho lưu trữ GitHub chính thức.
  • Mở ứng dụng, nhập địa chỉ URL chính xác của máy chủ (ví dụ: https://gotify.domaincuaban.com).
  • Nhập thông tin tài khoản đăng nhập để xác thực quyền truy cập.

Ngay sau khi thiết lập hoàn tất, ứng dụng sẽ tự động đăng ký một Client kết nối độc lập. Hãy thử chạy lại lệnh curl kiểm tra ở bước trước, bạn sẽ thấy thông báo đẩy xuất hiện trên màn hình điện thoại Android của mình gần như ngay lập tức với độ trễ tính bằng mili-giây.

Lời kết

Bằng cách tự host Gotify trên VPS, bạn không chỉ xây dựng thành công một kênh thông báo nội bộ siêu tốc, bảo mật cao mà còn cắt đứt hoàn toàn sự phụ thuộc vào các nền tảng đám mây lớn của bên thứ ba. Đây là viên gạch nền tảng vững chắc để mở rộng cho các hệ thống giám sát hạ tầng tự động chuyên nghiệp của doanh nghiệp.

Tự host Gotify trên VPS: Hệ thống tự gửi thông báo đẩy (Push Notification) về Android tức thì qua API | DPTCloud