如何在Ubuntu20.04上安装MatomoWebAnalytics
介绍
Matomo 是用 PHP 编写的开源、自托管 Web 分析应用程序。
在本教程中,您将使用 Docker Compose 安装 Matomo 和 MariaDB 数据库,然后安装 Nginx 作为 Matomo 应用程序的反向代理。 最后,您将通过使用 Certbot 从 Let's Encrypt 证书颁发机构下载和配置 SSL 证书来启用安全 HTTPS 连接。
先决条件
为了完成本教程,您首先需要以下内容:
- 启用了 UFW 防火墙的 Ubuntu 20.04 服务器。 请阅读 Initial Server Setup with Ubuntu 20.04 了解有关设置这些要求的更多信息
- 安装了 Docker。 您可以使用 How To Install and Use Docker on Ubuntu 20.04 的 Step 1 来完成此操作。 或者,如果您希望非 root 用户能够在不使用
sudo
的情况下运行docker
命令,则可以选择遵循该教程的第 2 步 - Docker Compose 已安装。 按照如何在Ubuntu 20.04上安装和使用Docker Compose的Step 1安装本软件
注意: 如果您使用的是 DigitalOcean 的 One-Click Docker Image ,则可以跳过这些先决步骤。 此映像将已安装和配置 Docker、Docker Compose 和 UFW。
在您选择的区域中启动一个新的 Docker 映像,然后以 root 用户身份登录并继续学习本教程。 因为您将使用 root 用户,所以您可以省略后面所有命令的 sudo
部分,但这不是必需的。
最后,要启用 SSL,您需要一个指向服务器公共 IP 地址的域名。 例如,这应该类似于 example.com
或 matomo.example.com
。 如果您使用的是 DigitalOcean,请参阅我们的 DNS 快速入门 ,了解有关在我们的控制面板中创建域资源的信息。
当您满足所有先决条件后,继续 步骤 1,您将在此处下载并启动 Matomo 软件。
第 1 步 — 使用 Docker Compose 运行 Matomo 和 MariaDB
您的第一步将是创建 Docker Compose 配置,该配置将为 Matomo 应用程序和 MariaDB 数据库启动容器。
本教程会将您的配置放在主目录中的 matomo
目录中。 您还可以选择在 /opt/matomo
目录或您选择的其他目录中工作。
首先确保你在你的主目录中:
cd ~
然后在其中创建 matomo
目录和 cd
:
mkdir matomo cd matomo
现在打开一个名为 docker-compose.yml
的新空白 YAML 文件:
nano docker-compose.yml
这是 docker-compose
软件在启动容器时将读取的配置文件。 将以下内容粘贴到文件中:
码头工人-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
该文件定义了两个 services
,一个是 MariaDB 容器的 db
服务,以及一个运行 Matomo 软件的 app
服务。 这两个服务还引用了一个命名卷,它们在其中存储一些数据,并且 app
服务还在环回 (127.0.0.1
) 接口上打开端口 8080
,我们将连接它通过 localhost
。
保存文件并退出文本编辑器以继续。 在nano
中,按CTRL+O
再按ENTER
保存,再按CTRL+X
退出。
MariaDB 容器需要通过环境变量传递一些配置才能运行。 docker-compose.yml
文件列出了这些环境变量,但并非所有变量都有关联的值。 这是因为将密码保存在 docker-compose.yml
文件之外是一种很好的做法,尤其是当您将其提交到 Git 存储库或其他源代码控制系统时。
相反,我们会将必要的信息放在同一目录中的 .env
文件中,当我们启动容器时,docker-compose
命令将自动加载该文件。
用 nano
打开一个新的 .env
文件:
nano .env
您需要填写用户名和密码,以及 MariaDB root 超级用户帐户的强密码:
.env
MARIADB_USER=matomo MARIADB_PASSWORD=a_strong_password_for_user MARIADB_ROOT_PASSWORD=a_strong_password_for_root
生成强密码的一种方法是使用 openssl
命令,该命令在大多数操作系统上都应该可用。 以下命令将打印出一个随机的 30 个字符的哈希值,您可以将其用作密码:
openssl rand 30 | base64 -w 0 ; echo
当您在 .env
文件中填写完信息后,保存并退出文本编辑器。
您现在可以使用 docker-compose
调出两个容器:
sudo docker-compose up -d
up
子命令告诉 docker-compose
启动在 docker-compose.yml
文件中定义的容器(以及卷和网络),并且 -d
标志告诉它这样做在后台(“守护进程”),因此该命令不会接管您的终端。 docker-compose
将在启动容器时打印一些简短的输出:
OutputCreating matomo_db_1 ... done Creating matomo_app_1 ... done
完成后,Matomo 应该正在运行。 您可以通过使用 curl
命令获取主页来测试 Web 服务器是否在 localhost:8080
上运行:
curl --head http://localhost:8080
这将仅打印响应中的 HTTP 标头:
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
200 OK
响应意味着 Matomo 服务器已启动并正在运行,但它仅在 localhost
上可用。 突出显示的 X-Matomo-Request-Id
标头表示服务器是 Matomo,而不是可能配置为侦听端口 8080 的其他服务器。 接下来,我们将设置 Nginx 将公共流量代理到 Matomo 容器。
第 2 步 — 安装和配置 Nginx
将 Nginx 等 Web 服务器放在 Matomo 服务器前面可以通过将缓存、压缩和静态文件服务卸载到更高效的进程来提高性能。 我们将安装 Nginx 并将其配置为对 Matomo 的 反向代理 请求,这意味着它将负责将用户的请求传递给 Matomo 并再次返回。 使用非容器化的 Nginx 还可以更轻松地在下一步中添加 Let's Encrypt SSL 证书。
首先,刷新你的包列表,然后使用 apt
安装 Nginx:
sudo apt update sudo apt install nginx
使用“Nginx Full”UFW 应用程序配置文件允许公共流量到端口 80
和 443
(HTTP 和 HTTPS):
sudo ufw allow "Nginx Full"
OutputRule added Rule added (v6)
接下来,在/etc/nginx/sites-available
目录下打开一个新的Nginx配置文件。 我们将调用我们的 matomo.conf
但您可以使用不同的名称:
sudo nano /etc/nginx/sites-available/matomo.conf
将以下内容粘贴到新的配置文件中,确保将 your_domain_here
替换为您配置为指向 Matomo 服务器的域。 这应该类似于 matomo.example.com
,例如:
/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; } }
此配置目前仅适用于 HTTP,因为我们将让 Certbot 在下一步中负责配置 SSL。 配置的其余部分设置日志记录位置,然后将所有流量以及一些重要的代理标头传递到 http://localhost:8080
,这是我们在上一步中启动的 Matomo 容器。
保存并关闭文件,然后通过将其链接到 /etc/nginx/sites-enabled/
来启用配置:
sudo ln -s /etc/nginx/sites-available/matomo.conf /etc/nginx/sites-enabled/
使用 nginx -t
验证配置文件语法是否正确:
sudo nginx -t
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
最后,重新加载 nginx
服务以获取新配置:
sudo systemctl reload nginx
您的 Matomo 站点现在应该可以在纯 HTTP 上使用。 加载 http://your_domain_here
(您可能需要点击安全警告),它看起来像这样:
现在您的站点已通过 HTTP 启动并运行,是时候使用 Certbot 和 Let's Encrypt 证书来保护连接了。 您应该在 完成 Matomo 的基于 Web 的设置程序之前执行此 。
第 3 步 — 安装 Certbot 并设置 SSL 证书
多亏了 Certbot 和 Let's Encrypt 免费证书颁发机构,向我们的 Matomo 应用程序添加 SSL 加密只需要两个命令。
首先,安装 Certbot 及其 Nginx 插件:
sudo apt install certbot python3-certbot-nginx
接下来,在 --nginx
模式下运行 certbot
,并指定您在 Nginx server_name
配置中使用的相同域:
sudo certbot --nginx -d your_domain_here
系统将提示您同意 Let's Encrypt 服务条款,并输入电子邮件地址。
之后,系统会询问您是否要将所有 HTTP 流量重定向到 HTTPS。 这取决于您,但通常建议这样做并且安全。
之后,Let's Encrypt 将确认您的请求,Certbot 将下载您的证书:
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 将自动重新加载 Nginx 以获取新的配置和证书。 重新加载您的网站,如果您选择重定向选项,它应该会自动将您切换到 HTTPS。
您的站点现在是安全的,可以安全地继续执行基于 Web 的设置步骤。
第 4 步 — 设置 Matomo
回到您的网络浏览器,您现在应该可以通过安全的 https://
连接打开 Matomo 的 Welcome! 页面。 现在您可以安全地输入用户名和密码来完成安装过程。
单击下一步按钮。 您将被带到 系统检查 步骤:
这是运行 Matomo 的系统的摘要,所有内容都应为绿色复选标记,表示没有问题。 一直滚动到底部,然后单击 Next 按钮。
现在您将进入 数据库设置 页面:
您在此页面上填写的信息将告诉 Matomo 应用程序如何连接到 MariaDB 数据库。 您需要在步骤 1 中选择的 MARIADB_USER
和 MARIADB_PASSWORD
。 如果需要,您可以将它们从 .env
文件中复制出来。
填写前四个字段:
- 数据库服务器: db
- Login:你在
MARIADB_USER
环境变量中设置的用户名 - Password:你在
MARIADB_PASSWORD
环境变量中设置的密码 - 数据库名称: matomo
其余两个字段的默认值很好。
再次单击下一步。 您将确认数据库已正确设置。 再次单击下一步。 然后,您需要设置一个管理员用户,最后您将设置有关您要为其收集分析的第一个网站的信息。
毕竟,您应该在第 8 步结束,一个 Congratulations 页面。 你几乎都完成了。 向下滚动到底部并单击 继续 Matomo 按钮,您将被带到主页:
页面顶部会有一个大警告。 您需要对 Matomo 的配置文件进行小幅更新以完成此过程。
回到命令行,使用文本编辑器打开配置文件:
sudo nano matomo/config/config.ini.php
在顶部附近,您应该有一个 [General]
部分。 将下面突出显示的最后三行添加到该部分的末尾:
配置.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
这些选项让 Matomo 知道使用端口 8080
是安全的,并且它应该假设始终通过安全连接访问它。
保存并关闭配置文件,然后切换回浏览器并重新加载页面。 错误应该消失了,您将看到一个登录提示:
使用您在设置期间创建的管理员帐户登录,您应该会被带到仪表板:
由于您可能尚未设置跟踪代码,因此仪表板将指示未记录任何数据。 按照说明完成在您的网站上设置 JavaScript 代码以开始接收分析数据。
结论
在本教程中,您使用 Docker Compose 启动了 Matamo 分析应用程序和 MariaDB 数据库,然后设置了 Nginx 反向代理并使用 Let's Encrypt SSL 证书对其进行保护。
您现在已准备好设置您的网站并添加 Matomo 分析跟踪脚本。 关于 Matomo 软件操作的更多信息,请参见【X69X】Matomo 官方文档【X106X】。