本地部署 Misago Docker + 配置 HTTPS 笔记
最近答应帮朋友做个论坛网站,想借此机会捡起 python
在 github 找了一圈,打算借用以 python+django 开发的 misago 这个论坛系统
由于作者在今年更新的 misago 0.20 版本中,使用 docker 打包整个项目,还需要启用 https,这为我本地开发部署制造了不少问题
经验不足,折腾了一下午,终于在本地部署成功,记录一下过程
新版 misago 有一个新项目 misago docker,也进行了更新
一、安装 docker 和 docker compose
按照文档的安装要求,我首先在本地 vagrant 虚拟机中安装 docker 和 docker compose
虚拟机系统是 ubuntu 16.04
参照依次执行,或编写安装脚本
sudo apt-get update # docker 的源是 https,所以安装这些软件用于支持 https 的 apt 仓库 sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common # 添加 docker 的官方 gpg key curl -fssl https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 设置官方 docker 源 sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" # 安装 docker sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io
接下来安装 docker compose(),也可以换国内源安装(但是我用国内源不能下载…)
注意中间的版本号
sudo curl -l "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
二、安装 misago docker
参照,下载 misago 到目录 misago_docker
git clone https://github.com/rafalp/misago_docker.git --depth=1
进入目录,执行安装脚本 appctl
cd misago_docker ./appctl setup
按照提示填写域名、let's encrypt 邮箱、、时区、邮件设置等
最后初始化默认数据库,等待安装即可
这里需要注意,misago docker 使用 letsencrypt-nginx-proxy-companion 自动创建 let's encrypt 证书,用于 https
由于我是在本地部署,let's encrypt 不能为内网地址创建证书,所以需要使用其他方法
三、本地配置 https
经过大量尝试,最后总结了一套最方便的方法,使用 mkcert 创建本地开发证书
1.在虚拟机安装 mkcert
# 安装依赖 certutil sudo apt-get update sudo apt install libnss3-tools # 下载 mkcert(当前版本 v1.3.0) wget -o mkcert https://github.com/filosottile/mkcert/releases/download/v1.3.0/mkcert-v1.3.0-linux-amd64 # 设置执行权限 sudo chmod +x mkcert sudo mv mkcert /usr/local/bin
为本地域创建 ssl 证书
# 安装本地 ca sudo mkcert -install # 创建证书 sudo mkcert domain1 domain2 …
2.在宿主机安装 ca
# 查看虚拟机中 ca 位置 mkcert -caroot
复制 rootca.pem 到宿主机,默认安装目录
c:\users\用户名\appdata\local\mkcert
下载 windows 版 mkcert,安装 ca(也可以手动安装啦…)
# 设置 $caroot 目录,或使用默认目录 # 进入 mkcert 程序目录,执行 mkcert.exe -install
3.替换 misago docker 中 nginx-proxy 的默认证书
这一步由于不熟悉 docker 走了好多弯路…建议学习一下 docker 的相关知识
首先观察一下项目中的 docker-compose.yaml,这是 docker compose 的配置文件
对照 letsencrypt-nginx-proxy-companion 的说明,注释掉 nginx-lets-encrypt 容器和对其的依赖
再对照 的说明,修改 nginx-proxy 容器的数据卷挂载
# /vagrant/certs 是我本地的 ssl 证书目录 # 证书和密钥的名称应该修改为 域名.crt 域名.key volumes: # - nginx-certs:/etc/nginx/certs # - nginx-html:/usr/share/nginx/html - /vagrant/certs:/etc/nginx/certs
修改完后重启项目
四、其他问题
进行到这一步,本以为大功告成
浏览器访问 https://misago.test(我的本地站点域名)已经显示证书有效
但是却报了 500 错误…
又是一番查找,在 nginx-proxy 的 issues 里看到好几个相似问题
最后看到说可能是数据卷挂载问题,需要重建一下容器,才反应过来我之前都是重启,还是对 docker 不熟悉…
于是按照大佬说的,先
docker-compose down
再
docker-compose up
问题解决,终于可以愉快地进行本地访问了。
至此,本地部署 misago docker + 配置 https 全部完成。
上一篇: JavaScript基础内容中的函数详解
下一篇: Python学习-55 小游戏- 猜大小