DuckDNS+GoDNS+SWAG最低成本的树莓派建站
前文说树莓派非常适合用来长期做服务器。本文就介绍一种快速建设验证用的小型网站服务的最佳(免费)方式。
本文能达到的效果是,利用手头最廉价的设备,快速对外提供Web或者后端服务。 硬件需要你自己备之外,软件都保证成本最低:
- 免费域名
- 免费域名动态绑定(DDNS)
- 免费HTTPS证书
- 开箱即用的Nginx服务
下面动手开始。
硬件准备:
- 一块正常运行的树莓派,已经安装好Linux操作系统+Docker环境。如若没有,请参考其他介绍文章。
- 一个家用路由器(光猫也可),带端口转发功能。
- 已经正常连接了因特网,并且有公网IP,不要求固定。
注意:如果是在家庭网络下搭建,并且使用了自己买的路由器来拨号的话,一般需要将光猫设置桥接才能正确获得外网IP。不是本文重点不详述)
接下来介绍一种快速的一站式方案DuckDNS+GoDNS+SWAG。实现了DDNS和免费证书功能。
为什么需要DDNS,上面也提到,家庭宽带的外网IP不是固定的,本来你域名配置好 jmu.duckdns.org <-> 123.123.123.123,结果123这个外网IP总是不时在变。变的原因是IP地址不够了,电信运营商不会永久让你使用一个IP,你掉线了就收回给别人用,因此就不固定了。所以需要定时去将最新的IP和域名去绑定。DDNS就是干这个的工具,需要和DuckDNS配合使用。当然了类似DuckDNS支持的工具都可以,使用GoDNS完全看个人喜好。
- 注册配置DuckDNS-获取免费域名
DuckDNS是比较有名的免费动态域名绑定网站,可以得到一个duckdns下的子域名免费使用(虽然有点长,有总比没有好)。使用方法也非常简单,直接注册登录https://www.duckdns.org即可。登录后网站会自动分配一个token给你,后面有用。如图所示,我们先填写一个自己想要的域名,这里以jmu.duckdns.org
为例,sub domain
就是jmu, 你们填写自己的。添加成如图所示就不用管了,current ip
等等都留空,下面运行DDNS服务自动去填。
- GoDNS-定时绑定IP工具
GoDNS是一个周期性自动绑定域名和IP(即DDNS)的工具。当然它一定是要部署到你内网的,你可以想象成它像一个间谍一样周期性地将你的最新真实IP绑定到你的域名上,所有所谓收费的内网穿透软件都是类似原理。当然GoDNS是支持DuckDNS的。我们这里直接使用它的docker镜像,部署到树莓派上(在步骤3中一起做)。在运行之前需要手动制作一个config.json
文件, 类似这样。 注意修改login_token
填入步骤1中得到的token 和sub_domains
部分, 本例显然是jmu
{
"provider": "DuckDNS",
"password": "",
"login_token": "xxxxxxxx",
"domains": [
{
"domain_name": "www.duckdns.org",
"sub_domains": [
"jmu"
]
}
],
"resolver": "8.8.8.8",
"ip_url": "https://api.ip.sb/ip",
"ip_type": "IPv4",
"interval": 300,
"socks5_proxy": ""
}
- 一站式Web服务SWAG
SWAG。是一个包含Nginx服务器的docker镜像,提供支持给DuckDNS的域名颁发免费SSL证书。其基本原理是利用Let's Encrypt的免费SSL证书服务,向DNS验证方DuckDNS验证域名所有权和有效性。就是验证jmu.duckdns.org的确是你所有,然后颁发SSL证书给你,验证通过的方式是你持有正确的token。当然这个SSL证书服务也是需要周期性的,原因是免费证书有效期太短,一般3个月。看来免费也是有代价的,好在SWAG会自动更新证书,保证不会过期。它还包含了Nginx反向代理服务,颁发下来的证书会自动绑定到Nginx服务上。 也就是说一旦配置好后启动起来,你就啥都不用管了。
version: "2.1"
services:
duckdns:
image: timothyye/godns:latest
container_name: godns
volumes:
- /path/to/duckdns/config.json:/config.json
restart: always
swag:
image: ghcr.io/linuxserver/swag
container_name: duckdns-swag
cap_add:
- NET_ADMIN
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- URL=jmu.duckdns.org
- SUBDOMAINS=wildcard
- VALIDATION=duckdns
- DUCKDNSTOKEN=xxxxxxx
#- CERTPROVIDER= #optional
#- DNSPLUGIN=cloudflare #optional
- PROPAGATION= #optional
- EMAIL= #optional
- ONLY_SUBDOMAINS=false #optional
- EXTRA_DOMAINS= #optional
- STAGING=false #optional
- MAXMINDDB_LICENSE_KEY= #optional
volumes:
- /path/to/duckdns/config:/config
ports:
- 9943:443
- 9980:80 #optional
restart: unless-stopped
注意修改volumes
的目录,步骤2中的config.json
保存到/path/to/duckdns/config.json
地址。DUCKDNSTOKEN
即DuckDNS的token。都修改好后保存到docker-compose.yml
文件。
然后同目录下运行 docker-compose up -d
即可。 此时可以尝试内网访问 https://<树莓派内网IP>:9943
,看看是否正常。本文9943只是例子,可以自己自由配置。
- 端口转发
在路由器上配置端口转发,将所有到达路由器端口9943的请求,转发到树莓派内网地址(类似192.168.1.123)上的9943端口上。 为什么要搞成9943,而不是443,注意看是不是家庭网络。因为众所周知原因家用80和443大概率都是不通的。因路由不同配置类似但不完全同,因此不赘述,可查阅相关帮助。这里提醒这里只做技术验证讨论之用。在中国境内要遵守中国相关法律法规,依法进行网站备案。
配置完成后,访问https://www.jmu.duckdns.org:9943,会发现已经正常能够访问,小锁头(HTTPS证书)也正常了。如图,可以看到证书颁发者是Let's Encrypt
。
注意:DuckDNS的域名证书颁发是通配*.jmu.duckdns.org,并不包含root domain。因此类似www.jmu.duckdns.org是没问题的,但是不支持jmu.duckdns.org。这是DuckDNS的限制,暂时无法解决。
- 网站导入
上图可以看到,已经正常显示SWAG的主页。查看/path/to/duckdns/config
目录,会发现www目录已经正常可用,上述主页即index.html。在此目录创建a.html,写点内容进去保存。 验证https://www.jmu.duckdns.org:9943/a.html可直接访问到,测试正常,至此配置完成。
总结一下。文章看似很长很啰嗦,其实介绍说明文字居多。真正需要的步骤就配置duckdns域名和config.json
、docker-compose.yml
两个文件而已。SWAG有较完善的模板,基于此配置后续代理服务非常容易,还另外赠送了fail2ban功能,默认即开启,不香吗?
感谢阅读。完。
更多原创内容>> https://defloop.com