---
title: "Cách cài đặt Matomo Web Analytics trên Ubuntu 20.04"
description: "Cách cài đặt Matomo Web Analytics trên Ubuntu 20.04"
url: https://cloudfly.vn/techblog/cach-cai-dat-matomo-web-analytics-tren-ubuntu-2004
image: https://media.cloudfly.vn/posts/techblog_093I9Rt.png
---

# Cách cài đặt Matomo Web Analytics trên Ubuntu 20.04

## Giới thiệu

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.

## Điều kiện

Để hoàn thành hướng dẫn này, trước tiên bạn cần những điều sau:
* Máy chủ Ubuntu 20.04, có bật tường lửa UFW. Vui lòng đọc Thiết lập máy chủ ban đầu với Ubuntu 20.04 để tìm hiểu thêm về cách thiết lập các yêu cầu này
* Docker đã được cài đặt. Bạn có thể sử dụng **Bước 1** của Cách cài đặt và sử dụng Docker trên Ubuntu 20.04 để thực hiện việc này. Theo tùy chọn, bạn có thể làm theo Bước 2 của hướng dẫn đó nếu bạn muốn non-**root** user của mình có thể chạy các lệnh `docker` mà không cần sử dụng `sudo`
* Docker Compose đã được cài đặt. Làm theo **Bước 1** của Cách cài đặt và sử dụng Docker Compose trên Ubuntu 20.04 để cài đặt phần mềm này

<$>[note]
**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 1: Chạy Matomo và MariaDB với Docker Compose

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:
```command
cd ~
```

Sau đó, tạo thư mục `matomo` và `cd` vào đó:
```command
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`:
```command
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:

```nginx
[label docker-compose.yml]
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`:
```command
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:
```nginx
[label .env]
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:
```command
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`:
```command
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:
```
[secondary_label Output]
Creating 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`:

```command
curl --head http://localhost:8080
```

Điều này sẽ chỉ in ra các tiêu đề HTTP từ phản hồi:
```
[secondary_label Output]
HTTP/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.

## Bước 2: Cài đặt và thiết lập cấu hình Nginx

Đặ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`:
```command
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”:
```command
sudo ufw allow "Nginx Full"
```

```
[secondary_label Output]
Rule 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:
```command
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`:
```nginx
[label /etc/nginx/sites-available/matomo.conf]
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/`:
```command
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:
```command
sudo nginx -t
```

```
[secondary_label Output]
nginx: 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:
```command
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:

![description image](https://media.cloudfly.vn/posts/cach-cai-dat-Matomo-Web-Analytics-tren-Ubuntu-20.04-2.png)

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.

## Bước 3: Cài đặt Certbot và Thiết lập Chứng chỉ SSL

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ó:
```command
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`:
```command
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:
```
[secondary_label Output]
Congratulations! 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.

## Bước 4: Thiết lập Matomo

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**:

![description image](https://media.cloudfly.vn/posts/cach-cai-dat-Matomo-Web-Analytics-tren-Ubuntu-20.04-3.png)

Đâ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**:

![description image](https://media.cloudfly.vn/posts/cach-cai-dat-Matomo-Web-Analytics-tren-Ubuntu-20.04-4.png)

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:
* **Database Server:** db
* **Login:** username bạn đặt trong biến môi trường `MARIADB_USER`
* **Password:** mật khẩu bạn đặt trong biến môi trường `MARIADB_PASSWORD`
* **Database Name:** matomo

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ủ:

![description image](https://media.cloudfly.vn/posts/cach-cai-dat-Matomo-Web-Analytics-tren-Ubuntu-20.04-5.png)

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:
```command
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 đó:
```nginx
[label config.ini.php]
[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:

![description image](https://media.cloudfly.vn/posts/cach-cai-dat-Matomo-Web-Analytics-tren-Ubuntu-20.04-6.png)

Đă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:

![description image](https://media.cloudfly.vn/posts/cach-cai-dat-Matomo-Web-Analytics-tren-Ubuntu-20.04-7.png)

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.

## Kết luận

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.
