如何在Ubuntu20.04上安装FathomAnalytics
介绍
Fathom Analytics 是一个开源、自托管的 Web 分析应用程序,专注于简单性和隐私性。 它是用 Go 编写的,并以单个二进制文件的形式发布,使安装相对简单。
在本教程中,您将安装和配置 Fathom,然后安装 Nginx 作为 Fathom 应用程序的反向代理。 最后,您将通过使用 Certbot 从 Let's Encrypt 证书颁发机构下载和配置 SSL 证书来启用安全 HTTPS 连接。
先决条件
为了完成本教程,您首先需要以下内容:
- Ubuntu 20.04 服务器,启用了 UFW 防火墙,并且配置了具有
sudo
权限的非 root 用户。 请阅读我们的 Initial Server Setup with Ubuntu 20.04 以了解有关设置这些要求的更多信息 - 指向您服务器的公共 IP 地址的域名。 例如,这应该类似于
example.com
或fathom.example.com
。 如果您使用的是 DigitalOcean,请参阅我们的 DNS 快速入门 ,了解有关在我们的控制面板中创建域资源的信息。
满足所有先决条件后,继续 步骤 1,您将在此处下载并安装 Fathom。
第 1 步 — 下载 Fathom
要安装 Fathom 软件,您首先要下载最新版本,然后将可执行文件解压缩到 /usr/local/bin
目录。
首先,移动到您可以写入的目录。 /tmp
目录是个不错的选择:
cd /tmp
在您的网络浏览器中,访问 Fathom 的最新软件版本 的 GitHub 页面,然后找到名称类似于 fathom_1.2.1_linux_amd64.tar.gz
的文件。 版本号可能不同。
右键单击文件的链接,然后选择 Copy Link(或类似的,取决于您的浏览器)。
使用 curl
命令从您刚刚复制的链接下载文件:
curl -L -O https://github.com/usefathom/fathom/releases/download/v1.2.1/fathom_1.2.1_linux_amd64.tar.gz
您现在应该在 /tmp
目录中有一个 fathom_1.2.1_linux_amd64.tar.gz
文件。 使用 tar
命令提取 fathom
可执行文件并将其移动到 /usr/local/bin
:
sudo tar -C /usr/local/bin/ -xzf fathom*.tar.gz fathom
sudo
命令是必要的,因为 /usr/local/bin
是受保护的目录,因此您需要超级用户权限才能写入。
现在使用 sudo
和 chmod
来更新 fathom
二进制文件的权限:
sudo chmod +x /usr/local/bin/fathom
这使得 fathom
可执行。 要对其进行测试,请运行 fathom --version
:
fathom --version
OutputFathom version 1.2.1, commit 8f7c6d2e45ebb28651208e2a7320e29948ecdb2c, built at 2018-11-30T09:21:37Z
该命令将打印出 Fathom 的版本号和一些其他详细信息。 您已成功下载并安装了 Fathom 二进制文件。 接下来,您将首次配置和运行 Fathom。
第 2 步 — 配置和运行 Fathom
在配置 Fathom 之前,您将在系统上创建一个新的 fathom 用户。 这个新用户帐户将用于运行 Fathom 服务器,这将有助于隔离和保护服务。
使用 adduser
命令创建一个名为 fathom 的新用户:
sudo adduser --system --group --home /opt/fathom fathom
这会创建一个特殊的 --system
用户,这意味着它没有密码并且无法像普通用户那样登录。 我们还使用 --group
标志和 /opt/fathom
中的主目录创建了一个 fathom 组。
现在移动到 fathom 用户的主目录:
cd /opt/fathom
现在我们必须执行一些需要以 fathom 用户身份运行的命令。 为此,请使用 sudo
以 fathom 用户身份打开 bash
shell:
sudo -u fathom bash
您的提示将变为 fathom@host:~$
之类的内容。 在我们 exit
这个 shell 之前,我们运行的每个命令都将以 fathom 用户身份运行。
现在您已准备好为 Fathom 设置配置文件。 我们在这个配置文件中需要的一项是 Fathom 将用于签名和加密目的的随机字符串。 现在使用 openssl
命令生成随机字符串:
openssl rand --base64 32
OutputiKo/rYHFa2hDINjgCcIeeCe9pNglQreQrzrs+qK5tYg=
将字符串复制到剪贴板,或将其记在某种临时临时文档中,然后打开一个新的 .env
文件进行配置:
nano /opt/fathom/.env
这将在 nano
文本编辑器中打开一个新的空白文件。 随意使用您最喜欢的编辑器。
将以下内容粘贴到文件中,确保将随机字符串更新为您之前生成的字符串:
/opt/fathom/.env
FATHOM_SERVER_ADDR="127.0.0.1:8080" FATHOM_DATABASE_DRIVER="sqlite3" FATHOM_DATABASE_NAME="fathom.db" FATHOM_SECRET="your_random_string_here"
此配置首先指定服务器应仅侦听 localhost (127.0.0.1
) 端口 8080
,并且应使用名为 fathom.db
的 SQLite 数据库文件.
保存并关闭文件。 在 nano
中可以按 CTRL+O
然后按 ENTER
保存,然后按 CTRL+X
退出。
现在数据库已经配置好了,我们可以将第一个用户添加到我们的 Fathom 实例中:
fathom user add --email="your_email" --password="your_password"
由于这是您第一次在配置数据库的情况下运行 fathom
,您应该注意到发生了一些初始数据库迁移:
OutputINFO[0000] Fathom version 1.2.1, commit 8f7c6d2e45ebb28651208e2a7320e29948ecdb2c, built at 2018-11-30T09:21:37Z INFO[0000] Configuration file: /opt/fathom/.env INFO[0000] Connected to sqlite3 database: /opt/fathom/fathom.db INFO[0000] Applied 26 database migrations! INFO[0000] Created user sammy@example.com
您的 fathom.db
数据库文件现已创建并添加了用户。
现在启动 Fathom 服务器来测试它:
fathom server
OutputINFO[0000] Fathom version 1.2.1, commit 8f7c6d2e45ebb28651208e2a7320e29948ecdb2c, built at 2018-11-30T09:21:37Z INFO[0000] Configuration file: /opt/fathom/.env INFO[0000] Connected to sqlite3 database: /opt/fathom/fathom.db
在 连接到服务器 的第二个终端中,使用 curl
获取 Fathom 实例的主页:
curl localhost:8080
Output<!DOCTYPE html> <html class="no-js" lang="en"> <head> <title>Fathom - simple website analytics</title> <link href="assets/css/styles.css?t=1543569696966" rel="stylesheet"> . . .
您应该会在屏幕上看到几行 HTML 代码。 这表明服务器已启动并响应 localhost 上的请求。
返回您的第一个终端,按 CTRL+C
退出 fathom server
进程。
你已经以 fathom 用户的身份运行命令,所以 exit
该会话也是如此:
exit
您的 shell 提示符应恢复正常。
Fathom 现在已完全配置,您已成功从命令行手动运行它。 接下来,我们将 Fathom 设置为作为 Systemd 服务运行。
第 3 步 — 将 Fathom 设置为 Systemd 服务
要始终运行 fathom serve
,即使您没有登录服务器,您也需要使用 Systemd 将其设置为 服务 。 Systemd 是一个服务管理器,用于处理 Ubuntu 和许多其他 Linux 发行版上的启动、停止和重新启动服务。
您创建的 fathom.service
文件将包含 Systemd 正确运行服务器所需的所有配置详细信息。 现在打开新文件:
sudo nano /etc/systemd/system/fathom.service
将以下内容添加到文件中:
/etc/systemd/system/fathom.service
[Unit] Description=Fathom Analytics server Requires=network.target After=network.target [Service] Type=simple User=fathom Group=fathom Restart=always RestartSec=3 WorkingDirectory=/opt/fathom ExecStart=/usr/local/bin/fathom server [Install] WantedBy=multi-user.target
该文件指定何时启动服务(After=network.target
,表示网络启动后),它应该作为 fathom 用户和组运行,Systemd 应该总是尝试重新启动如果进程退出(Restart=always
),它应该从/opt/fathom
目录运行,以及使用什么命令来运行服务器(ExecStart=/usr/local/bin/fathom server
)。
保存并关闭文件。 重新加载 Systemd 配置:
sudo systemctl daemon-reload
启用服务:
sudo systemctl enable fathom.service
启用该服务意味着 Systemd 将在系统启动期间自动启动它。 我们现在还需要手动启动服务,就这一次:
sudo systemctl start fathom
请注意,在前面的命令中,您可以省略服务名称的 .service
部分。 最后,检查服务的状态以确保它正在运行:
sudo systemctl status fathom
Output● fathom.service - Fathom Analytics server Loaded: loaded (/etc/systemd/system/fathom.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2021-11-03 15:32:45 UTC; 13s ago Main PID: 3748 (fathom) Tasks: 5 (limit: 1136) Memory: 10.3M CGroup: /system.slice/fathom.service └─3748 /usr/local/bin/fathom server Nov 03 15:32:45 ubuntu-fathom systemd[1]: Started Fathom Analytics server. Nov 03 15:32:46 ubuntu-fathom fathom[3748]: time="2021-11-03T15:32:46Z" level=info msg="Fathom version 1.2.1, commit 8f> Nov 03 15:32:46 ubuntu-fathom fathom[3748]: time="2021-11-03T15:32:46Z" level=info msg="Configuration file: /opt/fathom> Nov 03 15:32:46 ubuntu-fathom fathom[3748]: time="2021-11-03T15:32:46Z" level=info msg="Connected to sqlite3 database: >
该服务在 localhost 端口 8080
上再次启动并运行。 接下来,我们将 Nginx 设置为反向代理,以将 Fathom 服务暴露给外界。
第 4 步 — 安装和配置 Nginx
将 Nginx 等 Web 服务器放在应用程序服务器前面可以通过将缓存、压缩和静态文件服务卸载到更高效的进程来提高性能。 我们将安装 Nginx 并将其配置为 反向代理 对 Fathom 的请求,这意味着它将负责将用户的请求传递给 Fathom 并再次返回。
首先,刷新你的包列表,然后使用 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配置文件。 我们将调用我们的 fathom.conf
但您可以使用不同的名称:
sudo nano /etc/nginx/sites-available/fathom.conf
将以下内容粘贴到新的配置文件中,确保将 your_domain_here
替换为您配置为指向 Fathom 服务器的域。 这应该类似于 fathom.example.com
,例如:
/etc/nginx/sites-available/fathom.conf
server { listen 80; listen [::]:80; server_name your_domain_here; access_log /var/log/nginx/fathom.access.log; error_log /var/log/nginx/fathom.error.log; location / { proxy_pass http://localhost:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; } }
此配置目前仅适用于 HTTP。 我们将让 Certbot 在下一步中负责配置 SSL。 配置的其余部分设置日志记录位置,然后将所有流量传递到位于 http://localhost:8080
的 Fathom 服务器,并在此过程中添加一些重要的代理转发标头。
保存并关闭文件,然后通过将其链接到 /etc/nginx/sites-enabled/
来启用配置:
sudo ln -s /etc/nginx/sites-available/fathom.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
您的 Fathom 站点现在应该可以在纯 HTTP 上使用。 加载http://your_domain_here
,它看起来像这样:
现在您的站点已通过 HTTP 启动并运行,是时候使用 Certbot 和 Let's Encrypt 证书来保护连接了。
第 5 步 — 安装 Certbot 并设置 SSL 证书
感谢 Certbot 和 Let's Encrypt 免费证书颁发机构,将 SSL 加密添加到我们的 Fathom 应用程序只需要两个命令。
首先,安装 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://Fathom.example.com You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=Fathom.example.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/Fathom.example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/Fathom.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。
您的站点现在是安全的,可以使用您在 步骤 2 中设置的用户详细信息进行安全登录。
成功登录后,您将看到使用 Fathom 设置您的第一个网站的提示:
完成后,您将看到您刚刚设置的站点的(当前为空)仪表板:
您已成功安装并保护了 Fathom 分析软件。
结论
在本教程中,您下载、安装和配置了 Fathom Analytics 应用程序,然后设置 Nginx 反向代理并使用 Let's Encrypt SSL 证书对其进行保护。
您现在可以通过添加 Fathom Analytics 跟踪脚本来完成您的网站的设置。 请参阅 官方 Fathom Analytics 文档 以获取有关使用该软件和设置您的站点的更多信息。