厌倦了部署,构建了我自己的 Heroku
TLDR: 我厌倦了部署我的 Django 项目,去了 Heroku,被他们的发票弄得焦头烂额,构建了我自己的 SaaS 来将应用程序部署到现有的云。
故事从定制软件开发机构开始
6 年前,我创办了另一个机构,我们为需要自动化耗时任务的企业构建定制解决方案:
-
大型服务公司的半自动化任务分发,
-
大电商企业,
-
生成施工文件
-
许多较小的项目。
这是一次有趣的旅程。
我喜欢我们建造的东西。我们节省的钱。我们摆脱了体力劳动(当然,不是每个人都对最后一部分感到高兴)。
它持续了 5 年,我喜欢我们必须做的大部分事情。
但是每次都有一件事很烦人。
时不时我需要启动一个新项目并设置一个测试环境,然后是生产环境。
每次部署都很痛苦
在那段时间里,我尝试了不同的部署方法和工具:
-
使用的 Fabfile,
-
添加 CI/CD - 首先是 Atlassian Bamboo,然后是 GitLab
-
使用了 Supervisord,然后是 Docker,
-
裸机服务器、Digital Ocean、Linode。
在某个时候,我想出了一些使用 docker-compose 和 GitLab CI 的脚本来开始部署推送到存储库的新提交。
但是对于每个新项目,都必须完成大量的手动工作,这很容易出现人为错误,并且需要一整天的时间来设置所有内容:
-
.gitlab-ci.yml
-
码头工人-compose.yml
-
设置好Nginx,让我们加密
-
个数据库
-
小事不胜枚举
当一个新的客户项目出现时,我喜欢它,但我害怕一次又一次地重复这个过程。
我认为必须有更好的方法。
让我们试试 Heroku
那时我们提出了几个我们自己的副项目,我们使用 Heroku。
这是一次非常愉快的经历。
我在每一步都“哇”的一声。
我确实在任何 DevOps 上花费了零时间。
我在那里又搬了几个项目,这很容易。这些项目都没有产生任何收入,因为它是业余爱好网站。
然后时间到了,我收到了银行发来的关于 Heroku 向我的卡收费的短信。那一刻,所有的兴奋都烟消云散了。
Heroku 发票来了
在 2 个月内,Heroku 的支出从 15 美元/月攀升至 80 美元/月。对于爱好项目。
我立即禁用了这些网站。我搬走了一个,作为我们唯一感兴趣的一个。
这恰逢我的个人财务状况发生了巨大变化。我彻底破产了几个月。
重回正轨,寻求思路
当我解决了我的财务问题时,我有时间考虑下一步该做什么。
我们已经完成了定制软件开发。
做完这项业务后留下的显然是部署的痛苦和为 Heroku 付费的痛苦。
我想回到我们的一些爱好项目。
我有时间以正确的方式去做,并享受这样做。
我想要像 Heroku 这样令人愉快的东西,但我不想为此付出那么多。
灯泡
我很清楚:我需要构建自己的 Heroku。
那时在 IndieHackers 上,我偶然发现了用于 Ruby 的 Hatchbox.io,并听说了用于 PHP 的 Laravel Forge。
我将其视为对 Python/Django 的类似工具的验证。
一个月后我给它起了个名字:Appliku。
我从构建 Docker 的 bash 脚本开始,启动了 Django 来管理它们,并在此基础上迭代了 17 个月(2020 年 8 月 16 日星期日)。
我现在有什么?
-
在 AWS 和 DigitalOcean 上自动配置服务器
-
服务器设置(Docker、Nginx、Let's Encrypt)
-
从 GitHub Repo 上的源代码构建应用程序
-
几乎和 Heroku 一样好的界面
-
Heroku Config Vars Sync 适用于那些试图逐步离开 Heroku 的人。
引擎盖下是什么?
Django 应用程序是产品的核心。
前端是基于 mdbootstrap.com Angular Package 使用 Angular 构建的。
大量由 Celery 运行的后台任务。
当用户请求创建新服务器时,Appliku 通过 API 与 Digital Ocean 或 AWS 对话以进行配置。
配置服务器后,在 Paramiko 模块的帮助下,Appliku 通过 SSH 连接到服务器并运行设置脚本。
设置完成后,您就可以部署您的应用了。
应用程序创建包括命名您的应用程序、选择存储库和分支以及您要部署到的服务器。
该应用程序的唯一要求是拥有 Procfile。
我想既然我要离开 Heroku,肯定还有其他人也这样做。而且我喜欢在代码本身中包含进程而不是在 UI 中指定它们的想法。
Procfile 是一个文本文件,您可以在其中指定运行应用程序所需的进程。
web: python gunicorn wsgi:app
release: python manage.py migrate
celery: celery worker -Q default
“web”告诉我们这个进程应该接受 HTTP 连接。
“发布”是每次发布时执行的内容。
其他进程没有特殊意义。
Appliku 会询问您使用什么编程语言来运行该应用程序。目前支持的语言有 Python、PYPY、PHP 和 Node。
对于复杂的构建,我们允许编写您自己的 Dockerfile。
Heroku Sync 是一项功能,它每分钟从 Heroku API 中提取应用程序的配置变量,并更新 Appliku 中相关应用程序的配置变量并重新构建它。
事实证明,这对于那些将 Heroku Dynos 的一部分转移到 Digital Ocean 以减少开支的人很有用。通常,这是由需要大量内存的后台工作人员完成的。
当您点击部署时。
Appliku 让您的服务器:
-
转到您的 GitHub 存储库
-
克隆代码
-
创建 docker-compose 文件(基于您启用运行的 Procfile 和进程)
-
构建镜像
-
启动它
此外,它还为 appname.applikuapp.com 域或您添加的任何其他自定义域请求 Let's Encrypt SSL 证书。
通过让您的服务器这样做,我们确保您的所有代码仅存储在您的服务器上。我们存储的代码中唯一的一条信息是 Procfile 的内容。
部署应用程序后,它无需与我们的应用程序进行太多交互即可运行。
如果您推送新的提交 - 我们将运行构建/部署过程。
我们每天运行 certbot 来检查是否有任何证书即将过期。
关于 Nginx 配置的几句话。
Nginx vhost 的设置方式尊重应用程序的缓存标头。
proxy_cache_path /home/app/_cache/sitename.com levels=1:2 keys_zone=sitename.com:10m max_size=1g inactive=60m use_temp_path=off;
location / {
proxy_cache sitename.com;
proxy_cache_revalidate on;
proxy_cache_min_uses 1;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_background_update on;
proxy_cache_lock on;
proxy_cache_bypass $cookie_nocache ;
add_header X-Cache-Status $upstream_cache_status;
proxy_pass http://127.0.0.1:8003;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
这样,您可以在应用程序端使用虚拟缓存(如 Django 中的虚拟缓存后端)以生成正确的缓存标头,并且实际缓存将在请求到达后端之前发生。
结束的想法。
在我负责大多数非工程任务的妻子的帮助下,我独自完成了这一切。
这是一件有趣的事情。我学到了很多关于 Docker、Nginx、Paramiko、Django 本身的知识。
我认为这个应用程序可以帮助除我之外的许多人:
-
更快地传达他们的想法
-
避免做 DevOps
-
解决初学者的困扰“我建了app,怎么发布?”
商业模式很简单——您为 Appliku 支付固定的服务费用,并直接向云提供商支付他们的服务费用。
Appliku 上有一个免费计划,AWS 为新用户提供 1 年。
如果您正在学习编码或正在寻找一种(大部分)免费且令人愉快的方式来运行您的应用程序——我真的希望在这 17 个月中我构建了一个可以为您提供的解决方案。
我真的希望你听到我的旅程和我建造的东西很有趣,而且看起来不像是促销活动。
这是一段非常有趣的旅程,充满了兴奋、沮丧(你好,AWS Docs!),以及让某人的工作更轻松的想法。
我在这里分享这一切是为了告诉你,如果你相信它,如果你每天都出现(即使是 30 分钟)并坚持不懈地工作,那么即使是大而复杂的事情也可以完成。
如果应用程序可以帮助某人或文章本身激励某人起床并创造一些东西 - 我会非常高兴。
感谢您花时间阅读本文。
差点忘了应用链接:https://appliku.com/
更多推荐

所有评论(0)