云服务器搭建whoogle-search:AWS实践指南
一、痛点与解决方案
你是否厌倦了搜索引擎的广告轰炸和隐私追踪?作为开发者或隐私敏感用户,你可能尝试过各种隐私搜索引擎,但要么面临功能限制,要么担心第三方服务的可靠性。Whoogle-Search作为一款自托管的元搜索引擎,能完美解决这些问题——它无广告、不追踪IP、支持自定义隐私设置,且完全开源可控。
本文将带你在AWS云服务器上从零搭建Whoogle-Search,通过EC2+Docker+Nginx+HTTPS的企业级架构,实现稳定、安全、隐私优先的搜索服务。读完本文你将获得:
- 完整的AWS资源配置清单
- 容器化部署的自动化流程
- 安全组与网络策略的最佳实践
- 性能优化与高可用方案
- 隐私增强的高级配置指南
二、技术架构概览
2.1 系统架构图
2.2 组件说明
| 组件 | 作用 | 选型理由 |
|---|---|---|
| EC2 t3.micro | 运行容器服务 | 1核2G配置满足轻量服务需求,按需付费最低$3.5/月 |
| Docker | 容器化部署 | 隔离环境依赖,简化版本管理 |
| Docker Compose | 容器编排 | 定义多容器应用,支持环境变量注入 |
| Nginx | 反向代理+HTTPS | 处理SSL终结,提供负载均衡能力 |
| Let's Encrypt | 免费SSL证书 | 自动化证书签发与续期 |
| Elastic IP | 静态公网IP | 避免实例重启导致IP变更 |
三、AWS环境准备
3.1 前置条件清单
- AWS账号(已完成实名认证与信用卡绑定)
- 本地终端已安装AWS CLI(可选)
- 拥有一个域名(用于配置HTTPS,可选)
3.2 EC2实例创建步骤
-
选择区域
建议选择离用户最近的区域(如亚太地区的ap-southeast-1新加坡)以降低延迟 -
启动实例
- AMI: Ubuntu Server 22.04 LTS (HVM)
- 实例类型: t3.micro(符合免费套餐条件)
- 密钥对: 创建新密钥对并下载.pem文件
- 网络设置:
- 存储: 30GB gp3(免费套餐包含20GB,建议增加至30GB避免空间不足)
-
获取实例信息
- 公有IP:
ec2-xx-xx-xx-xx.ap-southeast-1.compute.amazonaws.com - 私有IP: 172.31.x.x(VPC内网地址)
- 公有IP:
3.3 弹性IP绑定
- 在EC2控制台左侧导航栏选择「网络与安全」→「弹性IP」
- 点击「分配弹性IP地址」→ 选择默认池 → 分配
- 选中新分配的EIP,点击「操作」→「关联弹性IP地址」
- 选择目标实例并确认关联
安全提示:弹性IP长期未使用可能被AWS回收,建议创建实例后立即绑定
四、环境部署实战
4.1 服务器初始化
# 连接服务器(替换为你的EIP和密钥路径)
ssh -i "whoogle-key.pem" ubuntu@3.1.2.3
# 更新系统并安装依赖
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io docker-compose nginx certbot python3-certbot-nginx git
4.2 Docker环境配置
# 将当前用户加入docker组(避免每次使用sudo)
sudo usermod -aG docker $USER
newgrp docker # 无需重启即可生效
# 验证Docker安装
docker --version # 应输出Docker version 20.10.x
docker-compose --version # 应输出docker-compose version 1.29.x
4.3 代码拉取与配置
# 克隆代码仓库
git clone https://gitcode.com/GitHub_Trending/wh/whoogle-search.git
cd whoogle-search
# 创建环境变量配置文件
cp whoogle.template.env whoogle.env
# 使用sed命令批量启用基础配置
sed -i 's/^#WHOOGLE_CONFIG_ALTS/WHOOGLE_CONFIG_ALTS/' whoogle.env
sed -i 's/^#WHOOGLE_CONFIG_THEME/WHOOGLE_CONFIG_THEME=dark/' whoogle.env
sed -i 's/^#WHOOGLE_CSP/WHOOGLE_CSP=1/' whoogle.env
sed -i 's/^#HTTPS_ONLY/HTTPS_ONLY=1/' whoogle.env
4.4 Docker Compose启动
# 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
ports:
- 5000:5000
env_file:
- whoogle.env
tmpfs:
- /config/:size=10M,uid=927,gid=927,mode=1700
# 启动服务
docker-compose up -d
# 验证服务状态
docker-compose ps # 应显示状态为Up
curl localhost:5000 # 应返回HTML响应
4.5 Nginx反向代理配置
# 创建Nginx配置文件
sudo nano /etc/nginx/sites-available/whoogle
# 粘贴以下配置(替换example.com为你的域名)
server {
listen 80;
server_name search.example.com;
# 重定向至HTTPS
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name search.example.com;
# SSL证书配置
ssl_certificate /etc/letsencrypt/live/search.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/search.example.com/privkey.pem;
# 反向代理配置
location / {
proxy_pass http://localhost:5000;
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 X-Forwarded-Proto $scheme;
}
}
# 启用站点配置
sudo ln -s /etc/nginx/sites-available/whoogle /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置是否有误
sudo systemctl restart nginx
4.6 SSL证书申请
# 使用certbot自动配置HTTPS
sudo certbot --nginx -d search.example.com
# 验证证书自动续期
sudo certbot renew --dry-run
注意:如未准备域名,可跳过4.5-4.6步骤,直接通过
http://EIP:5000访问,但不建议用于生产环境
五、高级配置指南
5.1 隐私增强配置
编辑whoogle.env文件,添加以下高级配置:
# 启用Tor路由(需额外安装tor服务)
WHOOGLE_CONFIG_TOR=1
# 配置社交媒体替代前端
WHOOGLE_ALT_TW=farside.link/nitter
WHOOGLE_ALT_YT=farside.link/invidious
WHOOGLE_ALT_RD=farside.link/libreddit
# 启用结果加密存储
WHOOGLE_CONFIG_PREFERENCES_ENCRYPTED=1
WHOOGLE_CONFIG_PREFERENCES_KEY="your-strong-random-key-here"
# 屏蔽指定网站结果
WHOOGLE_CONFIG_BLOCK=example-site-1.com,example-site-2.com,example-site-3.com
5.2 性能优化参数
# 调整每页结果数量(默认10条)
WHOOGLE_RESULTS_PER_PAGE=20
# 启用内存缓存
WHOOGLE_CACHE_SIZE=50 # 缓存50个搜索结果
# 禁用自动更新检查(减少出站请求)
WHOOGLE_UPDATE_CHECK=0
5.3 安全加固措施
# 配置防火墙仅开放必要端口
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
# 设置SSH密钥登录,禁用密码登录
sudo nano /etc/ssh/sshd_config
# 修改以下参数:
# PasswordAuthentication no
# ChallengeResponseAuthentication no
sudo systemctl restart sshd
六、系统运维与监控
6.1 服务管理命令
# 启动服务
docker-compose up -d
# 查看日志(实时)
docker-compose logs -f
# 重启服务(配置变更后)
docker-compose restart
# 停止服务
docker-compose down
# 更新Whoogle镜像
docker-compose pull && docker-compose up -d
6.2 系统监控配置
# 安装基础监控工具
sudo apt install -y htop iotop iftop
# 设置资源使用告警(可选)
sudo apt install -y prometheus node-exporter grafana
6.3 数据备份策略
# 创建备份脚本
cat > backup-whoogle.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/home/ubuntu/backups"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份配置文件
cp whoogle.env $BACKUP_DIR/whoogle.env.$TIMESTAMP
# 备份Docker数据卷
docker run --rm -v whoogle-search_config:/source -v $BACKUP_DIR:/backup alpine \
tar -czf /backup/whoogle-data.$TIMESTAMP.tar.gz -C /source .
# 保留最近10个备份
ls -tp $BACKUP_DIR/*.tar.gz | grep -v '/$' | tail -n +11 | xargs -I {} rm -- {}
EOF
# 添加执行权限并设置定时任务
chmod +x backup-whoogle.sh
crontab -e
# 添加以下行(每天凌晨3点执行备份)
0 3 * * * /home/ubuntu/whoogle-search/backup-whoogle.sh
七、故障排查与解决方案
7.1 常见问题诊断流程
7.2 典型问题解决方案
| 问题描述 | 可能原因 | 解决方法 |
|---|---|---|
| 502 Bad Gateway | Whoogle服务未启动 | docker-compose restart |
| 403 Forbidden | 安全组未开放端口 | 检查AWS安全组入站规则 |
| 搜索无结果 | 网络代理配置错误 | 注释whoogle.env中的代理设置 |
| 证书过期 | certbot自动续期失败 | sudo certbot renew手动续期 |
| 高CPU占用 | 搜索请求过于频繁 | 启用结果缓存或升级实例类型 |
八、总结与展望
通过本文指南,你已成功在AWS EC2上搭建起企业级的Whoogle-Search隐私搜索服务。该方案具有以下优势:
- 隐私保护:完全掌控搜索数据,避免第三方追踪
- 成本可控:基于t3.micro实例,月均成本低于$5
- 灵活扩展:可根据需求调整实例类型和配置参数
- 安全可靠:HTTPS加密传输+多层防护策略
8.1 进阶方向
- 部署多实例实现负载均衡(ALB+Auto Scaling Group)
- 接入CloudFront CDN加速静态资源
- 实现多区域部署与全球流量路由
- 开发自定义搜索结果过滤规则
8.2 项目资源
- 官方仓库:https://gitcode.com/GitHub_Trending/wh/whoogle-search
- 配置文档:项目内README.md
- 社区支持:通过项目Issue跟踪系统提交问题
行动建议:立即将你的Whoogle实例设为浏览器默认搜索引擎,体验无广告、零追踪的搜索服务!如有疑问或优化建议,欢迎在评论区留言交流。
附录:AWS资源成本估算
| 资源类型 | 规格 | 月成本(USD) |
|---|---|---|
| EC2实例 | t3.micro | $3.67 |
| 弹性IP | 1个 | $0.00(已关联实例) |
| EBS存储 | gp3 30GB | $3.00 |
| 数据传输 | 100GB出站 | $0.00(含在免费套餐内) |
| 总计 | $6.67 |
注:实际成本可能因区域、使用量和AWS定价政策变化而有所不同
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



