安装前提:
1.备好服务器(>=2GB内存)
2.已经安装好docker和docker compose,请参看我的博文 Docker系列-docker与docker compose安装
3.已经安装好nginx proxy manager,请参看我的博文 Docker系列-Nginx Proxy Manager的搭建与使用
4.nginx proxy manager与Rybbit安装在同一服务器
5.备好域名
安装建议:
1.将所有docker项目放在统一目录 /root/data/docker_data/ 下,方面后期管理与维护
2.添加SWAP虚拟内存,请参看我的博文 添加 SWAP 虚拟内存
安装版本:
Rybbit v1.5.1,目前来说该项目处于初级阶段,所以更新比较频繁,特别是UI方面
1.Rybbit简介
Rybbit官网:
https://www.rybbit.io/
Rybbit是一款媲美谷歌统计的网站统计应用,之前我已经写过一篇文章介绍了几种常见的站点统计的方式,详见:Halo系列-部署网站统计服务,但是Rybbit作为后起之秀,不仅具有丰富的功能还具有具有的酷炫界面(我是被它酷炫的界面吸引的🥰),并且支持定位到城市(虽然准确度不高),在我看来它同时解决了 Umami 无法定位到城市以及 Matomo 界面臃肿的痛点,用官网的话,一言以蔽之, 那就是 Extremely comprehensive。具体的界面展示和实现的功能访问其官网即可一目了然,除了可以静态记录访问页面还可以动态追踪访客轨迹,以及排除特定特定IP的统计(v1.6.0版本之后加入排除IP的设置项)。
2.Rybbit的安装
本文参考官网教程搭配nginx proxy manager进行部署,其它部署安装方式请参考官网,大同小异。
2.1 准备工作
#新建rybbit目录,用于存放部署文件以及容器映射文件
mkdir -p /root/data/docker_data/rybbit
cd /root/data/docker_data/rybbit
#新建clickhouse_config目录用于存放clickhosue配置文件
mkdir clickhouse_config
#下载clickhosue配置文件
curl -L https://github.com/rybbit-io/rybbit/archive/master.tar.gz | tar -xz --strip=2 rybbit-master/clickhouse_config
#将下载的clickhosue配置文件转移到clickhouse_config目录目录下,以便容器内部可以读取配置
mv *.xml clickhouse_config/2.2 上传docker-compose.yml文件
上传 .env 和 docker-compose.yml 文件到 rybbit 目录下
.env 内容如下:
# Domain and URL Configuration
DOMAIN_NAME=analytics.sqwfly.top
BASE_URL="https://analytics.sqwfly.top"
# Authentication and Security
# 在服务器执行 openssl rand -hex 32 获取
BETTER_AUTH_SECRET=5c35549b1f2bc3b73940c09edc2004de1c7a1e313c2d1817dcad8c3dc0e87828
# 是否禁止新用户注册账号
DISABLE_SIGNUP=false
# Optional: Custom image tag
IMAGE_TAG=latestdocker-compose.yml 文件内容如下:
services:
rybbit_clickhouse:
image: clickhouse/clickhouse-server:25.4.2
container_name: rybbit_clickhouse
volumes:
- ./clickhouse-data:/var/lib/clickhouse
- ./clickhouse_config:/etc/clickhouse-server/config.d
environment:
- CLICKHOUSE_DB=${CLICKHOUSE_DB:-analytics}
- CLICKHOUSE_USER=${CLICKHOUSE_USER:-default}
- CLICKHOUSE_PASSWORD=${CLICKHOUSE_PASSWORD:-frog}
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8123/ping"]
interval: 3s
timeout: 5s
retries: 5
start_period: 10s
restart: unless-stopped
networks:
- internal
rybbit_postgres:
image: postgres:17.4
container_name: rybbit_postgres
environment:
- POSTGRES_USER=${POSTGRES_USER:-frog}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-frog}
- POSTGRES_DB=${POSTGRES_DB:-analytics}
volumes:
- ./postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 3s
timeout: 5s
retries: 5
start_period: 10s
restart: unless-stopped
networks:
- internal
rybbit_backend:
image: ghcr.io/rybbit-io/rybbit-backend:${IMAGE_TAG:-latest}
container_name: rybbit_backend
environment:
- NODE_ENV=production
- CLICKHOUSE_HOST=http://rybbit_clickhouse:8123
- CLICKHOUSE_DB=${CLICKHOUSE_DB:-analytics}
- CLICKHOUSE_PASSWORD=${CLICKHOUSE_PASSWORD:-frog}
- POSTGRES_HOST=rybbit_postgres
- POSTGRES_PORT=5432
- POSTGRES_DB=${POSTGRES_DB:-analytics}
- POSTGRES_USER=${POSTGRES_USER:-frog}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-frog}
- BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET}
- BASE_URL=${BASE_URL}
- DISABLE_SIGNUP=${DISABLE_SIGNUP}
depends_on:
rybbit_clickhouse:
condition: service_healthy
rybbit_postgres:
condition: service_started
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:3001/api/health"]
interval: 3s
timeout: 5s
retries: 5
start_period: 10s
restart: unless-stopped
networks:
- internal
- npm_proxy
rybbit_client:
image: ghcr.io/rybbit-io/rybbit-client:${IMAGE_TAG:-latest}
container_name: rybbit_client
environment:
- NODE_ENV=production
- NEXT_PUBLIC_BACKEND_URL=${BASE_URL}
- NEXT_PUBLIC_DISABLE_SIGNUP=${DISABLE_SIGNUP}
depends_on:
- rybbit_backend
restart: unless-stopped
networks:
- internal
- npm_proxy
networks:
internal:
driver: bridge
npm_proxy:
external: true
volumes:
clickhouse-data:
postgres-data:2.3 部署Rybbit
由于端口没有暴露在公网所以不需要检查端口直接进入rybbit目录,进行部署即可
cd /root/data/docker_data/rybbit
# 启动服务
docker compose up -d 创建于与docker-compose.yml文件中同名的网络
docker network create npm_proxy查看nginx proxy manager容器的名字
cd ../npm
docker compose ps将nginx proxy manager应用连接到网络npm_proxy,以便于后续的反向代理
docker network connect npm_proxy <npm_container_name>部署完毕检查网络的连接性
#列出所有网络
docker network ls
#检查npm_proxy网络
docker network inspect npm_proxy
#列出容器连接的网络
docker ps --format "table {{.Names}}\t{{.Networks}}"docker network inspect npm_proxy 执行结果如下,这三个引用应该都在网络 npm_proxy 里

docker ps --format "table {{.Names}}\t{{.Networks}}" 执行结果如下,更加直观明了

2.4 设置反向代理
部署完毕之后设置反向代理,域名解析步骤省略,由于长亭雷池不支持 自定义location,所以无奈只能使用nginx proxy manager做反向代理了,设置内容如下:
1.设置客户端访问域名

2.自定义子文件夹访问域名

3.申请SSL证书

在第2步中官网内容如下:
location /api/ {
proxy_pass http://rybbit_backend:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}按照官网的配置后发现无法获取 /api/script.js 文件,采用强制路径匹配后,可以正常访问,修改后的内容如下:
location ~ ^/api(/|$) {
proxy_pass http://rybbit_backend:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}如果还是出现无法访问的问题可以尝试检查日志,一般来说 rybbit_backend 服务出现问题的概率比较大。
#查看所有Rybbit服务的日志
docker compose logs -f
#通过指定容器名查看该容器服务的日志
docker compose logs -f rybbit_backend
#查看nginx-proxy-manager服务的日志
docker logs -f <npm_container_name>
#进入容器内部
docker exec -it rybbit_backend sh3.Rybbit的基本使用
3.1 创建账号
全部设置完毕之后就可以访问了,首先注册账号,第一个注册的为管理员
1.创建账号

2.创建组织,后续可以添加成员

3.添加需天假要统计的域名,后续还可以再添加

4.获取追踪代码

如果你不希望别人注册账号,可以在停掉应用之后关闭注册功能再重新启动。
修改 .env 文件后重新启动即可生效
# 允许新用户注册账号
- DISABLE_SIGNUP=false
# 不允许新用户注册账号
+ DISABLE_SIGNUP=true 3.2 将追踪代码并注入到网站中
将获取到的追踪代码添加到 head 标签中,基于Halo搭建的网站请参考我的博文:Umami的基本使用—获取追踪代码并注入到网站中,添加成功之后稍等片刻或刷新一下就可以查看网站的访问信息了。Rybbit应用统计的访问时间与服务器时间是一致的,如果你是国外的服务器可以设置时区,这样访问时间就是北京时间了,关于如何设置可参考我的博文:设置时区。
4.Rybbit的升级与更新
# 方式一
cd /root/data/docker_data/rybbit
docker compose down --rmi all # 停止容器运行并删除相关镜像
vim docker-compose.yml # 修改rybbit的版本号为最新,如果使用的是latest版本可以忽略此步骤
docker compose up -d # 重新运行容器
# 方式二
cd /root/data/docker_data/rybbit
docker compose down # 停止容器运行
vim docker-compose.yml # 修改rybbit的版本号为最新,如果使用的是latest版本可以忽略此步骤
docker compose pull # 重新拉取镜像
docker compose up -d # 重新运行容器5.Rybbit的卸载
cd /root/data/docker_data/rybbit
docker compose down --rmi all # 停止容器运行并删除相关镜像
cd ..
rm -rf /root/data/docker_data/rybbit # 完全删除
评论区