これまでの記事で紹介したGit、BitBucketとPelicanを使ったブログシステム。今の仕組みでは予約投稿ができないのが欠点なのです。 で、どうすれば実現できるか検討したメモです。 予約投稿の実現案 予約投稿を実現するには、どこかにスケジューラを入れて指定されたタイミングでPelicanを起動すればいいのだけど、どこを直すか? 修正できそうな箇所は3か所あります。 MarkdownファイルのBitBucketへのプッシュ  2. BitBucketからプッシュがあったことを通知を受けるサーバ  3. PelicanでのMarkdown⇒HTMLの処理 予約日時はMarkdownファイルのDateヘッダから取るので3にする必要があって、さらに起動日時以降の原稿を後で処理するので、それは2のサーバで行うしかなさそうです。 結局は以下の方法になるかと。 Pelicanが処理する前に、MarkdownファイルのDateヘッダを調べて、起動日時より前でなければPelicanの処理対象から外す。さらにサーバに通知して、スケジューラに登録させる。 処理対象からの外し方は要検討。ファイルを消してしまうか移動するか。 Pelicanに手を入れるのが早いかもしれません。 スケジューラは予約された日時にPelicanを起動して原稿を処理する。 スケジュールはCronで間に合いそう。 もう少し調べることがありますが、その後に手早く実装してしまいます。

しばらくブログの更新が途絶えてました。 これは更新をさぼってた訳ではなくて、ブログを楽に更新できるシステムを構築していたためです。ようやく本稼働できたので、数回にわたってその仕組みを紹介したいと思います。 Pelicanでのブログ更新 これまでの記事で、静的Webサイト生成ツールのPelicanに移行したことや、Pelicanのインストールを書いてきました。PelicanによるWebサイト作成では、MarkdownやreStructuredTextで書いた記事をPelicanでビルドして、生成されたWebサイトのファイル一式をWebサーバに転送します。このブログの記事はMarkdownで書いてBitBucketに作成したGitリポジトリで管理しているので、以下のような流れです。 Gitで現行作成用のdraftブランチを作成する。 ローカルPCで原稿をMarkdownで作成する。 ローカルPCでPelicanのビルドを実行(make html)して、レイアウトや文体・誤字・脱字を確認する。 原稿が完成したら、Gitで変更点をコミットして、draftブランチをmasterブランチにマージする。 masterブランチをBitBucketにPushして取り込む。 PelicanでWebサイト用に発行(make public)する。 生成されたWebサイトのファイル一式をFTPでWebサーバに転送する。 この一連の作業が、記事を何篇も書いているうちに、だんだんと面倒になってきました。BitBucketに原稿を取り込んだらWebサイトも更新された状態になっていてほしいのですが、Pelicanの仕組みではビルドと生成ファイルの転送が必要です。 そこで考えたのが、BitBucketに変更点がPushされたことをWebサーバで検知したら、Pelicanでの発行処理を行うという仕組みでした。BitBucketにはリポジトリにPushされたら他システムに通知する仕組みが提供されています。これを使えばPushされたことを検知できそうです。 複数サイトの自動ビルドシステム構築 ブログサイト1箇所にこの自動ビルドシステムを構築するのは大した手間ではないのですが、ブログサイトが複数あるとそれぞれの横展開で同じ作業が続くことになり、作業漏れや作業ミスが起きる心配があります。 できれば、自動ビルドシステムを構築したWebサイトの雛形を作っておいて、それぞれのWebサイトは雛形をコピーして設定ファイルを直すくらいに簡略化したいものです。 このために目を付けたのがDockerと呼ばれる仮想化技術です。DockerはOS上に互いに隔離された空間を作成して、それぞれでプロセスを実行します。この空間はプロセス、ネットワーク、ファイルシステムが独立していて、コンテナと呼ばれます。OSを仮想化する仮想マシン技術と比べて、コンテナ仮想化はOSを共有しているのが特徴です。 (DockerRead More →