Umami giúp bạn dễ dàng thu thập, phân tích các dữ liệu về traffic, nguồn traffic, các dữ liệu nhân khẩu học, hành vi của khách, trong khi vẫn duy trì quyền riêng tư và quyền sở hữu dữ liệu của khách truy cập (tuân thủ GDPR)
Trước đây mình hay dùng Google Analytics, sau này thì đổi sang Cloudflare Analytics …. vẫn cảm giác không quá thoải mái, Cloudflare thì quá thiếu tính năng, Google thì lại nhiều 1 cách không cần thiết, các dịch vụ Analytics tuân thủ GDPR thì đắt khủng khiếp
Tình cờ biết tới Umami, coi sơ thì thấy khá đơn giản, trực quan, đủ dùng, lại là mã nguồn mở, nên dễ dàng tự lưu trữ (self host), nhờ thế mang sự riêng tư hoàn toàn cho người dùng
Bản thân Umami cũng có phiên bản Umami Cloud miễn phí 10.000 events mỗi tháng, khá thừa cho thèng bibica.net, dùng thử 15 phút cảm giác khá là hợp, đang còn slot VPS Oracle miễn phí để không, nên tiện thể tự cài 1 bản, tự lưu trữ (self host) luôn cho đẹp đội hình 😀
Để mọi thứ đơn giản, thông dụng, thì mình tạo mới 1 con VPS dùng OS Ubuntu 22.04 😀
Cấu hình VPS
Nếu bạn dùng VPS hãng khác, đã cài docker, docker-compose thì không cần làm bước bên dưới
# update OS sudo apt update && sudo apt upgrade -y # set locale locale-gen en_US.UTF-8 export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 # Tắt Firewall sudo apt remove iptables-persistent -y sudo ufw disable sudo iptables -F # Chỉnh về múi giờ Việt Nam timedatectl set-timezone Asia/Ho_Chi_Minh # Tạo swap 4GB RAM sudo fallocate -l 4G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile && echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab cat <<EOF > /etc/sysctl.d/99-xs-swappiness.conf vm.swappiness=10 EOF # Enable TCP BBR congestion control cat <<EOF > /etc/sysctl.conf net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr EOF # Cài đặt docker curl -sSL https://get.docker.com | sh sudo usermod -aG docker $(whoami) sudo systemctl start docker sudo systemctl enable docker apt install docker-compose -y # bypass Oralce sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/NeverIdle-Oracle/master/VM.Standard.E2.1.Micro.sh -O /usr/local/bin/bypass_oracle.sh chmod +x /usr/local/bin/bypass_oracle.sh nohup /usr/local/bin/bypass_oracle.sh >> ./out 2>&1 <&- & crontab -l > bypass_oracle echo "@reboot nohup /usr/local/bin/bypass_oracle.sh >> ./out 2>&1 <&- &" >> bypass_oracle crontab bypass_oracle
Các bước râu ria ở trên VPS nào mình cũng làm, bao gồm cập nhập Ubuntu, tắt firewall, tạo 4G RAM ảo, bật BBR, cài đặt docker, docker-compose và bypass oracle …
Cài đặt Umami
nano docker-compose.yml
Nội dung bên trong điền vào
version: '3' services: umami: image: ghcr.io/umami-software/umami:postgresql-latest ports: - "3000:3000" environment: DATABASE_URL: postgresql://umami:umami@db:5432/umami DATABASE_TYPE: postgresql APP_SECRET: replace-me-with-a-random-string depends_on: db: condition: service_healthy restart: always db: image: postgres:15-alpine environment: POSTGRES_DB: umami POSTGRES_USER: umami POSTGRES_PASSWORD: umami volumes: - umami-db-data:/var/lib/postgresql/data restart: always healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 5 volumes: umami-db-data:
- Đổi
APP_SECRET
sang 1 giá trị khác, có thể chạy lệnh bên dưới để tạo ngẫu nhiên 1 dãy kí tự
openssl rand -base64 64 | tr -d '\n' ; echo
Ra dãy số dạng C5zElMKk9JS2AwxUD9Sg0W8epYA/BB5+CcRpgoiwIdIcyZjSwKSTNkvoNYfVTDaYgtigr+Ck2CY+NKYKkbBYQg==
- Các giá trị liên quan tới database cũng nên đổi lại để hệ thống an toàn một chút, cấu hình cuối cùng có thể tương tự như bên dưới
version: '3' services: umami: image: ghcr.io/umami-software/umami:postgresql-latest ports: - "3000:3000" environment: DATABASE_URL: postgresql://umami_bibica:umami_p8RoGF7Q43XfxU3E64ue@db:5432/umami_analytics DATABASE_TYPE: postgresql APP_SECRET: C5zElMKk9JS2AwxUD9Sg0W8epYA/BB5+CcRpgoiwIdIcyZjSwKSTNkvoNYfVTDaYgtigr+Ck2CY+NKYKkbBYQg== depends_on: db: condition: service_healthy restart: always db: image: postgres:15-alpine environment: POSTGRES_DB: umami_analytics POSTGRES_USER: umami_bibica POSTGRES_PASSWORD: umami_p8RoGF7Q43XfxU3E64ue volumes: - umami-db-data:/var/lib/postgresql/data restart: always healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 5 volumes: umami-db-data:
Tiếp theo chạy lệnh bên dưới để hoàn thành cài đặt
docker-compose up -d --build --remove-orphans --force-recreate
Cài đặt xong bạn có thể truy cập vào web UI bằng IP:3000, tài khoản quản trị
User: admin Password: umami
Umami hoạt động qua cổng 3000, gần như không đụng chạm với bất cứ cái gì, bạn có thể cài đặt trên cùng host chính chạy website mà vẫn rất an toàn
Cấu Hình Cloudflare Tunnels
Để việc login dễ nhớ, và link analytics đẹp mắt hơn thì có thể dùng Cloudflare Tunnels làm Reverse Proxy thay thế cho dãy IP:3000
Tạo tài khoản Cloudflare Zero Trust ->Access -> Tunnel -> Create a tunnel -> đặt 1 tên cho dễ nhớ (analytics.bibica.net) -> Install and run a connector
Sau đó tạo Public hostnames analytics.bibica.net tới IP:3000
Xong xuôi thì có thể truy cập vào Umami qua subdomain analytics.bibica.net
Trên Nginx có thể dùng cấu hình như sau
location / { proxy_pass http://xxx.xxx.xxx.xxx:3000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
Cấu hình Websites
- Settings -> Add website
Đặt Name tùy ý, Domain điền dạng domain.com (không cần điền https:// đằng trước)
- Xong xuôi thì vào tracking code lấy code tương tự các dịch vụ analytics khác
Việc cấu hình cơ bản như thế, bạn có thể vào đổi lại tài khoản admin, mật khẩu, ngôn ngữ (Umami có hỗ trợ tiếng Việt luôn) …
Bạn cũng có thể tạo 1 trang public (tính năng Share URL) để xem các thông tin cho nhanh, đỡ phải login vào quản trị phiền hà
1 điểm theo mình khá củ chuối, Umami không có tính năng chặn track của admin 😀 nên quản trị vào cũng bị tính luôn 😀 có thể xử lý thủ công bằng cách chặn file analytics (script.js) bằng các app như AdGuard
Cách thức hoạt động của Umami cũng tương tự các dịch vụ khác, nên cũng không có gì bàn nhiều, trang quản trị của họ cũng rất đơn giản, xem tầm 5-10 phút, ấn ấn vài cái là hiểu cả thôi 😀
Cấu hình Umami Cloud
Nếu trang của bạn traffic < 10.000 lượt view 1 tháng, có thể dùng thẳng dịch vụ Umami Cloud miễn phí của họ, đỡ phải mất công cài đặt self host này nọ, rối rắm, phiền phức 😀
Nếu dùng qua dịch vụ của Umami, link tracking sẽ bắt đầu bằng analytics.eu.umami.is
Link Share URL public sẽ random thư mục bên trong
Có thể dùng các hình thức Reverse Proxy làm ngắn và đẹp các link này, giúp việc quản lý đơn giản hơn
Do mình đang dùng webserver Caddy, nên sẽ demo theo Caddy, bạn nào dùng Nginx hoặc các webserver khác thì đại khái ý tưởng cũng là như thế
analytics.bibica.net { tls /etc/ssl/bibica.net.pem /etc/ssl/bibica.net.key reverse_proxy https://analytics.eu.umami.is { header_up Host {http.reverse_proxy.upstream.hostport} } handle_path /monitor* { rewrite * /share/uGAnI6Tm9RDP56EH/BIBICA.NET{uri} reverse_proxy https://analytics.eu.umami.is { header_up Host {http.reverse_proxy.upstream.hostport} } } }
Lúc này link https://analytics.eu.umami.is/script.js
sẽ thành https://analytics.bibica.net/script.js
Link https://analytics.eu.umami.is/share/uGAnI6Tm9RDP56EH/BIBICA.NET
sẽ thành https://analytics.bibica.net/monitor
Về cơ bản mọi thứ vận hành khá bình thường, check location chính xác, trừ vụ khi hoạt động, cảm giác cụm server EU của Umami khá là phò 😀
Các file track ~500 byte cho tới vài kb mà TTFB toàn > 500ms 😀 Firefox cũng phải gào là các request này chậm quá 😀 trên self host tại Singapore thì TTFB ~200ms là cùng
Có thể xử lý đơn giản nhất là delay file script.js này, nó sẽ chỉ load khi khách đã vào trang, di chuyển chuột hoặc bàn phím mới bắt đầu load, lý thuyết thì gần như bạn sẽ không thấy sự hiện diện của nó
Tổng thể lúc này dù ta đang dùng Umami Cloud nhưng hiệu quả khá tương tự self host, do hiện tại mình đang dùng Umami Cloud nên bổ xung thêm 1 chút phần này
Update 29/11/2023
Do mới chuyển về VPS tại Việt Nam, đổi sang dùng lại Nginx, mình đổi từ Umami Cloud sang chạy self host tại VPS Singapore nên cập nhập lại bài
- Cập nhập lại 1 chút các cấu hình liên quan tới database trên docker-compose.yml, giúp tăng 1 chút bảo mật
- Cập nhập proxy_pass cho Nginx, Caddy
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.