分类
源码分享

owllook – 在线小说搜索引擎

owllook是一个基于其他搜索引擎构建的垂直小说搜索引擎,owllook目的是让阅读更简单、优雅,让每位读者都有舒适的阅读体验,如搜书、阅读、收藏、追更、推荐等功能

衍生项目:

注意:若将本项目部署并发行,请声明来源,本项目纯属共享学习之用,不得用于商业!

Overview

owllook使用了mongodb储存了用户使用过程中的产生的基本信息,诸如注册信息、搜索小说信息、收藏小说数据等,对于某些必要的缓存,则利用redis进行缓存处理,如小说缓存、session缓存,注意,对于限制数据:都将在24小时删除

对于不同网站的小说,页面规则都不尽相同,我希望能够在代码解析后再统一展示出来,这样方便且美观,而不是仅仅跳转到对应网站就完事,清新简洁的阅读体验才是最重要的

目前采用的是直接在搜索引擎上进行结果检索,我尽量写少量的规则来完成解析,具体见规则定义,遇到自己喜欢的小说网站,你也可以自己添加解析,owllook目前解析了超过 200+ 网站,追更网站解析了50+

有一些地方需要用到爬虫,比如说排行榜,一些书籍信息等,我不想动用重量级爬虫框架来写,于是我在owllook里面编写了一个很轻量的爬虫框架来做这件事,见 ruia

BTW,sanic写界面确实不是很方便,至于为什么写这个,一是想利用sanic尽量做成异步服务,二是想就此练习下推荐系统,顺便作为毕业设计

Installation

请先装好mongo以及redis,不会安装mongo看这里owllook使用pipenv管理虚拟环境,所以使用前请确保安装一个Python3.6环境(比如我这里环境路径在/Users/howie/anaconda3/envs/python36/bin/python3.6),然后安装好pipenv

mongo以及redis装好后,进入项目目录,依照步骤执行:

# 下载代码
git clone https://github.com/howie6879/owllook
cd owllook
pip install pipenv
# 请先提前创建好Python3.6环境
pipenv install --python /Users/howie/anaconda3/envs/python36/bin/python3.6
# 进入虚拟环境
pipenv shell

# 方案一
# 运行:
cd owllook
python server.py
# 或者
gunicorn --bind 127.0.0.1:8001 --worker-class sanic.worker.GunicornWorker server:app

# 方案二 推荐 
# 直接下载镜像
docker pull howie6879/owllook
# 创建dev_owllook.env文件
vim dev_owllook.env
# 写入一些环境变量
# start ===============
# 需要设置就填写  不需要就删掉
MODE=DEV
REDIS_ENDPOINT= ip
REDIS_PORT= port
REDIS_PASSWORD=''
MONGO_HOST= ip
MONGO_PORT= port
MONGO_USERNAME=''
MONGO_PASSWORD=''
# end ===============
# 运行 在dev_owllook.env里面填上数据库配置 数据库ip需要注意 请将连接ip设置为ifconfig显示的ip
docker run --env-file ./dev_owllook.env -d -p 8001:8001 howie6879/owllook:latest
# 也可以自己打包
docker build -t owllook:0.1 .
# 运行
docker run --env-file ./dev_owllook.env -d -p 8001:8001 owllook:0.1

Features

  • 多搜索源
  • 丰富的解析源
  • 界面统一解析
  • 完善的阅读体验
  • 搜索记录
  • 缓存
  • 书架
  • 书签
  • 登录
  • 初步兼容手机(后续跟进)
  • 注册(开放注册)
  • 上次阅读记录
  • 最新章节
  • 书友推荐(简单地基于相似度进行推荐)
  • 目录获取
  • 翻页
  • 搜索排行
  • 章节异步加载 感谢@mscststs
  • 排行榜 – 起点+owllook
  • 自带爬虫框架,统一爬虫规范,对爬虫感兴趣的可以看看 – ruia

TODO

  • 评分
  • 阅读书单
  • 推荐
  • 小说圈 – 小说界的消息

Screenshots

首页:

搜索:

榜单:

书架:

目录解析页:

阅读:

FAQ

为什么首页榜单为空白?

这个是根据小说搜索次数显示的,每天刷新一次,使用多了就会有

为什么会出现302跳转?

为了防止直接运行服务被恶意域名绑定,所以作出如下修改:

vim config/config.py
# 将 true 改为 false
VAL_HOST = os.getenv('VAL_HOST', 'true')
VAL_HOST = os.getenv('VAL_HOST', 'false')

小说榜单页面为什么没有内容?

需要运行owllook/spiders/spider_console.py, 目前代码中是设定60分钟运行一次,运行的时候请酌情更改,os.environ['MODE'] = 'PRO' 这段代码也请注释掉

Reference

owllook使用了以下第三方包:

  • sanic:基于Python 3.5+的异步web服务器
  • motor:异步的mongodb驱动
  • ​Jinja2:基于python的模板引擎
  • aiohttp:异步请求
  • caddy:基于go的web服务器

    ……更多见Pipfile,感谢开发者

web框架:

  • bootstrap:Sleek, intuitive, and powerful front-end framework for faster and easier web development.
  • mdui:MDUI 是一个基于 Material Design 的前端框架

License

owllook is offered under the Apache 2 license.

分类
源码分享

一款二次元的Web多人在线网络聊天系统:Fiora安装及使用

说明:Fiora是一款偏二次元的Web多人在线聊天应用,使用Node.jsMongodbSocket.ioReact编写,使用起来还行,挺简洁的,这里水个搭建教程,有兴趣的可以玩玩。

截图

功能

  • 好友,群组,私聊,群聊
  • 文本,图片,代码,url等多种类型消息
  • 贴吧表情,滑稽表情,搜索表情包
  • 桌面通知,声音提醒,语音播报
  • 自定义桌面背景,主题颜色,文本颜色
  • 查看在线用户,@功能
  • 小黑屋禁言

手动安装

Github地址:https://github.com/yinxin630/fiora

所需环境:Nodejs >= 8.9.0Mongodb

说明:512M内存vps可能还需要先加一点虚拟内存,不然构建过程会失败,可以使用Swap一键脚本→传送门

1、安装Nodejs

#Debian/Ubuntu系统
curl -sL https://deb.nodesource.com/setup_10.x | bash -
apt install -y git nodejs 

#CentOS系统
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
yum install nodejs git -y

2、安装Mongodb

#CentOS 6系统,将下面命令一起复制进SSH客户端运行
cat <<EOF > /etc/yum.repos.d/mongodb.repo
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/6/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
EOF
yum -y install mongodb-org

#CentOS 7系统,将下面命令一起复制进SSH客户端运行
cat <<EOF > /etc/yum.repos.d/mongodb.repo
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
EOF
yum -y install mongodb-org

#Debian 8系统
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/4.0 main" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list
apt update -y
apt install -y mongodb-org

#Debian 9系统
curl https://www.mongodb.org/static/pgp/server-4.0.asc | apt-key add -
echo "deb http://repo.mongodb.org/apt/debian stretch/mongodb-org/4.0 main" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list
apt-get update -y
apt-get install -y mongodb-org

#Debian 10系统,目前Debian 10还没Mongodb软件包,不过试了下还是可以用下面的方法勉强安装的
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list
apt update -y
apt install -y mongodb-org

#Ubuntu 16.04系统
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list
apt update -y
apt install -y mongodb-org

#Ubuntu 18.04、18.10、19.04系统
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list
apt update -y
apt install -y mongodb-org

如果导入公匙时出现gnupg, gnupg2 and gnupg1 do not seem to be installed错误,使用apt install -y gnupg2,然后重新导入即可。

启动Mongodb并设置开机自启:

#CentOS 6系统
service mongod start
chkconfig mongod on

#CentOS 7、Debian、Ubuntu系统
systemctl start mongod
systemctl enable mongod

3、安装fiora

#拉取源码并存放于/opt文件夹
git clone https://github.com/yinxin630/fiora.git -b master /opt/fiora
cd /opt/fiora
#安装依赖
npm i
#构建
npm run build
mv -f dist/fiora/* public
#启动
export NODE_ENV=production
node server/main.js

运行后打开ip:9200,注册一个账号,然后可以看SSH客户端运行日志,获取自己的userId

#这里注册或登录的时候返回的信息,后面的5d329dd354b9则为自己的userId
<-- getLinkmansLastMessages  mYNheu93jds7 5d329dd354b9

如果ip:9200打不开的,可以检查下防火墙,CentOS系统可以使用以下命令:

#CentOS 6
iptables -I INPUT -p tcp --dport 9200 -j ACCEPT
service iptables save
service iptables restart

#CentOS 7
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --reload

像阿里云等,还需要额外在安全组开放端口。

接下来再将自己的账号设置成管理员,先使用Ctrl+C断开运行。

新建Systemd配置文件,只适用于CentOS 7Debian 8+Ubuntu 16+等。

#先修改你的userId和运行端口后复制到SSH运行
Administrator=5d329dd354b9
Port=9200
#新建fiora用户并授权
useradd -M fiora && usermod -L fiora
chown -R fiora:fiora /opt/fiora
#新建systemd配置文件,将以下代码一起复制到SSH运行
cat > /etc/systemd/system/fiora.service <<EOF
[Unit]
Description=fiora
After=network.target
Wants=network.target

[Service]
Type=simple
PIDFile=/var/run/fiora.pid
ExecStart=$(command -v node) server/main.js
WorkingDirectory=/opt/fiora
Environment=NODE_ENV=production Administrator=$Administrator Port=$Port
User=fiora
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target
EOF

开始启动并设置开机自启:

systemctl start fiora
systemctl enable fiora

其它系统,比如CentOSDebian 7等系统,可以直接使用以下方法启动:

#管理员userId和运行端口自行修改
export NODE_ENV=production Administrator=5d329dd354b9 Port=9200
nohup node server/main.js &

此时就可以访问ip:9200,运行端口以你设置的为准,这时候你登陆的时候,会发现左侧多了个管理员图标。

4、域名反代
如果你想使用域名的话,这里依旧使用Caddy反代,操作如下:

安装Caddy

wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh
#备用地址
wget -N --no-check-certificate https://www.moerats.com/usr/shell/Caddy/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh

配置Caddy

#以下全部内容是一个整体,请修改域名后一起复制到SSH运行!

#http访问,该配置不会自动签发SSL
echo "www.moerats.com {
 gzip
 proxy / 127.0.0.1:9200 {
    websocket
    header_upstream Host {host}
    header_upstream X-Real-IP {remote}
    header_upstream X-Forwarded-For {remote}
    header_upstream X-Forwarded-Port {server_port}
    header_upstream X-Forwarded-Proto {scheme}
  }
}" > /usr/local/caddy/Caddyfile

#https访问,该配置会自动签发SSL,请提前解析域名到VPS服务器
echo "www.moerats.com {
 gzip
 tls admin@moerats.com
 proxy / 127.0.0.1:9200 {
    websocket
    header_upstream Host {host}
    header_upstream X-Real-IP {remote}
    header_upstream X-Forwarded-For {remote}
    header_upstream X-Forwarded-Port {server_port}
    header_upstream X-Forwarded-Proto {scheme}
  }
}" > /usr/local/caddy/Caddyfile

tls参数会自动帮你签发ssl证书,如果你要使用自己的ssl,改为tls /root/xx.crt /root/xx.key即可。后面为ssl证书路径。

启动Caddy

/etc/init.d/caddy start

就可以打开域名进行访问了。

如果你想修改默认的频道名称的话,可以编辑config/server.js文件,修改最下面的代码:

defaultGroupName: 'fiora',

然后重启应用即可。需要使用到七牛云CDN的,可以参考作者给的教程自行设置→传送门

宝塔安装

1、安装宝塔

#CentOS系统
wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
#Ubuntu系统
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
#Debian系统
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh

安装完成后,进入面板,点击左侧软件商店,然后安装PM2管理器MongoDBNginx(使用域名访问才需要安装,反之不用)。

注意:Debian安装MongoDb之前还需要使用命令apt install sudo,不然可能存在MongoDb启动不了的情况;如果你已经安装了MongoDb,那就先使用apt install sudo,再使用/etc/init.d/mongodb start启动即可。

2、安装fiora
该步骤参考上面的手动步骤3,区别在于新建systemd配置文件的时候,Environment参数还需要加一样,不然启动可能失败。

只需要把新建systemd配置文件步骤换成下面这个,其它一模一样。

#以下命令一起复制进SSH客户端运行
npm=$(which npm)
cat > /etc/systemd/system/fiora.service <<EOF
[Unit]
Description=fiora
After=network.target
Wants=network.target

[Service]
Type=simple
PIDFile=/var/run/fiora.pid
ExecStart=$(command -v node) server/main.js
WorkingDirectory=/opt/fiora
Environment=NODE_ENV=production Administrator=$Administrator Port=$Port PATH=${npm%/*}
User=fiora
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target
EOF

3、域名反代
先点击左侧网站,添加站点,然后再点击添加好了的域名名称,这时候就进入了站点配置,点击配置文件,在中间添加以下代码:

location / {
    proxy_pass http://127.0.0.1:9200;
    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 Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Forward-Proto http;
    proxy_set_header X-Nginx-Proxy true;
    proxy_http_version 1.1;

    proxy_redirect off;
}