TECH PLAY

Wedding Park/ウエディングパーク

Wedding Park/ウエディングパーク の技術ブログ

206

はじめまして。メディア開発本部の綿引です。 本日は個人的に前から気になっていたMySQL 5.7のマルチソースレプリケーションについて検証したいと思います。 マルチソースレプリケーション マルチソースレプリケーションとは1台のスレーブが複数のマスタを持つことができる仕組みです。 これまでのMySQLのレプリケーションはマスタとスレーブの関係が1:Nしか出来ませんでしたが、 この新機能を使用すればN:1が可能になります。 今まで『こんなにスレーブいらないんだけど冗長化は必須だよな。。』と思ったことがある方は興味を持たれるかと。 MySQL 5.7で他にも追加された機能はありますが、マルチソースレプリケーションはその中でも一番目を引く機能ではないかと個人的には思っております。 そして今回構築に伴い、MySQLだけでなくスレーブ側を 互換性のある”MariaDB”にしてみるといったことも出来ればと思いますので、 早速構築を開始したいと思います。 構築開始! 今回は予め以下の構成を用意しました。 ■マスタ側 mysql5.7-master1 (MySQL導入済み) mysql5.7-master2 (MySQL導入済み) ■スレーブ側 mysql5.7-slave (MySQL導入済み) mariadb10.1-slave (MariaDB導入済み) 以下、図の緑の点線部分をレプリケーションしていきたいと思います。 〔Master〕my.cnfの編集 まずはmy.cnfの設定です。 server-idがかぶらないようにmysql5.7-master1に以下を、 log-bin=mysql-bin server-id=1001 mysql5.7-master2に以下を設定します。 log-bin=mysql-bin server-id=1002 次に両マスターサーバにレプリケーション用のユーザを作成。 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'XXXXXX'; これでマスター側の設定自体は完了です。my.cnfを修正したのでmysqldの再起動を行っておきます。 〔Slave〕my.cnfの編集 続いてスレーブ側の設定です。まずはMariaDBではなくMySQLを先にやっていきたいと思います。 以下を追加します。 server-id=1003 relay_log_info_repository = TABLE master_info_repository = TABLE relay_log_recovery = ON ここまで実施したらまたスレーブ側のmysqldを再起動しておきます。 〔Slave〕スレーブ・マスター接続! 両マスター側でバイナリログのポジションを「show master status」で確認しておき、スレーブ側でチャネルの設定を行います。 CHANGE MASTER TO MASTER_HOST='mysql5.7-master1', MASTER_USER='repl', MASTER_PASSWORD='XXXXX', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=309, MASTER_CONNECT_RETRY=10 for channel 'master1'; CHANGE MASTER TO MASTER_HOST='mysql5.7-master2', MASTER_USER='repl', MASTER_PASSWORD='XXXXX', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=309, MASTER_CONNECT_RETRY=10 for channel 'master2'; 「show slave status」で確認してみます。 mysql> show slave status \G; *************************** 1. row *************************** Slave_IO_State: Master_Host: mysql5.7-master1 Master_User: repl Master_Port: 3306 Connect_Retry: 10 Master_Log_File: mysql-bin.000005 Read_Master_Log_Pos: 309 Relay_Log_File: mysql5-relay-bin-master1.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000005 Slave_IO_Running: No Slave_SQL_Running: No ・ ・ ・ Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: master1 Master_TLS_Version: *************************** 2. row *************************** Slave_IO_State: Master_Host: mysql5.7-master2 Master_User: repl Master_Port: 3306 Connect_Retry: 10 Master_Log_File: mysql-bin.000003 Read_Master_Log_Pos: 309 Relay_Log_File: mysql5-relay-bin-master2.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000003 Slave_IO_Running: No Slave_SQL_Running: No ・ ・ ・ Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: master2 Master_TLS_Version: 2 rows in set (0.00 sec) 2つのマスターが確認出来ました!後はレプリケーションを開始するだけです。 start slave for channel 'master1'; start slave for channel 'master2'; 再度「show slave status」で確認してみます。 mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: mysql5.7-master1 Master_User: repl Master_Port: 3306 Connect_Retry: 10 Master_Log_File: mysql-bin.000005 Read_Master_Log_Pos: 309 Relay_Log_File: mysql5-relay-bin-master1.000002 Relay_Log_Pos: 320 Relay_Master_Log_File: mysql-bin.000005 Slave_IO_Running: Yes Slave_SQL_Running: Yes ・ ・ ・ Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: master1 Master_TLS_Version: *************************** 2. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: mysql5.7-master2 Master_User: repl Master_Port: 3306 Connect_Retry: 10 Master_Log_File: mysql-bin.000003 Read_Master_Log_Pos: 309 Relay_Log_File: mysql5-relay-bin-master2.000002 Relay_Log_Pos: 320 Relay_Master_Log_File: mysql-bin.000003 Slave_IO_Running: Yes Slave_SQL_Running: Yes ・ ・ ・ Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: master2 Master_TLS_Version: 2 rows in set (0.00 sec) 2つのチャネルの「Slave_IO_Running」と「Slave_SQL_Running」が「YES」になりました! 全サーバに以下テスト用のテーブルを作成して、レプリケーションの確認です! mysql> desc item; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(10) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) 確認!! マスタの1台目で以下を実施。 mysql> insert into item (id,name) values (1,"master1"); Query OK, 1 row affected (0.01 sec) 2台目で以下を実施。 mysql> insert into item (id,name) values (2,"master2"); Query OK, 1 row affected (0.01 sec) スレーブで確認! mysql> select * from item; +------+---------+ | id | name | +------+---------+ | 1 | master1 | | 2 | master2 | +------+---------+ 2 rows in set (0.00 sec) ちゃんとレプリケーションされてますね。 MariaDBでのマルチソースレプリケーション 続いてMariaDBでも実施して見ます! まずはMySQLと同様にmy.cnfの設定です。 server-idがかぶらないように以下を設定します。 server-id=1004 スレーブ・マスター接続! 一台ずつコネクションとレプリケーションの設定を行います。 MariaDB [(none)]> SET @@default_master_connection='mysql5.7-master1'; Query OK, 0 rows affected (0.00 sec) コネクションの設定を確認し、 MariaDB [(none)]> select @@default_master_connection; +-----------------------------+ | @@default_master_connection | +-----------------------------+ | mysql5.7-master1 | +-----------------------------+ レプリケーションの設定を行います。 MariaDB [(none)]> CHANGE MASTER TO -> MASTER_HOST='mysql5.7-master1', -> MASTER_USER='repl', -> MASTER_PASSWORD='1qaZ_Xsw2', -> MASTER_LOG_FILE='mysql-bin.000005', -> MASTER_LOG_POS=1006; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> show all slaves status \G; *************************** 1. row *************************** Connection_name: mysql5.7-master1 Slave_SQL_State: Slave_IO_State: Master_Host: mysql5.7-master1 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000005 Read_Master_Log_Pos: 1006 Relay_Log_File: mariadb10-relay-bin-mysql5@002e7@002dmaster1.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000005 Slave_IO_Running: No Slave_SQL_Running: No ・ ・ ・ Executed_log_entries: 1 Slave_received_heartbeats: 0 Slave_heartbeat_period: 1800.000 Gtid_Slave_Pos: 1 row in set (0.00 sec) ここでまず一つ目のマスタのレプリケーション設定が出来ました。 続いて二つ目を同様の手順で実施。 「show all slaves status」で確認すると、 MariaDB [(none)]> show all slaves status \G; *************************** 1. row *************************** Connection_name: mysql5.7-master1 Slave_SQL_State: Slave_IO_State: Master_Host: mysql5.7-master1 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000005 Read_Master_Log_Pos: 1006 Relay_Log_File: mariadb10-relay-bin-mysql5@002e7@002dmaster1.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000005 Slave_IO_Running: No Slave_SQL_Running: No ・ ・ ・ Executed_log_entries: 1 Slave_received_heartbeats: 0 Slave_heartbeat_period: 1800.000 Gtid_Slave_Pos: *************************** 2. row *************************** Connection_name: mysql5.7-master2 Slave_SQL_State: Slave_IO_State: Master_Host: mysql5.7-master2 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000003 Read_Master_Log_Pos: 1006 Relay_Log_File: mariadb10-relay-bin-mysql5@002e7@002dmaster2.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000003 Slave_IO_Running: No Slave_SQL_Running: No ・ ・ ・ Executed_log_entries: 1 Slave_received_heartbeats: 0 Slave_heartbeat_period: 1800.000 Gtid_Slave_Pos: 2 rows in set (0.00 sec) これでレプリケーションの設定も完了です。 スタートしてみます。 MariaDB [(none)]> start all slaves; Query OK, 0 rows affected, 2 warnings (0.00 sec) MariaDB [(none)]> show all slaves status \G; *************************** 1. row *************************** Connection_name: mysql5.7-master1 Slave_SQL_State: Slave has read all relay log; waiting for the slave I/O thread to update it Slave_IO_State: Waiting for master to send event Master_Host: mysql5.7-master1 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000005 Read_Master_Log_Pos: 1006 Relay_Log_File: mariadb10-relay-bin-mysql5@002e7@002dmaster1.000002 Relay_Log_Pos: 411 Relay_Master_Log_File: mysql-bin.000005 Slave_IO_Running: Yes Slave_SQL_Running: Yes ・ ・ ・ Executed_log_entries: 6 Slave_received_heartbeats: 0 Slave_heartbeat_period: 1800.000 Gtid_Slave_Pos: *************************** 2. row *************************** Connection_name: mysql5.7-master2 Slave_SQL_State: Slave has read all relay log; waiting for the slave I/O thread to update it Slave_IO_State: Waiting for master to send event Master_Host: mysql5.7-master2 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000003 Read_Master_Log_Pos: 1006 Relay_Log_File: mariadb10-relay-bin-mysql5@002e7@002dmaster2.000002 Relay_Log_Pos: 411 Relay_Master_Log_File: mysql-bin.000003 Slave_IO_Running: Yes Slave_SQL_Running: Yes ・ ・ ・ Executed_log_entries: 6 Slave_received_heartbeats: 0 Slave_heartbeat_period: 1800.000 Gtid_Slave_Pos: 2 rows in set (0.00 sec) MariaDBでも「Slave_IO_Running」と「Slave_SQL_Running」がどちらも「YES」になりました! 後は確認です。 確認!! マスタの1台目で以下を実施。 mysql> insert into item (id,name) values (3,"master1"); Query OK, 1 row affected (0.01 sec) 2台目で以下を実施。 mysql> insert into item (id,name) values (4,"master2"); Query OK, 1 row affected (0.01 sec) スレーブで確認! mysql> select * from item; +------+---------+ | id | name | +------+---------+ | 3 | master1 | | 4 | master2 | +------+---------+ 2 rows in set (0.00 sec) 出来ました! MySQLでもMariaDBでもマルチソースレプリケーションが比較的簡単に出来ることが判明しました。 今回はレプリケーションのみが目的だったので、今後はもっと実用的に使えるレベルまで持っていきたいです。 また今回少し触りましたが、あまりなじみがなかったのでMariaDBもどんどん触っていきたいと思います。
アバター
初めまして。エンジニア新卒2年目の武田です。 趣味でGo言語を勉強しています。 Gopher君、可愛いですよね!! 好き過ぎて、Gopher君ステッカーが日本ではなかなか手に入らなかったので、海外サイト( Unixstickers )で購入しちゃいました笑 さて、本題です。 今回は少し前に話題になったvalyala/fasthttpライブラリを触ってみました。 valyla/fasthttpとは golangでHTTP通信を行うためのライブラリです。 golangは標準パッケージにnet/httpがあるのですが、fasthttpを代わりに利用すると速度がかなり早くなるみたいです。公式のベンチマークテストだと、10倍高い性能が出たとか。 valyla/fasthttp 検証用コード 検証用にnet/httpとfasthttpのそれぞれで、1000万回数値をカウントしていく簡単なコードを書きました。 また、fasthttpで使えるサードパーティのリクエストルーターライブラリ( buaazp/fasthttprouter )があるので、それを利用したコードも書きました。 net/http package main import ( "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { sum:= 1 for sum < 10000000 { sum += 1 } } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) } fasthttp package main import ( "github.com/valyala/fasthttp" ) func handler(ctx *fasthttp.RequestCtx) { sum:= 1 for sum < 10000000 { sum += 1 } } func main() { requestHandler := func(ctx *fasthttp.RequestCtx) { switch string(ctx.Path()) { case "/": handler(ctx) default: ctx.Error("Unsupported path", fasthttp.StatusNotFound) } } fasthttp.ListenAndServe(":8081", requestHandler) } fasthttprouter package main import ( "github.com/valyala/fasthttp" "github.com/buaazp/fasthttprouter" ) func handler(ctx *fasthttp.RequestCtx, _ fasthttprouter.Params) { sum:= 1 for sum < 10000000 { sum += 1 } } func main() { router := fasthttprouter.New() router.GET("/", handler) fasthttp.ListenAndServe(":8082", router.Handler) } 検証方法 折角golangの検証を行うので、検証用のツールはgolangで作られたhttp負荷テストツールのvegetaを利用します。 tsenart/vegeta vegetaは簡単に利用できます。 まず、負荷をかけるページのurlをファイルに記述します。 GET http://localhost:8080 次に、以下のようなコマンドを書き、対象ページに ベジータアタック!! (負荷)をかけます。 このコマンドでは、対象ページに秒間100アクセスを10秒間行っています。 vegeta attack -rate=100 -duration=10s -targets=target.txt > result.txt 以下のコマンドで結果を表示します。 vegeta report -inputs=result.txt この要領で、今回の検証では秒間300、400、500アクセスで10秒間負荷をかけました。 検証環境 OS: OS X Lion v10.8.1, メモリ: 4GB, CPU: Core i5, Go: 1.5.1 検証結果 結論から言うと、各アクセス条件で遅延時間(Latencies)の平均(mean)を比較してみても、多少誤差がある程度でした・・・ 300/s net/http fasthttp fasthttprouter 400/s net/http fasthttp fasthttprouter 500/s net/http fasthttp fasthttprouter まとめ 今回の検証条件では、fasthttpを利用しても大きな速度の変化を確認することはできませんでした。 ただ、より大きな負荷をかけるなど別の検証条件ではまた違った結果が出てくるかもしれません。 また、速度が遅くならないのであれば、fasthttp単体より、fasthttprouterと組み合わせて利用した方が、シンプルなコードが書けるのではないかと思いました。 golangは書いていて楽しいですし、盛り上がってる言語なので、 引き続き勉強していきたいと思います。
アバター
こんにちは。メディア開発本部の栗山です。 開発環境を手軽に構築したいなーと思ったので、Dockerを使ってみました。 今回はkitematic(カイトマティック)から操作する方法でやっていきます。 Dockerとは? よく「コンテナ型仮想化技術」と説明されています。 コンテナ型仮想化技術とは、、、難しいですが、とても簡単に言うと ひとつのPC(OS)上で複数のOS環境を操作できる技術、というかんじでしょうか。 Go言語で開発されているそうです。クジラがかわいくて癒されます。 Linux環境でしか動作しないと思いきや、windows用の ToolBox の中にVirtualBoxが含まれているので、 ダウンロードすればwindowsでも使えます。(mac用もあります) ※VirtualBoxとは 仮想化ソフトウェアの一つ。使用しているPCの中に、仮想的なPCを作成して、他のOSをインストールして操作することができます。 ToolBoxの中に、kitematicという、GUIからDockerを操作できるアプリケーションが一緒に入っていますので、今回はこちらを使っていきます。 インストール手順 mac版とwindows版がありますが、私はwindowsなので、windows版をダウンロードしました。 インストールしていきますと さっそくつまづきました。こんなエラーがでることもあります。 よく読むと最後にこんなことが、、 This computer doesn’t have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory, 原因は、仮想化支援機能が有効になっていないからでした。 設定されていない方は、BIOSメニューから有効にする必要があります。 ※BIOS(バイオス)とは、PCのマザーボードに搭載されているプログラム。PC起動時に、F2を押したりすると出ます。(製品によってキーが異なります) ※(追記)タスクマネージャでも出来るみたいです。 こんな感じで、有効にしてあげるといいかもしれません。 気を取り直して、次に進みます。 うまくいくと、こんなかんじでDocker Hubのログイン画面が表示されます。 ※Docker Hubとは、Dockerイメージを共有するためのWebサービスです。Docker Hubのリポジトリを使って、チームで作成したイメージを共有したりできます。Dockerイメージとは、OSとアプリケーションがセットになっているテンプレートのことです。 右下のボタンから、スキップしても大丈夫です。 次にいくと、おすすめのDockerイメージが表示されます。 DBだと、postgreSQL、MySQL、mongoDB、mariaDBなどあります。(2016/2/2時点) ここまでで、インストールは完了で、コンテナ作成準備ができました!あっというまですね! コンテナ作成手順 次に、コンテナを作成していきます。 ※コンテナとは 分離された空間を意味していて、コンテナごとに異なるOS環境を作り出すことができます。ひとつのPCで、複数のOS環境を構築できるので、自分のPCのOSに依存しないのが良いですね。 それぞれのイメージについている「CREATE」ボタンを押下すると、コンテナが作成されます。 今回はMySQLのコンテナを作成します。 作成すると、最初はrootのパスワードを設定してくださいと言われます。 パスワードの設定もGUIから可能です。 右上の「Setting」ボタンから、rootのパスワードを設定して保存します。(今回はrootにしました。) すると、いい感じに立ち上がります!やりました! いい感じに立ち上がったところで、シェルから接続をしてみます。左上の、「EXEC」ボタンを押します。 こんなかんじのシェルが立ち上がりますので、 MySQLの接続情報を書いて、接続すると、、、 無事!接続できました~!! まとめ インストールからコンテナ作成までGUIで出来るってすごいですね。 簡単なので、エンジニアではない方でもインストールできちゃいそうですね。 次は、テストデータをいれたり、コンテナ同士を連結させたりして動かしていきたいです。
アバター
はじめまして。メディア開発本部の榎本です。 近年、HTML5のCanvas, WebGLなどのWeb技術でのゲーム開発に向いた技術が増えて、Webブラウザ向けのゲーム開発が盛り上がりを見せています。 しかし、それに合わせて、JavaScriptによるゲーム開発フレームワークも乱立し、正直どれを選べばいいか迷ってしまうほどです。 今回はそのたくさんあるJavaScriptのゲーム開発フレームワークから Phaser(フェイザー)というフレームワークを使ってゲーム開発の基礎を学んでいきたいと思います。 Phaserとは Phaserとは何か Phaserとは、Pixi.jsをコアにして、サウンドや衝突判定や物理演算などを追加した2Dゲーム開発フレームワークです。 Phaserの主な特徴 オープンソース(MITライセンス)で開発されている オープンソースで開発されているので、すべてのコードを見ることができ、バグなどがあっても自分で修正することも可能です MITライセンスという『著作権を表示すれば、制限なく無償で利用出来る』というライセンスで提供されているので、商用利用にも一切の制限なく利用できます 豊富なサンプルやチュートリアル 公式サイト に数多くのサンプルコードがあります 公式以外にもたくさんのチュートリアルが公開されています Phaser環境の構築 WindowsやMacでの環境構築は原因不明のエラーが出るなど毎回骨の折れるものです。 今回はさくっと環境を作りたいので、『 Ruby on Railsチュートリアル 』でも紹介されている Cloud9 という素晴らしいクラウドIDEサービスを使って進めていきます。このIDEには最初からテキストエディタ、ファイルブラウザ、コマンドラインターミナルもしっかり用意されてあります。 クラウド開発環境を利用するための手順は次のとおりです。 Cloud9 でユーザー登録 (無料) を行います。 [Go to your Dashboard] をクリックします。 [Create New Workspace] を選択します。 下記図に示したように、「phaser-tutorial」(「phaser_tutorial」にしないようご注意ください) というワークスペース名を入力し、[public] を選択し、HTML5のアイコンを設定します。 [Create workspace] をクリックします。 次に、実際にコーディングしたページの確認方法は次のとおりです。 確認したい html ファイルを選択した状態で、画面上部のツールボックスの[Preview]をクリックします。 [Live Preview File]を選択します。 画面右部に下記図のような画面が出てきます。(ここでも確認できますが、個人的に別タブで確認したいので次の手順も踏みます) 下記図に示した、[New Window]ボタンをクリックします。 ゲーム開発の前に不要なファイルを削除して、新しく index.html ファイルを作成します。 デフォルトのファイルを右クリックで選択して[Delete]をクリックします 新しくファイルを作成したいディレクトリを右クリックで選択して[New File]をクリックします index.html という名前でファイルを作成します まとめ これでPhaserでゲーム開発を行う準備ができました。 実際のゲーム開発については次回以降、扱っていきますので、どうぞよろしくお願いします。
アバター
こんにちは。エンジニアの西脇(@yasuhiro1711)です。今日はニュースであふれているSSL、HTTPS周りのお話を書きます。 Google検索でhttpsサイトが優先的にインデックス! 先日Google ウェブマスター向け公式ブログにて、検索エンジンによるインデックスがHTTPSサイトを優先して登録をするとアナウンスがありました。 Google ウェブマスター向け公式ブログ: HTTPS ページが優先的にインデックスに登録されるようになります これは、今後のSSL化への流れの中で大きな変化となりそうです。一気に小企業サイトや個人ブログなどでSSL化が進むでしょう。SEO界では大きな変化です。しかし、SSL化する時の悩みといえばSSL証明書のコストです。特に個人の場合、SSL証明書にまでコストをかけるのは、、、という声もありそうです。 そこで今日はそんな悩みを将来解決するかもしれない取り組みで、SSL証明書を無料で発行できる「Let’s Encrypt」を利用してサイトをSSL化してみたいと思います。 Let’s Encrypt とは何か? Let’s Encrypt とは、無料で自動化された、オープンなCA局で、 Internet Security Research Group (ISRG) が主導で進めているものです。このオープンCA局では、SSL証明書の発行を無料で、自動に、利用することができます。運営は、AkamaiやciscoやMozillaの専門家を始め、Facebookもスポンサーについています。そして、先日までクローズドだったLet’s Encryptが、12/3にPublic Beta版となり誰でも利用することが可能となりました。おめでとうございます! Let’s Encrypt でSSL証明書を発行、設置してWEBサーバに設置する Let’s Encryptは現在、様々なウェブサーバーのプラグインに対応しています。apache、standalone、webroot、manual、nginxなどが代表的なプラグインです。これを利用して証明書の取得からインストールまでが簡単に可能となっています。 今回は、プラグイン整備が進んでいるUbuntu14のApacheでテストしてみます。 Let’s Encrypt クライアントのインストール ※ 以下を実行すると、レポジトリ登録とパッケージがインストール・アップデートが自動で行われてしまいます。これは、既存環境だと非常に危険ではあるので、注意が必要です。 ※ CentOS6の場合は、EPELレポジトリの登録が事前に必要です。 クライアントインストールは以下のコマンドで進めます。 $ git clone https://github.com/letsencrypt/letsencrypt $ cd letsencrypt $ ./letsencrypt-auto --help 以下のようなhelp内容が表示されれば完了です。 The Let's Encrypt agent can obtain and install HTTPS/TLS/SSL certificates. By default, it will attempt to use a webserver both for obtaining and installing the cert. Major SUBCOMMANDS are: (default) run Obtain & install a cert in your current webserver certonly Obtain cert, but do not install it (aka "auth") install Install a previously obtained cert in a server revoke Revoke a previously obtained certificate rollback Rollback server configuration changes made during install config_changes Show changes made to server config during installation plugins Display information about installed plugins Choice of server plugins for obtaining and installing cert: --apache Use the Apache plugin for authentication & installation --standalone Run a standalone webserver for authentication (nginx support is experimental, buggy, and not installed by default) --webroot Place files in a server's webroot folder for authentication OR use different plugins to obtain (authenticate) the cert and then install it: --authenticator standalone --installer apache More detailed help: -h, --help [topic] print this message, or detailed help on a topic; the available topics are: all, automation, paths, security, testing, or any of the subcommands or plugins (certonly, install, nginx, apache, standalone, webroot, etc) Let’s Encrypt クライアントの使い方 プラグインを利用することでとても簡単に操作ができます。今回は、Debian環境(Ubuntsu)のApache2.4で利用すべく、–apacheというプラグインを使います。以下のコマンド一発です。 ./letsencrypt-auto --apache もちろん、DNSを作業サーバに向けておかないとこの先進まないので注意してください。 コマンドを実行すると、以下のようにTUIが立ち上がります。 今回は、サーバネームも登録していなかったので、入力を促されます。 続いて、利用したいドメインを聞かれます。 サービスへの同意を求められます。 オプションでhttpsだけにするのか聞かれます。 最終的に以下のような出力で完了すれば、証明書の登録と設定が完了しています。 IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/aaa.xxxxxx.net/fullchain.pem. Your cert will expire on 2016-03-17. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - If you like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le 簡単すぎてびっくりしてしまいます。 ブラウザで確認 早速ブラウザから確認をしてみると、httpsで通ることが確認できますね。すごいです。しかし鍵マークが不十分になっていることがわかると思います。せっかく SSLになっているのに残念です。 詳細をみると、「このウェブサイトの識別情報が Let’s Encrypt Authority X1 によって確認されました。証明書の透明性に関する情報がサーバーから提供されませんでした。」となっています。 これは証明書がCT技術(Certificate Transparency)に対応していないためです。 調べてみると、Let’s Encryptのapacheプラグインの場合、まだCT機能までが盛り込まれていないようです。 参考: https://community.letsencrypt.org/t/will-you-support-certificate-transparency/222/4 Nginxの場合は nginx-ct を利用して、ソースインストールしたNginxにLet’s Encryptの –nginxプラグインを利用することで、簡単にCT導入もできる模様です。今すぐ、Let’s Encryptの証明書を利用してサイト運営するなら、このパターンでしょう。 今後のリリースに大いに期待です。 SSL証明書は90日間有効 Let’s Encryptの仕組みで、Let’s Encrypt発行のSSL証明書は90日間有効です。90日で期限が切れるので、その前にアップデートしなければいけません。90日と聞くと「短い!」「無料だからか?」と思うかもしれませんがそうではありません。webの世界で90日は新しい考え方ではなく、TLSトランザクションの約29%はこの周期となっています。これは、キーの流出やセキュリティ不具合などでアンセキュアな状態を作り出さないためとしています。 90日という周期なら、なおさらシンプルに自動でアップデートできるようにしておきたいものです。今でもLet’s Encryptにはシンプルにアップデートする仕組みがありますが、今後さらに簡素化されていくのだと思われます。 参考: Why ninety-day lifetimes for certificates? – Let’s Encrypt – Free SSL/TLS Certificates まとめ Let’s Encryptは簡単すぎてしまいびっくりしました。ただし、プラグイン開発はまだこれからなので、個人ブログ運営者など非エンジニアの方が導入するにはまだ難しい現状ですね。されどLet’s Encryptの今後がとても楽しみです。オープンで自由でセキュアなSSLの世界が早く実現して欲しいですね。
アバター
こんにちは。初めまして。エンジニアの西脇(@yasuhiro1711)です。 ウエディングパークでは、リーダーでインフラ分野をメインでやっています。 本日よりウエディングパークでもTechブログを始めたいと思います! 「ウエパで作り上げてきているものをもっと世の中に共有したい。」 「エンジニアのアピールをしたい。」 「ウエパの中を見て欲しい。」 そんな思いから、自分たちが作り上げてきサービスや、技術、日常生活などを素直に表現する場としてブログを選びました。試行錯誤を重ねて、これから沢山のことを発信していきたいと思いますのでよろしくお願いします。 ウエディングパークは何をやっている会社なのか? 最初なので、会社とサービスを少し。 弊社はサイバーエージェントグループの一員として、ウエディングドメインの事業を行っています。以下のようなサービスを運営しております。 ウエディングパーク Photorait Ringraph どれもIT技術を使って、結婚を幸せにしていく事業です!これからウエパの会社の中のこと、組織のこと、エンジニアの働き方や仕事内容などを各エンジニアが記事をアップしていく予定です。改めて、どうぞこれからよろしくお願いいたします!
アバター