Matomo là một ứng dụng phân tích web mã nguồn mở, tự lưu trữ được viết bằng PHP.
Trong hướng dẫn này, bạn sẽ cài đặt Matomo và cơ sở dữ liệu MariaDB bằng Docker Compose, sau đó cài đặt Nginx để hoạt động như một proxy ngược cho ứng dụng Matomo. 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ừ Cơ quan cấp chứng chỉ mã hóa Let’s Encrypt.
Để hoàn thành hướng dẫn này, trước tiên bạn cần những điều sau:
docker
mà không cần sử dụng sudo
Lưu ý: Bạn có thể bỏ qua các bước điều kiện này nếu bạn đang sử dụng One-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 hình ảnh Docker 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. Bởi vì bạn sẽ sử dụng root user, bạn có thể bỏ qua các phần sudo
của tất cả các lệnh tiếp theo, nhưng không cần thiết.
Cuối cùng, để bật SSL, bạn sẽ cần một tên miền được trỏ đến địa chỉ IP công cộng của máy chủ của bạn. Ví dụ, đây phải là một cái gì đó giống như example.com
hoặc matomo.example.com
. Nếu bạn đang sử dụng CloudFly, vui lòng xem DNS Quickstart của chúng tôi để biết thông tin về cách tạo tài nguyên miền trong control panel của chúng tôi.
Khi bạn đã đáp ứng tất cả các điều kiện, 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 Matomo.
Bước đầu tiên của bạn sẽ là tạo cấu hình Docker Compose sẽ khởi chạy các vùng chứa cho cả ứng dụng Matomo và cơ sở dữ liệu MariaDB.
Hướng dẫn này sẽ đặt cấu hình của bạn bên trong một thư mục matomo
trong thư mục chính của bạn. Bạn cũng có thể chọn làm việc trong thư mục /opt/matomo
hoặc một số thư mục khác mà bạn chọn.
Trước tiên, hãy đảm bảo rằng bạn đang ở trong thư mục chính của mình:
- cd ~
Sau đó, tạo thư mục matomo
và cd
vào đó:
- mkdir matomo
- cd matomo
Bây giờ, hãy mở một tệp YAML trống mới có tên là docker-compose.yml
:
- nano docker-compose.yml
Đây là tệp cấu hình mà phần mềm docker-compose
sẽ đọc khi đưa các vùng chứa của bạn lên. Dán phần sau vào tệp:
version: "3"
services:
db:
image: mariadb
command: --max-allowed-packet=64MB
restart: always
environment:
- MARIADB_DATABASE=matomo
- MARIADB_USER
- MARIADB_PASSWORD
- MARIADB_ROOT_PASSWORD
volumes:
- ./db:/var/lib/mysql
app:
image: matomo
restart: always
volumes:
- ./matomo:/var/www/html
ports:
- 127.0.0.1:8080:80
Tệp xác định hai services
, một dịch vụ db
là vùng chứa MariaDB và một dịch vụ app
chạy phần mềm Matomo. Cả hai dịch vụ cũng tham chiếu đến một ổ đĩa được đặt tên nơi chúng lưu trữ một số dữ liệu, và dịch vụ app
cũng mở ra cổng 8080
trên giao diện loopback (127.0.0.1
) mà chúng ta sẽ kết nối qua localhost
.
Lưu tệp và thoát khỏi trình soạn thảo văn bản của bạn để tiếp tục. Trong nano
, nhấn CTRL + O
rồi ENTER
để lưu, sau đó CTRL + X
để thoát.
Vùng chứa MariaDB cần một số cấu hình được chuyển tới nó thông qua các biến môi trường để hoạt động. Tệp docker-compose.yml
liệt kê các biến môi trường này, nhưng không phải tất cả chúng đều có giá trị liên quan. Đó là bởi vì cách tốt nhất là giữ mật khẩu khỏi tệp docker-compose.yml
của bạn, đặc biệt nếu bạn sẽ gửi mật khẩu đó vào hệ thống lưu trữ Git hoặc hệ thống kiểm soát nguồn khác.
Thay vào đó, chúng ta sẽ đưa thông tin cần thiết vào tệp .env
trong cùng một thư mục, lệnh này sẽ tự động tải lệnh docker-compose
khi chúng tôi khởi động vùng chứa của mình.
Mở tệp .env
mới bằng nano
:
- nano .env
Bạn sẽ cần điền user name và password cũng như mật khẩu mạnh cho tài khoản MariaDB root superuser:
MARIADB_USER=matomo
MARIADB_PASSWORD=a_strong_password_for_user
MARIADB_ROOT_PASSWORD=a_strong_password_for_root
Một cách để tạo mật khẩu mạnh là sử dụng lệnh openssl
, lệnh này sẽ có sẵn trên hầu hết mọi hệ điều hành. Lệnh sau sẽ in ra một hàm băm 30 ký tự ngẫu nhiên mà bạn có thể sử dụng làm mật khẩu:
- openssl rand 30 | base64 -w 0 ; echo
Khi bạn điền xong thông tin vào tệp .env
của mình, hãy lưu nó và thoát khỏi trình soạn thảo văn bản của bạn.
Bây giờ, bạn đã sẵn sàng đưa hai vùng chứa lên với docker-compose
:
- sudo docker-compose up -d
Lệnh con up
yêu cầu docker-compose
khởi động các vùng chứa (và các volume và mạng) được xác định trong tệp docker-compose.yml
, và cờ -d
yêu cầu nó làm như vậy trong nền (“daemonize”), vì vậy lệnh đó không tiếp quản thiết bị đầu cuối của bạn. docker-compose
sẽ in một số đầu ra ngắn gọn khi nó khởi động các vùng chứa:
OutputCreating matomo_db_1 ... done
Creating matomo_app_1 ... done
Khi điều đó xong, Matomo sẽ chạy. Bạn có thể kiểm tra xem một máy chủ web đang chạy tại localhost:8080
bằng cách tìm nạp trang chủ bằng lệnh curl
:
- curl --head http://localhost:8080
Điều này sẽ chỉ in ra các tiêu đề HTTP từ phản hồi:
OutputHTTP/1.1 200 OK
Date: Tue, 25 Jan 2022 19:56:16 GMT
Server: Apache/2.4.51 (Debian)
X-Powered-By: PHP/8.0.14
X-Matomo-Request-Id: 1e953
Cache-Control: no-store, must-revalidate
Referrer-Policy: same-origin
Content-Security-Policy: default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' 'unsafe-eval' data:;
Set-Cookie: MATOMO_SESSID=dde7d477b0822e166ed90448964ec1e7; path=/; HttpOnly; SameSite=Lax
Content-Type: text/html; charset=utf-8
Phản hồi 200 OK
có nghĩa là máy chủ Matomo đang hoạt động, nhưng nó chỉ khả dụng trên localhost
. Tiêu đề X-Matomo-Request-Id
được đánh dấu chỉ ra rằng máy chủ là Matomo chứ không phải thứ gì khác có thể được thiết lập cấu hình để nghe trên cổng 8080. Tiếp theo, chúng ta sẽ thiết lập Nginx để ủy quyền lưu lượng truy cập công khai đến vùng chứa Matomo.
Đặt một máy chủ web như Nginx trước máy chủ Matomo 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át tệp tĩnh thành 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ó để đảo ngược các yêu cầu proxy tới Matomo, có nghĩa là nó sẽ xử lý việc chuyển các yêu cầu từ user của bạn tới Matomo và ngược lại. Sử dụng Nginx không chứa trong bộ chứa cũng sẽ giúp bạn dễ dàng thêm chứng chỉ SSL của Let’s Encrypt trong bước tiếp theo.
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 là matomo.conf
nhưng bạn có thể sử dụng một tên khác:
- sudo nano /etc/nginx/sites-available/matomo.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 miền mà bạn đã thiết lập cấu hình để trỏ đến máy chủ Matomo của mình. Ví dụ: đây phải là một cái gì đó giống như matomo.example.com
:
server {
listen 80;
listen [::]:80;
server_name your_domain_here;
access_log /var/log/nginx/matomo.access.log;
error_log /var/log/nginx/matomo.error.log;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_pass http://localhost:8080;
}
}
Cấu hình này hiện chỉ dành cho HTTP, chúng ta sẽ để Certbot đảm nhận 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, cũng như một số tiêu đề proxy quan trọng, cùng với http://localhost:8080
, vùng chứa Matomo mà chúng ta đã khởi động ở bước trước.
Lưu và đóng tệp, sau đó bậ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/matomo.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 Matomo của bạn bây giờ sẽ có sẵn trên HTTP thuần túy. Tải http://your_domain_here
(bạn có thể phải nhấp qua một cảnh báo bảo mật) và nó sẽ giống như sau:
Bây giờ bạn đã thiết lập và chạy trang web của mình qua HTTP, đã đến lúc đảm bảo kết nối bằng các chứng chỉ Certbot và Let’s Encrypt. Bạn nên thực hiện việc này trước khi thực hiện quy trình thiết lập dựa trên web của Matomo.
Nhờ Certbot và tổ chức phát hành chứng chỉ miễn phí Let’s Encrypt, việc thêm mã hóa SSL vào ứng dụng Matomo 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, chạy certbot
ở chế độ --nginx
và chỉ định cùng một miền 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 đ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. Đó là tùy thuộc vào bạn, nhưng điều này thường được khuyến khích 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://matomo.example.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=matomo.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/matomo.example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/matomo.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à có thể an toàn khi tiếp tục với các bước thiết lập dựa trên web.
Quay lại trình duyệt web của bạn, bây giờ bạn sẽ có trang Matomo’s Welcome! mở qua kết nối https://
an toàn. Bây giờ bạn có thể nhập usernames và passwords một cách an toàn để hoàn tất quá trình cài đặt.
Nhấp vào nút Next. Bạn sẽ được đưa đến bước System Check:
Đây là bản tóm tắt về hệ thống mà Matomo đang chạy và mọi thứ phải có dấu kiểm màu xanh lục cho biết không có vấn đề gì. Cuộn xuống dưới cùng và nhấp vào nút Next.
Bây giờ bạn sẽ ở trang Database Setup:
Thông tin bạn điền vào trang này sẽ cho ứng dụng Matomo biết cách kết nối với cơ sở dữ liệu MariaDB. Bạn sẽ cần MARIADB_USER
và MARIADB_PASSWORD
mà bạn đã chọn ở Bước 1. Bạn có thể sao chép chúng ra khỏi tệp .env
của mình nếu cần.
Điền vào bốn trường đầu tiên:
MARIADB_USER
MARIADB_PASSWORD
Các giá trị mặc định là tốt cho hai trường còn lại.
Nhấp vào Next một lần nữa. Bạn sẽ nhận được xác nhận rằng cơ sở dữ liệu đã được thiết lập chính xác. Nhấp vào Next một lần nữa. Sau đó, bạn sẽ cần thiết lập người dùng quản trị (admin user) và cuối cùng bạn sẽ thiết lập thông tin về trang web đầu tiên mà bạn muốn thu thập số liệu phân tích.
Sau tất cả những điều đó, bạn sẽ kết thúc ở bước 8, trang Congratulations. Bạn gần như đã hoàn thành. Cuộn xuống dưới cùng và nhấp vào nút Continue to Matomo và bạn sẽ được đưa đến trang chủ:
Sẽ có một cảnh báo lớn ở đầu trang. Có một bản cập nhật nhỏ mà bạn cần thực hiện đối với tệp cấu hình của Matomo để hoàn tất quá trình này.
Quay lại dòng lệnh, mở tệp cấu hình bằng trình soạn thảo văn bản:
- sudo nano matomo/config/config.ini.php
Gần trên cùng, bạn sẽ có phần [General]
. Hãy thêm ba dòng cuối cùng, được đánh dấu bên dưới, vào cuối phần đó:
[General]
proxy_client_headers[] = "HTTP_X_FORWARDED_FOR"
proxy_host_headers[] = "HTTP_X_FORWARDED_HOST"
salt = "e0a81d6e54d6d2200efd0f0ef6ef8563"
trusted_hosts[] = "localhost"
trusted_hosts[] = "example.com"
trusted_hosts[] = "localhost:8080"
assume_secure_protocol = 1
force_ssl = 1
Các tùy chọn này cho Matomo biết rằng sử dụng cổng 8080
là an toàn và giả định rằng nó luôn được truy cập qua kết nối an toàn.
Lưu và đóng tệp cấu hình, sau đó chuyển về trình duyệt của bạn và tải lại trang. Lỗi sẽ biến mất và bạn sẽ được hiển thị với lời nhắc đăng nhập:
Đăng nhập bằng tài khoản quản trị bạn đã tạo trong khi thiết lập và bạn sẽ được đưa đến trang tổng quan:
Bởi vì bạn có thể chưa thiết lập mã theo dõi của mình, trang tổng quan sẽ cho biết rằng không có dữ liệu nào được ghi lại. Làm theo hướng dẫn để hoàn tất thiết lập mã JavaScript trên trang web của bạn để bắt đầu nhận dữ liệu phân tích.
Trong hướng dẫn này, bạn đã khởi chạy ứng dụng phân tích Matamo và cơ sở dữ liệu MariaDB 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 của Let’s Encrypt.
Bây giờ, bạn đã sẵn sàng thiết lập trang web của mình và thêm tập lệnh theo dõi phân tích Matomo. Để biết thêm thông tin về cách vận hành phần mềm Matomo, vui lòng xem tài liệu chính thức của Matomo.