最近答应帮朋友做个论坛网站,想借此机会捡起 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 的说明,修改 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 --detach

问题解决,终于可以愉快地进行本地访问了。

至此,本地部署 Misago Docker + 配置 HTTPS 全部完成。

本地部署 Misago Docker + 配置 HTTPS 笔记的更多相关文章

  1. Arcgis api for javascript学习笔记(4.5版本) - 本地部署及代理配置

    在开发过程中,由于api的文件比较多,没必要每个项目都将api加入到解决方案中.况且在VS中如果将api加入解决方案,在编写css或js代码时,由于智能提示需要扫描脚本等文件,会导致VS很卡.所以个人 ...

  2. 使用docker部署nginx并配置https

    我只有一台服务器,但我想在这台服务器上运行多个项目,怎么办? 总不能靠加端口区分吧? 百度和Google是个好东西,于是我找到了答案,使用nginx. 通过nginx,我可以给我的一台服务器配置两个域 ...

  3. 更改Dynamics 365 Customer Engagement本地部署的高级配置

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  4. 使用nginx+docker配置https负载均衡

    了解Docker Docker是一个golang编写的开源轻量级的.可移植的.自给自足的容器,Docker主要应用在以下场景: web应用的自动化打包和发布: 自动化测试和持续集成.发布: 在服务型环 ...

  5. Secure services with TLS ---Docker配置https

    官方文档:https://docs.docker.com/ee/ucp/interlock/usage/tls/

  6. Grafana部署监控docker服务

    Grafana部署监控docker服务 一.使用InfluxDB+cAdvisor+Grafana配置Docker监控 1.1Docker监控组件 1.2cAdvisor: 1.3Docker监控安装 ...

  7. 学习笔记TF022:产品环境模型部署、Docker镜像、Bazel工作区、导出模型、服务器、客户端

    产品环境模型部署,创建简单Web APP,用户上传图像,运行Inception模型,实现图像自动分类. 搭建TensorFlow服务开发环境.安装Docker,https://docs.docker. ...

  8. Kubernetes 学习笔记(二):本地部署一个 kubernetes 集群

    前言 前面用到过的 minikube 只是一个单节点的 k8s 集群,这对于学习而言是不够的.我们需要有一个多节点集群,才能用到各种调度/监控功能.而且单节点只能是一个加引号的"集群&quo ...

  9. 基于Docker配置本地Gitlab

    技术背景 Github和Gitee(码云)是最常见的基于git的代码托管平台,现在基于svn的代码管理仓库已经相对比较少见了,大部分还都是企业内部的代码仓.但是基于开源的Gitlab,我们在企业内网也 ...

随机推荐

  1. 基于jQuery封装的分页组件(可自定义设置)

    jQuery封装的分页组件 前几天做了一个vue的组件分页,而现在需求是jquery的分页,我就根据我自己的需求写了一个.在网上找了很久的基于jquery的分页封装,可是都不是我想要的结果,那么今天我 ...

  2. Django【第22篇】:基于Ajax实现的登录

    基于ajax实现的登录 一.需要知道的新知识点 1.刷新验证码.给src属性加一个?号.加个?会重新去请求 //#给验证码刷新 $(".vialdCode_img").click( ...

  3. Stree

    题目 给出n个点,m条有权边,现对于每一条边,你需要回答出包含这条边的最小生成树的总边权值. 分析 首先我们可以构造一个对于这n个点,m条有权边的最小生成树,显然,这是一棵最小的生成树. 那么这棵生成 ...

  4. Centos logrotate截断tomcat日志文件

    1. 设置logrotate轮转日志文件 tomcat日志目录:/usr/local/tomcat/apache-tomcat-8.5.34/logs /etc/logrotate.d/目录下创建to ...

  5. 【CF1237D】Balanced Playlist(set,二分,线段树)

    题意:给定一个n首歌的播放列表,第i首的值为a[i],听完第i首会回到第1首 现在从每首开始往下,记录听过的最大值,如果当前听的值严格小于听过最大值的一半则停止 问从每首歌开始往下听能听几首,不会停止 ...

  6. [洛谷P5106]dkw的lcm:欧拉函数+容斥原理+扩展欧拉定理

    分析 考虑使用欧拉函数的计算公式化简原式,因为有: \[lcm(i_1,i_2,...,i_k)=p_1^{q_{1\ max}} \times p_2^{q_{2\ max}} \times ... ...

  7. 使用Git上传本地项目到http://git.oschina.net

    本文前言,因倡导开源精神,我也把代码传上了开源社区,可是,当初使用http://git.oschina.net 网站上传代码的时候不知道使用工具.我竟然一个文件一个文件复制粘贴,可费了我好大一个劲儿, ...

  8. PHP 设计模式总结

    回想了一下php的设计模式,好像记得不完全了.此处对php设计模式重新做一下复习总结. 单例模式 单例模式的核心只包括一个特殊的类,保证系统中只能有一个实例,即一个类中只能有一个实例化对象,避免系统中 ...

  9. code_action

    w https://raw.githubusercontent.com/laravel/laravel/master/config/database.php <?php return [ /* ...

  10. 设置bios加快系统的启动

    设置bios加快系统的启动 bois的设置错误, 还会引起系统的工作不正常 bios设置正确合理, 关系到系统的高效运行: 一般, 应该将bios中, 系统的各个cache 缓存开启,如cpu缓存, ...