搭建Shynet教程(网络分析工具)
搭建Shynet教程(网络分析工具)

搭建Shynet教程(网络分析工具)

一、搭建环境

1)Docker version 25.0.3, build 4debf41
2)CentOS Linux release 7.9.2009 (Core)

二、安装PostgreSQL

要在 Docker 中安装 PostgreSQL,可以使用官方提供的 PostgreSQL Docker 镜像。以下是一些简单的步骤:

1、获取 PostgreSQL Docker 镜像:

在终端或命令行中运行以下命令以获取 PostgreSQL Docker 镜像:

docker pull postgres

2、创建并运行 PostgreSQL 容器:

使用以下命令创建并启动 PostgreSQL 容器:

docker run --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=secretpassword -d postgres

–name postgres:指定容器的名称为 postgres,可以根据需要更改名称。

-e POSTGRES_PASSWORD=secretpassword:设置 PostgreSQL 数据库的密码为 secretpassword。可以根据需要更改密码。

-p 5432:5432,表示通过主机的 IP 地址和映射的5432端口来访问 PostgreSQL 数据库

-d:以守护进程(后台)模式运行容器。

postgres: 这个是指定使用的 Docker 镜像名称。在这个命令中,我们使用了官方提供的 PostgreSQL 镜像,其名称为 postgres。当 Docker 运行这个命令时,它会从 Docker Hub 下载 PostgreSQL 镜像(如果本地没有缓存的话),然后使用该镜像创建一个容器实例。

整个命令的含义是:创建一个名为 postgres 的容器,使用 PostgreSQL 官方镜像,并设置 PostgreSQL 数据库的密码为 secretpassword,并以后台模式运行。

注意,一定要配置 -p 端口,否则无法通过互联网访问该Docker容器。

3、连接到 PostgreSQL 容器:

使用以下命令连接到刚刚创建的 PostgreSQL 容器:

docker exec -it postgres psql -U postgres

这将打开一个交互式的 PostgreSQL shell,可以在其中执行 SQL 命令。

docker exec: 这个命令用于在运行中的容器中执行命令。

-it: 这两个选项结合起来,创建了一个交互式的终端会话。-i 表示保持标准输入流 (stdin) 打开,-t 表示分配一个伪终端 (pseudo-tty)。

postgres: 这是要执行命令的容器的名称。在这个命令中,我们使用的容器名称是 postgres,这是在之前创建 PostgreSQL 容器时指定的名称。

psql: 这是 PostgreSQL 的命令行工具,用于与 PostgreSQL 数据库进行交互。

-U postgres: 这个选项指定了要连接到 PostgreSQL 数据库的用户名,这里是 postgres。通常,postgres 是默认的超级用户。这意味着我们将以 postgres 用户的身份连接到 PostgreSQL 数据库。

因此,整个命令的含义是:在名为 postgres 的容器中以 postgres 用户身份启动一个交互式的 PostgreSQL psql 终端会话。

4、使用 PostgreSQL 容器:

使用 psql 命令行工具或任何支持 PostgreSQL 的客户端工具连接到 PostgreSQL 服务器,以创建数据库、用户等。

5、停止和删除容器(可选):

如果不再需要 PostgreSQL 容器,可以停止并删除它。首先,停止容器:

docker stop postgres

然后,删除容器:

docker rm postgres

这将停止并删除名为 postgres 的 PostgreSQL 容器。

三、配置PostgreSQL

在上面的连接到 PostgreSQL 容器这一步,通过下面命令连接正在运行的 PostgreSQL 容器中的数据库服务器

docker exec -it postgres psql -U postgres

接着,我们开始创建Postgres数据库和Postgres普通用户。

\l

可以列出所有的数据库列表

CREATE DATABASE shynet;

创建名为 shynet 的数据库,注意CREATE DATEBASE 等标识一定要大写,小写可能会报错,同时语句最后的 ;  不要忘记,不然操作不会成功。

接着,我们开始在 psql shell 中,使用以下命令创建新的数据库用户:

CREATE USER username WITH PASSWORD 'password';

在这个命令中,username 是要创建的新用户的名称,而 password 则是该用户的密码。请务必使用安全的密码。

为新用户授予权限(可选):

默认情况下,新用户创建时不会授予任何特权。如果需要,可以使用 GRANT 命令授予新用户适当的权限,比如给予创建数据库、创建表等权限:

GRANT ALL PRIVILEGES ON DATABASE database_name TO username;

在这个命令中,database_name 是希望新用户拥有权限的数据库名称,username 是刚刚创建的新用户的名称。

以上配置完成之后,我们新增了Postgre数据库和用户,因此我们获得了

1)数据库名称:shynet(自行配置)

2)数据库用户 shynet(自行配置)

3)数据库密码(自行配置)

4)数据库主机:服务器的ip

5)数据库端口:5432(Postgres默认端口,如有修改,则自行配置)

一切都配置完成了,我们使用下面的 \q 命令,退出Postgre数据库

postgres-# \q

四、配置Shynet网络分析工具

1、配置env文件

首先在本地创建一个 .env文件,然后点击下方的Github仓库地址,将TEMPLATE.env的文件内容拷贝到 .env文件中。

https://github.com/milesmcc/shynet/blob/master/TEMPLATE.env

然后,修改DB部分的数据库名称、密码等信息,还有ALLOWED_HOSTS字段,否则会导致Django应用收到了一个带有无效HTTP_HOST头的请求,应用提示400 Bad Request。

# Database settings (PostgreSQL)
DB_NAME=<数据库名称>
DB_USER=<用户名称>
DB_PASSWORD=<用户密码>
DB_HOST=<服务器ip>
DB_PORT=5432

# Email 设置,不需要则注释掉
# EMAIL_HOST_USER=example
# EMAIL_HOST_PASSWORD=example_password
# EMAIL_HOST=smtp.example.com
# EMAIL_PORT=465
# EMAIL_USE_SSL=True

# 允许的主机列表,必须配置自己的域名
ALLOWED_HOSTS=www.fangjunyu.com,fangjunyu.com

# 时区设置为亚洲/上海
TIME_ZONE=Asia/Shanghai

TEMPLATE.env是一个配置文件模板,用于配置 Shynet 应用程序的环境变量。以下是配置文件模版的相关参数(参考)

  1. 数据库设置 (PostgreSQL):
    • DB_NAME: 数据库名称。
    • DB_USER: 数据库用户。
    • DB_PASSWORD: 数据库用户的密码。
    • DB_HOST: 数据库主机地址。
    • DB_PORT: 数据库端口号。
  2. 邮件设置 (可选):
    • EMAIL_HOST_USER: 邮件服务器用户名。
    • EMAIL_HOST_PASSWORD: 邮件服务器密码。
    • EMAIL_HOST: 邮件服务器主机地址。
    • EMAIL_PORT: 邮件服务器端口号。
    • EMAIL_USE_SSL: 是否使用 SSL 连接到邮件服务器。
  3. 一般 Django 设置:
    • DJANGO_SECRET_KEY: Django 应用程序的密钥。
  4. 域名设置:
    • ALLOWED_HOSTS: 允许的主机列表。
    • CSRF_TRUSTED_ORIGINS: CSRF 信任的域名。
  5. 本地化设置:
    • LANGUAGE_CODE: 语言代码。
    • TIME_ZONE: 时区。
  6. 账户设置:
    • ACCOUNT_SIGNUPS_ENABLED: 是否允许用户注册。
    • ACCOUNT_EMAIL_VERIFICATION: 是否验证用户邮箱。
  7. HTTPS 设置:
    • SCRIPT_USE_HTTPS: 是否使用 HTTPS。
  8. 其他设置:
    • PORT: 网站应该绑定到的端口号。
    • SHOW_SHYNET_VERSION: 是否在前端显示 Shynet 版本信息。

2、安装Shynet

通过Docker拉取Shynet镜像

 docker pull milesmcc/shynet:latest

注意:这里可能会存在拉取失败的情况,可能是镜像仓库存在影响,建议使用阿里云的镜像加速器。

1、获取镜像加速器:https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images
2、镜像加速器地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

配置后,如果仍然存在镜像拉取失败的情况,则建议晚上或凌晨重新进行拉取镜像,我是早上7点重新拉取成功的。

3、配置Shynet

参考配置命令:

docker run -d -p 8080:8080 --env-file=<your env file> --name=shynet --restart=always milesmcc/shynet:latest
./manage.py registeradmin <your email>
./manage.py whitelabel <whitelabel>
./manage.py hostname <your domain>

下面是我具体执行的命令

docker run -d -p 8080:8080 --env-file=.env --name=shynet --restart=always milesmcc/shynet:latest

此命令会启动一个名为 “shynet” 的容器,并将其映射到主机的 8080 端口。

然后,通过下面的命令进入Shynet容器:

docker exec -it shynet /bin/bash

配置 Shynet:在容器内部,使用 ./manage.py 脚本来配置 Shynet。

1)运行以下命令来注册管理员用户:

./manage.py registeradmin <your email>

参考命令:

./manage.py registeradmin fangjunyu.com@gmail.com

提示成功创建了一个Shynet超级用户,并可以使用电子邮件地址和密码登录Shynet面板。

2)运行以下命令来设置Shynet面板:

./manage.py whitelabel <whitelabel>

参考命令:

./manage.py whitelabel fangjunyu.com@gmail.com

4、完成配置

最后,到互联网访问端口号即可访问Shynet服务,大功告成!

本教程大功告成,完结撒花🎉🎉撒花。

本教程花费了大约2天的时间,从学习到配置Shynet和踩坑,希望对大家能有所帮助。

五、踩坑经历

1、创建Shynet超级用户后,忘记了密码。

我们可以删除掉现有的用户并创建新用户,具体操作如下:

1)进入Shynet容器后,进入Python shell

python manage.py shell

在 Python shell 中,您可以执行以下命令删除用户:

(1)auth.User用户模型执行:

from django.contrib.auth.models import User
User.objects.filter(email='fangjunyu.com@gmail.com').delete()

(2)core.User用户模型执行:

from core.models import User  # 导入正确的用户模型
User.objects.filter(email='fangjunyu.com@gmail.com').delete()

2)重新创建用户:删除用户后,您可以使用相同的电子邮件地址注册管理员用户。您可以再次运行您之前尝试的命令:

./manage.py registeradmin fangjunyu.com@gmail.com

这将重新创建具有指定电子邮件地址的管理员用户。

2、配置完成后,访问报Bad Request (400)。

如果配置容器后发生报错,可以通过查看Shynet容器的日志了解更多信息

docker logs shynet

根据日志的报错,了解到Django应用收到了一个带有无效HTTP_HOST头的请求。HTTP_HOST头应该是客户端发送请求时的主机名,但在这种情况下,主机名被设置为”www.fangjunyu.com:8080″,其中包含端口号8080。

为了解决这个问题,需要删除Shynet容器,并设置.env文件的ALLOWED_HOSTS字段,具体请查看上面“配置env文件”这一段内容。

还有一种就是Nginx配置错误导致的,我打算配置Shynet的Https,但是没有成功,也报了类似的错误,目前只能不走Nginx服务器。

六、参考资料

1、搭建 Shynet 网站流量统计分析工具:https://atpx.com/blog/build-shynet-web-analytics/

2、Shynet官网教程:https://github.com/milesmcc/shynet/blob/master/GUIDE.md#installation

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注