一.需求背景

由于云服务器的性能有限,挂载不了几个服务就会导致内存爆满,所以我觉得需要使用一些边缘策略,将原本挂载在服务器上的项目,迁移到本地设备上,实现多个项目的同时运行

二.网络攻坚

(1)一般情况下,想要实现穿透,会使用frp,但是我了解过一些tailscale的知识,所以我觉得可以建立一个私人网络域,来实现各个设备之间的内部通讯问题,各个设备使用内部的ip地址,既安全又稳定

(2)那如何实现公网访问内部的设备挂载的服务呢?我使用的是主流的反代流量,通过修改nginx.conf,来实现遍历conf.d文件夹内的各种服务的配置,再在这些配置中使用upstream完成流量的去向问题,并做好子域名的指向和ssl的上锁

(3)原本在服务器中,为了避免端口的暴露问题,导致的安全性漏洞,所以我选择了关闭外界的nginx,在容器内封装了一个nginx服务,并且将所有的服务的网络接入nginx的大网络下,这样极大提高了安全性,但是现在由于我决定使用nginx反代,本身就隐藏了我本地设备的端口,甚至是设备本身,所以完全不用再使用docker来封装nginx,直接使用network_mode: host来直接对接设备网络和端口,这样做既安全,也不会出现容器内的网络问题隐藏情况,排查更简单

三.docker的架构版本问题

在架构问题上,必须重点注意,由于我现在使用的是arm架构设备,所以amd架构的镜像不适用,我们需要在设备内直接构建新的镜像,这样才不会出现架构不一产生的问题,所以在git actions的workflows必须要原地构建镜像,并且最好拉取基础镜像时,我们可以使用“借”同一网络下的能够实现翻墙的设备的流量,来加速拉取dockerhub的基础镜像

四.tailscale问题

由于tailscale的权限受到nftables限制,只允许80端口的流量互相流通,所以导致了我们在同一个网域中的设备ping当前设备的默认80端口,并不会报错,流量正常接受和发送,但是其他端口会返还不存在问题,这也就是tailscale的端口流量被防火墙所挡,我们需要修改配置,不仅是80端口,所有的端口流量,只要是从tailscale内部来的,都必须要放行,所以使用"tailscale0" accept,不仅是输出,还有接收都需要开放