1. Vì sao Google Analytics 4 (GA4) không còn phù hợp với web nhỏ?
Bạn chỉ muốn kiểm tra xem hôm qua blog có bao nhiêu lượt đọc và khách đến từ đâu. Thế nhưng khi mở GA4, bạn phải bơi qua hàng chục menu con, thiết lập báo cáo rườm rà và chờ dữ liệu cập nhật trễ từ 24 đến 48 tiếng. Rõ ràng, GA4 sinh ra để phục vụ các tập đoàn lớn theo dõi phễu người dùng phức tạp, không dành cho nhu cầu tinh gọn.
Hai rào cản lớn khác là hiệu năng và quyền riêng tư:
- Chậm website: Thư viện
gtag.jscủa Google nặng khoảng 45KB (gần 100KB khi giải nén). Nó trực tiếp kéo tụt điểm Core Web Vitals trên di động. - Luật Cookie phiền toái: Quy định GDPR ép bạn phải dựng một banner xin cấp quyền cookie to đùng, che mất một phần ba màn hình khi độc giả vừa bấm vào xem bài viết.
Thứ chúng ta cần chỉ là một dashboard trực quan: Ai đang đọc? Họ đến từ link nào? Bài viết nào hot nhất? Toàn bộ dữ liệu này phải nằm trong tay bạn, tải tức thì và không làm phiền khách truy cập.
2. Kiến trúc giải pháp: Umami + Docker Compose + PostgreSQL
Umami giải quyết triệt để các vấn đề trên. Toàn bộ hệ sinh thái này hoạt động nhịp nhàng qua 3 mảnh ghép:
- Umami Analytics: Dashboard quản trị viết bằng Next.js. Mã tracking của Umami chỉ vỏn vẹn khoảng 2KB — nhẹ hơn GA4 gần 20 lần. Umami không dùng cookie. Hệ thống nhận diện khách truy cập duy nhất bằng chuỗi băm đổi mới mỗi 24 giờ từ IP và User-Agent, hoàn toàn tuân thủ GDPR mà không cần bật popup xin phép.
- PostgreSQL 15: Nơi lưu trữ toàn bộ lượt xem (pageview) và sự kiện (event). Dữ liệu nằm trọn trên ổ cứng máy chủ của bạn, không gửi về bất kỳ máy chủ bên thứ ba nào.
- Docker Compose: Bộ điều phối giúp bạn không cần cài Node.js hay build code thủ công. Toàn bộ stack Umami và database được đóng gói gọn trong một file, khởi chạy sau đúng một câu lệnh.
Bộ đôi này chỉ ngốn khoảng 180MB – 250MB RAM. Một gói VPS giá rẻ 1 vCPU / 1GB RAM (tầm 100.000đ/tháng) là đủ sức gánh website vài trăm nghìn view mỗi tháng.
3. Các bước triển khai Umami trên VPS Linux
Chuẩn bị sẵn một máy chủ Ubuntu hoặc Debian đã cài Docker Engine và Docker Compose plugin (v2). Sau đó, bạn lần lượt làm theo hướng dẫn dưới đây.
Bước 1: Tạo thư mục chứa dự án
Mở terminal của VPS và tạo một thư mục riêng để lưu trữ cấu hình:
mkdir -p ~/umami-analytics && cd ~/umami-analytics
Bước 2: Viết file docker-compose.yml
Trước khi tạo file, hãy tạo ngay một chuỗi ký tự bí mật ngẫu nhiên dùng cho APP_SECRET bằng lệnh:
openssl rand -hex 32
Tiếp theo, tạo file docker-compose.yml:
nano docker-compose.yml
Dán cấu hình chuẩn dưới đây vào. Hãy nhớ thay my_strong_db_password bằng mật khẩu database của bạn và thay YOUR_GENERATED_SECRET bằng chuỗi hex vừa tạo ở trên:
services:
umami-db:
image: postgres:15-alpine
container_name: umami_postgres
environment:
POSTGRES_DB: umami
POSTGRES_USER: umami_user
POSTGRES_PASSWORD: my_strong_db_password
volumes:
- umami-db-data:/var/lib/postgresql/data
restart: always
umami-app:
image: ghcr.io/umami-software/umami:postgresql-latest
container_name: umami_server
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://umami_user:my_strong_db_password@umami-db:5432/umami
DATABASE_TYPE: postgresql
APP_SECRET: YOUR_GENERATED_SECRET
depends_on:
- umami-db
restart: always
volumes:
umami-db-data:
Bước 3: Khởi chạy và kiểm tra nhật ký log
Kéo image và bật container chạy ngầm:
docker compose up -d
Container khởi động lần đầu sẽ tự động chạy các script migration để khởi tạo bảng dữ liệu. Quá trình này mất khoảng 20 đến 40 giây. Bạn có thể theo dõi tiến độ qua log:
docker compose logs -f umami-app
Khi thấy dòng Ready in ...ms cùng thông báo lắng nghe tại cổng 3000, ứng dụng đã sẵn sàng.
Một mẹo nhỏ: Khi debug log Docker hoặc gọi API test dữ liệu JSON trả về từ Umami, bạn có thể paste nhanh vào công cụ trực tuyến như toolcraft.app/vi/tools/developer/json-formatter để format và kiểm tra cấu trúc cho tiện.
Bước 4: Đăng nhập và đổi ngay mật khẩu mặc định
Mở trình duyệt và truy cập http://IP_VPS:3000. Tài khoản mặc định hệ thống cấp sẵn là:
- Username:
admin - Password:
umami
Đăng nhập thành công, bạn hãy vào ngay Settings > Profile để đổi password. Đừng bỏ qua bước này vì các bot tự động trên Internet quét cổng 3000 liên tục để dò mật khẩu mặc định.
Bước 5: Thêm website và gắn thẻ tracking
Vào Settings > Websites, bấm Add website rồi điền tên cùng domain trang của bạn (ví dụ: myblog.vn). Umami sẽ xuất ra đoạn mã nhúng script có dạng:
<script defer src="https://analytics.yourdomain.com/script.js" data-website-id="12345678-abcd-ef01-2345-6789abcdef01"></script>
Gắn đoạn mã trên vào trong thẻ <head> của website. Để tránh lỗi bảo mật Mixed Content khi website chính chạy HTTPS, bạn nên cấu hình Nginx hoặc Caddy làm Reverse Proxy kèm chứng chỉ SSL miễn phí từ Let’s Encrypt cho subdomain của Umami.
Bây giờ, hãy mở website trong tab ẩn danh và tải lại trang. Quay lại màn hình Umami, bạn sẽ thấy biểu đồ thời gian thực nhảy số ngay lập tức.
4. Lời kết
Tự host Umami bằng Docker Compose giúp bạn gỡ bỏ được gánh nặng banner cookie, tăng tốc độ tải trang nhờ script 2KB siêu nhẹ và nắm trọn dữ liệu truy cập của mình. Thiết lập một lần, hệ thống sẽ chạy êm ru suốt nhiều năm mà không đòi hỏi bảo trì phức tạp.

