sbw-blog 的 Docker 部署方案 - sbw Blog

sbw-blog 的 Docker 部署方案

来源: sbw Blog | 浏览: 53 | 评论: 0 发表时间: 2022-08-30

我的博客是用Rust的actix-web框架写成的,为了方便部署,整个应用是放在Docker上运行的。最近更新了博客的代码,从actix-web 3.x升级到了4.x,其它的依赖包也尽可能的更新到了最新版本。在部署的时候发现,上一次更新博客程序已经是2年前了,都已经有点儿忘记之前是怎么部署的了,所以这次捣鼓完赶快写个文档记录一下。



我的各方面需求

由于我的服务器上还跑了其它的很多服务,所以肯定不会让博客应用去直接提供web服务的,而是使用了nginx统一作为web服务器,因此TLS层的加密、日志记录等功能也是由nginx处理了,顺带着一些不会改变的静态资源,我也交给了nginx处理,actix-web只处理逻辑的部分。


起初把sbw-blog放在Docker中跑是由于服务器的系统版本和我的开发电脑相差比较大,依赖不好处理,而如果在服务器上跑Rust编译,一个是资源不够,一个是要把源代码往服务器传,感觉比较麻烦。


另外,博客数据的存储是单独放在一个MariaDB里面的,即sbw-blog所在的Docker环境中只跑一个应用,数据库和nginx都是另外的组件,这样后面为博客做升级或者升级出问题fallback的时候也比较简单,重新起一个对应版本的container就可以了。


我的Dockerfile

Dockerfile主要分为两部分,builder环境和对应的运行环境,builder是利用rust官方的镜像进行编译,这个镜像已经带好了最新版本的rust-release工具链。


编译好之后,将二进制拷贝到运行环境中,我使用的运行环境是bullseye-slim,一个很轻量的运行环境,并且也只安装了必要的组件,加上博客应用后整个镜像不到100MB


部署新的博客程序

先在Dockerfile目录使用以下命令生成新的镜像


我不想把自己的程序上传到任何地方,即使是Private仓库,所以使用导出镜像的方式进行部署。使用docker save命令将镜像保存到文件,目的是导出给服务器的docker使用。注意这里的docker save和后面的docker load跟相似的docker export/docker import是不同的命令。


然后,把tar包传到服务器之后,先将旧的镜像重新打个tag备份一下,以防升级失败后不好回滚:


在服务器上使用docker load导入新的镜像:


为了方便启动镜像,我使用了docker-compose,以下是大致的内容:


只需要修改image中的镜像tag,就可以方便的启动不同版本的博客应用,回滚非常方便。




没有人评论过此文,还不快抢个沙发
  • 昵称: *
  • 邮箱:
  • 网址:
  • 记住我的信息
  • Color
  • Red
  • Blue
  • Code
  • bash
  • cpp
  • css
  • java
  • js
  • perl
  • php
  • python
  • ruby
  • sql
  • xml