通过 caddy + cloudflared 在家庭服务器中搭建公开网站
本文就简单介绍一下基于 docker compose 部署 Caddy 和 cloudflared 的配置,并假定你已经有 Caddy 和docker compose 的使用经验。
配置 Caddy
首先我们配置好 Caddy,参考配置如下:
# Caddyfile
{
servers {
# 通过 X-Forwarded-For 获取客户端真实 IP
trusted_proxies static private_ranges
trusted_proxies_strict
}
}
# 仅监听 HTTP 端口
http:// {
root /www/blog/
file_server
}
services:
caddy:
image: caddy
volumes:
- ./www/:/www/
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
restart: always
ports:
- 80:80
volumes:
caddy_data:
caddy_config:
这里需要说明的是,之后 cloudflared 会通过本地访问 Caddy 端口。我觉得在这种情况下 HTTPS 是多余的,因此这里只监听了 HTTP 端口。注意这并不影响在公网通过HTTPS访问我们的服务。
确认 caddy 正常工作了,我们再来配置 cloudflared。
配置 cloudflared
添加 Tunnel
参考官方教程创建一个 Tunnel,在 connector 安装步骤中页面上会提供一段安装命令,我们将其中的 token 复制出来,更新到下面的 compose 配置中:
services:
caddy:
...
cloudflared:
image: cloudflare/cloudflared
restart: always
network_mode: service:caddy
environment:
- TUNNEL_TOKEN={token}
command: tunnel run
其中的 network_mode: service:caddy
是为了让 Caddy 和 cloudflared 在同一个网络 namespace,这样后面 cloudflared 可以通过 127.0.0.1
来访问 Caddy。
确认能在网页上看到新出现的 connector 之后,我们点击下一步。
添加域名
这一步要做的很简单,在页面上的 Public Hostnames 标签中,填入你想要使用的域名,例如 blog.example.com
。
然后 type 选 HTTP,url 填 127.0.0.1
,保存即可。
注意如果你填的域名之前已经存在于 DNS 记录里了,需要手动删除一下,不然保存的时候会报错有冲突。
结语
一切正常的话,你应该已经能通过刚才配置的域名从公网访问到博客了。恭喜你!你现在已经拥有了一个安全、高速、并且可以被全世界访问的网站。需要注意的是,受限于环大陆模式的网络条件,tunnel 可能偶尔会出现无法连接的问题。如有需求,建议加钱买国内的云服务器,并在申请非经营性互联网信息服务备案后,将服务转移到云服务器。最后将你曾经的小心肝随同小男孩的梦想一并便宜二手处理了。
当然,除了 Caddy 和 cloudflared 之外,还有一些其他的工具也可以帮助我们实现类似的功能,比如 traefik 和 Tailscale 等。我自己实际上就是在用 traefik 作为主要的反向代理服务,通过它的 docker 集成自动的管理各种容器服务的访问,而不需要我手动配置端口映射等。而 Caddy 主要用来负责静态文件和PHP的支持。
不过无论我们选择哪种工具,最重要的是找到适合我们需求的解决方案。希望本文能在你找寻解决方案的路上提供一点点帮助。
延伸阅读:
暂无内容!
评论列表 (0条):
加载更多评论 Loading...