侧边栏壁纸
博主头像
琉璃红梅 博主等级

琉璃世界,白雪红梅。

  • 累计撰写 52 篇文章
  • 累计创建 102 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

Docker系列-Rybbit站点统计的搭建与使用

雪穗
2025-07-25 / 0 评论 / 0 点赞 / 105 阅读 / 0 字
温馨提示:
本文最后更新于2025-12-29,若内容或图片失效,请留言反馈。 若部分素材不小心影响到您的利益,请联系我删除。

安装前提:

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文件

上传 .envdocker-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=latest

docker-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 sh

3.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    # 完全删除

6.参考

https://www.rybbit.io/docs/self-hosting-guides/nginx-proxy-manager

0

评论区