使用 docker 部署静态网站有意义吗?



我创建了一个集群,我可以在其中使用 docker 顺利部署我的 Web 应用程序。这真的很有趣,现在我也在考虑将我的静态网站部署到集群中。

我应该这样做吗?还是对于简单的静态网站来说,这"太多了"?

用知识思考 docker 的真正目的,我会说不。

静态网站不需要 docker 实例的太多功能。Docker 非常适合在需要服务器端计算(例如:执行服务器端应用程序逻辑(并根据负载扩展到多个实例时为您提供帮助。

静态站点不需要太多的计算能力,因为没有服务器端代码,内容在客户端浏览器中呈现。您只需要任何Web服务器即可托管。

从理论上讲,使用 Docker 总是有意义的,就像许多用户使用您的应用程序(网站(一样,Web 服务器在某些时候将无法以有效的方式为所有这些请求提供服务。因此,使用集群(Docker swarm(将帮助您避免这种情况,因为Docker将平衡所有集群节点上的负载。此外,正如您所说,使用 Docker 很好,因为它将组织您的生产环境(我是 Docker 的忠实粉丝,以及它如何组织和隔离环境(。

实际上,对于静态网站,Web服务器上的负载比动态网站轻得多(因为您没有数据库查询,大型过滤操作,大型迭代,在后台需要处理的大量逻辑(,因此,如果您的网站每分钟不会被访问数百万次, 这没有意义,因为它将是一个开销而不是一个加号。

只要您使用占用空间小且开销低的服务器/映像,在 Docker 容器中部署静态网站是有意义的。部署运行nginx的300MB + Ubuntu映像不符合该描述。

我建议将你的文件与一个很小的静态文件服务器捆绑在一起,比如thttpd,在一个非常小的镜像上 - 最好是SCRATCH或Alpine Linux。

我在这里写了一篇关于这个主题的更广泛的文章。

如果你使用alpine+nginx图像打包你的静态网站,它可能很合适。

例如,在我目前的情况下,我让nginx提供两个简单的静态站点:

  1. 使用302重定向捕获所有网站,以使我的博客SEO友好
  2. 屏幕截图存储

这是我使用的码头工人群配置:

version: '3.7'
services:
nginx:
image: nginx:1-alpine
networks:
- oldcity
volumes:
- nginx_cache:/var/cache/nginx
- nginx_run:/var/run
- /etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- /etc/nginx/sites/:/etc/nginx/sites/:ro
- /srv/www/cdn:/usr/share/nginx/html:ro
deploy:
mode: replicated
replicas: 1
placement:
constraints: [node.hostname == holod]
labels:
- "traefik.enable=true"
- "traefik.docker.network=oldcity"
- "traefik.port=80"
- "traefik.protocol=http"
- "traefik.screenshots.frontend.rule=Host:scr.vodolaz095.life"
- "traefik.cdn.frontend.rule=HostRegexp:{catchall:.*}"
- "traefik.cdn.frontend.priority=2"
volumes:
nginx_cache:
nginx_run:
networks:
oldcity:
driver: overlay
external: true

在nginx前面,我使用 https://doc.traefik.io/traefik/v1.7/user-guide/swarm-mode/

因此,我可以用我更好地理解的方式制作 seo 友好的配置 - 通过 nginx 配置,而不是使用 traefik 路由,我也可以让带有屏幕截图的静态站点更好地工作。

但是,在这里扩展nginx可能是无用的想法 - 因为作为静态服务器,它是轻量级的,并且没有任何中断 - 所以没有理由在这里启动2个nginx实例。

最新更新