亲测推荐 2021 年 SaaS 技术栈:Docker、Django、Traefik 和 IntercoolerJS

作者 : 开心源码 本文共2932个字,预计阅读时间需要8分钟 发布时间: 2022-05-14 共267人阅读

整体技术栈

随处部署的 Linux 服务器和虚拟机:我使用了 Azure、Digital Ocean 和 Scaleway,并计划在 2021 年将所有部署迁移到Hetzner提供的专用服务器上。

Docker:就是我们常用的 Docker.

Traefik:使用 LetsEncrypt 证书的反向代理商和 TLS。

Postgresql:运行在 Docker 中的数据库。

Django:同样运行在容器中。

IntercoolerJS:提供平滑易用的类 Ajax 前台应用支持。Intercooler 的创作者在 2021 年发布了HTMX,是 IntercoolerJS 的升级换代。

Sentry:捕获生产环境中软件缺陷。只要在配置文件中增加几行配置。

Bitbucket Pipelines 替代 CI/CD:鉴于 CI/CD 引入了过多繁琐无用的工具,我在 2021 年不再对个人项目考虑 CI/CD。

ZeroTier:实现 VPN 和控制层。

我在开发小型项目时,采用本地 Docker 容器运行测试,进而直接推送到生产环境。我不考虑使用繁琐的 CI/CD,而是选择了 Bitbucket Pipelines。

上图给出了我所采用技术栈的概览,图中有很多需要详细开展阐述的部分。下面换成列表方式展现。

虚拟机

Docker

Django

挂载数据磁盘卷

使用长时间运行 Django 命令做为 Workers

挂载数据磁盘卷

Postgres

挂载数据磁盘卷

Traefik

Zero-Tier

SSH

托管环境

即使是无服务器架构,也需要一个云服务托管环境。

我个人推荐:Azure、Digital Ocean和Scaleway。每家都为计算、联网、存储和基本服务提供了充分的选项,支持客户任何构建需求。

同样推荐Hetzner,它提供了各服务层级的硬件、服务和价格。

虚拟机

少量企业应用和个人副业(side projects),并不需要同时为成千上万的客户提供 TB 级数据服务,因而可扩展性并非主要关注问题。对于此,我们可选用最小托管服务选项,通常不高于每月 20 美元。即使是服务价格相对最贵的 Azure,也可选用 Burstable 服务质量的虚拟机。个人推荐:Scaleway的开发层级服务器。

注意:在我的技术栈中并没有 Kubernetes,由于我并未考虑可扩展性。

Docker

为确保新的虚拟机运行在最新版 Docker 上,我并没有依赖操作系统本身,而是使用了 curl|bash 方式,即:

运行上面一行命令,就能获取最适用于当前运行环境的最新版本。

Traefik 实现反向代理商

Traefik 对我简直是天赐之选。虽然 Nginx 也很强大,但其并非针对 Docker 环境构建。Traefik 的两个杀手级特性,为我节省了大量时间:

使用 LetsEncrypt 实现自动 TLS。简而言之,一旦设置,无需操心。结合适用的 API 和 DNS 服务提供商,还可以使用 DNS 验证。

使用 Docker label 实现无需重新加载的自动配置。一旦新服务发布,Traefik 通过监听所有 Docker 相关服务而自动发现更改。这使得服务的增加、移除和合并非常方便,不存在任何麻烦。

我对 Traefik 唯一意见是学习曲线略为陡峭。客户必需自行确定如何进行配置,包括配置文件、命令行选项、YAML、Docker label,乃至组合使用。

提醒:我发布了自己使用的Traefik生产环境配置文件,供参考。

Postgres 数据库

亲测推荐,PostgreSQL 从不会令我失望。PostgreSQL 容器可毫无问题地增加到任何项目中。我只要简单地启动容器,绑定端口,挂接数据卷到主机磁盘,仅此足矣。

用于 Web 的容器化 Django

Django 很好地支持发布到容器中,我多年以来一直这么用。我反复强调开发环境和生产环境匹配的重要性,Docker 为我实现了一切。

我在 2021 年新推出了一个 Django 项目,用做新项目的模板,参见: simplecto/django-reference-implementation。

实现异步任务的 Django 命令

我使用做为标准框架组成的自己设置Django命令实现异步任务。该模式采用具备 sleep()的 while 循环,轮询数据库相关操作,并采取相应的动作。

截止 2021 年,我已使用这一模式运行一个网站截屏项目一年多,回报丰厚。该项目每日对 1500 个网站做截屏,所有操作由 Django 命令计划和管理。项目地址: simplecto/screenshots。

IntercoolerJS 降低了复杂性

这里假如开展说,需推出多个帖子,恐怕内容太长,以至于不会有人愿意读。我结合 JQuery 和这个小型 JavaScript 库,实现部分相似单页应用的效果,虽然事实上并非单页应用。

IntercoolerJS 保留了 Ajax 的传统优点,从后台 HTML 升级 DOM,无缝且平滑,非常便于实现客户登录和升级小型表单等元素。

强力推荐访问:IntercoolerJS官网。

其创建者在 2021 年继承发展了 IntercoolerJS,推出了HTMX。

Sentry 捕获生产中错误

任何应用都会出错,但不应向客户展现。Sentry 提供了一种捕获生产中软件缺陷的易用便捷方式,其特性包括:

开源许可,可在生产中任意部署。

只要在 Django 项目的 settings.py 中增加几行配置,就可生效。

与 Git 代码库和问题追踪系统紧密集成,提供全生产环境的缺陷可追踪能力。

另一个优点是,随时能在生产环境中禁用。

更多信息,可访问:Sentry官网。

Bitbucket Pipelines 替代 CI/CD

2021 年,我不在个人项目的部署中使用 CI/CD。其中存在太多工具,复杂性高。我只是使用 PyCharm 运行测试,而后从开发设施直接交付生产环境。

当前存在多种 CI/CD 处理方案,但是我推荐 Bitbucket 提供的 Pipelines 的服务。该服务每月提供数百分钟的免费使用,只要很少费用就能提供自上而下的功能。我自己在使用中很少碰到问题,很喜欢它们的 YAML 配置文件。

我使用 bitbucket-pipelines.yml 文件,实现跨多个 Docker 容器的完全端到端测试,加载数据库,并在几分钟内执行数以百计的测试。该服务是我们团队高效的关键,支持生产环境中每日五次以上 Push。

更多信息,访问-Bitbucket官网。

ZeroTier 实现 VPN

最后,推荐一种在很大程度上是可选的、但是最好应具有的技术。Zerotier 是一种独树一帜的网络/VPN 服务,我用其连接所有的个人计算机。它可穿透防火墙联通家庭和办公场所,一分钟就可配置好。

假如所有设施使用 ZeroTier,即可以避免 SSH 中令人头疼的密钥管理,单机上共享带宽。

Zerotier 可运行在 Linux、Mac、Windows、Android 和 iPhone 上,覆盖大部分设施。

ZeroTier 的一个问题在于,我并不完全理解它的工作机制。和 MacOS 和 iPhone 相似,它们会按客户期望工作,并不出问题,只是从客户体验角度看有些不爽。但对于一名 CTO,谁又会去关心具体的细节呢?

总结

希望上面的深入详情能激发读者对 Docker、Django、Traefik,尤其是 IntercoolerJS 的兴趣。它们简单、易于使用,能在适当时大展身手。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 亲测推荐 2021 年 SaaS 技术栈:Docker、Django、Traefik 和 IntercoolerJS

发表回复