我的过度设计的博客设置
最初发布于gdelgado.ca 在这篇文章中,我描述了我如何更新我的Pelican博客设置。 不久前,对我网站的 HTTP 请求由于某种原因停止工作。这是我的 CDN (cloudflare) 的错误。对我来说,这是来自众神的信号,表明是时候做一些不必要的复杂事情来解决问题了。 说真的;有些事情我想解决很长一段时间,但我一直没有去做。当前的 CDN 问题 + 一个长周末似乎是这样做的合适时机。
最初发布于gdelgado.ca
在这篇文章中,我描述了我如何更新我的Pelican博客设置。
不久前,对我网站的 HTTP 请求由于某种原因停止工作。这是我的 CDN (cloudflare) 的错误。对我来说,这是来自众神的信号,表明是时候做一些不必要的复杂事情来解决问题了。
说真的;有些事情我想解决很长一段时间,但我一直没有去做。当前的 CDN 问题 + 一个长周末似乎是这样做的合适时机。
tldr:
-
创建了一个自定义 docker 映像与(sass + python 和所有鹈鹕依赖)
-
Dockerized 整个项目使用上述docker镜像
-
设置自动部署(使用CircleCI)将博客部署到Netlify
依赖地狱
关于 Pelican 博客为本地开发而设置的方式,有些事情困扰着我。pelican docs建议您安装Virtualenv。在我决定想要更好的 CSS 开发人员体验之前,这一直很好。我为我的 CSS 切换到 SASS,但这意味着我必须安装 ruby,因为它是一个 ruby gem。
好的,现在我已经全局安装了 python、virtualenv 和 Ruby,以便我可以在本地运行博客。这也使自动化部署变得复杂,因为您必须安装这些依赖项以确保构建博客成功。
Docker 救援
我真的不喜欢全局安装依赖项。所以我认为这将是一个玩弄 Docker 的有趣机会。
我将为您省去我的 docker 设置的所有中间版本,并获取您当前在 repo 中看到的内容。
与 docker 相关的文件有 3 个:
-
Dockerfile-push
-
Dockerfile
-
docker-compose.yml
Dockerfile-push
包含创建可重用图像的说明(我在 CI 过程中重用此图像。稍后会详细介绍)。该图像位于https://hub.docker.com/r/giorgio14/pelican/... 我知道,图像相当大。所以呢?告我。
现在我有了一个基础镜像来运行 pelican 及其所有依赖项,我可以从中创建一个运行开发服务器的新镜像。这就是Dockerfile
的用武之地。在其中我:
-
创建一个图像
FROM
我的自定义 giorgio14/pelican 图像 -
COPY
将相关文件和目录放入镜像 -
将我的操作系统的8080端口绑定到容器的8080端口
-
运行
make
脚本,该脚本在端口 8080 上运行实时重新加载服务器
只有一个问题。如果我要从此图像创建一个容器,该容器会创建我的文件的副本,但它不会链接回它们。换句话说;该容器有自己的副本,这些副本与我的操作系统上的副本完全无关。这意味着尽管有一个实时重新加载服务器来监听文件更改,但容器内的文件实际上不会更改。
我们需要卷。这是一种允许容器访问主机操作系统文件和目录的机制。我使用卷,以便我可以编辑theme
和content
目录中的任何内容,并将这些更改传播到正在运行的 docker 容器。一旦容器内发生更改,则在容器内运行的 python 服务器可以重新生成博客并提供更新的文件。
为此,我使用docker-compose.yml
文件。其中有一个volumes
键,描述了我想将哪些本地目录挂载到正在运行的容器上。
现在这一切都完成了,我可以简单地运行:
docker-compose up
进入全屏模式 退出全屏模式
码头工人将:
-
拉取并生成所需的图像
-
在容器内运行
make devserver PORT=8080
(来自Dockerfile
)
现在我有一个不需要 python、virtualenv、ruby 或任何东西的 schnazzy 开发设置 :) ... 只有 Docker!
自动部署
现在我在 hub.docker.com 上托管了一个可重用的 docker 映像,我可以利用它来使我的 CI 步骤变得超级简单。
我的目标是让我的网站在每次新推送到我的 repo 上的 master 分支时进行更新。我选择 CircleCI 是因为它的品牌、优秀的文档(我花了不到一天的时间来弄清楚如何使用它)和免费定价 🙃。
我基本上只是按照文档将我的 github 存储库连接到 circle 并在此后不久运行“hello world”管道。
这里是与圆相关的相关文件。我花了一些尝试和调整来让管道按我的意愿运行,所以我创建了一个 bash 脚本,它允许我运行管道而无需将提交推送到 github。这里是来自圈子的相关文档。
我将提到一些关于config.yml
文件的高级要点。请注意,我使用上面制作的自定义图像。无需安装 ruby,执行 apt-get 或其他任何操作。一切都准备好安装pelican
cli。
由于我想部署到 netlify,我必须安装他们的 cli。我选择了他们当前的稳定 cli(这里是 repo)而不是他们基于节点的cli,因为我已经熟悉它了。
然后我使用make publish
生成博客的生产版本。
为了将来的调试,我想我会保存make publish
命令的输出,以防发生奇怪的事情。如果需要,Circle 的 UI 允许我访问压缩目录。
最后我部署到netlify。
我通过创建指向随机生成的 netlify URL 的 CNAME 记录在 netlify 上设置了一个自定义域。有关netlify自定义域的更多信息。
还有待弄清楚
我真的很想在我的网站上发表评论,但我绝对不想使用 Disqus。当我有机会时,我会给Staticman一个机会。
静态人+鹈鹕教程
......就是这样!
更多推荐
所有评论(0)