QEXO构建Docker镜像及Kubernetes部署教程
说明
Qexo 是一个快速、强大、美观的在线 静态博客编辑器。使用 GPL3.0 开源协议。支持包括且不限于在 Vercel 等平台部署, 为您的静态博客添加动态的元素
特色功能 文章管理~全新界面 缓存功能~速度至上 麻雀虽小~五脏俱全
QEXO官网
本文介绍的不是官网的部署方式,而是如何将该项目改造为镜像的一些想法
1. 项目分析
1.1. 项目结构
数据库
Django
其中数据库支持多种数据库,官网有所介绍,这里不再赘述,我们制作镜像,肯定镜像越轻量越好,所以我们选择轻量级的
sqlite3
数据库
然后就是django
环境,我们可以直接使用python:3.11.3-alpine
镜像进行构建,alpine
镜像体积小,比较适合我们的需求
1.2. 资源准备
- 需要构建镜像的
Dockerfile
文件 - 需要一个
db
文件夹,用于存放数据库文件,在里面创建一个空的db.sqlite3
文件 - 准备一个
configs.py
文件存放数据库连接配置信息 - 准备
Jenkinsfile
文件,用于jenkins自动化部署(非必须)
,如果你没有jenkins
的话,可以直接使用docker build
构建镜像 Qexo
的源码,这里我们不需要拷贝到本地,不对代码进行侵入式修改,直接使用git clone
命令拉取代码即可,这样我们的镜像就是一个纯净的Qexo
项目
2. 项目构建
2.1. Dockerfile
1 |
|
FROM python:3.11.3-alpine
使用python:3.11.3-alpine
镜像作为基础镜像,前面有介绍pipy源
设置,这里我使用的是腾讯云的pypi/simple
,你也可以使用其他的,比如阿里云
的pypi/simple
,注意即使是服务器,这里最好请使用公网的源,不要使用内网的源,否则可能会出现不可预知的错误时区
设置,这就不用多说了,不设置时区,可能会导致时间不正确,比如django
的admin
后台,时间显示不正确- 然后我创建了
app
目录用来存放项目 git clone
拉取Qexo
项目源代码,如果有网络问题可以使用https://ghproxy.com/
代理加速,这个请自行选择- 拉取代码后,源代码仓库有
requirements.txt
直接使用就好了 - 拷贝相关文件到镜像中,
configs.py
和db
文件夹等需要放进去,可以使用拷贝,或者挂载方式,这里我使用的是拷贝方式(为了省事),毕竟kubernetes
配置secret
也是挺麻烦的,而且可能会存在很多问题 - 我最后运行使用的是
run.sh
脚本,所以一定记得给脚本赋予可执行权限!!! - 一定记得给脚本赋予可执行权限!!!
- VOLUNE挂载目录,这里我挂载了
/app
,/app/db
,/app/data
三个目录,/app
目录是整个项目目录,/app/db
是数据库目录,/app/data
是静态文件目录,app
目录非必要不要挂载,因为整个项目和镜像启动文件都在里面,如果挂载了,可能会导致项目无法启动,我挂载出来是方便开发测试 app/db
目录是数据库目录,这个目录一定要挂载出来,否则重启镜像会导致配置的数据丢失,这个目录实现数据持久化app/data
目录是静态文件目录,这个目录也需要挂载出来,用来存放hexo
的项目,也就是说请把这个目录挂载给hexo目录
,非本地搭建hexo
,可不挂载
2.2. run.sh
1 |
|
makemigrations
创建数据库迁移文件migrate
执行数据库迁移runserver
启动django服务- 这些是django的基本操作,当然生产环境还是建议使用
gunicorn
、uwsgi
等工具
2.3. configs.py
1 |
|
DOMAINS
是域名配置,需要配置自己的域名
或者IP地址
,类似于添加到访问白名单
的地址,如果不配置,会导致权限问题无法访问
DATABASES
是数据库配置,这里我使用的是sqlite3
数据库,如果你使用的是mysql
或者postgresql
等数据库,请自行修改配置- 如果是
mysql
等数据库,需要自行安装pymysql
等数据库驱动
,用什么数据库就安装什么驱动 - 如果是
mysql
等数据库,还需要添加相关数据库配置,比如HOST
、PORT
、USER
、PASSWORD
等 - 这里使用
sqlite3
数据库,直接使用os.path.join('/app/db' , 'db.sqlite3')
拼接数据库路径
2.4. Jenkinsfile
这里就不贴
jenkins
的配置了,跟我之前的文章一样,我使用的kaniko
,你可以直接使用docker build
3. 配置
3.1. docker运行
1 |
|
--name qexo
容器名字-d
后台运行,这里请设置为后台运行,不然你会卡在runserver
命令上,如果卡住请新建一个终端即可,runserver
不会退出-p 8000:8000
端口映射,这里我使用的是8000
端口,你可以自行修改-v /app/db:/app/db
数据库目录挂载,这里我使用的是/app/db
目录,你可以自行修改- 镜像请自己进行构建,不要使用我的镜像,没有保障,我暂时不会对该项目进行维护,毕竟我的精力有限,只做研究
3.2. kubernetes运行
1 |
|
- 这只是个比较简单的
yaml
配置,你还可以添加其他pod
比如redis
、mysql
等,这里我就不贴了,你可以自行添加 - 然后数据挂载这里自己挂载到了主机上,也可以使用
pv
、pvc
等方式,扩展性和可移植性更好 ingress
这里我使用的是nginx-ingress
,你也可以使用其他的- 配置里很多信息需要自己稍微修改下,改成自己的
这只是个简单例子,看看官方以后会不会出相关的方法和文档
4. 最后贴出一些截图
评论