Cách cài đặt Umami Analytics trên Debian 12

theanh

Administrator
Nhân viên
Umami là một giải pháp phân tích web tự lưu trữ, mã nguồn mở, rất nhẹ. Đây là một giải pháp thay thế tốt cho Google Analytics và các giải pháp phân tích trả phí khác, tập trung vào quyền riêng tư. Một trong những lợi thế chính khi sử dụng Umami là nó không đặt bất kỳ cookie nào trên trình duyệt của người dùng, nghĩa là bạn không cần phải đặt biểu ngữ cookie khó chịu trên trang web của mình.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách cài đặt Umami analytics trên máy chủ Debian 12 và sử dụng nó để theo dõi các trang web.

Điều kiện tiên quyết​


  • Một máy chủ chạy Debian 12.

  • Một người dùng không phải root có quyền sudo.

  • Một tên miền đủ điều kiện (FQDN) như umami.example.com trỏ đến máy chủ.

  • Tường lửa đơn giản (UFW) đã được bật và đang chạy.

  • Cập nhật mọi thứ.
Mã:
$ sudo apt update && sudo apt upgrade
[*]
Cài đặt các gói thiết yếu mà hệ thống của bạn cần. Một số gói này có thể đã được cài đặt trên hệ thống của bạn.
Mã:
$ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y

Bước 1 - Cấu hình Tường lửa​

Bước đầu tiên là cấu hình tường lửa. Ubuntu mặc định có ufw (Uncomplicated Firewall).

Kiểm tra xem tường lửa có đang chạy không.
Mã:
$ sudo ufw status
Bạn sẽ nhận được kết quả sau.
Mã:
Status: inactive
Cho phép cổng SSH để tường lửa không làm gián đoạn kết nối hiện tại khi bật nó.
Mã:
$ sudo ufw allow OpenSSH
Cho phép các cổng HTTP và HTTPS như tốt.
Mã:
$ sudo ufw allow http
$ sudo ufw allow https
Bật Tường lửa
Mã:
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Kiểm tra trạng thái của tường lửa một lần nữa.
Mã:
$ sudo ufw status
Bạn sẽ thấy kết quả tương tự.
Mã:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)

Bước 2 - Cài đặt Git​

Cần có Git để sao chép kho lưu trữ chính thức của Umami. Cài đặt Git.
Mã:
$ sudo apt install git
Xác minh cài đặt.
Mã:
$ git --version
git version 2.39.2
Thiết lập cấu hình ban đầu variables.
Mã:
$ git config --global user.name "Your Name"
$ git config --global user.email "[emailprotected]"

Bước 3 - Cài đặt Node​

Umami là một ứng dụng JavaScript chạy trên Nodejs. Để cài đặt Node, chúng ta sẽ sử dụng trình cài đặt của Nodesource. Vì Node v16.0 là phiên bản ổn định hiện tại, chúng tôi sẽ cài đặt phiên bản đó.

Tải xuống và nhập khóa GPG Nodesource
Mã:
$ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/nodesource.gpg
Tạo kho lưu trữ Node Deb.
Mã:
$ NODE_MAJOR=18
$ echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
Cập nhật kho lưu trữ gói hệ thống Debian danh sách.
Mã:
$ sudo apt update
Cài đặt Node.
Mã:
$ sudo apt install nodejs
Xác minh Node cài đặt.
Mã:
$ node --version
v18.18.0

Bước 4 - Cài đặt MariaDB Server​

Debian 12 không đi kèm MySQL theo mặc định và họ vẫn chưa phát hành gói chính thức cho MySQL. Do đó, chúng tôi sẽ sử dụng MariaDB cho MySQL.

Debian 12 đi kèm MariaDB 10.11.4 Chúng tôi sẽ cài đặt MariaDB. Tuy nhiên, bạn có thể cài đặt phiên bản mới nhất từ kho lưu trữ.
Mã:
$ sudo apt install mariadb-server
Kiểm tra phiên bản MySQL.
Mã:
$ mysql --version
mysql Ver 15.1 Distrib 10.11.4-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
Chạy cài đặt an toàn MariaDB script.
Mã:
$ sudo mariadb-secure-installation
Bạn sẽ được yêu cầu nhập mật khẩu gốc. Nhấn Enter vì chúng tôi chưa đặt bất kỳ mật khẩu nào cho nó.
Mã:
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none):
Tiếp theo, bạn sẽ được hỏi có muốn chuyển sang phương pháp xác thực socket Unix không. Plugin unix_socket cho phép bạn sử dụng thông tin xác thực hệ điều hành của mình để kết nối với máy chủ MariaDB. Vì bạn đã có tài khoản root được bảo vệ, hãy nhập n để tiếp tục.
Mã:
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] n
Tiếp theo, bạn sẽ được hỏi xem bạn có muốn thay đổi mật khẩu root của mình không. Trên Debian 12, mật khẩu root gắn chặt với việc bảo trì hệ thống tự động, vì vậy bạn nên để nguyên. Nhập n để tiếp tục.
Mã:
... skipping.
You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n] n
Tiếp theo, bạn sẽ được hỏi một số câu hỏi nhất định để cải thiện tính bảo mật của MariaDB. Nhập Y để xóa người dùng ẩn danh, không cho phép đăng nhập root từ xa, xóa cơ sở dữ liệu thử nghiệm và tải lại các bảng đặc quyền.
Mã:
... skipping.
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y ... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y ... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y ... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Bạn có thể vào shell MariaDB bằng cách nhập sudo mysql hoặc sudo mariadb trên dòng lệnh.

Bước 5 - Tải xuống Umami​

Bước đầu tiên là cài đặt trình quản lý gói Yarn. Chúng ta có thể cài đặt nó bằng NPM.
Mã:
$ sudo npm install -g yarn
Vì Umami là ứng dụng Node và không có thư mục webroot công khai, nên chúng ta không cần lưu trữ nó qua thư mục /var/www.

Sao chép GitHub của Umami kho lưu trữ.
Mã:
$ git clone https://github.com/mikecao/umami.git
Chuyển sang thư mục mới được tạo.
Mã:
$ cd umami
Cài đặt Umami mô-đun.
Mã:
$ yarn install

Bước 6 - Cấu hình Umami​

Tạo thông tin xác thực MySQL và điền thông tin vào cơ sở dữ liệu​

Vào shell MySQL. Nhập mật khẩu gốc của bạn để tiếp tục.
Mã:
$ sudo mysql
Tạo người dùng umami. Đảm bảo mật khẩu đáp ứng các yêu cầu đã đặt trước.
Mã:
mysql> CREATE USER 'umamiuser'@'localhost' IDENTIFIED BY 'YourPassword';
Tạo umami cơ sở dữ liệu.
Mã:
mysql> CREATE DATABASE umami;
Cấp quyền cho người dùng trên umami cơ sở dữ liệu.
Mã:
mysql> GRANT ALL PRIVILEGES ON umami.* TO 'umamiuser'@'localhost';
Vì chúng ta không sửa đổi người dùng gốc, bạn nên tạo một người dùng SQL khác để thực hiện các tác vụ quản trị sử dụng xác thực mật khẩu. Chọn một mật khẩu mạnh cho mật khẩu này.
Mã:
MariaDB> GRANT ALL ON *.* TO 'navjot'@'localhost' IDENTIFIED BY 'Yourpassword32!' WITH GRANT OPTION;
Xóa quyền.
Mã:
mysql> FLUSH PRIVILEGES;
Thoát khỏi Vỏ.
Mã:
mysql> exit

Cấu hình Biến môi trường Umami​

Chúng ta cần một App secret mạnh cho mục đích ghi nhật ký. Đối với mục đích này, chúng ta sẽ sử dụng lệnh OpenSSL.
Mã:
$ openssl rand 30 | openssl base64 -A
bu4orqfdlG+Dh3Otau4oWSBbI9kGWSkGfYc/WiH/
Tạo tệp .env để lưu trữ các biến môi trường cho Umami cài đặt.
Mã:
$ touch .env
Mở tệp để chỉnh sửa.
Mã:
$ nano .env
Dán mã sau vào đó. Bạn sẽ cần mã hóa bất kỳ ký tự đặc biệt nào trong mật khẩu của mình cho URL cơ sở dữ liệu. Sử dụng bộ mã hóa meyerweb cho mục đích này. Trong trường hợp của chúng tôi, # được dịch thành %23. URL cơ sở dữ liệu kết thúc bằng tên cơ sở dữ liệu mà chúng ta cần kết nối tới. Sử dụng bí mật ứng dụng được tạo trước đó cho biến APP_SECRET. Tùy chọn DISABLE_TELEMETRY=1 vô hiệu hóa việc ứng dụng gửi dữ liệu ẩn danh đến máy chủ của Umami. Biến TRACKER_SCRIPT_NAME hữu ích để tránh việc tập lệnh của bạn bị chặn bởi Trình chặn quảng cáo. Đặt cho nó một cái tên duy nhất, một cái tên độc đáo cho trang web của bạn.
Mã:
DATABASE_URL=mysql://umamiuser:YourPassword@localhost:3306/umami
APP_SECRET=bu4orqfdlG+Dh3Otau4oWSBbI9kGWSkGfYc/WiH/
DISABLE_TELEMETRY=1
TRACKER_SCRIPT_NAME=custom

Bước 7 - Chạy Umami​

Bây giờ mọi thứ đã được thiết lập, hãy xây dựng ứng dụng Umami.
Mã:
$ yarn build
Bước tiếp theo là khởi động ứng dụng. Chúng ta có thể khởi động ứng dụng bằng lệnh yarn start nhưng điều đó có nghĩa là bạn cần phải giữ terminal mở để Umami chạy. Do đó, chúng ta cần một cách để chạy Umami ở chế độ nền. Để thực hiện điều này, chúng ta sẽ cài đặt PM2 (Advanced Production Process Manager for Node).

Cài đặt PM2.
Mã:
$ sudo yarn global add pm2
Tùy chọn global có nghĩa là chúng ta đang cài đặt PM2 trên toàn cầu và do đó, chúng ta cần đặc quyền sudo để chạy lệnh.

Khởi động Umami ứng dụng.
Mã:
$ pm2 start yarn --name umami -- start
Bạn sẽ nhận được kết quả sau.
Mã:
[PM2] Starting /usr/bin/yarn in fork_mode (1 instance)
[PM2] Done.
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? id ? name ? namespace ? version ? mode ? pid ? uptime ? ? ? status ? cpu ? mem ? user ? watching ?
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 0 ? umami ? default ? N/A ? fork ? 2020 ? 0s ? 0 ? online ? 0% ? 18.8mb ? navjot ? disabled ?
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Lưu ứng dụng Umami với PM2 để sử dụng sau sử dụng.
Mã:
$ pm2 save
[PM2] Saving current process list...
[PM2] Successfully saved in /home/navjot/.pm2/dump.pm2
Umami sẽ tự động khởi động lại nếu nó bị sập hoặc bị tắt nhưng không tự động khởi động lại nếu hệ thống được khởi động lại. Chúng ta cần tạo một tập lệnh systemd để đảm bảo nó khởi động lại trong suốt quá trình khởi động lại hệ thống. Chạy lệnh sau để tạo một tập lệnh khởi động.
Mã:
$ pm2 startup
Kết quả đầu ra sẽ cung cấp cho bạn lệnh để thiết lập PM2 chạy khi khởi động. Trong trường hợp của bạn, kết quả đầu ra sẽ cung cấp cho bạn tên người dùng hiện tại. Chạy lệnh sau để tạo tập lệnh khởi động.
Mã:
$ sudo env PATH=$PATH:/usr/bin /usr/local/share/.config/yarn/global/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot

Bước 8 - Cài đặt Nginx​

Debian 12 đi kèm với phiên bản Nginx cũ hơn. Để cài đặt phiên bản mới nhất, bạn cần tải xuống kho lưu trữ Nginx chính thức.

Nhập khóa ký của Nginx.
Mã:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Thêm kho lưu trữ cho phiên bản ổn định của Nginx.
Mã:
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Cập nhật hệ thống kho lưu trữ.
Mã:
$ sudo apt update
Cài đặt Nginx.
Mã:
$ sudo apt install nginx
Xác minh cài đặt. Trên hệ thống Debian, lệnh sau chỉ hoạt động với sudo.
Mã:
$ sudo nginx -v
nginx version: nginx/1.24.0
Bắt đầu Nginx.
Mã:
$ sudo systemctl start nginx
Kiểm tra trạng thái dịch vụ.
Mã:
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled) Active: active (running) since Tue 2023-10-10 11:19:45 UTC; 9s ago Docs: https://nginx.org/en/docs/ Process: 3646 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 3647 (nginx) Tasks: 3 (limit: 4652) Memory: 2.4M CPU: 8ms CGroup: /system.slice/nginx.service ??3647 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??3648 "nginx: worker process" ??3649 "nginx: worker process"
Oct 10 11:19:45 umami systemd[1]: Starting nginx.service - nginx - high performance web server...
Oct 10 11:19:45 umami systemd[1]: Started nginx.service - nginx - high performance web server.

Bước 9 - Cài đặt SSL bằng Let's Encrypt​

Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL miễn phí do Let's Encrypt cung cấp.

Bạn có thể cài đặt Certbot bằng kho lưu trữ của Debian hoặc tải phiên bản mới nhất bằng công cụ Snapd. Chúng ta sẽ sử dụng phiên bản Snapd.

Debian 12 không đi kèm Snapd đã cài đặt. Cài đặt gói Snapd.
Mã:
$ sudo apt install snapd
Đảm bảo phiên bản Snapd của bạn được cập nhật.
Mã:
$ sudo snap install core
$ sudo snap refresh core
Cài đặt Certbot.
Mã:
$ sudo snap install --classic certbot
Sử dụng lệnh sau để đảm bảo lệnh Certbot có thể chạy được bằng cách tạo liên kết tượng trưng đến /usr/bin thư mục.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Xác minh cài đặt.
Mã:
$ certbot --version
certbot 2.7.0
Tạo SSL chứng chỉ.
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d umami.example.com
Lệnh trên sẽ tải chứng chỉ xuống thư mục /etc/letsencrypt/live/umami.example.com trên máy chủ của bạn.

Tạo nhóm Diffie-Hellman chứng chỉ.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Kiểm tra dịch vụ lập lịch gia hạn Certbot.
Mã:
$ sudo systemctl list-timers
Bạn sẽ tìm thấy snap.certbot.renew.service là một trong những dịch vụ được lên lịch chạy.
Mã:
NEXT LEFT LAST PASSED UNIT ACTIVATES
.....
Tue 2023-10-10 14:24:00 UTC 1h 55min left - - snap.certbot.renew.timer snap.certbot.renew.service
Wed 2023-10-11 00:00:00 UTC 11h left - - dpkg-db-backup.timer dpkg-db-backup.service
Wed 2023-10-11 00:00:00 UTC 11h left Tue 2023-10-10 00:00:04 UTC 12h ago exim4-base.timer exim4-base.service
Thực hiện chạy thử quy trình để kiểm tra xem việc gia hạn SSL có hoạt động không tốt.
Mã:
$ sudo certbot renew --dry-run
Nếu bạn không thấy lỗi nào, bạn đã hoàn tất. Chứng chỉ của bạn sẽ tự động gia hạn.

Bước 10 - Cấu hình Nginx​

Tạo và mở tệp /etc/nginx/conf.d/umami.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/umami.conf
Dán mã sau vào nó.
Mã:
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name umami.example.com; access_log /var/log/nginx/umami.access.log; error_log /var/log/nginx/umami.error.log; # SSL ssl_certificate /etc/letsencrypt/live/umami.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/umami.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/umami.example.com/chain.pem; ssl_session_timeout 5m; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; resolver 8.8.8.8; location / { proxy_pass http://localhost: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; }
}
# enforce HTTPS
server { listen 80; listen [::]:80; server_name umami.example.com; return 301 https://$host$request_uri;
}
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc sau khi hoàn tất.

Mở tệp /etc/nginx/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Thêm dòng sau vào trước dòng include /etc/nginx/conf.d/*.conf;.
Mã:
server_names_hash_bucket_size 64;
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Xác minh tệp cấu hình Nginx cú pháp.
Mã:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Khởi động lại dịch vụ Nginx để kích hoạt cấu hình mới.
Mã:
$ sudo systemctl restart nginx

Bước 11 - Thiết lập Site và Thu thập Số liệu Thống kê​

Mở URL https://umami.example.com trong trình duyệt của bạn và nó sẽ trông như sau.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22459%22%20height=%22482%22%3E%3C/svg%3E


Umami tạo một tài khoản quản trị viên mặc định với tên người dùng admin và mật khẩu là umami trong quá trình cài đặt. Sử dụng thông tin đăng nhập này để đăng nhập.

Sau khi đăng nhập, bạn sẽ được chào đón bằng trang sau.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22654%22%3E%3C/svg%3E


Truy cập trang cài đặt và nhấp vào Thêm trang web để bắt đầu.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22535%22%3E%3C/svg%3E


Sau khi bạn đã thêm trang web, hãy nhấp vào nút Chỉnh sửa rồi chuyển sang tab Mã theo dõi để lấy mã.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22276%22%3E%3C/svg%3E


Dán mã vào giữa tiêu đề hoặc thẻ HTML chân trang và trong vòng vài phút, Umami sẽ bắt đầu nhận dữ liệu.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22546%22%3E%3C/svg%3E

Bước 12 - Cập nhật Umami​

Để cập nhật Umami, hãy chuyển sang cài đặt Umami thư mục.
Mã:
$ cd ~/umami
Dừng ứng dụng Umami.
Mã:
$ pm2 stop umami
Cài đặt bất kỳ ứng dụng mới hoặc đã cập nhật nào phụ thuộc.
Mã:
$ yarn install
Xây dựng lại ứng dụng Umami.
Mã:
$ yarn build
Khởi động Umami ứng dụng.
Mã:
$ pm2 start umami

Kết luận​

Bài hướng dẫn về cách cài đặt và thiết lập công cụ Umami Analytics trên máy chủ Debian 12 của chúng tôi đã kết thúc. Nếu bạn có bất kỳ câu hỏi nào, hãy đăng chúng trong phần bình luận bên dưới.
 
Back
Bên trên