1. attakei

    Posted

    attakei
Changes in title
+dokku-letsencryptでHTTPSのwebサービスの構築が捗る件
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,92 @@
+※プロンプトで表示しているURL類は、基本的にgithubを除いて全部自分の確認用のURLから改変したものです
+
+最近ちょこちょこdokku[^1]をいじったりしています。
+昨年末ごろに、Let's Encrypt[^2]がオープンベータになって以降、SSLサーバ証明書の作成が非常に楽になっています。
+
+で、dokkuにはLet's Encryptをさらに手軽に扱えるようになる、dokku-letsencrypt-pluginが存在するので、後で「証明書どうしよう」といった考慮も全く必要なく気軽にHTTPSなWebサービスの構築が捗りそうです。
+
+## インストールしてみる
+
+[ここ](https://github.com/dokku/dokku-letsencrypt) そのまんま。簡単
+
+```shell-session:インストール
+$ sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
+```
+
+これだけ。
+
+
+## 使ってみる
+
+(dokkuのドキュメントでおなじみのruby-rails-sampleを使用)
+
+
+```shell-session:アプリ用意してみる
+$ dokku apps:create sample
+Creating sample... done
+(中略)
+$ dokku letsencrypt sample
+=====> Let's Encrypt sample...
+ ! ERROR: Cannot request a certificate without an e-mail address!
+ ! please provide your e-mail address using
+ ! dokku config:set --no-restart sample DOKKU_LETSENCRYPT_EMAIL=<e-mail>
+```
+
+Let's EncryptはSSL証明書発行時にメールアドレスが必須になるので、dokkuのアプリにあらかじめ環境変数にメールアドレスを登録する必要があります。
+提示してくれるコマンドに`--no-restart`オプションでコンテナ再起動をさせる必要をなくしているのは優しさ
+
+```shell-session:メールアドレスを登録して再度進める
+$ dokku config:set --no-restart sample DOKKU_LETSENCRYPT_EMAIL=attakei@example.com
+-----> Setting config vars
+ DOKKU_LETSENCRYPT_EMAIL: attakei@example.com
+$ =====> Let's Encrypt sample...
+-----> Updating letsencrypt docker image...
+latest: Pulling from m3adow/letsencrypt-simp_le
+
+4d06f2521e4f: Already exists
+a3ed95caeb02: Already exists
+8d87d7d66444: Already exists
+87187c773fd1: Already exists
+Digest: sha256:66269a4cc647c9847a7f4f8ba39ba98caeb3b1b824d4f28ccb7dcc7b21351f25
+Status: Image is up to date for m3adow/letsencrypt-simp_le:latest
+ done
+-----> Enabling ACME proxy for sample...
+-----> Getting letsencrypt certificate for sample...
+ - Domain 'sample.dokku.example.com'
+darkhttpd/1.11, copyright (c) 2003-2015 Emil Mikulic.
+listening on: http://0.0.0.0:80/
+2016-03-17 03:32:17,571:INFO:__main__:1202: Generating new account key
+2016-03-17 03:32:21,819:INFO:requests.packages.urllib3.connectionpool:758: Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
+2016-03-17 03:32:22,106:INFO:requests.packages.urllib3.connectionpool:758: Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
+2016-03-17 03:32:22,374:INFO:requests.packages.urllib3.connectionpool:758: Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
+2016-03-17 03:32:22,651:INFO:requests.packages.urllib3.connectionpool:758: Starting new HTTPS connection (1): letsencrypt.org
+2016-03-17 03:32:23,807:INFO:requests.packages.urllib3.connectionpool:758: Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
+2016-03-17 03:32:24,113:INFO:requests.packages.urllib3.connectionpool:758: Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
+2016-03-17 03:32:24,487:INFO:requests.packages.urllib3.connectionpool:207: Starting new HTTP connection (1): sample.lab.attakei.net
+2016-03-17 03:32:24,784:INFO:__main__:1294: sample.lab.attakei.net was successfully self-verified
+2016-03-17 03:32:24,834:INFO:requests.packages.urllib3.connectionpool:758: Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
+2016-03-17 03:32:25,115:INFO:__main__:1302: Generating new certificate private key
+2016-03-17 03:32:32,681:INFO:requests.packages.urllib3.connectionpool:758: Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
+2016-03-17 03:32:32,938:INFO:requests.packages.urllib3.connectionpool:758: Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
+2016-03-17 03:32:33,291:INFO:requests.packages.urllib3.connectionpool:758: Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
+2016-03-17 03:32:33,547:INFO:__main__:385: Saving account_key.json
+2016-03-17 03:32:33,548:INFO:__main__:385: Saving fullchain.pem
+2016-03-17 03:32:33,548:INFO:__main__:385: Saving chain.pem
+2016-03-17 03:32:33,555:INFO:__main__:385: Saving cert.pem
+2016-03-17 03:32:33,556:INFO:__main__:385: Saving key.pem
+-----> Certificate retrieved successfully.
+-----> Symlinking let's encrypt certificates
+-----> Setting config vars
+ DOKKU_NGINX_SSL_PORT: 443
+-----> Configuring SSL for sample.example.com...(using /var/lib/dokku/plugins/available/nginx-vhosts/templates/nginx.ssl.conf.template)
+-----> Creating https nginx.conf
+-----> Running nginx-pre-reload
+ Reloading nginx
+-----> Disabling ACME proxy for sample...
+ done
+```
+
+Let's EncryptクライアントのDockerイメージをプルしたのちに、勝手に取得をしてくれる。取得するだけでなく、dokkuのフロント部分に証明書のセットアップをしてくれて、さらにhttpでアクセスするとhttpsにリダイレクトしてくれるという、至れり尽くせり感がすごいですね。
+
+[^1]: http://dokku.viewdocs.io
+[^2]: http://letsencrypt.org