ghost

A collection of 28 posts

Script to manage blog
ghost

Script to manage blog

現在このブログを Nomad のタスクとして Docker で動かしています。 Nomad クラスター上で Ghost ブログを動作させるこのブログは数年間単一のサーバーで稼働していました。 学習も兼ねてわざわざ自前でサーバーを運用していたのですが、最近新しい構成に移したくなり、Kubernetes の流行もあってクラスターやマイクロサービスといった時代の流れに乗るべく、Nomad クラスターへの移行を行いました。 Nomad クラスターの作成までは下記記事にまとめています (インフラやクラスターの設定等はここからさらに変更しています)。 * Nomad クラスターを作成する [https://blog.lorentzca.me/create-nomad-cluster-on-digitalocean/] 今回は…Lorentzcaゆるふわキャンパーが、現在の構成だとブログの更新が面倒…。ローカルに Docker

Updated to ghost 3!
ghost

Updated to ghost 3!

このブログは Ghost で動いています。 ghost - ゆるふわキャンパー 去年の 10/22 に Ghost の新しいメジャーバージョンが公開されました。これでバージョン 3.x に突入! Ghost 3.0 3.0 のリリースはこれまでで最も規模の大きいリリースだったようです。 アップデート方法 (独自 Dockerfile 使用) と言っても私の場合以下の通り公式の Dockerfile を改造して使っているので普通の方法では無いです…。 Nomad

Improved blog search page
algolia

Improved blog search page

このブログの内容は Algolia にインデックスし Algolia API を使って検索できるようにしています。 自分の記事を見返すタイミングがしばしばあるので、その時はこれを使い Alfred ワークフローからインクリメンタルサーチして目的の記事を開いたり、あと地味にブログ内の静的ページとして検索ページを用意したりしています。 algolia - ゆるふわキャンパー今回はそのブログ内の検索ページを改善してみました! Before: After: 検索ページを設定してから長いこと (3 年くらい) 素朴な見た目のままだったのですが、しばらくみない間に Algolia のドキュメントが充実してきてフロントエンドさっぱりわからないマンでもなんとかチュートリアルを元にそれっぽいものができるような状態になっていたので (ありがたい 🙏) 今回検索ページの改修に踏み切ってみたのでした。 主に以下の点で改善されています。 😊 検索結果が大きく、見やすく表示されるようになった。 記事の概要を出すようにした。 記事のサムネイル画像を出すようにした。

Running Ghost blog on Nomad Cluster
nomad

Running Ghost blog on Nomad Cluster

このブログは数年間単一のサーバーで稼働していました。 学習も兼ねてわざわざ自前でサーバーを運用していたのですが、最近新しい構成に移したくなり、Kubernetes の流行もあってクラスターやマイクロサービスといった時代の流れに乗るべく、Nomad クラスターへの移行を行いました。 Nomad クラスターの作成までは下記記事にまとめています (インフラやクラスターの設定等はここからさらに変更しています)。 Nomad クラスターを作成する今回はこの Nomad クラスター上で Ghost を動かすところまでをまとめます。 構成以下の通り、DigitalOcean のマネージドロードバランサー配下に Droplet を 3台配置し、クラスターを構成しています。 クラスターを構成するノードではそれぞれ Nomad と Consul が稼働しており、Consul でサービスディスカバリーを、

Search my blog posts with Alfred
alfred

Search my blog posts with Alfred

自分のブログ記事を検索する Alfred ワークフローを作った。 GitHub - lorentzca/alfred-myblog-workflow: Search blog posts. 「前困った MySQL ログインのあれなんだっけ」「Terraform のあれなんだっけ」みたいに以前自分で調べたことを改めて参照したいことがちょくちょくあるので作りました。 ブログ内にも検索用の固定ページはありますが、 Alfred のほうがブラウザを開くまでもなくシュッと使えるのでワークフローにしました。 私のブログは Algolia にインデックスを作っていて、 API で全文検索できるようにしているので、それを叩いている感じです。 Go の Algolia 公式クライアントを使っています。 GitHub

How to install Ghost on CentOS7 and MariaDB
ghost

How to install Ghost on CentOS7 and MariaDB

少し前にGhost初のメジャーバージョンがリリースされました。 Attention Required! | Cloudflare Ghost 1.0は後方互換の無いアップデートで幾つもの大幅な変更がありました。 その中でGhostのインストール、設定、起動方法等も変わっています。1.0からはghost-cliを使ってGhostのインストール、設定、起動などができるようになりました。 ghost-cli Overview Ghost1.0をインストールするための環境として、以下が推奨されています。 Ubuntu 16.04 MySQL NGINX (minimum of 1.9.5 for

Update to Ghost 0.11.8
ghost

Update to Ghost 0.11.8

Ghost 0.11.8がリリースされました。 ✨ Ghost 0.11.8 いくつかのバグフィックスや機能改善がありますが、その中でも「複数人同時に同じ記事を更新して衝突が発生するのを防ぐ機能」が良さそう。 今までは同時に同じ記事を更新できました。ブラウザをリロードするともう一方で更新した内容が反映される感じでした。危うい。 さっそくどんな感じになったのか試してみます。 アップデートはいつもの手順でやります。以下のスクリプトを実行するだけ。 では実際にブラウザで複数のウインドウを開いて同時に編集してみます。 後から開いた方のウインドウで編集して、保存ボタンを押すと...。 ブロックされました!! ✨ 感想 私は一人ぼっちでこのブログを運用しているので縁のない機能ですが、複数人で運用しているブログ(会社のブログとか)ではとても有用そうですね!

Validate RSS feed
ghost

Validate RSS feed

記事を更新したらslackのRSSアプリでチャンネルに投稿するようにしていたのですが、いつの間にか動いていなかったので調べたところ、RSSが壊れていました。 対応めんどくさいな〜と思っていたらどの部分が壊れているのかわかりやすく表示してくれるサイトがあるので使ってみました。 Feed Validator for Atom and RSS どうやらMackerel Meetup #9参加レポの記事に不正な文字が入っていたっぽい。 該当箇所を修正すると無事直りました。便利!

highlight.js with Ghost
ghost

highlight.js with Ghost

今までコードブロックに書いたコードのシンタックスハイライトはPrismを使っていました。 Add syntax highlight to Ghost Prismを使うには以下の手順が必要でした。 テーマとハイライトしたい言語を選択して、ダウンロードボタンでprism.jsとprism.cssをダウンロードする content/themes/casper/assets/js/、content/themes/casper/assets/css/以下に設置する default.hbsのヘッダでファイルを読み込む このテーマのファイルをいじらなくてはいけない点に不満を持っていました(テーマをアップグレードしたり、別のテーマに変えると消失してしまうので)。 また、ハイライトを有効にする際、language-*

Change Ghost blog Font
ghost

Change Ghost blog Font

このブログはGhostというブログエンジンで動いていて、テーマはCasperを使っています。 このCasperのdefaultのフォントだと日本語の文字がちょっと細すぎて見辛いと感じることがあるので、別のフォントにしてみました。 Ghostには管理画面から任意のhtmlをヘッダ、フッタに挿入することができます。この機能を利用してフォントを変更してみます。 Code Injection 以下のコードを挿入しました。google fontのLatoフォントを使ってみました。 Google Fonts Google Fonts - Lato <link href='https://fonts.googleapis.com/css?family=Lato' rel='stylesheet'

Ghost support AMP
ghost

Ghost support AMP

スマートフォンでのgoogleの検索結果で、私の記事に「AMP」と表示されているものがありました。 AMPとは「Accelerated Mobile Pages」の略で、オープンソースで公開されている仕様らしい。仕様に則ることで、瞬時に読み込めるHTMLを作ることができるそう。 GoogleはAMPに則ったページを見つけるとキャッシュし、モバイルからのアクセスかつ有効なAMPページがあった場合はそのページを表示するようになっているとのこと。 AMPについて - Googleウェブマスター向け公式ブログ AMP ページの Google 検索ガイドライン - Search Console ヘルプ Accelerated Mobile Pages Project AMPマークの付いているページにアクセスすると、

Install AddThis and DISQUS to Ghost
ghost

Install AddThis and DISQUS to Ghost

はてブボタンでも設置してみようと思ったのですが、うまくいかず!! はてなブックマークボタン 雑にcontent/themes/casper/post.hbs内の<section class="share">に埋め込むだけじゃだめっぽい。twitterとかfacebookのシェアボタンを真似して設置しようとしたけどうまく表示されなかった。 ちょっとすぐには実現できなそうな気配を感じたのでとりあえずAddThisに逃げた。 AddThis - Get more likes, shares and follows with smart website tools

去年より個人ブログのポスト数を2倍くらい増やせたのでなぜなのか書く
ghost

去年より個人ブログのポスト数を2倍くらい増やせたのでなぜなのか書く

この記事はfeedforceアドベントカレンダーの11日目の記事なんだからね! feedforce Advent Calendar 2016 - Adventar 昨日は@tmd45さんのターンでした。私も脂肪が増えてきた気がするので減らしていこうと思います(戒め)。まずは野菜だ!(ちなみに最初フト「れ」ない話に空目して関連する人物が3人ほど脳内サジェストされました。) フトらない話 - TMD45'β'LOG!!! さて、今回は「分散惑星間データセンター(Grid Interplanetary Data Center)時代のデータ通信技術」について書こうとしたのですが、すごい難しそうなので諦めました。 公転の関係で季節によって通信先の惑星とのレイテンシが変わったり、公転の関係で通信先の惑星が太陽の向こう側に隠れると通信できなくなったり、

Update nodejs 4.x to 6.x
nodejs

Update nodejs 4.x to 6.x

ghost v0.11.3からnodejs6系がサポートされるようになりました。 Release 0.11.3 · TryGhost/Ghost · GitHub ので4.xから6.xにあげてく(もちろんghostは0.11.3にアップグレード済み)。 まずは諸々やる前にdropletのスナップショットをとっておく。 最悪スナップショットからサーバ立てて復活できるので! doctl compute droplet-action snapshot <dropletのID> --snapshot-name ponpokopon.me-$(date

Write blog with Ghost Desktop
ghost

Write blog with Ghost Desktop

ghostのオフィシャルブログを見ていたらこんな記事が。 Ghost Desktop 1.0 & Alpha 7 デスクトップアプリあるんだ!!どうやら今年の4月にリリースされていたっぽい。 Ghost Desktop GitHub - TryGhost/Ghost-Desktop: ⚡️ Ghost for Desktops 今まではMacDownというMacのマークダウンエディタで下書きしていました。 MacDown: The open source Markdown editor for OS X. ブラウザの記事投稿画面から行ってもよいのですが、

Update Ghost 0.11.1 to 0.11.2 with shell script
shellscript

Update Ghost 0.11.1 to 0.11.2 with shell script

ghostのアップデートが出ました。 Ghost 0.11.2 メモリリークに関する修正があったみたいですね。メモリリークと言えば、最近ghostを0.11.1に上げたあたりからどうもmackerelからメモリ使用量のアラートがちょくちょく来るようになったので(元々メモリカツカツですが)解消することが期待できそうです。 アップデートは手作業でやりたくないので、シェルスクリプトで行っています。どのディレクトリを入れ替えればいいかなどは公式のドキュメントにアップデート手順があるのでそれを参考にしています。 How to Upgrade Ghost マイナーアップデートはこのシェルスクリプトで充分そう。ghostのディレクトリやパーミッションなどがハードコーディングされていてあんまり汎用的ではないですが、自分用なのでとりあえず良いかなと思っています。 課題はthemeのアップデートで、GAやAlgoliaのためにthemeをいじっているので、まるごと入れ替えができないことです。これはなんとかしたいな〜と思っています。面倒なときはcoreのアップデートだけしてます。 diffを取って内部的な変更(リファクタっぽいのとか)

Completion of Algolia in-site search box
algolia

Completion of Algolia in-site search box

Trying out Algoliaで敗北しInstall Algolia Search on Ghostで中途半端ながらにAlgoliaを使ったサイト内検索ボックスを設置してきました。 Install Algolia Search on Ghostで書いたように検索結果を強調表示してしまうがゆえに、urlにemタグが挿入されてしまうのが問題でした。 今回それが解決できたので書く! 解決方法 正規表現でemタグを除去。思いつきでjsの文字列置換があるか調べたらあった!ので、それを使った。 String.prototype.replace() - JavaScript | MDN このように書いていたのを、 suggestion: function(suggestion) { document_

Install Algolia Search on Ghost
algolia

Install Algolia Search on Ghost

Trying out Algoliaでは大敗北しましたが、今回無理やり検索結果に一致したページに飛べるように半分なった!のでメモ。 やりたいこと! 検索ボックスで検索した結果としてタイトルの文字列を返したい。またそのタイトルはタイトルの記事へのリンクになって欲しい。 検索ボックスの見た目を変えたい。トップページの記事一覧のように画面に合わせてボックスの大きさを伸縮したい。また、Free版を使っているので、algoliaのロゴを検索ボックス付近に設置しなければならない。 やったこと JS suggestion._highlightResult.<attribute>.valueで検索したときに返すattributeを決定できるみたいなので、検索結果に表示する文字列はsuggestion._highlightResult.title.valueで良い ある文字列をリンクにするためにはlink()メソッドが使えそう link先のurlはhttps://ghost.ponpokopon.

Trying out Algolia
ghost

Trying out Algolia

2016/12/28追記 algoliaシリーズ Install Algolia Search on Ghost ghostブログにalgoliaの検索ボックスを導入する AlgoliaというSaaSの全文検索エンジンが良さそう。 Algolia | Hosted cloud search as a service 料金体系。 無料 有料に比べ機能に制約がある サイトに設置する際はAlgoliaのロゴを一緒に表示しなければならない 有料 無料版に比べなんか多機能な感じ(こなみ) ブログに設置できないか試してみた。が、挫折!!!!!!!!!!!!!!! Algoliaの設定自体はできたんだけど、それをうまくサイトに組み込んで検索結果から該当のページに飛ばす部分はユーザーに任されていて、

Check maingun status on mackerel
ghost

Check maingun status on mackerel

ghostにはmailの設定がある。mailは今のところ、パスワードをわすれた時に再設定メールを送る際に使用される。バージョン0.8からはβ機能の一つのsubscribers機能からも使う(まだメール送信機能は無いっぽいけど)。 Mail Configuration on self-hosted version of Ghost 送信元メールアドレスの設定方法はいくつかある。 Mailgun Amazon Simple Email Service Gmail このうち簡単に試せそうなmailgunで設定していた。 こんな感じ。 mail: { fromaddress: 'lorentzca@ghost.ponpokopon.me', transport: 'SMTP',

Setting the canonical link to ghost
ghost

Setting the canonical link to ghost

CloudFlare one-click SSLを使ってサイトをSSL化しているんだけど、 ページのソースを表示した時にcanonical linkがhttpのままであることを職場のパイセンに指摘されて( ゚д゚)ハッ!っとなったので直した!(割と前の話ですが…!) ghost/config.js内でproductionのurlをhttpsにしてghostを再起動すればOK こんな感じ config = { // ### Production // When running Ghost in the wild, use the production environment // Configure your URL and mail

change database of ghost blog
ghost

change database of ghost blog

最初に書いておくと、一番楽チンでダウンタイムも少ないであろう、 sqliteからデータをダンプして、mysqlのダンプに変換する方法は諦めたorz SQLiteからMySQLへデータのマイグレーション(変換)|DB|ブログ|ノノログで紹介されていたPythonのスクリプトを使ってみたんだけど、だめだった ※ ちなみにghostのdbはデフォルトでsqlite3を使っていて、ghost/content/data/ghost.dbにある ghostには記事や設定のエクスポート機能があるので、この機能を使う 流れは以下 記事をエクスポートする ghostの設定をmysqlを使うように書き換えてghost再起動 まっさらなghostにエクスポートしたファイルをインポート 当然ghost再起動した段階で初期状態になってしまうのでダウンタイムになるけどまあ個人ブログだし妥協 設定の書き換え ghost/config.jsを以下のように修正(元の設定をコメントアウトしてmysqlの設定を追加している) production: { ... //database:

Use swiftype in ghost
ghost

Use swiftype in ghost

サイト内検索をいい感じにしてくれるSwiftypeなるサービスを見つけた 個人利用で機能制限付きのアカウントなら無料で利用できるらしいので試してみた 登録後自動で30日のトライアルのプランになる。30日が終わるとfreeプランにダウングレードするか、有料版にアップグレードするか選ぶ感じらしい(最初からfreeプランにはできない) この辺mackerelもそういう感じだった気がする 登録してまずインデックスを作る サイトのurlを入力するとクロールされてインデックスがSwiftypeサーバー上に作られる サーチエンジン名は好きな名前にする このインデックスは複数のサイト分作成できて、それぞれサーチエンジン単位で管理ページに登録される(たぶんfreeプランだとこのサーチエンジンが上限1つ) サーチエンジンページ内では検索がどのように動くかのプレビューや、実際にページに設置するためのjavascriptのコードが取得できる 今回はjavascriptのコードを利用した トップページに検索窓を設置したかったのでghost/content/themes/casper/index.hbsを以下のように修正 {{!< default}} {{! The tag above means - insert