展示
Shynet是一个现代的、隐私友好的、无需使用cookie或JS的网站分析工具。它可以让你了解你的网站的访问情况,同时尊重你的访客的隐私。本文将介绍Shynet的特点、安装方法和使用指南。
Shynet的特点
Shynet有以下几个特点,使它与其他网站分析工具不同:
- 自主托管:Shynet是一个开源的软件,你可以在你自己的服务器上安装和运行它,这样你就拥有了你的数据的完全控制权,不需要将你的访客的信息交给第三方公司。
- 无需cookie:Shynet不使用cookie来跟踪访客的行为,所以你不需要在你的网站上添加任何烦人的cookie通知。Shynet使用一种基于IP地址的方法来识别访客的唯一性,但不会收集任何可以识别访客身份的数据,如IP地址的完整部分或用户代服务器托管网理字符串。
- 数据精简:Shynet只收集足够有用的数据,而不会收集过多的个人数据。Shynet可以告诉你你的访客来自哪个国家、哪个城市,他们访问了你的网站的哪些页面,他们在每个页面上停留了多长时间,他们是通过什么渠道来到你的网站的,等等。Shynet不会收集访客的姓名、邮箱、电话、性别、年龄、兴趣、偏好等任何个人信息。
- 界面简洁:Shynet有一个简洁而美观的界面,让你可以轻松地查看和分析你的网站的数据。Shynet还支持多个网站的管理,你可以在一个页面上看到你所有网站的概览,也可以点击进入每个网站的详细页面。
Shynet的安装方法
Shynet的安装方法有多种,你可以根据你的喜好和需求选择适合你的方法。以下是一些常用的安装方法:
-
使用Docker:如果你已经安装了Docker和Docker Compose,你可以使用它们来快速地部署Shynet。你只需要下载Shynet的源代码,修改一些配置文件,然后运行
docker-compose up -d
命令即可。 -
使用Heroku:如果你想使用Heroku来托管Shynet,你可以使用Heroku的一键部署功能。你只需要点击这里的
Deploy to Heroku
按钮,然后按照提示填写一些信息,就可以在几分钟内创建一个Shynet的实例。 -
使用Kubernetes:如果你已经有一个Kubernetes集群,你可以使用Shynet提供的Kubernetes部署文件来部署Shynet。你只需要修改一些配置文件,然后运行
kubectl apply -f kubernetes/
命令即可。
Shynet的使用指南
这里简单介绍一下Shynet的基本使用方法:
-
添加网站:在你成功安装Shynet后,你需要添加你想要监控的网站。你可以在Shynet的首页点击
Add a service
按钮,然后输入你的网站的名称和域名,就可以创建一个新的服务。Shynet会给你一个唯一的跟踪代码,你需要将它复制并粘贴到你的网站的每个页面的标签中,就可以开始收集数据了。
- 查看数据:在你添加了网站并添加了跟踪代码后,你就可以在Shynet的界面上查看你的网站的数据了。你可以在Shynet的首页看到你所有网站的概览,包括访问量、会话数、跳出率等指标。你也可以点击每个网站的名称,进入它的详细页面,查看更多的数据,如访客的地理位置、来源、设备、浏览器、页面访问情况等。
-
设置报警:Shynet还支持设置报警,让你可以在你的网站发生异常的情况时及时得到通知。你可以在每个网站的设置页面中,点击
Alerts
选项卡,然后添加一个新的报警。你可以设置报警的条件,如访问量的增减、跳出率的变化、来源的变化等。你也可以设置报警的通知方式,如电子邮件、Slack、Telegram等。当报警的条件满足时,Shynet会自动向你发送通知,让你可以及时处理问题。
Shynet是一个非常实用的网站分析工具,它可以让你了解你的网站的状况,同时保护你的访客的隐私。如果你对Shynet感兴趣,你可以查看它的源代码,或者在这里查看它的官方网站。
Shynet 是自建的、开源的网站流量统计分析工具,它在没有 Cookie 的情况下工作,不会像其它公共统计工具(例如 Google
Analytics、Cloudflare Web Analytics、CNZZ、51LA
等)一样追踪你的访客,它只收集足够有用的数据。同时可以不使用 Javascript 运行,分析脚本十分轻量,不到
1kb,但分析的数据内容很丰富,基本的点击量,来源域名,页面加载时间,使用的浏览器、系统、设备,访问的网页这些都有。
不过 Shynet 并不适合所有人,它非常适合个人项目和中小型网站,但尚未在高流量网站上进行测试。因此还需要大量的不断的维护升级,因此如果您需要一键式解决方案,最好使用其他工具。
搭建过程
安装 Shynet 比较简单,官方提供了两种安装方法,Docker + PostgreSQL 或者直接使用 Docker Compose 安装,我这里选择的是第一种安装方法,如果你想通过 Docker Compose 安装,可以参考官方文档。
官方文档
https://github.com/milesmcc/shynet/blob/master/GUIDE.md#installation
环境准备
以下演示适用于 Debian 系的操作系统,我为了简单,所有的操作都以 root 账户进行,
安装 Docker
详情参见官网文档
apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
添加 Docker 密钥:
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
添加 Docker 稳定版仓库:
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
安装 Docker:
apt update
apt install docker-ce docker-ce-cli containerd.io
安装 PostgreSQL
ubuntu 20.04 server系统
Shynet 目前只支持 PostgreSQL 数据库,因此你需要提前安装并准备好用户和数据库。
先更新系统
sudo apt update
sudo apt-get update
安装
apt install postgresql
#######################################################################
或者如下ubuntus 系统
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install postgresql
启动服务
pg_createcluster 12 main --start
#########################################
centos 6 7系统
##RHEL 6 and 7:
yum install postgresql-server
##RHEL 8 and Fedora:
dnf install postgresql-server
如果你需要额外的扩展模块,可以使用:
apt install postgresql postgresql-contrib
安装 PostgreSQL 后,会自动添加一个名为 postgres 的系统用户,密码是随机的,并且会自动生成用户名为 postgres 的数据库管理员用户,同时还有一个名字为 postgres 的数据库。
接下来就连接 PSQL 数据库:
su - postgres -c psql
如果你不是使用 root 用户,而是具有 root 权限的用户使用下面的命令:
sudo -u postgres psql
修改 postgres 数据库管理员密码(可选):
ALTER USER postgres WITH PASSWORD '123456';
为 Shynet 新建数据库和用户:
CREATE USER shynet WITH PASSWORD '123456';
CREATE DATABASE shynetdb OWNER shynet;
GRANT ALL PRIVILEGES ON DATABASE shynetdb to shynet;
如下整体 上面已经运行过 看我的操作下面的
root@ubuntu-201-224:~# su - postgres -c psql
psql (12.16 (Ubuntu 12.16-0ubuntu0.20.04.1))
Type "help" for help.
postgres=# ALTER USER postgres WITH PASSWORD '123456';
ALTER ROLE
postgres=# CREATE USER shynet WITH PASSWORD '123456';
CREATE ROLE
postgres=# CREATE DATABASE shynetdb OWNER shynet;
CREATE DATABASE
postgres=# GRANT ALL PRIVILEGES ON DATABASE shynetdb to shynet;
GRANT
postgres=# q
postgres-# q
invalid command q
Try ? for help.
postgres-# q
最后使用 q
命令退出数据库。
当然,如果你为了后期管理方便,可以使用 useradd shynet
在系统中也新建一个 shynet 用户,密码和数据库的密码一样。
root@ubuntu-201-224:~# useradd shynet
root@ubuntu-201-224:~# sudo passwd shynet
New password:
Retype new password:
passwd: password updated successfully
这时连接管理数据库就相当于系统用户以同名数据库用户的身份,登录数据库,就可以免去输入密码。
PSQL 一些常用的控制台命令:
h:查看SQL命令的解释,比如h select
?:查看psql命令列表
l:列出所有数据库
c [database_name]:连接其他数据库
d:列出当前数据库的所有表格
d [table_name]:列出某一张表格的结构
du:列出所有用户
e:打开文本编辑器
conninfo:列出当前数据库和连接的信息
安装 Shynet
准备配置文件
在合适的目录下新建一个 .env
文件,然后参考官方的模板输入你的环境配置信息。下面是一些需要修改的配置,完整的配置项请参考上面的模板:
模板下载地址
https://github.com/milesmcc/shynet/blob/master/TEMPLATE.env
模板文件如下 TEMPLATE.env
# This file shows all of the environment variables you can
# set to configure Shynet, as well as information about their
# effects. Make a copy of this file to configure your deployment.
# Database settings (PostgreSQL)
DB_NAME=shynet_db
DB_USE服务器托管网R=shynet_db_user
DB_PASSWORD=shynet_db_user_password
DB_HOST=db
DB_PORT=5432
# Database settings (SQLite) - comment PostgreSQL settings
# SQLITE=True
# DB_NAME=/var/local/shynet/db/db.sqlite3
# Email settings (optional)
EMAIL_HOST_USER=example
EMAIL_HOST_PASSWORD=example_password
EMAIL_HOST=smtp.example.com
EMAIL_PORT=465
EMAIL_USE_SSL=True
# Comment out EMAIL_USE_SSL & uncomment EMAIL_USE_TLS if your SMTP server uses TLS.
# EMAIL_USE_TLS=True
SERVER_EMAIL=Shynet
# General Django settings - to generate run: python3 -c "import secrets; print(secrets.token_urlsafe())"
DJANGO_SECRET_KEY=random_string
# Set these to your deployment's domain. Both are comma separated, but CSRF_TRUSTED_ORIGINS also requires a scheme (e.g., `https://`).
ALLOWED_HOSTS=example.com
CSRF_TRUSTED_ORIGINS=https://example.com
# Localization
# https://docs.djangoproject.com/en/2.2/topics/i18n/
LANGUAGE_CODE=en-us
# Set to True (capitalized) if you want people to be able to sign up for your Shynet instance (not recommended)
ACCOUNT_SIGNUPS_ENABLED=False
# Should user email addresses be verified? Only set this to `required` if you've setup the email settings and allow
# public sign-ups; otherwise, it's unnecessary.
ACCOUNT_EMAIL_VERIFICATION=none
# The timezone of the admin panel. Affects how dates are displayed.
# This must match a value from the IANA's tz database.
# Wikipedia has a list of valid strings: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
TIME_ZONE=America/New_York
# Set to "False" if you will not be serving content over HTTPS
SCRIPT_USE_HTTPS=True
# How frequently should the monitoring script "phone home" (in ms)?
SCRIPT_HEARTBEAT_FREQUENCY=5000
# How much time can elapse between requests from the same user before a new
# session is created, in seconds?
SESSION_MEMORY_TIMEOUT=1800
# Should only superusers (admins) be able to create services? This is helpful
# when you'd like to invite others to your Shynet instance but don't want
# them to be able to create services of their own.
ONLY_SUPERUSERS_CREATE=True
# Whether to perform checks and setup at startup, including applying unapplied
# migrations. For most setups, the recommended value is True. Defaults to True.
# Will skip only if value is False.
PERFORM_CHECKS_AND_SETUP=True
# The port that Shynet should bind to. Don't set this if you're deploying on Heroku.
PORT=8080
# Set to "False" if you do not want the version to be displayed on the frontend.
SHOW_SHYNET_VERSION=True
# Redis, queue, and parellization settings; not necessary for single-instance deployments.
# Don't uncomment these unless you know what you are doing!
# NUM_WORKERS=1
# Make sure you set a REDIS_CACHE_LOCATION if you have more than one frontend worker/instance.
# REDIS_CACHE_LOCATION=redis://redis.default.svc.cluster.local/0
# If CELERY_BROKER_URL is set, make sure CELERY_TASK_ALWAYS_EAGER is False and
# that you have a separate queue consumer running somewhere via `celeryworker.sh`.
# CELERY_TASK_ALWAYS_EAGER=False
# CELERY_BROKER_URL=redis://redis.default.svc.cluster.local/1
# Should Shynet show third-party icons in the dashboard?
SHOW_THIRD_PARTY_ICONS=True
# Should Shynet block collection of IP addresses globally?
BLOCK_ALL_IPS=False
# Should Shynet include the date and site ID when hashing users?
# This will prevent any possibility of cross-site tracking provided
# that IP collection is also disabled, and external keys (primary
# keys) aren't supplied. It will also prevent sessions from spanning
# one day to another.
AGGRESSIVE_HASH_SALTING=True
# Custom location url to link to in frontend.
# $LATITUDE will get replaced by the latitude, $LONGITUDE will get
# replaced by the longitude.
# Examples:
# - https://www.openstreetmap.org/?mlat=$LATITUDE&mlon=$LONGITUDE (default)
# - https://www.google.com/maps/search/?api=1&query=$LATITUDE,$LONGITUDE
# - https://www.mapquest.com/near-$LATITUDE,$LONGITUDE
LOCATION_URL=https://www.openstreetmap.org/?mlat=$LATITUDE&mlon=$LONGITUDE
# How many services should be displayed on dashboard page?
# Set to big number if you don't want pagination at all.
DASHBOARD_PAGE_SIZE=5
# Should background bars be scaled to full width?
USE_RELATIVE_MAX_IN_BAR_VISUALIZATION=True
如下是我的配置
# PostgreSQL 数据库连接信息
DB_NAME=shynetdb
DB_USER=shynet
DB_PASSWORD=123456
DB_HOST=127.0.0.1
DB_PORT=5432
# 如果不需要邮件功能的话可以直接注释掉
# EMAIL_HOST_USER=hahaha@163.com
# EMAIL_HOST_PASSWORD=邮箱的密码或者是授权码
# EMAIL_HOST=smtp.163.com
# EMAIL_PORT=465
# EMAIL_USE_SSL=True
# 默认为 *,建议修改为你准备部署的域名
ALLOWED_HOSTS=www.guoguo.com
# 时区设置,可以修改为 Asia/Shanghai
TIME_ZONE=Asia/Shanghai
安装配置
拉取最新的 Shynet 镜像:
docker pull milesmcc/shynet:latest
初始化连接,如果出现一些警告信息不必理会,在后面会进行配置,只需要确保能连接到数据库就行了:
docker run --env-file= milesmcc/shynet:latest
下面是我的文件名及运行
docker run --env-file=TEMPLATE.env --network='host' milesmcc/shynet:latest
docker run --env-file=TEMPLATE.env milesmcc/shynet:latest
如果按照上面的官方命令可能会出现以下报错信息:
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port 5432?
这是前面环境配置文件中设置的 localhost
/127.0.0.1
指的是容器的本地网络,并不是系统自己,因此启动容器的时候需要加入 --network='host'
选项:
docker run --env-file= --network='host' milesmcc/shynet:latest
我的
docker run --env-file=TEMPLATE.env --network='host' milesmcc/shynet:latest
如果能成功连接到数据库运行,进行下一步操作,新建一个面板管理员用户:
docker run --env-file= --network='host' milesmcc/shynet:latest ./manage.py registeradmin
运行后会在屏幕打印一个临时的密码,记下这个密码,等会登录会用到。接下来设置 whitelabel
,whitelabel 不会影响到任何系统设置,只是控制面板的标题,你可以设置成任何你喜欢的名字(例如 “My Shynet Instance” 或者 “Acme Analytics”,记得加上引号)。
docker run --env-file= --network='host' milesmcc/shynet:latest ./manage.py whitelabel
官方的文档中还漏了了一个关键的步骤,设置 hostname
,这会影响到你后面的 js 脚本地址,设置成你要部署的域名,不然会面会使用默认的 example.com
:
docker run --env-file= --network='host' milesmcc/shynet:latest ./manage.py hostname
当然,以上的操作你都可以直接进入容器内部使用 manage.py
依次进行设置,不需要每次都启动一个新的容器。
所有配置完成后,最后启动容器,如果你没有修改前面配置文件的端口,容器内部默认会以 8080
端口运行,你可以映射到你需要的端口,例如 80
:
docker run -d -p 8080:8080 --env-file= --network='host' --name=shynet --restart=always milesmcc/shynet:latest
我这里依然使用的 8080
端口,用 Nginx 进行反代,一个简单的 Nginx 反代示例:
server {
server_name yourdomain.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
到此,已经成功完成 Shynet 的安装配置,接下来可以登录你的网站进行面板设置了。
简单使用
添加网站
打开你的网站,输入你前面设置的管理员邮箱和记下的密码登录:
点击左侧的 + Create 添加你的第一个网站:
你还可以点击 Advanced settings 进一步设置一些高级选项。
设置代码
输入相关信息后创建后会跳转到该网站的统计页面,复制顶部的 script 代码到你准备统计网站的 标签里面任意位置:
现在你就可以在控制面板看到你网站的相关统计信息啦。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
性能优化是一个很有趣的探索方向,将耗时耗资源的查询优化下来也是一件很有成就感的事情,但既然编程是一种沟通手段,那每一个数据开发者就都有义务保证写出的代码逻辑清晰,具有很好的可读性。 目录 引子 小试牛刀 答案 引言 表的设计 名字及含义 属性和列 SQL规范 …