DuckDNS+GoDNS+SWAG最低成本的树莓派建站

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完全看个人喜好。

  1. 注册配置DuckDNS-获取免费域名
    DuckDNS是比较有名的免费动态域名绑定网站,可以得到一个duckdns下的子域名免费使用(虽然有点长,有总比没有好)。使用方法也非常简单,直接注册登录https://www.duckdns.org即可。登录后网站会自动分配一个token给你,后面有用。如图所示,我们先填写一个自己想要的域名,这里以jmu.duckdns.org为例, sub domain就是jmu, 你们填写自己的。添加成如图所示就不用管了,current ip等等都留空,下面运行DDNS服务自动去填。

InkedScreenshot-2021-09-15-at-00-42-07-Duck-DNS_LI--2-

  1. 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": ""
}
  1. 一站式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只是例子,可以自己自由配置。

  1. 端口转发
    在路由器上配置端口转发,将所有到达路由器端口9943的请求,转发到树莓派内网地址(类似192.168.1.123)上的9943端口上。 为什么要搞成9943,而不是443,注意看是不是家庭网络。因为众所周知原因家用80和443大概率都是不通的。因路由不同配置类似但不完全同,因此不赘述,可查阅相关帮助。这里提醒这里只做技术验证讨论之用。在中国境内要遵守中国相关法律法规,依法进行网站备案。

配置完成后,访问https://www.jmu.duckdns.org:9943,会发现已经正常能够访问,小锁头(HTTPS证书)也正常了。如图,可以看到证书颁发者是Let's Encrypt

swag

注意:DuckDNS的域名证书颁发是通配*.jmu.duckdns.org,并不包含root domain。因此类似www.jmu.duckdns.org是没问题的,但是不支持jmu.duckdns.org。这是DuckDNS的限制,暂时无法解决。

  1. 网站导入
    上图可以看到,已经正常显示SWAG的主页。查看/path/to/duckdns/config目录,会发现www目录已经正常可用,上述主页即index.html。在此目录创建a.html,写点内容进去保存。 验证https://www.jmu.duckdns.org:9943/a.html可直接访问到,测试正常,至此配置完成。

总结一下。文章看似很长很啰嗦,其实介绍说明文字居多。真正需要的步骤就配置duckdns域名和config.jsondocker-compose.yml两个文件而已。SWAG有较完善的模板,基于此配置后续代理服务非常容易,还另外赠送了fail2ban功能,默认即开启,不香吗?

感谢阅读。完。
更多原创内容>> https://defloop.com