【好玩儿的Docker项目】SearXNG——自建一个属于自己的免费搜索引擎平台!尊重隐私、完全开源!

一个基于 Python 的完全开源免费搜索引擎平台!

本博客用什么VPS?创作不易,欢迎请咕咕喝杯咖啡☕☕☕

前言

一个基于 Python 的完全开源免费搜索引擎平台,为你提供来自 Google、Bing、Yahoo 等 70 多种各大视频、图片、搜索、磁力等网站结果展示,并对搜索结果进行优化,同时不会存储你的任何搜索信息,搭建也很方便,有兴趣的可以搭建给需要谷歌的同事或朋友用下。

注意,不能访问外网的用户使用起来会很不舒服。

搭建采用国外(或者非大陆)服务器,不建议采用国内服务器。

1. 介绍(来自官方

SearXNG

1.1 系统特色

尊重隐私、可定制的元搜索引擎。

SearXNG是searx的一个分支。(原因是内部对项目发展的想法不一)

以下是一些特性:

  • 桌面、平板和手机上自适应显示
  • 支持暗夜模式(你可以在首选项中选择)
  • 支持从右到左的语言
  • 查看屏幕截图
  • 支持Docker部署,还可以为ARM64和ARM/v7架构构建镜像(树莓派也能安装)

1.2 相关地址

官方Demo:https://searx.space/

咕咕的Demo:http://search.gugu.ge/ (可以用咕咕的这个,不过还是建议自建)

文档地址:https://docs.searxng.org/

GitHub地址:https://github.com/searxng/searxng (2.6K Star)

Docker仓库地址:https://github.com/searxng/searxng-docker

2023年11月29日更新补充:

第三方镜像地址:https://hub.docker.com/r/paulgoio/searxng
(据说官方镜像有小问题,这个是改良版本,来源:https://hostloc.com/thread-1241206-1-2.html

2. 项目展示

image-20220728212537763

image-20220728212631167

image-20220728212656007

SearXNG 对比 Baidu:

image-20220728212458670

3. 搭建环境

  • 服务器:腾讯香港轻量应用服务器24元/月VPS一台展示用的服务器是Netcup特价款,本期搭建用的是腾讯轻量购买链接的服务器,(最好是选非大陆的服务器)如果是小白刚开始玩的话,还可以购买Racknerd的服务器,最低一年不到100块(不过搭建Docker还是建议选择1G内存以上的机器)(Racknerd服务器介绍:点击查看
  • 系统:Debian 10(DD脚本 非必需DD用原来的系统也OK,之后教程都是用Debian或者Ubuntu搭建~)
  • 安装好Docker、Docker-compose(相关脚本
  • 【非必需但建议】域名一枚,并做好解析到服务器上(域名购买、域名解析 视频教程
  • 【非必需】提前安装好宝塔面板海外版本aapanel,并安装好Nginx(安装地址
  • 【非必需本教程选用】安装好Nginx Proxy Manager(相关教程

服务器要求:不是非常高,能搭建Docker即可,建议1G以上。

4. 搭建视频

YouTube:https://youtu.be/2mrbKr-lYek

哔哩哔哩【高清版本可以点击去吐槽到B站观看】:

5. 搭建方式

5.1 服务器前期配置

服务器初始设置,参考:

新买了一台服务器“必须”要做的6件小事

【Docker系列】不用宝塔面板,小白一样可以玩转VPS服务器!

注意:VPS的内存如果过小,建议设置一下SWAP,一般为内存的1-1.5倍即可,可以让系统运行更流畅!

设置SWAP可以用脚本:

wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh

image-20220528185512488

选择18,然后输入你想要扩容的数值即可。

image-20220528185604586

sudo -i # 切换到root用户

apt update -y  # 升级packages

apt install wget curl sudo vim git -y  # Debian系统比较干净,安装常用的软件

5.2 安装Docker

5.2.1 非大陆服务器Docker安装

wget -qO- get.docker.com | bash
docker -v  #查看docker版本
systemctl enable docker  # 设置开机自动启动

修改Docker配置(可选)(来自烧饼博客

以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘(泪的教训):

cat > /etc/docker/daemon.json <<EOF
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "20m",
        "max-file": "3"
    },
    "ipv6": true,
    "fixed-cidr-v6": "fd00:dead:beef:c0::/80",
    "experimental":true,
    "ip6tables":true
}
EOF

然后重启 Docker 服务:

systemctl restart docker

5.2.2 非大陆服务器Docker-compose安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version  #查看docker-compose版本

5.2.3 国内服务器安装docker

curl -sSL https://get.daocloud.io/docker | sh
docker -v  #查看docker版本
systemctl enable docker  # 设置开机自动启动

修改Docker配置(可选)(来自烧饼博客

以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘(泪的教训):

cat > /etc/docker/daemon.json <<EOF
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "20m",
        "max-file": "3"
    },
    "ipv6": true,
    "fixed-cidr-v6": "fd00:dead:beef:c0::/80",
    "experimental":true,
    "ip6tables":true
}
EOF

然后重启 Docker 服务:

systemctl restart docker

5.2.4 国内服务器安装docker-compose

curl -L https://get.daocloud.io/docker/compose/releases/download/v2.1.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker-compose --version  #查看docker-compose版本

5.3 安装NginxProxyManager

参考这边的内容:https://blog.laoda.de/archives/nginxproxymanager

5.4 创建安装目录及docker-compose文件

创建一下安装的目录:

mkdir -p /root/data/docker_data/searxng

cd /root/data/docker_data/searxng

git clone https://github.com/searxng/searxng-docker.git

cd searxng-docker/

vim docker-compose.yaml

因为官方默认是试用caddy来反代的,有一个问题就是可能会和你网站上的80端口冲突,导致searXNG与你服务器上的其他网站无法共存,我们这边把caddy部分注释掉,改为采用{NginxProxyManager}(https://blog.laoda.de/tags/nginxproxymanager)反代

version: '3.7'

services:
# 我们注释掉caddy的内容
  #  caddy:
  #  container_name: caddy
  #  image: caddy:2-alpine
  #  network_mode: host
  #  volumes:
  #    - ./Caddyfile:/etc/caddy/Caddyfile:ro
  #    - caddy-data:/data:rw
  #    - caddy-config:/config:rw
  #  environment:
  #    - SEARXNG_HOSTNAME=${SEARXNG_HOSTNAME:-http://localhost:80}
  #    - SEARXNG_TLS=${LETSENCRYPT_EMAIL:-internal}
  #  cap_drop:
  #    - ALL
  #  cap_add:
  #    - NET_BIND_SERVICE
  #    - DAC_OVERRIDE

  redis:
    container_name: redis
    image: "redis:alpine"
    command: redis-server --save "" --appendonly "no"
    networks:
      - searxng
    tmpfs:
      - /var/lib/redis
    cap_drop:
      - ALL
    cap_add:
      - SETGID
      - SETUID
      - DAC_OVERRIDE

  searxng:
    container_name: searxng
    image: searxng/searxng:latest
    networks:
      - searxng
    ports:
     - "8180:8080"   # 这个冒号左边的端口可以更改,右边的不要改
    volumes:
      - ./searxng:/etc/searxng:rw
    environment:
      - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-https://你的域名}/
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
      - DAC_OVERRIDE
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"
networks:
  searxng:
    ipam:
      driver: default

        #volumes:
        #caddy-data:
        #caddy-config:

切换到英文输入法,按下i输入内容。

输入完成之后,切换到英文输入法,按下:wq保存退出。

接着我们来编辑一下.env文件。

cd /root/data/docker_data/searxng/searxng-docker

vim .env

切换到英文输入法,按下i输入内容。

image-20220728210522707

取消#注释,在上图位置填入你之后需要用到的域名。

第二行的邮件不用管,那个是caddy申请的一个邮件,我们不用caddy。

输入完成之后,切换到英文输入法,按下:wq保存退出。

cd /root/data/docker_data/searxng/searxng-docker

sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng/settings.yml # 生成一个密钥

5.5 打开服务器防火墙并访问网页

打开防火墙的端口8180

腾讯云打开方法如下:

image-20220630215240864

image-20220630220546335

这边的21116只是一个例子,这边我们应该填8180

image-20220630220629996

查看端口是否被占用(以8180为例),输入:

lsof -i:8180  #查看8180端口是否被占用,如果被占用,重新自定义一个端口

如果出现:

-bash: lsof: command not found

运行:

apt install lsof  #安装lsof

如果端口没有被占用,我们接着可以运行:

cd /root/data/docker_data/searxng/searxng-docker

docker-compose up -d  

注意:

1、不知道服务器IP,可以直接在命令行输入:curl ip.sb,会显示当前服务器的IP。

2、遇到访问不了的情况,请再次检查在宝塔面板的防火墙和服务商的后台防火墙是否打开对应了端口。

如果你没有域名,可以试试直接输入http://ip:8180访问。

还是非常建议大家买一个域名来试用,这样可以做https,会让网页更安全。

而且namesilo上面xyz后缀的域名一年就7块钱,可以年抛。

如果想要长期使用,还是建议买com后缀的域名,更加正规一些,可以输入laodade来获得1美元的优惠(不知道现在还有没有)

namesilo自带隐私保护,咕咕一直在用这家,价格也是这些注册商里面比较低的,关键是他家不像其他家域名注册商,没有七七八八的套路!(就是后台界面有些古老 = =)

【域名购买】Namesilo优惠码和域名解析教程(附带服务器购买推荐和注意事项)

我们接着往下看!

5.6 更新

cp -r /root/data/docker_data/searxng/searxng-docker /root/data/docker_data/searxng/searxng-docker.archive  # 万事先备份,以防万一

cd /root/data/docker_data/searxng/searxng-docker  # 进入docker-compose所在的文件夹

docker-compose pull    # 拉取最新的镜像

docker-compose up -d   # 重新更新当前镜像

利用Docker-compose搭建的应用,更新非常容易~

5.7 卸载

cd /root/data/docker_data/searxng/searxng-docker  # 进入docker-compose所在的文件夹

docker-compose down    # 停止容器,此时不会删除映射到本地的数据

rm -rf /root/data/docker_data/searxng/searxng-docker  # 完全删除映射到本地的数据

6. 反向代理

6.1 利用Nginx Proxy Manager

在添加反向代理之前,确保你已经完成了域名解析,不会的可以看这个:域名一枚,并做好解析到服务器上域名购买、域名解析 视频教程

之后,登陆Nginx Proxy Manager(不会的看这个:安装Nginx Proxy Manager相关教程))

注意:

Nginx Proxy Manager(以下简称NPM)会用到80443端口,所以本机不能占用(比如原来就有Nginx)

直接丢几张图:

image-20220502123517401
image-20220728212001182

注意填写对应的域名IP端口,按文章来的话,应该是8180

IP填写:

如果Nginx Proxy Manager和reader在同一台服务器上,可以在终端输入:

ip addr show docker0

查看对应的Docker容器内部IP。

否则直接填cryptgeon所在的服务器IP就行。

image-20220403104353185

再次打开,勾选这些:

image-20220728212042482

然后就可以用域名来安装访问了。

7. 使用教程

7.1 安装和配置

见咕咕的视频

8. 遇到的几个问题

8.1 too many requests问题

就是这个searxng,我搜索后出现这个 “too many requests”

修改settings.yml文件,把limiter改成false

【好玩儿的Docker项目】SearXNG——自建一个属于自己的免费搜索引擎平台!尊重隐私、完全开源!

9. 结尾

祝大家用得开心,有问题可以去GitHub提Issues,也可以在评论区互相交流探讨。

同时,有能力给项目做贡献的同学,也欢迎积极加入到项目中来,贡献自己的一份力量!

参考资料

https://github.com/searxng/searxng-docker

https://docs.searxng.org/admin/installation-docker.html

---------------
如何觉得文章内容不错,欢迎点击一下广告,支持一下咕咕😍😍😍

原创文章,作者:Roy,如若转载,请注明出处:https://iwanlab.com/docker-compose-install-searxng/

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Roy的头像Roy
上一篇 2023年6月15日 下午7:24
下一篇 2023年6月15日 下午7:24
   

发表回复

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