本页内容

  • 先决条件
  • 步骤 1 - 配置防火墙
  • 步骤 2 - 安装 Git
  • 步骤 3 - 安装 Docker 和 Docker Compose
  • 步骤 4 - 安装 Nginx
  • 步骤 5 - 下载 Plausible
  • 步骤 6 - 配置 Plausible 配置 Google Search Console 配置 Google Analytics
  • 步骤 7 - 安装 Plausible
  • 步骤 8 - 安装 SSL
  • 步骤 9 - 将 Nginx 配置为反向代理
  • 步骤 10 - 添加站点并开始跟踪
  • 总结
  • 配置 Google Search Console
  • 配置 Google Analytics

Plausible 是一款开源、注重隐私的网站流量分析软件。它是 Google Analytics 的轻量级替代品,可让你在不损害隐私的前提下跟踪访客。它支持 GDPR 且不使用 Cookie。你可以在外观现代的仪表盘中查看统计数据,它提供的跟踪脚本非常精简,不会拖慢你的网站。你可以自行托管 Plausible,也可以购买其订阅服务。

在本指南中,我们将在 Debian 12 服务器上使用 Docker 安装 Plausible Analytics。

先决条件

  • 一台运行 Debian 12 的服务器。
  • 一个具有 sudo 权限的非 root 用户。
  • 一个指向该服务器的完全限定域名(FQDN),例如 plausible.example.com。
  • 已启用并运行 Uncomplicated Firewall(UFW)。
  • 更新所有内容。 $ sudo apt update && sudo apt upgrade
  • 安装系统所需的必要软件包。其中部分软件包可能已经在你的系统上安装过了。 $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y

一台运行 Debian 12 的服务器。

一个具有 sudo 权限的非 root 用户。

一个指向该服务器的完全限定域名(FQDN),例如 plausible.example.com。

已启用并运行 Uncomplicated Firewall(UFW)。

更新所有内容。

$ sudo apt update && sudo apt upgrade

安装系统所需的必要软件包。其中部分软件包可能已经在你的系统上安装过了。

$ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y

步骤 1 - 配置防火墙

第一步是配置防火墙。Ubuntu 默认自带 ufw(Uncomplicated Firewall)。

检查防火墙是否正在运行。

$ sudo ufw status

你应该会看到如下输出。

Status: inactive

放行 SSH 端口,以免启用防火墙时中断当前连接。

$ sudo ufw allow OpenSSH

同时放行 HTTP 和 HTTPS 端口。

$ sudo ufw allow http
$ sudo ufw allow https

启用防火墙

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

再次检查防火墙的状态。

$ sudo ufw status

你应该会看到类似的输出。

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

步骤 2 - 安装 Git

克隆 Plausible 官方仓库需要 Git。安装 Git。

$ sudo apt install git

验证安装。

$ git --version
git version 2.39.2

设置初始配置变量。

$ git config --global user.name "Your Name"
$ git config --global user.email "
[email protected]
"

步骤 3 - 安装 Docker 和 Docker Compose

我们需要通过官方仓库安装 Docker。添加 Docker 的官方 GPG 密钥。

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg

将 Docker 仓库添加到系统。

$ echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更新 APT 仓库列表并安装 Docker。

$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

验证 Docker 引擎是否安装正确。

$ docker --version
Docker version 24.0.6, build ed223bc

执行以下命令,以便无需使用 sudo 即可运行 Docker 命令。

$ sudo usermod -aG docker ${USER}
$ su - ${USER}

至此,本教程的 Docker 和 Docker Compose 安装部分完成。

步骤 4 - 安装 Nginx

Debian 12 自带较旧版本的 Nginx。要安装最新版本,你需要下载 Nginx 官方仓库。

导入 Nginx 的签名密钥。

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

添加 Nginx 稳定版仓库。

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

更新系统仓库。

$ sudo apt update

安装 Nginx。

$ sudo apt install nginx

验证安装。在 Debian 系统上,以下命令只能配合 sudo 使用。

$ sudo nginx -v
nginx version: nginx/1.24.0

启动 Nginx。

$ sudo systemctl start nginx

检查服务状态。

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Wed 2023-10-11 01:35:15 UTC; 3s ago
       Docs: https://nginx.org/en/docs/
    Process: 3598 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 3599 (nginx)
      Tasks: 3 (limit: 4652)
     Memory: 2.4M
        CPU: 8ms
     CGroup: /system.slice/nginx.service
             ??3599 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??3600 "nginx: worker process"
             ??3601 "nginx: worker process"

Oct 11 01:35:15 plausible systemd[1]: Starting nginx.service - nginx - high performance web server...
Oct 11 01:35:15 plausible systemd[1]: Started nginx.service - nginx - high performance web server.

步骤 5 - 下载 Plausible

克隆 Plausible 自托管(Self-Hosting)GitHub 仓库。

$ git clone https://github.com/plausible/hosting

切换到下载的目录。

$ cd hosting

步骤 6 - 配置 Plausible

在下载的目录中,你会看到以下文件。

  • docker-compose.yml - 其中包含 Docker Compose 工具用于安装 Plausible 服务器及其所需一切的配置。Plausible 需要 PostgreSQL 服务器来存放数据库,并需要 Clickhouse 数据库来存放统计数据。它还提供了一个选项,可安装 SMTP 服务器来发送通知、密码重置和每周统计邮件。
  • plausible-conf.env - 该文件包含用于自定义你的安装的环境变量。

第一步是生成用于保护 Plausible 应用的密钥。运行以下命令生成密钥。

$ openssl rand -base64 64 | tr -d '\n' ; echo
vPkrzp59qQIYtMcyTCKGuyvpkbQ8PYf+Go2ju+DPV/fZUk2eTGNiwV3CoKEueXzypMVLbSkJNGS7xfq96/wepg==

复制终端上显示的密钥。打开 plausible-conf.env 文件进行编辑。

$ nano plausible-conf.env

将以下密钥粘贴到变量 BASE_URL 的前面。

将 BASE_URL 的值设为 https://plausible.example.com,或任何你想要安装 Plausible 的域名。由于稍后我们会配置 SSL,请务必使用 HTTPS 填写 base URL。你也可以更改 Plausible 监听的端口号。默认情况下它使用 8000 端口。

BASE_URL=https://plausible.example.com
SECRET_KEY_BASE=yQVWmKfhvr/etwTSN/pSUmhAwExBX7eCKXKAMKV4mrtqzFCA5dgrAnTMx2dS2OIZ9KulVwa+vl7iGRbJpycYaA==
PORT=8000

如果你想在安装后禁止用户注册,请添加以下这一行。

DISABLE_REGISTRATION=true

如果你开放其他用户注册,并希望他们验证邮箱地址,请添加以下这一行。要使此功能生效,你需要配置 SMTP 详细信息,我们接下来会讨论。

ENABLE_EMAIL_VERIFICATION=true

你也可以使用以下数据配置 SMTP 详细信息。在我们的示例中,我们使用的是 Amazon SES 服务。

[email protected]

MAILER_NAME=Howtforge
SMTP_HOST_ADDR=email-smtp.us-west-2.amazonaws.com
SMTP_HOST_PORT=587
SMTP_USER_NAME=<username>
SMTP_USER_PWD=<password>
SMTP_HOST_SSL_ENABLED=1
SMTP_RETRIES=2

配置 Google Search Console

你还可以将 Plausible 配置为连接 Google Search Console,这样它就能列出用户通过哪些搜索词访问你的网站。配置这部分可能稍微棘手一些。

访问 Google API 控制台并登录。进入 API 控制台后,创建一个新项目。为你的项目命名。如果你使用的是 Google Apps 账号,可能会看到 Organization(组织)字段。在截图中,我们使用的是 Google 个人账号。点击 Create(创建)继续。

在 Debian 12 上安装 Plausible 隐私友好网站分析

在接下来的界面中点击 Enable APIs and Services(启用 API 和服务)。

在 Debian 12 上安装 Plausible 隐私友好网站分析

搜索并点击 Google Search Console API。

在 Debian 12 上安装 Plausible 隐私友好网站分析

在接下来的界面中点击 Enable(启用)。

在 Debian 12 上安装 Plausible 隐私友好网站分析

接下来,你需要访问 API 的凭据。但首先,你需要配置同意屏幕。为此,请从左侧进入 Credentials(凭据)选项,并点击 Configure Consent Screen(配置同意屏幕)按钮。

在 Debian 12 上安装 Plausible 隐私友好网站分析

选择 User Type(用户类型)为 Internal(内部),因为我们仅通过代码访问它,然后点击 Create(创建)继续。如果你使用的是 Google Apps 账号,则可以选择任意一种 User Type。

在 Debian 12 上安装 Plausible 隐私友好网站分析

设置你的产品名称,并添加与你的 Google Search Console 账号关联的支持邮箱和开发者联系邮箱。将你的域名添加为 Authorized domains(已授权网域)。如果你是在 https://plausible.example.com 这个域名下安装 Plausible,则添加 https://example.com 作为已授权网域。如果你是将 Plausible 托管为顶级域名,则使用那个域名。点击 Save and Continue(保存并继续)按钮进入下一个界面。

在 Debian 12 上安装 Plausible 隐私友好网站分析

跳过接下来的几个界面并返回仪表盘。回到仪表盘后,从左侧进入 Credentials(凭据)标签页,点击 Create credential(创建凭据)。选择 OAuth Client ID(OAuth 客户端 ID)。

在 Debian 12 上安装 Plausible 隐私友好网站分析

在下一个界面中,选择 Web Application(Web 应用)作为项目类型。为其命名并点击 Create(创建)。

在 Debian 12 上安装 Plausible 隐私友好网站分析

你需要保存你的 Client ID(客户端 ID)和 Client Secret(客户端密钥)。复制这些值并粘贴到 plausible-conf.env 文件中。你也可以下载 JSON 文件以保存凭据,供日后使用。

在 Debian 12 上安装 Plausible 隐私友好网站分析

GOOGLE_CLIENT_ID=<ID>.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=<secret>

完成后,按 Ctrl + X,并在提示时输入 Y 来保存 plausible-conf.env 文件。

你创建的应用状态为 Testing(测试中)。第一种选择是向 Google 验证你的应用,这可能需要 3-5 天。为了避免向 Google 验证,你可以将你的 Google 账号添加为 Test user(测试用户)。进入 OAuth 同意屏幕,向下滚动到 Test users(测试用户)部分,点击 Add Users(添加用户)按钮来添加你的 Google 账号。

在 Debian 12 上安装 Plausible 隐私友好网站分析

配置 Google Analytics

Plausible 还支持导入你的 Google Analytics 数据。为此,我们需要启用以下 API。

  • Google Analytics Reporting API
  • Google Analytics API

返回 APIs and Services(API 和服务)页面,点击 Enable APIS and Services(启用 API 和服务)按钮,找到并启用上述两个 API。

在 Debian 12 上安装 Plausible 隐私友好网站分析

步骤 7 - 安装 Plausible

要安装 Plausible,请运行以下 docker 命令。

$ docker compose up -d

运行该命令会创建一个用于存放数据的 PostgreSQL 数据库、一个用于存放统计数据的 Clickhouse 数据库,对两个数据库执行迁移以准备架构,使用 env 文件中的信息创建一个管理员账号,并在 8000 端口启动服务器。

检查容器的状态。你也可以使用 docker compose ps 命令来查看。

$ docker ps
CONTAINER ID   IMAGE                                          COMMAND                  CREATED          STATUS          PORTS                                       NAMES
d9d2806a978e   plausible/analytics:v2.0                       "/entrypoint.sh sh -…"   56 seconds ago   Up 54 seconds   0.0.0.0:8000->8000/tcp, :::8000->8000/tcp   hosting-plausible-1
99c9a1afff34   clickhouse/clickhouse-server:23.3.7.5-alpine   "/entrypoint.sh"         56 seconds ago   Up 55 seconds   8123/tcp, 9000/tcp, 9009/tcp                hosting-plausible_events_db-1
cf408ae32fc3   postgres:14-alpine                             "docker-entrypoint.s…"   56 seconds ago   Up 55 seconds   5432/tcp                                    hosting-plausible_db-1
a5bae1a9f163   bytemark/smtp                                  "docker-entrypoint.s…"   56 seconds ago   Up 55 seconds   25/tcp                                      hosting-mail-1

你应该能够在 http://:8000 访问 Plausible(为此你需要通过防火墙开放 8000 端口)。

步骤 8 - 安装 SSL

在将 Nginx 配置为反向代理来托管 plausible 域名之前,我们需要先设置 SSL 证书。

我们需要安装 Certbot 来生成 Let's Encrypt 提供的免费 SSL 证书。你可以通过 Debian 的仓库安装 Certbot,也可以使用 Snapd 工具获取最新版本。我们将使用 Snapd 版本。

Debian 12 默认未预装 Snapd。安装 Snapd 软件包。

$ sudo apt install snapd

确保你的 Snapd 版本是最新的。

$ sudo snap install core
$ sudo snap refresh core

安装 Certbot。

$ sudo snap install --classic certbot

使用以下命令,通过创建指向 /usr/bin 目录的符号链接,确保 Certbot 命令可以运行。

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

验证安装。

$ certbot --version
certbot 2.7.1

生成 SSL 证书。

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m 
[email protected]
 -d plausible.example.com

上述命令会将证书下载到你服务器上的 /etc/letsencrypt/live/plausible.example.com 目录。

生成 Diffie-Hellman 组证书。

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

检查 Certbot 续期调度服务。

$ sudo systemctl list-timers

你会发现 snap.certbot.renew.service 是计划运行的服务之一。

NEXT                        LEFT        LAST                        PASSED       UNIT                         ACTIVATES
.....
Wed 2023-10-11 06:43:59 UTC 2h 57min left Wed 2023-10-11 00:51:05 UTC 2h 55min ago apt-daily.timer            apt-daily.service
Wed 2023-10-11 06:56:46 UTC 3h 10min left Wed 2023-10-11 00:51:05 UTC 2h 55min ago apt-daily-upgrade.timer    apt-daily-upgrade.service
Wed 2023-10-11 07:32:00 UTC 3h 45min left -                           -            snap.certbot.renew.timer   snap.certbot.renew.servic

对该过程进行一次演练(dry run),以检查 SSL 续期是否正常工作。

$ sudo certbot renew --dry-run

如果未看到错误,说明一切就绪。你的证书将自动续期。

步骤 9 - 将 Nginx 配置为反向代理

到目前为止,Plausible 通过 8000 端口在本地系统上运行。要使其通过域名运行,我们将使用 Nginx 充当反向代理。

在 /etc/nginx/conf.d/ 目录下为 Plausible 创建配置文件。

$ sudo nano /etc/nginx/conf.d/plausible.conf

将以下代码粘贴进去。

server {
    listen 80; listen [::]:80;
	server_name plausible.example.com;
    return 301 https://$host$request_uri;
}

server {
    server_name plausible.example.com;

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    access_log /var/log/nginx/plausible.access.log;
    error_log /var/log/nginx/plausible.error.log;

    ssl_certificate /etc/letsencrypt/live/plausible.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/plausible.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/plausible.example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
    ssl_prefer_server_ciphers off;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

完成后,按 Ctrl + X,并在提示时输入 Y 来保存文件。

打开 /etc/nginx/nginx.conf 文件进行编辑。

$ sudo nano /etc/nginx/nginx.conf

在 include /etc/nginx/conf.d/*.conf; 这一行之前添加以下一行。

server_names_hash_bucket_size  64;

按 Ctrl + X,并在提示时输入 Y 来保存文件。

验证 Nginx 配置文件语法。

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重启 Nginx 服务以使新配置生效。

$ sudo systemctl restart nginx

步骤 10 - 添加站点并开始跟踪

在浏览器中打开域名 https://plausible.example.com,你应该会看到如下 Plausible 注册界面。

在 Debian 12 上安装 Plausible 隐私友好网站分析

点击 Create my account(创建我的账号)按钮继续。

如果你已将变量 ENABLE_EMAIL_VERIFICATION 设为 true,系统会提示你输入发送到你的邮箱 ID 的验证码。如果你已配置 SMTP 服务器,你应该会收到包含验证码的邮件。如果没有,或者由于某种原因没有收到验证码,请运行以下命令来验证数据库中的所有用户。

$ docker compose exec plausible_db psql -U postgres -d plausible_db -c "UPDATE users SET email_verified = true;"

接下来,系统会要求你添加一个站点。输入你想要跟踪的域名,并选择用于统计报告时区(Timezone)。

在 Debian 12 上安装 Plausible 隐私友好网站分析

在下一页,系统会提供用于跟踪你网站的 JavaScript 代码。复制该代码并粘贴到你网站的 .... 之间,然后点击 Start collecting data(开始收集数据)按钮继续。

在 Debian 12 上安装 Plausible 隐私友好网站分析

根据你的网站流量,仪表盘应该很快就开始显示你网站的统计数据。

在 Debian 12 上安装 Plausible 隐私友好网站分析

你可以通过访问你的站点设置,导入 Google Analytics 数据,或连接 Google Search Console。

总结

至此,我们关于在 Debian 12 服务器上安装和配置 Plausible Analytics 的教程就结束了。如果你有任何问题,请在下方评论中留言。