如何在Ubuntu20.04上安装UmamiWeb分析软件
介绍
Umami 是一个用 Node.js 编写的开源、自托管 Web 分析应用程序。 它专注于简单、精心设计、快速且注重隐私。 它可以将有关您网站访问者的数据存储在 MySQL 或 PostgreSQL 数据库中。
在本教程中,您将使用 Docker Compose 安装 Umami 和 PostgreSQL 数据库,然后安装 Nginx 作为 Umami 的反向代理。 最后,您将通过使用 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 的 1-Click Docker Image,可以跳过这些先决步骤。 此映像将已安装和配置 Docker、Docker Compose 和 UFW。
在您选择的区域中启动一个新的 Docker 映像,然后以 root 用户身份登录并继续学习本教程。 或者,您可以省略所有命令的 sudo
部分,但这不是必需的。
最后,要启用 SSL,您需要一个指向服务器公共 IP 地址的域名。 例如,这应该类似于 example.com
或 umami.example.com
。 如果您使用的是 DigitalOcean,请参阅我们的 DNS 快速入门 ,了解有关在我们的控制面板中创建域资源的信息。
满足所有先决条件后,继续 步骤 1,您将在此处下载并启动 Umami 软件。
第 1 步 — 使用 Docker Compose 安装 Umami 和 PostgreSQL
第一步是克隆 Umami Git 存储库,更新 docker-compose.yml
配置文件,然后启动 Umami 和 PostgreSQL 容器。
您将把 repo 下载到 /opt
目录中。 现在使用 cd
命令去那里:
cd /opt
然后使用 git
命令从 GitHub 克隆 repo:
sudo git clone https://github.com/mikecao/umami.git
这会将所有软件和配置文件拉入 /opt/umami
。 现在进入新创建的 umami
目录:
cd umami
现在您需要更新项目的 docker-compose.yml
文件。 该文件是 docker-compose
命令用来一次配置和启动多个 Docker 容器的文件。 我们需要更改此文件中的两个选项:Umami 绑定的 IP,以及在对数据库中的内容进行加密时用作盐的随机哈希。
在打开 docker-compose.yml
进行编辑之前,让我们生成一个新的随机散列并粘贴到文件中:
openssl rand -base64 32
OutputtCgKyCWc/3C9VH+Ex0TysXsGEKQklQXm0H3nSnlR48g=
这使用 openssl
命令生成 32 个随机字符。 将输出复制到剪贴板,然后打开配置文件:
sudo nano docker-compose.yml
找到 HASH_SALT
选项,删除占位符文本,并粘贴到刚刚生成的随机哈希中:
码头工人-compose.yml
. . . HASH_SALT: replace-me-with-a-random-string . . .
接下来,找到配置的 ports:
部分:
码头工人-compose.yml
. . . ports: - "127.0.0.1:3000:3000" . . .
通过将 127.0.0.1:
添加到 "3000:3000"
值来更新它。 这确保了 Umami 只在 localhost 接口上侦听,而不是公开可用的。 即使您设置了 UFW 防火墙,由于 Docker 网络工作方式的一些怪癖,如果您不采取此步骤,您的 Umami 容器将可以在端口 3000
上被公众访问。
完成这些配置更改后,保存文件(CTRL+O
然后 nano
中的 ENTER
)并关闭编辑器(CTRL+X
)。
现在,使用 docker-compose
启动两个容器:
sudo docker-compose up --detach
--detach
标志告诉 docker-compose
在后台创建容器,与我们的终端会话分离:
Output. . . Creating umami_db_1 ... done Creating umami_umami_1 ... done
Umami 和 PostgreSQL 现在正在运行。 您可以使用 curl
命令获取在 localhost 上运行的新 Umami 容器的主页来验证这一点:
curl localhost:3000
Output<!DOCTYPE html><html><head><meta charSet="utf-8"/> . . .
如果大量 HTML 输出到您的终端,您就知道 Umami 服务器已启动并正在运行。
接下来,我们将把 Nginx 设置为 反向代理 Umami 从 localhost:3000
到公众。
第 2 步 — 安装和配置 Nginx
将 Nginx 等 Web 服务器放在 Node.js 服务器前面可以通过将缓存、压缩和静态文件服务卸载到更高效的进程来提高性能。 我们将安装 Nginx 并将其配置为对 Umami 的 proxy 请求,这意味着它将负责将用户的请求传递给 Umami 并再次返回。
首先,刷新你的包列表,然后使用 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配置文件。 我们将调用我们的 umami.conf
但您可以使用不同的名称:
sudo nano /etc/nginx/sites-available/umami.conf
将以下内容粘贴到新的配置文件中,确保将 your_domain_here
替换为您配置为指向 Umami 服务器的域。 这将类似于 umami.example.com
,例如:
/etc/nginx/sites-available/umami.conf
server { listen 80; listen [::]:80; server_name your_domain_here; access_log /var/log/nginx/umami.access.log; error_log /var/log/nginx/umami.error.log; location / { proxy_pass http://localhost:3000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
此配置目前仅适用于 HTTP,因为我们将让 Certbot 在下一步中负责配置 SSL。 配置的其余部分设置日志记录位置,然后将所有流量传递到 http://localhost:3000
,即我们在上一步中启动的 Umami 实例。
保存并关闭文件,然后通过将其链接到 /etc/nginx/sites-enabled/
来启用配置:
sudo ln -s /etc/nginx/sites-available/umami.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
您的 Umami 站点现在应该可以在纯 HTTP 上使用。 加载http://your_domain_here
,它看起来像这样:
现在您的站点已通过 HTTP 启动并运行,是时候使用 Certbot 和 Let's Encrypt 证书来保护连接了。
第 3 步 — 安装 Certbot 并设置 SSL 证书
感谢 Certbot 和 Let's Encrypt 免费证书颁发机构,将 SSL 加密添加到我们的 Umami 应用程序只需要两个命令。
首先,安装 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://umami.example.com You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=umami.example.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/umami.example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/umami.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。
您的站点现在是安全的,使用默认用户 admin 和密码 umami
登录是安全的。 请立即执行此操作,并按照 官方首次登录文档 登录并将您的 管理员 密码更改为更安全的密码。
首次登录时,您会看到一个有点裸露的仪表板:
您已成功安装并保护您的 Umami 分析软件。 在本教程的结尾,您将找到文档链接,这些链接将帮助您开始将您的网站添加到 Umami,并将 Umami 跟踪代码段添加到您的网站。
结论
在本教程中,您使用 Docker Compose 启动了 Umami 应用程序和 PostgreSQL 数据库,然后设置了 Nginx 反向代理并使用 Let's Encrypt SSL 证书对其进行保护。
此外,您应该已经 登录并更新了默认密码 。 如果没有,现在就这样做。