如何在Ubuntu20.04上安装MatomoWebAnalytics

来自菜鸟教程
跳转至:导航、​搜索

介绍

Matomo 是用 PHP 编写的开源、自托管 Web 分析应用程序。

在本教程中,您将使用 Docker Compose 安装 Matomo 和 MariaDB 数据库,然后安装 Nginx 作为 Matomo 应用程序的反向代理。 最后,您将通过使用 Certbot 从 Let's Encrypt 证书颁发机构下载和配置 SSL 证书来启用安全 HTTPS 连接。

先决条件

为了完成本教程,您首先需要以下内容:

注意: 如果您使用的是 DigitalOcean 的 One-Click Docker Image ,则可以跳过这些先决步骤。 此映像将已安装和配置 Docker、Docker Compose 和 UFW。

在您选择的区域中启动一个新的 Docker 映像,然后以 root 用户身份登录并继续学习本教程。 因为您将使用 root 用户,所以您可以省略后面所有命令的 sudo 部分,但这不是必需的。


最后,要启用 SSL,您需要一个指向服务器公共 IP 地址的域名。 例如,这应该类似于 example.commatomo.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 应用程序配置文件允许公共流量到端口 80443(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_USERMARIADB_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】。