前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >搭建磁力搜索:btSearch

搭建磁力搜索:btSearch

作者头像
囍楽云
发布2022-12-26 13:51:39
2.1K0
发布2022-12-26 13:51:39
举报
文章被收录于专栏:囍楽云博客

系统我这边用的是debian11,先把需要的基本环境装一装。。

安装wget/git/curl/python3/pip3:

代码语言:javascript
复制
apt -y update
apt -y install wget git curl python3 python3-pip

安装go环境:

代码语言:javascript
复制
wget https://go.dev/dl/go1.17.7.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.17.7.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' > /etc/profile.d/golang.sh
source /etc/profile.d/golang.sh

程序需要用到mongodb和es,但是由于种种原因mongodb和es都不能用最新的版本,所以这里选择用docker来运行旧版本,先安装docker/docker-compose:

代码语言:javascript
复制
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

安装mongo-connector,这个东西的主要作用是把mongodb的数据同步到es内:

代码语言:javascript
复制
pip3 install mongo-connector
pip3 install 'elastic2-doc-manager[elastic5]'
pip3 install 'mongo-connector[elastic5]'

装好之后降级pymongo,否则后续报错运行不了:

代码语言:javascript
复制
pip3 install pymongo==3.9

拉取项目文件并切换到旧版本:

代码语言:javascript
复制
cd /opt
git clone https://github.com/Bmixo/btSearch.git btsearch
cd btsearch
git checkout 04852773893c79b503fa4bb5a71e80598620ed0b

把程序编译出来,这里需要编译3个部分,分别是web/worker/server,编译完成后在对应的目录会有二进制文件可用:

代码语言:javascript
复制
cd web
go build
cd ../worker/
go build
cd ../server/
go build

在项目的根目录内新建docker-compose文件:

代码语言:javascript
复制
cd /opt/btsearch && nano docker-compose.yml

写入如下内容:

代码语言:javascript
复制
version: '3.5'

services:
mongo:

image: mongo:3.6.0
restart: unless-stopped
ports:
  - 127.0.0.1:27017:27017
volumes:
  - ./mongodb_data:/data/db
command: "--bind_ip_all --replSet rs0"
es:

image: docker.elastic.co/elasticsearch/elasticsearch:5.6.0
restart: unless-stopped
environment:
  - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
  - "discovery.type=single-node"
  - "bootstrap.memory_lock=true"
ports:
  - 127.0.0.1:9200:9200
  - 127.0.0.1:9300:9300
volumes:
  - esdata:/usr/share/elasticsearch/data
  - esplugins:/usr/share/elasticsearch/plugins
  - esconfig:/usr/share/elasticsearch/config
ulimits:
  memlock:
    soft: -1
    hard: -1
healthcheck:
  test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"]
volumes:
esdata:
esplugins:
esconfig:

为了让程序本身和mongo-connector这个中间件能够正常运行,mongodb和es这两个容器都是很旧的版本,估计都是有很多安全漏洞的。

所以我们在这里把mongodb和es的端口都监听在本地,一般就不会有什么大问题了。确认配置无误后up起来:

代码语言:javascript
复制
docker-compose up -d

现在需要初始化mongodb副本集,先进到容器内:

代码语言:javascript
复制
docker exec -it btsearch_mongo_1 mongo

执行如下命令初始化副本集:

代码语言:javascript
复制
rs.initiate()

mongodb默认会随机分配一个主机名,这会让在外部的mongo-connector连接不上,所以这里把主机名改成mongo-connector能识别的,改完之后退出容器:

代码语言:javascript
复制
cfg = rs.conf()
cfg.members[0].host = "localhost:27017"
rs.reconfig(cfg)
exit

现在进到es容器内安装ik分词插件:

代码语言:javascript
复制
docker exec -it btsearch_es_1 /bin/bash

执行如下命令安装,安装完成后退出容器:

代码语言:javascript
复制
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.0/elasticsearch-analysis-ik-5.6.0.zip
exit

重启es容器:

docker-compose restart es 配置分词器,elastic:changeme是es的默认账号和密码不需要更改:

代码语言:javascript
复制
curl --user elastic:changeme -XPUT http://localhost:9200/bavbt -H 'Content-Type: application/json'
curl --user elastic:changeme -XPOST 'localhost:9200/bavbt/_close'
curl --user elastic:changeme -XPUT localhost:9200/bavbt/_settings?pretty -d '{
"index":{
"analysis" : {

        "analyzer" : {
            "default" : {
                "type" : "ik_max_word"
            }
        },
    "search_analyzer" : {
            "default" : {
                "type" : "ik_max_word"
            }
        }
    }
}
}'
curl --user elastic:changeme -XPOST 'localhost:9200/bavbt/_open'

现在编辑worker的配置文件:

代码语言:javascript
复制
nano /opt/btsearch/worker/config/worker_example.conf

设置verifyPassord:

代码语言:javascript
复制
[worker]
listenerAddr=0.0.0.0:9898
findNodeSpeed=9999
nodeChanSize=10000
udpPort=6999
verifyPassord=password

编辑server的配置文件:

代码语言:javascript
复制
nano /opt/btsearch/server/config/server_example.conf

设置verifyPassord与worker的保持一致,同时worker是可以部署多台机器上的,如果有多个worker运行的话这里的wkNodes可以用逗号分隔来配置多个。其他的配置保持默认即可:

代码语言:javascript
复制
[server]
wkNodes=127.0.0.1:9898
verifyPassord=password
metadataNum=10
banList=config/banList.txt
[mongodb]
musername=
mpassword=
database=bavbt
collection=torrent
addr=127.0.0.1:27017
[redis]
redisEnable=false
redisAddr=localhost:6379
redisPassword=
redisDB=0

编辑web的配置文件:

代码语言:javascript
复制
nano /opt/btsearch/web/config/server.conf

一般情况下保持和下面的配置一致即可:

代码语言:javascript
复制
[mongodb]
musername=
mpassword=
database=bavbt
collection=torrent
addr=127.0.0.1:27017
[elasticsearch]
url=http://127.0.0.1:9200/bavbt/torrent/
eusername=elastic
epassword=changeme
[webServer]
webServerAddr=0.0.0.0:7878

接下来分别运行worker/server/web,这里你也可以用systemd或者supervisor来配置进程守护,我为了方便调试就临时用screen了:

代码语言:javascript
复制
apt -y install screen

启动worker:

代码语言:javascript
复制
screen -S worker
cd /opt/btsearch/worker
./worker -c config/worker_example.conf

启动server:

代码语言:javascript
复制
screen -S server
cd /opt/btsearch/server
./server -c config/server_example.conf

启动web:

代码语言:javascript
复制
screen -S web
cd /opt/btsearch/web
./web -c config/server.conf

接下来再开一个screen,用于mongo-connector:

screen -S mongo 执行下面的命令启动mongo-connector:

代码语言:javascript
复制
mongo-connector -m mongodb://localhost:27017/?unicode_decode_error_handler=ignore -t http://elastic:changeme@localhost:9200/torrent -d elastic2_doc_manager -n bavbt.torrent -i name,length,hot,create_time,category,infohash

等待片刻,如果正常的话,执行下面的命令,应该可以检索到es内的数据:

代码语言:javascript
复制
curl --user elastic:changeme 127.0.0.1:9200/bavbt/torrent/_search?pretty=true

访问你的ip:7878应该能够打开web页面:

试试搜索:

后续我发现一个小问题,es重启后mongo-connector就不能正常同步数据,把目录内的oplog.timestamp文件删了就可以了。

[可选]配置反向代理,安装nginx/certbot:

代码语言:javascript
复制
apt -y install nginx python3-certbot-nginx

新建nginx站点配置文件:

nano /etc/nginx/conf.d/btsearch.conf 写入如下配置:

代码语言:javascript
复制
server {

listen       80;
server_name  bt.example.com;
client_max_body_size 0;

error_log /var/log/nginx/btsearch.error.log;
access_log /var/log/nginx/btsearch.access.log;

location / {
    proxy_pass http://127.0.0.1:7878;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
}
}

签发ssl证书:

代码语言:javascript
复制
certbot --nginx

本文共 660 个字数,平均阅读时长 ≈ 2分钟

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档