Docker Compose部署whoogle-search:多服务协同
引言:隐私搜索的容器化解决方案
你是否厌倦了搜索引擎无休止的广告追踪?是否担心每次查询都在暴露隐私?本文将带你通过Docker Compose实现Whoogle Search的多服务协同部署,5分钟搭建属于自己的隐私搜索引擎。读完本文你将获得:
- 掌握Docker Compose多服务编排技巧
- 实现Traefik反向代理与自动HTTPS
- 深度定制Whoogle环境变量
- 构建高可用隐私搜索集群
技术栈概览
| 组件 | 版本 | 作用 |
|---|---|---|
| Docker | 20.10+ | 容器运行时 |
| Docker Compose | 2.4 | 服务编排工具 |
| Whoogle Search | latest | 隐私搜索引擎 |
| Traefik | v2.7 | 反向代理/负载均衡 |
| Let's Encrypt | - | 免费SSL证书 |
环境准备
系统要求
- 2核CPU/2GB内存
- Docker Engine 20.10+
- Docker Compose 2.0+
- 网络带宽≥1Mbps
安装依赖
# Ubuntu/Debian
sudo apt update && sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable --now docker
# 验证安装
docker --version && docker compose version
克隆代码仓库
git clone https://gitcode.com/GitHub_Trending/wh/whoogle-search
cd whoogle-search
基础部署:单服务模式
配置文件解析
docker-compose.yml核心配置:
version: "2.4"
services:
whoogle-search:
image: ${WHOOGLE_IMAGE:-benbusby/whoogle-search}
container_name: whoogle-search
restart: unless-stopped
pids_limit: 50
mem_limit: 256mb
memswap_limit: 256mb
user: whoogle
security_opt:
- no-new-privileges
cap_drop:
- ALL
tmpfs:
- /config/:size=10M,uid=927,gid=927,mode=1700
- /var/lib/tor/:size=15M,uid=927,gid=927,mode=1700
- /run/tor/:size=1M,uid=927,gid=927,mode=1700
ports:
- 5000:5000
⚠️ 注意:使用version 2.4而非3.x,因为mem_limit在非swarm模式下的3.x版本中不生效
环境变量配置
复制环境变量模板并修改:
cp whoogle.template.env whoogle.env
关键环境变量配置:
# 基础认证(可选)
WHOOGLE_USER=admin
WHOOGLE_PASS=your_secure_password
# 搜索引擎替代配置
WHOOGLE_ALT_TW=farside.link/nitter
WHOOGLE_ALT_YT=farside.link/invidious
WHOOGLE_ALT_RD=farside.link/libreddit
# 安全配置
WHOOGLE_CONFIG_DISABLE=1
WHOOGLE_CONFIG_SAFE=1
启动服务
docker compose up -d
# 查看状态
docker compose ps
# 查看日志
docker compose logs -f --tail 50
验证部署:访问 http://localhost:5000 应看到Whoogle搜索界面
高级部署:Traefik反向代理模式
架构优势
Traefik配置
docker-compose-traefik.yaml核心配置:
version: "2.4"
services:
traefik:
image: "traefik:v2.7"
container_name: "traefik"
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
- "--certificatesresolvers.myresolver.acme.email=your@email.com"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
ports:
- "443:443"
- "8080:8080" # Dashboard
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
whoogle-search:
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoogle.rule=Host(`search.yourdomain.com`)"
- "traefik.http.routers.whoogle.entrypoints=websecure"
- "traefik.http.routers.whoogle.tls.certresolver=myresolver"
# ... 其他配置与基础模式相同
启动Traefik模式
# 修改域名配置
sed -i 's/change.host.name/search.yourdomain.com/' docker-compose-traefik.yaml
sed -i 's/change@domain.name/your@email.com/' docker-compose-traefik.yaml
# 启动服务
docker compose -f docker-compose-traefik.yaml up -d
访问Traefik Dashboard:http://localhost:8080 (仅本地访问)
多环境部署策略
环境对比表格
| 部署模式 | 适用场景 | 优势 | 复杂度 | 资源需求 |
|---|---|---|---|---|
| 单服务模式 | 个人使用 | 配置简单,资源占用低 | ⭐ | 低 |
| Traefik模式 | 多用户共享 | HTTPS支持,可扩展性强 | ⭐⭐⭐ | 中 |
| 集群模式 | 企业级部署 | 高可用,负载均衡 | ⭐⭐⭐⭐⭐ | 高 |
多实例负载均衡
创建docker-compose-cluster.yaml:
version: "2.4"
services:
traefik:
# ... 同Traefik模式配置
whoogle-1:
labels:
- "traefik.http.services.whoogle.loadbalancer.server.port=5000"
# ... 其他配置
whoogle-2:
labels:
- "traefik.http.services.whoogle.loadbalancer.server.port=5000"
# ... 其他配置
性能优化与安全加固
资源限制优化
services:
whoogle-search:
pids_limit: 50 # 限制进程数
mem_limit: 256mb # 内存限制
memswap_limit: 256mb # 交换空间限制
tmpfs: # 临时文件系统
- /config/:size=10M,uid=927,gid=927,mode=1700
- /var/lib/tor/:size=15M,uid=927,gid=927,mode=1700
安全配置
capabilities降权:
cap_drop:
- ALL # 删除所有Linux capabilities
security_opt:
- no-new-privileges # 禁止权限提升
user: whoogle # 使用非root用户运行
监控与日志
# 安装ctop监控容器
docker run --rm -ti --name=ctop -v /var/run/docker.sock:/var/run/docker.sock ctop:latest
# 设置日志轮转
echo '{"log-driver": "json-file", "log-opts": {"max-size": "10m", "max-file": "3"}}' | sudo tee /etc/docker/daemon.json
sudo systemctl restart docker
常见问题解决
证书申请失败
# 检查网络连通性
docker exec -it traefik curl -I https://acme-v02.api.letsencrypt.org
# 查看证书申请日志
docker compose -f docker-compose-traefik.yaml logs traefik | grep acme
性能优化建议
- 启用缓存:添加Redis缓存服务
- 调整内存:根据使用量调整mem_limit
- 定期重启:添加健康检查自动重启
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5000"]
interval: 30s
timeout: 10s
retries: 3
restart: on-failure
升级策略
# 备份配置
cp whoogle.env whoogle.env.bak
# 拉取最新镜像
docker compose pull
# 重启服务
docker compose up -d
总结与展望
通过Docker Compose部署Whoogle Search,我们实现了:
- 快速部署:5分钟完成从0到1的私有化搜索引擎搭建
- 安全加固:非root用户运行、capabilities降权、TLS加密
- 灵活扩展:单服务/多服务/集群模式按需选择
未来可以进一步探索:
- 分布式部署:跨节点负载均衡
- 全文索引:集成Elasticsearch提升搜索效率
- 多引擎聚合:同时查询多个后端搜索引擎
附录:完整配置文件
docker-compose.yml完整内容:
version: "2.4"
services:
whoogle-search:
image: ${WHOOGLE_IMAGE:-benbusby/whoogle-search}
container_name: whoogle-search
restart: unless-stopped
pids_limit: 50
mem_limit: 256mb
memswap_limit: 256mb
user: whoogle
security_opt:
- no-new-privileges
cap_drop:
- ALL
tmpfs:
- /config/:size=10M,uid=927,gid=927,mode=1700
- /var/lib/tor/:size=15M,uid=927,gid=927,mode=1700
- /run/tor/:size=1M,uid=927,gid=927,mode=1700
environment:
- WHOOGLE_USER=admin
- WHOOGLE_PASS=yourpassword
- WHOOGLE_ALT_TW=farside.link/nitter
- WHOOGLE_ALT_YT=farside.link/invidious
- WHOOGLE_CONFIG_DISABLE=1
ports:
- 5000:5000
部署命令速查表:
| 操作 | 命令 |
|---|---|
| 启动基础服务 | docker compose up -d |
| 启动Traefik服务 | docker compose -f docker-compose-traefik.yaml up -d |
| 查看日志 | docker compose logs -f |
| 重启服务 | docker compose restart |
| 停止服务 | docker compose down |
| 备份配置 | cp whoogle.env whoogle.env.bak |
提示:收藏本文,关注后续《Whoogle Search高级定制指南》,解锁更多隐私搜索技巧!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



