Umami là một ứng dụng phân tích trang web mã nguồn mở, tự lưu trữ, được viết bằng Node.js. Nó tập trung vào sự đơn giản, được thiết kế tốt, nhanh chóng và tập trung vào quyền riêng tư. Nó có thể lưu trữ dữ liệu về khách truy cập trang web của bạn trong cơ sở dữ liệu MySQL hoặc PostgreSQL.
Trong hướng dẫn này, bạn sẽ cài đặt Umami và cơ sở dữ liệu PostgreSQL bằng Docker Compose, sau đó cài đặt Nginx để hoạt động như một proxy ngược cho Umami. Cuối cùng, bạn sẽ kích hoạt các kết nối HTTPS an toàn bằng cách sử dụng Certbot để tải xuống và thiết lập cấu hình chứng chỉ SSL từ Tổ chức phát hành chứng chỉ Let's Encrypt.
Để hoàn thành hướng dẫn này, trước tiên bạn cần những thứ sau:
docker
mà không cần sử dụng sudo
Lưu ý: Có thể bỏ qua các bước tiên quyết này nếu bạn đang sử dụng 1-Click Docker Image của CloudFly. Hình ảnh này sẽ có Docker, Docker Compose và UFW đã được cài đặt và thiết lập cấu hình.
Khởi chạy một Docker image mới trong khu vực bạn chọn, sau đó đăng nhập với tư cách root user và tiếp tục với hướng dẫn. Theo tùy chọn, bạn có thể bỏ qua phần sudo
của tất cả các lệnh, nhưng điều đó là không cần thiết.
Cuối cùng, để kích hoạt SSL, bạn sẽ cần một tên miền trỏ tới địa chỉ IP công khai của máy chủ. Giống như example.com
hoặc umami.example.com
chẳng hạn.
Khi bạn đã đáp ứng tất cả các điều kiện tiên quyết, hãy chuyển sang Bước 1, nơi bạn sẽ tải xuống và khởi chạy phần mềm Umami.
Bước đầu tiên của bạn là sao chép kho lưu trữ Umami Git, cập nhật tệp cấu hình docker-compose.yml
, sau đó khởi động các bộ chứa Umami và PostgreSQL.
Bạn sẽ tải repo vào thư mục /opt
. Sử dụng lệnh cd
để đến đó ngay bây giờ:
- cd /opt
Sau đó, sử dụng lệnh git
để sao chép repo từ GitHub:
- sudo git clone https://github.com/mikecao/umami.git
Thao tác này sẽ kéo tất cả phần mềm và tệp cấu hình vào /opt/umami
. Di chuyển vào thư mục umami
mới được tạo ngay bây giờ:
- cd umami
Bây giờ bạn cần cập nhật tệp docker-compose.yml
của dự án. Tệp này là thứ mà lệnh docker-compose
sử dụng để thiết lập cấu hình và khởi chạy nhiều vùng chứa Docker cùng một lúc. Chúng ta cần thay đổi hai tùy chọn trong tệp này: IP mà Umami liên kết và một hash ngẫu nhiên được sử dụng làm salt khi mã hóa mọi thứ trong cơ sở dữ liệu.
Trước khi bạn mở docker-compose.yml
để chỉnh sửa nó, hãy tạo một hash ngẫu nhiên mới để dán vào tệp:
- openssl rand -base64 32
OutputtCgKyCWc/3C9VH+Ex0TysXsGEKQklQXm0H3nSnlR48g=
Điều này sử dụng lệnh openssl
để tạo 32 ký tự ngẫu nhiên. Sao chép đầu ra vào khay nhớ tạm của bạn, sau đó mở tệp cấu hình:
- sudo nano docker-compose.yml
Tìm tùy chọn HASH_SALT
, xóa placeholder text và dán vào hash ngẫu nhiên bạn vừa tạo:
. . .
HASH_SALT: replace-me-with-a-random-string
. . .
Tiếp theo, tìm phần ports:
của cấu hình:
. . .
ports:
- "127.0.0.1:3000:3000"
. . .
Cập nhật giá trị "3000:3000"
bằng cách thêm 127.0.0.1:
vào giá trị đó. Điều này đảm bảo rằng Umami chỉ lắng nghe trên giao diện máy chủ cục bộ và không có sẵn công khai. Mặc dù bạn đã thiết lập tường lửa UFW, nhưng do một số điểm kỳ quặc trong cách thức hoạt động của mạng Docker, nếu bạn không thực hiện bước này, bộ chứa Umami của bạn sẽ có thể được truy cập công khai trên cổng 3000
.
Khi các thay đổi cấu hình đó hoàn tất, hãy lưu tệp (CTRL+O
rồi ENTER
bằng nano
) và đóng trình chỉnh sửa của bạn (CTRL+X
).
Bây giờ, hãy sử dụng docker-compose
để khởi động hai vùng chứa của bạn:
- sudo docker-compose up --detach
Cờ --detach
yêu cầu docker-compose
tạo các vùng chứa trong background, tách ra khỏi terminal session của chúng ta:
Output. . .
Creating umami_db_1 ... done
Creating umami_umami_1 ... done
Umami và PostgreSQL hiện đang chạy. Bạn có thể xác minh điều này bằng cách sử dụng lệnh curl
để tìm nạp trang chủ của bộ chứa Umami mới chạy trên localhost:
- curl localhost:3000
Output<!DOCTYPE html><html><head><meta charSet="utf-8"/> . . .
Nếu một lượng lớn HTML được xuất ra thiết bị đầu cuối của bạn, thì bạn biết rằng máy chủ Umami đã hoạt động.
Tiếp theo, chúng ta sẽ thiết lập Nginx để đảo ngược proxy Umami từ localhost:3000
thành công khai.
Đặt một máy chủ web chẳng hạn như Nginx trước máy chủ Node.js của bạn có thể cải thiện hiệu suất bằng cách giảm tải bộ nhớ đệm, nén và phân phối tệp tĩnh cho một quy trình hiệu quả hơn. Chúng ta sẽ cài đặt Nginx và thiết lập cấu hình nó thành các yêu cầu proxy tới Umami, nghĩa là nó sẽ xử lý các yêu cầu từ user của bạn tới Umami và ngược lại.
Trước tiên, hãy làm mới danh sách gói của bạn, sau đó cài đặt Nginx bằng apt
:
- sudo apt update
- sudo apt install nginx
Cho phép lưu lượng truy cập công khai đến các cổng 80
và 443
(HTTP và HTTPS) bằng cách sử dụng cấu hình ứng dụng UFW “Nginx Full”:
- sudo ufw allow "Nginx Full"
OutputRule added
Rule added (v6)
Tiếp theo, mở tệp cấu hình Nginx mới trong thư mục /etc/nginx/sites-available
. Chúng tôi sẽ gọi tên của chúng tôi là umami.conf
nhưng bạn có thể sử dụng một tên khác:
- sudo nano /etc/nginx/sites-available/umami.conf
Dán phần sau vào tệp cấu hình mới, đảm bảo thay thế your_domain_here
bằng tên miền mà bạn đã thiết lập cấu hình để trỏ đến máy chủ Umami của mình. Ví dụ như umami.example.com
:
server {
listen 80;
listen [::]:80;
server_name your_domain_here;
access_log /var/log/nginx/umami.access.log;
error_log /var/log/nginx/umami.error.log;
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;
}
}
Cấu hình này hiện chỉ dành cho HTTP, vì chúng ta sẽ để Certbot đảm nhiệm việc thiết lập cấu hình SSL trong bước tiếp theo. Phần còn lại của cấu hình thiết lập các vị trí ghi nhật ký và sau đó chuyển tất cả lưu lượng truy cập đến http://localhost:3000
, phiên bản Umami mà chúng ta đã bắt đầu ở bước trước.
Lưu và đóng tệp, sau đó kích hoạt cấu hình bằng cách liên kết nó vào /etc/nginx/sites-enabled/
:
- sudo ln -s /etc/nginx/sites-available/umami.conf /etc/nginx/sites-enabled/
Sử dụng nginx -t
để xác minh rằng cú pháp tệp cấu hình là chính xác:
- sudo nginx -t
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Và cuối cùng, tải lại dịch vụ nginx
để nhận cấu hình mới:
- sudo systemctl reload nginx
Trang web Umami của bạn bây giờ sẽ khả dụng trên HTTP đơn giản. Tải http://your_domain_here
và nó sẽ trông như thế này:
Bây giờ bạn đã thiết lập và chạy trang web của mình qua HTTP, đã đến lúc bảo mật kết nối với chứng chỉ Certbot và Let's Encrypt.
Nhờ có Certbot và cơ quan cấp chứng chỉ miễn phí Let's Encrypt, việc thêm mã hóa SSL vào ứng dụng Umami của chúng ta sẽ chỉ mất hai lệnh.
Đầu tiên, cài đặt Certbot và plugin Nginx của nó:
- sudo apt install certbot python3-certbot-nginx
Tiếp theo, hãy chạy certbot
ở chế độ --nginx
và chỉ định cùng một miền mà bạn đã sử dụng trong cấu hình Nginx server_name
:
- sudo certbot --nginx -d your_domain_here
Bạn sẽ được nhắc đồng ý với các điều khoản dịch vụ của Let's Encrypt và nhập địa chỉ email.
Sau đó, bạn sẽ được hỏi có muốn chuyển hướng tất cả lưu lượng HTTP sang HTTPS hay không. Điều đó tùy thuộc vào bạn, nhưng điều này thường được khuyến nghị và an toàn để thực hiện.
Sau đó, Let's Encrypt sẽ xác nhận yêu cầu của bạn và Certbot sẽ tải xuống chứng chỉ của bạn:
OutputCongratulations! You have successfully enabled https://umami.example.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=umami.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/umami.example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/umami.example.com/privkey.pem
Your cert will expire on 2021-12-06. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Certbot sẽ tự động tải lại Nginx để nhận cấu hình và chứng chỉ mới. Tải lại trang web của bạn và nó sẽ tự động chuyển bạn sang HTTPS nếu bạn chọn tùy chọn chuyển hướng.
Trang web của bạn hiện đã được bảo mật và bạn có thể đăng nhập an toàn bằng user admin mặc định và mật khẩu umami. Vui lòng thực hiện việc này ngay lập tức và làm theo tài liệu đăng nhập chính thức đầu tiên để đăng nhập và thay đổi mật khẩu admin của bạn thành mật khẩu an toàn hơn.
Khi đăng nhập lần đầu, bạn sẽ thấy một bảng điều khiển hơi trống:
Bạn đã cài đặt và bảo mật thành công phần mềm phân tích Umami của mình. Trong phần kết của hướng dẫn này, bạn sẽ tìm thấy các liên kết đến tài liệu giúp bạn bắt đầu với việc thêm trang web của mình vào Umami và thêm đoạn mã theo dõi Umami vào trang web của bạn.
Trong hướng dẫn này, bạn đã khởi chạy ứng dụng Umami và cơ sở dữ liệu PostgreSQL bằng Docker Compose, sau đó thiết lập proxy ngược Nginx và bảo mật nó bằng chứng chỉ SSL Let's Encrypt.
Ngoài ra, bạn nên đăng nhập và cập nhật mật khẩu mặc định. Hãy làm điều đó ngay bây giờ.
Sau đó, tiếp tục với tài liệu chính thức để tìm hiểu cách thêm trang web vào Umami, sau đó bắt đầu thu thập dữ liệu bằng cách cài đặt mã theo dõi trên trang web của bạn.