欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

本地部署 Misago Docker + 配置 HTTPS 笔记

程序员文章站 2022-05-04 12:37:26
最近答应帮朋友做个论坛网站,想借此机会捡起 Python 在 GitHub 找了一圈,打算借用以 Python+Django 开发的 Misago 这个论坛系统 由于作者在今年更新的 Misago 0.20 版本中,使用 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 全部完成。