ゆるふわキャンパー

このブログは読むと思わずキャンプに行ってみたくなってしまう楽しいキャンプノウハウをわかりやすく紹介するわけではなく、技術ネタ中心でたまに酒と釣りの話をします。

Use Container Storage Interface (CSI) with Nomad
nomad

Use Container Storage Interface (CSI) with Nomad

今まで Nomad で DB 等のステートフルなワークロードを実行したい場合、以下のような選択肢がありました。 host_volume スタンザを使用し、ホストのボリュームを使用する。 Docker を使用したタスクの場合は volumes パラメータを使用し同様にホストのボリュームをマウントして使用する。 しかし、上記の方法はホスト間でのデータを同期しないため、例えばタスクが終了後他のノードでタスクが再起動された場合にデータを保持することができません。 また、ephemeral_disk スタンザというものがあります。こちらの migrate パラメータを有効にすると、タスクを元のノードに配置できない場合にデータをホストを越えて移行することができます。しかし、以下の制約があります。 データの移行はベストエフォートで行われるため、データは失われる可能性がある。 大きいサイズのデータには適していない。

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

Integrate Nomad and Vault
nomad

Integrate Nomad and Vault

現在 Nomad と Consul を使用してこのブログを動かしています。 nomad - ゆるふわキャンパー consul - ゆるふわキャンパー 例えば DB のパスワード等の機密情報を Nomad のジョブで扱いたい場合があります。Nomad は環境変数から機密情報を取得することもできますが、Vault と連携することで Vault の暗号化された KVS から機密情報を取得することが可能になります。 Vault Integration | Nomad by HashiCorp 今回、

Provide dependencies to between Nomad tasks with lifecycle stanza
nomad

Provide dependencies to between Nomad tasks with lifecycle stanza

Nomad のタスク間に依存関係を持たせるには何らかの工夫が必要でした。 Nomad ジョブのタスク間の依存関係をどのように実現するか考える が、 v0.11 beta で依存関係を持たせることのできる機能が追加されました! 🎉 Announcing HashiCorp Nomad 0.11 Beta Key highlights of this release: ・Container Storage Interface (CSI): Deploy stateful applications on Nomad using

Generate bolt targets from Terraform state
bolt

Generate bolt targets from Terraform state

現在個人サーバーの管理を Terraform で、サーバーのプロビジョニングを Bolt で行なっています。 terraform - ゆるふわキャンパー bolt - ゆるふわキャンパー Bolt ではインベントリファイルを使用してターゲットとなるサーバーを指定できます。インベントリファイルは例えば以下のような内容です。 groups: - name: production targets: - web.example.com - db.example.com - app.

Cloud provisioning with Bolt
bolt

Cloud provisioning with Bolt

このブログを動かしているサーバーは Terraform で構築しています。 Nomad クラスターを作成する とりあえずでプロビジョニングも Terraform で行なっていたのですが、いいかげん辛くなってきたので Bolt を使ったプロビジョニングに移行しました。 Welcome to Bolt ツールとしては Ansible を今まで個人サーバーを構築する際に使っていたのですが、Bolt を今まで使ったことがなかったので選んでみました。 Bolt の概念 Bolt は Puppet Lab の開発した割と新しめのオーケストレーションツールです。Puppet との違いは対象のサーバーにエージェントソフトウェアを入れなくても使える点です。 Puppet の知識がなくても使う事ができ、

Mounting Docker volumes into Nomad tasks allocation directory
nomad

Mounting Docker volumes into Nomad tasks allocation directory

Nomad はグループ (タスクの集まり) 内で共有可能なディレクトリを提供しておりタスクからは環境変数 NOMAD_ALLOC_DIR または /alloc ディレクトリを直接参照することで使用可能です。 Environment - Runtime | Nomad by HashiCorp また Nomad のタスクは Docker が使用できます。 Drivers: Docker | Nomad by HashiCorp そこで、Docker コンテナの生成物をタスク間で共有できないか試したのですがすんなりできなかったのでメモ。 構成

Provide dependencies to between Nomad tasks
nomad

Provide dependencies to between Nomad tasks

最近 Nomad をチマチマ触っています。 nomad - ゆるふわキャンパー Nomad のジョブとしてバッチジョブを実行できるのですが、ジョブ内に複数タスクがある場合、タスクは並列で実行されます。 このためタスク間に依存関係がある場合、下流のタスクが失敗してしまうことに気付きました…。また、現在 Nomad にタスク間の依存関係を表現する機能はありません。 既存の議論 タスク間の依存関係を表現できるようにしたいという機能要望は数年前からあり、以下の Issue で議論されています。 Provide for dependencies between tasks in a group · Issue

Add the Eucalyn keyboard layout
iris

Add the Eucalyn keyboard layout

最近 Iris というキーボードを組み立て使い始めました。 iris - ゆるふわキャンパー 元々 Planck というキーボードを使用しており、素晴らしいキーボードでとても気に入っていたのですがエンド・ゲームを目指すために左右分離型のキーボードに手を出してしまったのでした。 ※エンド・ゲームが一体何を指すのかは諸説あり、お金がなくなったときを指すという意見や、はたまた検索をやめた時であるという意見もあります。 私がキーボードを組み立て始めた理由の一つに、より手が疲れないキーボードが欲しいというものがありますが、左右分離型のカラムスタッガード配列である Iris を組み立てたことによりこの点はとても満足のいくものとなりました (現時点では…)。 キーボードの物理的な形状以外に手の負担を少なくする方法としては、指の移動をホームポジションからなるべく崩さないようにする、という方法もあります。より効率よく文字を入力するために様々なキーのレイアウトが考案されており、一般に普及しているレイアウトの QWERTY 以外に Dvorak や

Build and release keymap on GitHub Actions
iris

Build and release keymap on GitHub Actions

最近 Iris という自作キーボードを組み立てて使い始めました。 Iris キーボードを組み立てた! 自作キーボードの利点の一つとしてキーマップを自由に変更可能という点があります。キーマップの変更はファームウェアを書き換えることで行います。ファームウェアは現在恐らく自作キーボード界のデファクトスタンダードである qmk_firmware を使うことが多いと思われ、Iris も qmk_firmware に対応しているものの一つです。 QMK Firmware qmk_firmware は有志の手によって GUI ツールが用意されておりますが私は現在 GitHub 上でコードベースで管理しております。理由としては変更の履歴を残しておきたいからです。他にもありますが要するに GitHub だと管理が楽! Iris

I'm going home button v2
aws

I'm going home button v2

私は毎日帰宅する際に「今から帰るボタン」を押して LINE メッセージを送っています。 帰りますボタンを作った 最近このボタンに機能を追加しより便利にしてみました。 追加した機能 Google カレンダーと連携し、ボタンを押したタイミングからその日の 23 時 59 分までの間に始まるイベントがある場合 (飲み会とか)、イベントの内容を送るようにしてみました。 以下のような感じです。 日を跨ぐ可能性も考慮して終わりの時間には日付も入れるようにしています。 Google カレンダーからイベントを取得する方法 これ調べるのが結構大変だった…。混乱ポイントだったのが、まず適当にググってみたところ旧 Google カレンダー API の情報とごっちゃになっておりそこが混乱の元でした。Google 公式ドキュメントでも旧

Iris keyboard Build
mech-keyboard

Iris keyboard Build

現在 Planck という自作キーボードを使っています。 planck - ゆるふわキャンパー Planck はとても気に入っており特に以下の点を気にいっています。☺ 格子型の配列が意外に使い心地が良い。見た目も好き。 コンパクトで手が疲れにくい。 が、欲を言えば 分離型だとさらに疲れにくそう。 もう少しエルゴノミクス寄りでもいいかも。 という気持ちもあり、設計から自作をするのもちょっと自信がまだ無かったので Planck と同じくキット型の自作キーボードを漁ってみました。MiniDox 等と迷った挙句、Iris というキーボードが良さげだったので PCB 等を買いました。 Iris Keyboard の PCB を購入しました

Using Trello to manage private projects
trello

Using Trello to manage private projects

最近、Trello でやりたいことを管理しています。 これが割といい感じなのでメモしておきます。 やりたいこととは 主に以下の「やりたいこと」を対象として管理しています。 書きたいブログのテーマ 作りたいツール 試してみたいサービスや機能 個人サーバーの運用ネタ 上記の通り個人プロジェクト (と言うには小規模ですが) 的な思いつきや小ネタが対象となっています。 今まで 今まではずっと Any.do に思いついたことを書き込んでいましたが、以下の課題がありました。 今日やること、明日やること、のように管理されるがもっとフワッとした単位で管理したかった。 思いつきでどんどん書き込んでいるので 100 個以上のタスクが溜まっていた。 いざ作業開始したとして平日の業務後や土日にちまちま進める感じなので、そういったスケジュール感にマッチしない。 というわけで

Convert ePUB file to Mobi file with the KindleGen command
kindle

Convert ePUB file to Mobi file with the KindleGen command

最近 Kindle Paperwhite を買いました。 本はアナログ派だったのですが引っ越ししてから通勤時間が短くなるなど生活の変化があり、出したり引っ込めたりがしやすい Kindle を買ってみました。が、思った以上になんだかリズムと合ってしまい最近購入する本はほぼ電子版を買うようになりました…。目も疲れにくいし電子ペーパーすごいな。あと前職のパイセンとキャンプに行った時にパイセンが Kindle を持ってきていてなるほどな〜というのもあり… (キャンプは意外と暇になるし自然の中で本を読むのは気持ちが良い)。 電子ペーパー - Wikipedia さて、最近 O'Reilly Japan Ebook Store で書籍を購入したのですが、ダウンロードできる形式が ePub か PDF

System job is suitable for running mackerel-agent with Nomad
nomad

System job is suitable for running mackerel-agent with Nomad

現在 Nomad クラスターを展開しこのブログを運用しています。 nomad - ゆるふわキャンパー Nomad クラスターは現在 3 台のサーバーから構成されており、それぞれのサーバーは Mackerel でモニタリングしています。Mackerel へサーバーのメトリクスを送るためには mackerel-agent が必要ですが、mackerel-agent は Docker イメージが用意されているので、これを Nomad のジョブとして動かし Nomad クラスターの各サーバーを監視しています。 mackerel/mackerel-agent ジョブのタイプは Service

Run Let's Encrypt client with Nomad job
nomad

Run Let's Encrypt client with Nomad job

SSL 証明書の取得の自動化を可能とするプロトコルとして ACME (Automated Certificate Management Environment) がありこれの実装として Let’s Encrypt というサービスがあります。 Let’s Encrypt のクライアントとしては certbot や lego があります。どちらも以下のように Docker イメージが公開されており、つまり Nomad のジョブとして簡単に動かすことが可能です。 Docker Hub - certbot

Improved blog search page
algolia

Improved blog search page

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

Create a new Dropbox Paper document from Alfred workflow
alfred

Create a new Dropbox Paper document from Alfred workflow

Alfred ワークフローから Dropbox Paper ドキュメントを作成できるようにしてみました。 この記事は以下のシリーズの続きになります (台風で…!暇…!)。 Dropbox Paper のドキュメントを一覧して開くことのできる Alfred Workflow を作成したDropbox Paper ワークフローにドキュメントのコピー機能を追加しました今までは Alfred から dbp new すると Dropbox Paper のトップページに飛ぶ挙動でしたが、タイトルを入力するとそのタイトルのドキュメントの編集画面に飛ぶ方ようにしたかったので改善してみました。 これからは dbp new <タイトル&

Add copy action to Alfred Dropbox Paper Workflow
alfred

Add copy action to Alfred Dropbox Paper Workflow

先週 Dropbox Paper のドキュメントを一覧し開く Alfred ワークフローを作成しました。 Dropbox Paper のドキュメントを一覧して開くことのできる Alfred Workflow を作成したこれで直ぐにドキュメントにアクセスできるようになって便利になったのですが、一方課題も…。 課題Dropbox Paper は主にブログの下書き用に使っているのですが、Dropbox Paper のドキュメントをコピーして Ghost のエディターに貼り付けると表示が崩れるというかなり致命的な問題がありました。これでは不便すぎる…。 Dropbox Paper はマークダウンで書けますが、どうやらコピーされたテキストはマークダウン形式にならないみたいです。そりゃそうか。 解決方法Dropbox API ではマークダウン形式でドキュメントの内容を取得可能な

Split DigitalOcean project
digitalocean

Split DigitalOcean project

最近このブログを Nomad クラスター環境へ移行しました。 Nomad クラスターを作成する Nomad クラスター上で Ghost ブログを動作させる クラスターは DigitalOcean 上に構築しており、構築は Terraform で自動化しています。ウェブサーバーやブログなどのアプリケーションの配備や管理は Nomad に任せています。 DigitalOcean ではプロジェクトという単位でリソースをまとめることが出来ます。 Projects :: DigitalOcean Product Documentation とりあえず Nomad クラスター関連のリソースをまとめる意図で Nomad Cluster というプロジェクトを作成し

Dropbox Paper Alfred Workflow
alfred

Dropbox Paper Alfred Workflow

私は今までローカルの Dropbox フォルダ以下にブログ記事の下書きを保管していました。 MacDown というマークダウンエディタで下書きを作成、Alfred で下書きフォルダを開く、といった方法で運用していました。その辺については以下に細かく書いています。 去年より個人ブログのポスト数を2倍くらい増やせたのでなぜなのか書く この方法ですがそもそも Dropbox Paper を使えばローカルにファイル保存しなくていいし、マークダウン対応してるし、PC でもスマホでも関係なく使えるのでええやんと思い始め、Dropbox Paper を使ったフローに移行することにしました。 そこで引き続き Alfred でシュッと下書きを参照したり新規記事を作成出来れば嬉しいので今回そのような Alfred Workflow を作ってみました。 GitHub - lorentzca/alfred-dropboxpaper-workflow: