ghost

A collection of 29 posts
Manage jobs from Nomad UI
nomad

Manage jobs from Nomad UI

このブログは Ghost というブログプラットフォームを使用し Nomad クラスター上で動作しています。 Nomad クラスター上で Ghost ブログを動作させるこのブログは数年間単一のサーバーで稼働していました。 学習も兼ねてわざわざ自前でサーバーを運用していたのですが、最近新しい構成に移したくなり、Kubernetes の流行もあってクラスターやマイクロサービスといった時代の流れに乗るべく、Nomad クラスターへの移行を行いました。 Nomad クラスターの作成までは下記記事にまとめています (インフラやクラスターの設定等はここからさらに変更しています)。 * Nomad クラスターを作成する 今回はこの Nomad クラスター上で Ghost を動かすところまでをまとめます。 構成 以下の通り、DigitalOcean のマネー…ゆるふわキャンパーLorentzca 色々悩んだ結果、Docker イメージ上にブログのコンテンツを全て収めており、これを Nomad ジョブとして動かす形で運用しています。 これはメリットもあるのですが、一番大きなデメリットとして更新が面倒と
4 min read
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 イメージを持ってきてブログを更新、docker commit, docker push する必要があります。push 後サーバーにログインし Nomad タスクを書き換え
2 min read
Updated to ghost 3!
ghost

Updated to ghost 3!

このブログは Ghost で動いています。 * ghost - ゆるふわキャンパー 去年の 10/22 に Ghost の新しいメジャーバージョンが公開されました。これでバージョン 3.x に突入! * Ghost 3.0 3.0 のリリースはこれまでで最も規模の大きいリリースだったようです。 アップデート方法 (独自 Dockerfile 使用) と言っても私の場合以下の通り公式の Dockerfile を改造して使っているので普通の方法では無いです…。 * Nomad クラスター上で Ghost ブログを動作させる 改造 Dockerfile は GitHub に公開しており手順もメモしてあります。 * stateful-ghost-image/README.md at 524a1261038e381997b5e9b3078c301fc52f684e · lorentzca/stateful-ghost-image · GitHub 新機能 3.0 から追加された新機能は公式ブログで紹介されているものを眺めてみると以下があるよ
5 min read
Improved blog search page
algolia

Improved blog search page

このブログの内容は Algolia にインデックスし Algolia API を使って検索できるようにしています。 自分の記事を見返すタイミングがしばしばあるので、その時はこれを使い Alfred ワークフローからインクリメンタルサーチして目的の記事を開いたり、あと地味にブログ内の静的ページとして検索ページを用意したりしています。 * algolia - ゆるふわキャンパー 今回はそのブログ内の検索ページを改善してみました! Before: After: 検索ページを設定してから長いこと (3 年くらい) 素朴な見た目のままだったのですが、しばらくみない間に Algolia のドキュメントが充実してきてフロントエンドさっぱりわからないマンでもなんとかチュートリアルを元にそれっぽいものができるような状態になっていたので (ありがたい 🙏) 今回検索ページの改修に踏み切ってみたのでした。 主に以下の点で改善されています。 😊 * 検索結果が大きく、見やすく表示されるようになった。 * 記事の概要を出すようにした。 * 記事のサムネイル画像を出すようにした。
2 min read
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 でサービスディスカバリーを、Nomad でワークロードオーケストレーションを行なっています。 稼働しているジョブ Nomad はジョブという単位でワークロードを定義します。ジョブの中にさらに複数のグルー
7 min read
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 - algolia/algoliasearch-client-go: Algolia Search API Client for Go Algolia の使い方から検索方法等の諸々については以下。 * algolia - ゆるふわキャンパー 一応
1 min read
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 SSL) * Systemd * Node v6 installed via NodeSource * At least 1GB memory (swap can be used) * A non-root user for running
3 min read
Update to Ghost 0.11.8
ghost

Update to Ghost 0.11.8

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

Validate RSS feed

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

highlight.js with Ghost

今までコードブロックに書いたコードのシンタックスハイライトはPrismを使っていました。 * Add syntax highlight to Ghost Prismを使うには以下の手順が必要でした。 1. テーマとハイライトしたい言語を選択して、ダウンロードボタンでprism.jsとprism.cssをダウンロードする 2. content/themes/casper/assets/js/、content/themes/casper/assets/css/以下に設置する 3. default.hbsのヘッダでファイルを読み込む このテーマのファイルをいじらなくてはいけない点に不満を持っていました(テーマをアップグレードしたり、別のテーマに変えると消失してしまうので)。 また、ハイライトを有効にする際、language-*と書かなければいけないのも若干面倒でした。 Prism自体は、見た目もきれいで好きなんですけどね...。 といわけで、少なくともヘッダに外部から読み込んで使えるようなもの(CDNでjsを提供しているところ)は無いか探したところ、hig
2 min read
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
2 min read
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マークの付いているページにアクセスすると、確かに一瞬でページが表示される! それはありがたいことだが、なぜAMP対応されたページがあるんだろう...。自分は特にAMP対応ページの作成とかは何もしていないんだけど...。 ということで調べたら、なんとGhostはバージョン0.10.
1 min read
Install AddThis and DISQUS to Ghost
ghost

Install AddThis and DISQUS to Ghost

はてブボタンでも設置してみようと思ったのですが、うまくいかず!! * はてなブックマークボタン 雑にcontent/themes/casper/post.hbs内の
1 min read
去年より個人ブログのポスト数を2倍くらい増やせたのでなぜなのか書く
ghost

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

この記事はfeedforceアドベントカレンダーの11日目の記事なんだからね! * feedforce Advent Calendar 2016 - Adventar 昨日は@tmd45さんのターンでした。私も脂肪が増えてきた気がするので減らしていこうと思います(戒め)。まずは野菜だ!(ちなみに最初フト「れ」ない話に空目して関連する人物が3人ほど脳内サジェストされました。) * フトらない話 - TMD45'β'LOG!!! さて、今回は「分散惑星間データセンター(Grid Interplanetary Data Center)時代のデータ通信技術」について書こうとしたのですが、すごい難しそうなので諦めました。 公転の関係で季節によって通信先の惑星とのレイテンシが変わったり、公転の関係で通信先の惑星が太陽の向こう側に隠れると通信できなくなったり、太陽風とか重力レンズ効果を考慮しないとだめとか多分そんな感じです。 ていうかそもそもまだ地球以外の惑星にデータセンターと呼べるものがないのでは?(怒) なので今回は、去年よりブログのポスト数が増やせたことに関して
5 min read
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 --snapshot-name ponpokopon.me-$(date +%Y%d%m%H%M) -v ansibleプレイブックの修正。 * バージョン部分いじっただけ - name: setup is downloaded - get_url: url=https://rpm.nodesource.com/setup_4.
1 min read
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. ブラウザの記事投稿画面から行ってもよいのですが、うっかり前のページに戻ってしまって記事が消失したりしてキレそうになったことが何度かあったのでMacDownを使っていました。 ghostのデスクトップアプリならそんな失敗はすることが無いと思うので、良さそうですね。下記ページからダウンロードして使えます。Mac, Linux, Windowsに対応してる! * Ghost Desktop App 起動してログインするだけ。見た
1 min read
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のアップデートだけ
1 min read
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_root = "https://ghost.ponpokopon.me/"; slug = suggestion._highlightResult.slug.value; url = document_roo
1 min read
Compare in-site search engine
ghost

Compare in-site search engine

blogにサイト内検索を設置するために幾つか試してきたので比較する。試してきたのは以下の4つ。 * Swiftype - Site search and enterprise search * Algolia | Hosted cloud search as a service * googleカスタム検索 * GitHub - jamalneufeld/ghostHunter: A Ghost blog search engine 試してみた時のメモ(googleとghostHunterはメモってない…)。 * Use swiftype in ghost * Install Algolia Search on Ghost それぞれ導入のしやすさ、見た目、検索の速さ、検索結果の正確さ、お金で比べた! * 導入のしやすさ: 導入の簡単さを示す * 見た目: 検索ボックスや検索結果の見た目の良さ * 検索の速さ: 検索結果が早く返ってくるかどうか * 検索結果の正確さ: 欲しい情報が返ってくるかどうか
2 min read
Install Algolia Search on Ghost
algolia

Install Algolia Search on Ghost

Trying out Algoliaでは大敗北しましたが、今回無理やり検索結果に一致したページに飛べるように半分なった!のでメモ。 やりたいこと! 検索ボックスで検索した結果としてタイトルの文字列を返したい。またそのタイトルはタイトルの記事へのリンクになって欲しい。 検索ボックスの見た目を変えたい。トップページの記事一覧のように画面に合わせてボックスの大きさを伸縮したい。また、Free版を使っているので、algoliaのロゴを検索ボックス付近に設置しなければならない。 やったこと JS * suggestion._highlightResult..valueで検索したときに返すattributeを決定できるみたいなので、検索結果に表示する文字列はsuggestion._highlightResult.title.valueで良い * ある文字列をリンクにするためにはlink()メソッドが使えそう * link先のurlはhttps://ghost.ponpokopon.me/とsuggestion._highlightResul
3 min read
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の設定自体はできたんだけど、それをうまくサイトに組み込んで検索結果から該当のページに飛ばす部分はユーザーに任されていて、そこで死んだ。でもやったところまではメモる。 以下の内容はだいたいチュートリアルの流れに従っている。 Algoliaの設定 Algoliaの仕組みは、検索対象にしたいデ
4 min read
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', options: { service: 'Mailgun', auth: { user: 'mailgun username', // mailgun username
2 min read
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 settings here production: { //url: 'http://ghost.ponpokopon.me', url: 'https://ghost.ponpokopon.me', ]... 簡単!
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には記事や設定のエクスポート機能があるので、この機能を使う 流れは以下 1. 記事をエクスポートする 2. ghostの設定をmysqlを使うように書き換えてghost再起動 3. まっさらなghostにエクスポートしたファイルをインポート 当然ghost再起動した段階で初期状態になってしまうのでダウンタイムになるけどまあ個人ブログだし妥協 設定の書き換え ghost/config.jsを以下のように修正(元の設定をコメントアウトしてmysqlの設定を追加している) production: { ..
1 min read