curl でレスポンスタイムをシュッと取るヤツ

Sep 27, 2016

以前 Qiita にcurl でサッと HTTP ベンチマークと書いたが、それをもうちょい簡単にやるために以下のようなコマンドを用意してみた。 #!/bin/sh curl -s -o /dev/null -w '%{time_starttransfer}\n' "$@" これを curlb という名前で $PATH の通ったところに置いておくと以下のようにできる。 $ curlb https://blog.yuyat.jp/ 0.067

標準エラー出力に tee するコマンド tee2err を作った

Sep 26, 2016

GNU tee でも BSD tee でもできないので作りました。 yuya-takeyama/tee2err これは何か 標準入力を食わせると、標準出力と標準エラー出力に同じものを出力するだけのコマンドです。 $ echo foo | tee2err foo foo foo と 2 回出力されていますが、一方は標準出力に、もう一方は標準エラー出力に出力されています。 どういう時に使うか 標準入力からストリームを食わせるとなんらかの終端操作を行うようなツールと一緒に使います。 例えば 1 から 10 までの数列の総和を求める場合。 $ seq 10 | perl -ane '$i+=$_; END { print "SUM: $i\n"; }' SUM: 55 これはこれで特に問題ないですが、これに tee2err を組み合わせるとこのようになります。 $ seq 10 | tee2err | perl -ane '$i+=$_; END { print "SUM: $i\n"; }' 1 2 3 4 5 6 7 8 9 10

Continue Reading →

GitHub Pages を nginx のリバースプロキシ越しに配信する

Sep 25, 2016

このブログは以前の記事にも書いた通り、GitHub Pages から配信しています。 そしてさらに、前段に nginx のリバースプロキシを置いた構成になってます。 何故リバースプロキシを利用するか はっきり言って普通に考えたら無駄感はありますが、良い点をいくつか挙げてみます。 Zone apex domain を使用することができる GitHub Pages は CNAME による Custom domain に対応していますが、CNAME では通常 Zone apex domain に対応することができません。 リバースプロキシを利用することで、ドメインの A レコードにリバースプロキシを指定し、その upstream に GitHub Pages の URL を指定することで、対応することができます。 (このブログはご覧の通り Zone apex domain ではないですが、そのうちそっちにもページを作るつもりです) Custom domain でも HTTPS を使用することができる GitHub Pages はデフォルトでは USERNAME.github.io ドメインが割り当てられ、HTTPS で配信されます。 ですが、CNAME を使った場合は HTTP となってしまい、HTTPS を利用する方法は GitHub からは提供されていません。 Let’s Encrypt を使えばセットアップは簡単です。 アクセスログをちゃんと取得できる GitHub でもリポジトリの Graphs -> Traffic を見るとある程度わかりますが、nginx で好きなログを残せるようになります。 設定手順

Continue Reading →

Let's Encrypt の証明書を Ansible と certbot で Nginx にインストール & 自動更新

Sep 19, 2016

これもリニューアルネタです。 やりたいこと Let’s Encrypt の証明書を Ansible でインストールする その後の証明書の更新も自動で行うようにする その設定もやはり Ansible で行う 前提とする環境 Ubuntu 16.04 だと certbot が apt-get でインストールできますが、それ未満だと certbot-auto というコマンドを手動でインストールする必要があります。 中身はほぼ同じだと思いますが、そちらについての説明はしません。 Ubuntu 16.04 Ansible 2.1.1.0 nginx 1.10.1 手順 certbot のインストール certbot とは Let’s Encrypt の証明書の取得や更新を自動化するためのコマンドラインツールです。 こんな感じの playbook でインストールします。 - name: install certbot apt: name=letsencrypt state=present update_cache=yes 証明書の取得 certbot は Automated Certificate Management Environment (ACME) というプロトコルにより証明書の取得を行います。 これは、Let’s Encrypt のサーバが証明書を取得しようとしているドメインのある URL にアクセスし、ちゃんとレスポンスを返すことができるかチェックするというものです。 そのため事前に nginx 等の Web サーバを起動して、インターネットからリーチできる状態にしておく必要があります。 (--standalone オプションを使えば certbot 自身が

Continue Reading →

Hugo で作ったサイトを CircleCI で GitHub Pages に自動デプロイ

Sep 19, 2016

Hugo は Jekyll と違って、GitHub Pages に push しても勝手にページ生成はされません。 どうにかして自分で Hugo を実行し、それで生成されたファイルを push する必要があります。 このブログを構築するにあたって、CircleCI でビルドして自動デプロイする手順がまとまったので公開します。 なお、このブログはカスタムドメインを使用していますが、それについての説明はこの記事ではしません。 前提とする環境 Hugo Ver. 0.16 概要 以下のような環境・手順で自動デプロイが行われるようにします。 記事のソースは master ブランチに push する GitHub Pages 用のブランチには gh-pages を使う master ブランチが更新された時に gh-pages が自動的に更新される セットアップ手順 対象ブランチの設定 当然ですがリポジトリを準備します。 そしてリポジトリの Settings から GitHub Pages の Source として gh-pages を選択します。 ただし、gh-pages ブランチがない状態だと選択できないと思うので、その場合は手動でブランチだけ作るか、CircleCI によるデプロイが行われた後で行うと良いでしょう。 デプロイキーの用意 CircleCI は CI 対象のリポジトリを登録する時に、自動的に対象リポジトリの SSH キーを生成します。 が、これは read-only なので、今回の様に CircleCI から GitHub に push したい場合は使えません。 なので手動で生成し、登録する必要があります。 鍵の生成については GitHub のドキュメント等を参照してください。 Generating a new SSH key 生成したら GitHub リポジトリの Settings -> Deploy keys -> Add deploy key と進み、Key には生成した公開鍵ファイルの中身を貼り付け、Allow write access にチェックを入れてください。 また、CircleCI 側には秘密鍵を登録します。 Project Settings -> SSH Permissions -> Add SSH Key と進み、hostname には github.com、Private Key には秘密鍵の中身を貼り付けてください。 これで github.com へのデプロイ時にはこの鍵ファイルが使われるようになります。 デプロイスクリプトの用意 circle.yml は以下のようなものを準備します。 master ブランチが更新された時はデプロイ用のスクリプトを実行するようになっています。 dependencies: pre: - wget https://github.com/spf13/hugo/releases/download/v0.16/hugo_0.16-1_amd64.deb - sudo dpkg -i hugo_0.16-1_amd64.deb test: override: - "true" deployment: production: branch: master commands: - ./scripts/deploy_production.sh デプロイスクリプトは以下のようにします。 これを scripts/deploy_production.sh という名前で保存して、忘れずに chmod +x しておきましょう。 設定部分は環境変数でセットするようにしてあるので、コピペそのままで使えると思います。 #!/bin/bash -eux if [ -z "${GIT_USER_NAME}" ]; then echo "Please set an env var GIT_USER_NAME" exit 1 fi if [ -z "${GIT_USER_EMAIL}" ]; then echo "Please set an env var GIT_USER_EMAIL" exit 1 fi GIT_REPO="git@github.com:${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}.git" git submodule init git submodule update remote=`git ls-remote --heads 2> /dev/null | grep gh-pages || true` if [ -n "$remote" ]; then git clone -b gh-pages "${GIT_REPO}" public rm -rf public/* else git init public cd public git checkout -b gh-pages git remote add origin "${GIT_REPO}" cd ..

Continue Reading →

ブログを Hugo でリニューアルした

Sep 19, 2016

長年 Wordpress を使ってきたけどいい加減辛くなってきたので Hugo に移行しました。 過去ブログのデータ移行については過去に何度も挫折していて、結局リバースプロキシを使っていい感じに振り分けることにしました。 以前の記事 URL は基本的に全て生きているはずです。 コメントとかはできませんが。 新ブログは GitHub Pages からリバースプロキシを介して配信しています。 Let’s Encrypt で SSL 化し、ついでに Nginx も HTTP2 化したので、その辺のネタはそのうちに書いていければと思ってます。 あと、テーマは @chibicode さんの hugo-theme-shiori をカスタマイズして使っています。 今後ともよろしくお願いします。

Author

Yuya Takeyama

Yuya Takeyama