借助爪云等免费服务零成本上线动态网站

借助爪云等免费服务零成本上线动态网站
九牧单独购买服务器来运行这样一个小型项目显然不太划算。直到遇到了 ClawCloud,它提供 Docker 容器托管服务,这意味着无论你的应用是什么语言、什么框架写的,只要你能把它打包成一个 Docker 镜像,它就能正常运行。Django 编写的 Python 应用当然也完全适用,更重要的是,ClawCLoud 每月还提供 5 美元的免费额度,对于运行这种轻量级的应用那是绰绰有余了
ClawCloud 只是提供了让 Web 应用对外访问的能力,那整个 Django 应用又是如何实现更新和部署的呢?其实很简单,这部分也实现了自动化,整体流程是:编写代码 -> 提交代码到 GitHub 仓库 -> 自动触发 GithubAction 构建镜像 -> 镜像构建完成后自动推送到 DockerHub 仓库 -> 最后在 ClawCloud 上更新镜像即可完成部署并正常访问了
上述流程可以简化为:GitHub -> DockerHub -> ClawCloud
GitHub Actions
GitHub 仓库负责代码托管,编写好代码之后直接提交到 GitHub 仓库,然后通过 GitHub Actions 实现在提交代码后自动打包成 Docker 镜像并推送到 DockerHub。这里的核心是 GitHub Acitons,它是 GitHub 提供的一个持续集成与持续交付(CI/CD)平台,允许你在 GitHub 上自动化构建、测试、部署等软件开发流程。
你可以将它理解为一个“自动化的工作流引擎”,与你的代码仓库紧密集成,支持自定义各种任务。更为重要的是 GitHub Actions 对于 GitHub 上的公共仓库是完全免费的,私有仓库也有一定的免费额度,正常个人用户来说完全够用
利用 GitHub Actions 构建 Docker 镜像并上传到 DockerHub 也比较简单,首先就是需要一个 Dockerfile,Dockerfile 定义了镜像如何构建。以我的项目为例,Dockerfile 放在项目根目录下,内容如下:
1 | FROM python:3.11.12-slim-bookworm |
然后在项目也就是 Git 仓库中创建一个 .github/workflows 目录,并在里面添加一个 YAML 格式的 CI/CD 工作流文件,就算是定义好 GitHub Actions 了。同样以我的项目为例,文件路径为 .github/workflows/docker-build-push.yml,内容如下:
1 | name: Build and Push Docker Image |
这个配置就实现了镜像的打包及上传,需要注意的是,上传镜像到 DockerHub 的话需要 DockerHub 的认证信息。这个认证可以从 DockerHub 获取,获取方法为:登录 DockerHub -> 右上角 Account Settings -> Personal access tokens -> 点击 Generate new token,就能生成新的 Token
生成的 Token 需要配置到 GitHub 仓库中,配置方法为:登录 GitHub -> 进入对应的仓库 -> Settings -> Secrets and variables -> Actions -> 点击 New repository secrets 添加两个密钥,分别为 DOCKERHUB_USERNAME 对应 DockerHub 仓库的用户名,DOCKERHUB_TOKEN 为 DockerHub 的 Token,这两个信息在上一步创建 DockerHub 的 Token 时都能获取到
GitHub Actions 无需额外开启,密钥配置完成后就能正常使用了。每次 push 代码到 main 分支都会自动触发构建流程,打包镜像并自动上传到 DockerHub
DockerHub
整个构建过程中会用到 DockerHub,DockerHub 是 Docker 公司提供的一个云端容器镜像托管服务,允许用户存储和共享他们的 Docker 镜像,通过 DockerHub,开发者可以轻松地发布自己的镜像、下载官方和其他用户的镜像,并且能够自动化构建流程。
DockerHub 有公共镜像库和私有镜像库,任何人都可以访问和使用公共镜像,用户可以创建私有仓库来存储不想公开分享的镜像,对于私有镜像库,DockerHub 也有免费的额度
DockerHub 还支持 Webhook,当新的镜像被推送至 DockerHub 后,可以通过 Webhook 触发外部服务的通知,例如通知持续集成/部署系统进行进一步的操作。遗憾的是,ClawCloud 似乎并不支持 Webhook 触发应用重建,不然就能直接镜像更新完成后自动触发 ClawCloud 应用更新了,实现全链路的自动化
ClawCloud
既然应用已经打包成了 Docker 镜像,那就很容易通过 ClawCloud 来运行并对外提供服务了,打开 ClawCloud 官网,并通过 GitHub 登录,之所以要通过 GitHub 登录,是因为老的 GitHub 账号每个月有 5 美金的免费额度可用。登录 ClawCloud 之后 -> 点击 App Launchpad -> Creat App,填写应用名称、Image 信息、选择实例规格并配置网络映射之后就能可以进行构建了
ClawCloud 的使用有几点需要注意:
1.ClawCloud 对镜像仓库的支持比较友好,不仅支持 DockerHub 的公共镜像仓库镜像,还支持私有镜像仓库的镜像,当配置镜像为私有镜像仓库镜像时输入镜像仓库的地址、账号和密码并保证网络连接即可
2.配置 Network 时可以指定容器内的端口,并进行映射。同时当开启 Public Access 时还可以配置自定义的域名,通过自定义域名访问容器服务。当然如果没有自定义域名,ClawCloud 也会给你的应用生成一个默认的域名,可以通过这个默认域名进行公网访问
3.ClawCloud 也支持配置本地存储,如果你的项目有一些数据需要持久化存储,就可以通过添加 Local Storage 来实现。配置 Local Storage 后,Local Storage 内的数据就不会随着容器销毁而删除。例如我的 Django 应用就直接用了 SQLite 文件数据库,数据库是需要持久存储的,我就用到了 Local Storage 创建了一个新的卷来进行单独存储,实现了数据持久化。当然 ClawCloud 也提供 Database 服务,可以跟应用打通,只是这就要考量免费的 5$ 是否能够负担了
最后,还是要提醒下,如果你的服务对 SLA 有要求,那还是付费吧,支持下这些平台的可持续发展,对于免费的服务,我们就不要对 SLA 有太高的要求。ClawCloud 虽然整体稳定,但我在使用的这段时间内也遇到过一次故障,很长时间才修复,好在仅仅是后台而已,对 SLA 要求不高,短暂挂掉影响也不大。还是要感谢这些服务提供商提供了这么好用的服务,还免费给用户使用,功德无量
转载自运维咖啡吧








