基于Whoogle自建无广告、无追踪的搜索引擎

简介: 基于Whoogle自建无广告、无追踪的搜索引擎

1.png

我在周刊项目[1]第 003 期 (08-30~09-03)[2]中介绍了一个开源的元搜索引擎项目whoogle-search[3],这个项目有几个吸引我的特性:


  • 没有广告以及赞助内容

  • 不追踪个人 IP

  • Tor & HTTP/SOCKS 支持

  • 设置 No JS&Cookie


  • 易部署

  • 更多特性去项目地址查看

到目前我差不多用了三个月,完全满足我日常使用需求,也很少用Google了,这次将Whoogle正式部署到了我的k3s集群,中间踩了不少坑,输出这篇文章以作记录。


部署


所谓元数据搜索引擎就是基于其他搜索引擎的基础上做一些基础功能,whoogle-search就是在Google搜索结果的基础上增加了上述功能,所以对于检索质量来说是和谷歌一致的。


如果你有自己的服务器(海外优先),我推荐你使用Whoogle作为自己的搜索引擎。如果没有服务器,也没关系,目前有很多免费资源供开发者日常使用,如:


  • heroku[4]

  • Repl.it[5]

  • Fly.io[6]

单机部署


单机部署的话非常简单,推荐直接使用Docker,一行命令搞定:

docker run -d -it -p 5000:5000 --restart=always --name whoogle-search benbusby/whoogle-search:latest

如果你有域名且希望上https,可以考虑结合Caddy使用Letsencrypt来实现。


集群部署


我个人的话在自己购买的几台服务器上有部署一套k3s集群(开源、极轻量的 Kubernetes 发行版),所以我准备直接在集群上部署whoogle-search并绑定域名上https,这件事花了我一整天的时间才做完,写这篇文章的目的也完全是为了记录我踩的坑,接下来直接放出可行的解决方案。


k3s集群相关依赖版本如下:


  • k3s[7]: v1.21.3+k3s1

  • traefik[8]: v2.4.8

  • cert-manager[9]: v1.6.1

k3s集群安装搭建这里先不提,后面等我玩熟了会出一篇文章聊聊,提一句,如果你不熟悉k8s但又感兴趣的话,可以看看我之前学习k8s过程中产出的开源笔记:


  • github[10]

  • 网页访问[11]:k8s 学习之路

先安装cert-manager

kubectl create namespace cert-manager
kubectl apply --validate=false -f  https://github.com/jetstack/cert-manager/releases/download/v1.6.1/cert-manager.yaml
# 查看状态
kubectl get pods --namespace cert-manager
# 输出
NAME                                      READY   STATUS    RESTARTS   AGE
cert-manager-55658cdf68-4m5r5             1/1     Running   0          25h
cert-manager-cainjector-967788869-x5cpk   1/1     Running   0          25h
cert-manager-webhook-6668fbb57d-4cv2c     1/1     Running   0          25h

一旦运行成功,我们将使用ClusterIssuer资源类型来支持Letsencrypt为我们颁发证书,创建文件letsencrypt.yaml,输入内容:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-issuer
spec:
  acme:
    email: <your>@<email>.<com> # input your email
    privateKeySecretRef:
      name: letsencrypt-issuer-account-key
    server: https://acme-v02.api.letsencrypt.org/directory
    solvers:
      - http01:
          ingress:
            ingressTemplate:
              metadata:
                annotations:
                  kubernetes.io/ingress.class: traefik

在终端执行:

kubectl apply -f letsencrypt.yaml
# 查看状态
kubectl get clusterissuers
# 输出
NAME                 READY   AGE
letsencrypt-issuer   True    114m
# 更详细的信息可查看
kubectl describe clusterissuers letsencrypt
# 输出
Status:
  Acme:
    Last Registered Email:
    Uri:                    https://acme-v02.api.letsencrypt.org/acme/acct/
  Conditions:
    Last Transition Time:  2021-12-01T07:08:43Z
    Message:               The ACME account was registered with the ACME server
    Observed Generation:   1
    Reason:                ACMEAccountRegistered
    Status:                True
    Type:                  Ready
Events:                    <none>

接下来我们直接在k3s部署whoogle,创建文件whoogle.yaml,输入内容:

apiVersion: v1
kind: Service
metadata:
  name: whoogle
spec:
  ports:
  - name: whoogle-5000-tcp
    port: 5000
    protocol: TCP
    targetPort: 5000
  selector:
    app: whoogle
---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: whoogle
  labels:
    app: whoogle
spec:
  replicas: 1
  selector:
    matchLabels:
      app: whoogle
  template:
    metadata:
      labels:
        app: whoogle
    spec:
      containers:
        - name: whoogle
          image: benbusby/whoogle-search:latest
          resources:
            limits:
              cpu: '1'
              memory: 512M
            requests:
              cpu: '1'
              memory: 512M
          ports:
              - containerPort: 5000

在终端执行:

kubectl apply -f ./whoogle.yaml
# 查看 pod 状态
kubectl get pods
# 输出
NAME                       READY   STATUS    RESTARTS   AGE
whoogle-7c95b49ddd-dqgs7   1/1     Running   0          25h
# 查看 svc 状态
kubectl get svc
# 输出
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
whoogle      ClusterIP   10.42.163.248   <none>        5000/TCP   25h

此时whoogle服务已经正常启动,接下来要做的就是利用traefikcert-manager进行域名绑定和https,这个过程我踩了好几个坑,如果你也遇到了Waiting for HTTP-01 challenge propagation: wrong status code '404', expected '200',可以参考我的配置示例,创建文件whoogle-ingress-tls.yaml,输入配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: whoogle-ingress
  annotations:
    kubernetes.io/ingress.class: "traefik"
    cert-manager.io/cluster-issuer: "letsencrypt-issuer"
    traefik.ingress.kubernetes.io/frontend-entry-points: http, https
    traefik.ingress.kubernetes.io/redirect-entry-point: https
spec:
  tls:
    - secretName: s-demo-cn
      hosts:
        - s-demo-cn
  rules:
    - host: s-demo-cn
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: whoogle
                port:
                  number: 5000

等待片刻,在终端执行以下命令查看状态:

kubectl apply -f whoogle-ingress-tls.yaml
# 查看 ingress
kubectl get ingress
# 输出
NAME              CLASS    HOSTS             ADDRESS            PORTS     AGE
whoogle-ingress   <none>   s.demo.cn          1.2.3.4           80, 443   123m
# 查看证书
kubectl get cert
# 输出
NAME                  READY   SECRET                AGE
s-demo-cn             True    s-demo-cn            125m
# 查看密钥
kubectl describe secret s-demo-cn
# 输出
Name:         s-demo-cn
Namespace:    default
Labels:       <none>
Annotations:  cert-manager.io/alt-names: s.demo.cn
              cert-manager.io/certificate-name: s-demo-cn
              cert-manager.io/common-name: s.demo.cn
              cert-manager.io/ip-sans:
              cert-manager.io/issuer-group: cert-manager.io
              cert-manager.io/issuer-kind: ClusterIssuer
              cert-manager.io/issuer-name: letsencrypt-issuer
              cert-manager.io/uri-sans:
Type:  kubernetes.io/tls
Data
====
tls.crt:  5603 bytes
tls.key:  1675 bytes
# 如果有问题,可以查看详情进行排查
kubectl describe certificate s-demo-cn
kubectl describe certificaterequest s-demo-cn
kubectl describe challenges s-demo-cn

至此,问题解决,留此记录,本文主要提供了一种在k3s集群下利用traefik&cert-manager让服务https化的方法。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6月前
|
SQL 运维 搜索推荐
《揭秘,阿里开源自研搜索引擎Havenask的在线检索服务》
Havenask是阿里巴巴智能引擎事业部自研的开源高性能搜索引擎,深度支持了包括淘宝、天猫、菜鸟、高德、饿了么在内几乎整个阿里的搜索业务。本文针对性介绍了Havenask的在线检索服务,它具备高可用、高时效、低成本的优势,帮助企业和开发者量身定做适合业务发展的智能搜索服务。
83620 138
|
JavaScript 定位技术 API
百度离线地图API v3.0开发解决方案
百度离线地图API v3.0开发解决方案
761 0
|
3月前
|
应用服务中间件 API nginx
网站统计——利用开源的网站流量分析统计工具
网站统计——利用开源的网站流量分析统计工具
74 0
|
6月前
|
Web App开发 JavaScript 前端开发
分析网站架构:浏览器插件
分析网站架构:浏览器插件
|
6月前
|
存储 弹性计算 关系型数据库
100W用户、8000W流量在线贺卡应用架构如何优化?
100W用户、8000W流量在线贺卡应用架构如何优化?
|
Kubernetes Ubuntu Linux
2022-10-13-网站百宝箱
2022-10-13-网站百宝箱
107 0
|
存储 前端开发 数据管理
淘宝安卓端搜索架构升级总结
推荐语:这篇文章图文并茂地介绍了淘宝搜索滚动容器的技术演进过程,结合代码讲解页面结构划分、数据处理、交互效果,还包含了对逻辑抽象、功能拓展的思考,最后总结了可复用的架构。非常具有实践意义,推荐阅读学习! ——大淘宝技术终端开发工程师 门柳
355 0
淘宝安卓端搜索架构升级总结
|
存储 SQL Prometheus
三款“非主流”日志查询分析产品初探
本文介绍三款 "schema-on-read" 类型日志系统。
554 0
网站:推荐几款好用的在线短链生成工具
短链技术目前对网站推广非常的有用,有了它就可以把非常长的网址缩短。这样分享推广起来非常方便。今天小编给大家推荐几款不错的在线短链生成网站,感兴趣的朋友可以下载试一试!
网站:推荐几款好用的在线短链生成工具
下一篇
无影云桌面