DovecotのIMAPサーバにRoundcubeでアクセスできるまで

この記事は GMOペパボ Advent Calendar 2018 - Qiitaの15日目の記事として書いてます。

業務においてたまにメールサーバ周りを調査することがあるのですが、今回メールサーバ側のインフラの基礎的な知識の学習のためDovecotを用いたIMAPメールサーバを構築し、そこにRoundcubeというWebメーラーでアクセスできるまでをやってみました。
技術的に調査したことなどは後日別でまとめて公開できればなと思っています。

また、普段はChefというRuby製のツールでインフラ構築していますが、今回はシュッとItamaeを使ってやってみます。こちらもRuby製のツール。

ゴール

  1. Dovecotを使ったIMAPサーバを構築
  2. LAMP環境を作りRoundcubeが動くサーバを構築
  3. RoundcubeからIMAPサーバにログインしてメールボックスが見れるようになる

f:id:litencatt:20181215191216p:plain
Roundcubeにログインした画面

TL;DR

試してみたい人向けに今回書いたItamaeでサーバ構築したコードのレポジトリは以下にありますので、Setup方法に沿ってコマンド叩けばできる…はず(汗) github.com

Dovecot

Linux/UNIXライクOS上で動作するIMAP/POP3サーバ
Dovecot

Roundcube

OSSPHP製のWebメーラーソフト
roundcube.net

構築環境情報

IMAPサーバの構成

  • Dovecot 2.2.10
    • 今回は動作確認が目的なので平文のパスワードで入れるような認証設定にしています

Roundcubeサーバで動くソフト

  • PHP 5.6.39
    • あと約2週間でEOL…
  • Apache 2.4.6
  • MySQL 5.6.42
  • Roundcube 1.3.8
    • 公式に全部入りのtarなどが配布されているのでそちらを使用しています

※ かなり手を抜いていて、各種ソフトのバージョンはyumでシュッと入るバージョンを使っています

手順

まとめ

  • Dovecotは今回で言うRoundcubeのようなメールクライアント(MUA)とやり取りする役割(MRA)なため、この環境だけではまだメール送信できません
    • メール送信するにはPostfixなどを入れる必要があります
    • そのあたり後日対応する予定
  • 今年はわりと記事的にはあっさりした感じですが後日内容を増やしていければと思っています(バタバタ)
  • あとはおまけでRainloopという似た感じのWebメーラークライアント用のレシピもあったりします

Hashieについて少しだけ調べた1

Hashieとは?

Hashを拡張して便利にしてくれる言わずと知れた有名なgemですね。

github.com

使用例

[5] pry(main)> mash = Hashie::Mash.new
=> {}
[6] pry(main)> mash.name?
=> false
[7] pry(main)> mash.name = "Taro"
=> "Taro"
[8] pry(main)> mash.name?
=> true
[9] pry(main)> mash.name
=> "Taro"

Mash以外にも色々実装されている

  • Hashie::Dash
    • A Dash is a 'defined' or 'discrete' Hash...
  • Hashie::Trash
    • A Trash is a 'translated' Dash where the keys can be remapped from a source hash.
  • Hashie::Clash
    • A Clash is a "Chainable Lazy Hash". Inspired by libraries such as Arel
  • Hashie::Rash
    • Rash is a Hash whose keys can be Regexps, or Ranges, which will match many input keys.

なんで調べていたのか?

APIクライアントの依存gemのversion upのためにこの辺いろいろ調べていた次第でした。

自分の周りでよく見る使われ方としてはAPIクライアント内でレスポンスをHashie::Mash.newに渡してアクセスしやすくしているのですが、
3.5.0からは(執筆時点での最新リリースver.は3.5.7)built-in methodを上書きしている場合はlogger出力されるようになっていました。

Add a logging layer to address common issues by michaelherold · Pull Request #381 · intridea/hashie · GitHub

今日はここまで。

OAuth・OPICについてのまとめ

一番分かりやすい OAuth の説明 - Qiita

一番分かりやすい OpenID Connect の説明 - Qiita

www.slideshare.net

OAuthまとめ

OPIC(OpenID Connect)

  • OpenID Connect 入門
  • 認証 + 認可(OAuth2.0) + 属性取得プロトコル
    • 基本的には認証技術(Authentication)
      • id_tokenとaccess tokenを発行してもらう
    • さらに属性取得機能もある
      • 属性: ユーザー情報など
  • 登場人物
    • RO(Resource Owner)
      • OPからID token, access token発行許可を求められる
      • その際、本人確認情報の提示を求められる
    • Client
      • OPへID tokenとaccess tokenを要求する
    • OpenID Provider(&& Authorization Server)
      • ROへ発行許可を求める
      • ID token, access tokenを生成しClientへ発行する

SAML

  • Security Assertion Markup Languageの略称であり、OASISによって策定された異なるインターネットドメイン間でユーザー認証を行うための XML をベースにした標準規格
  • SAMLに対応したSSOの仕組みを、SaaSの形で提供しているのが「OneLogin」

実装例

爆速ッ!! gem omniauth-google-oauth2 で認証させる

github.com

https://github.com/litencatt/railstutorial5/pull/7github.com

参考記事

オッス!オラ認証周りをまとめてみた - どんまいこのネタ帳

単なる OAuth 2.0 を認証に使うと、車が通れるほどのどでかいセキュリティー・ホールができる | @_Nat Zone

非技術者のためのOAuth認証(?)とOpenIDの違い入門 | @_Nat Zone

SafariのリーディングリストをPocketへエクスポートする

情報収集の手段としてiPhoneからTwitterを使って行っています。
ちなみにfeatherというアプリを使っています。

feather for Twitter

アプリの機能の一つにSafariのリーディングリストへの追加がアプリ上から行えて便利なのですが、自宅のMacの方でもリーディングリストの記事を見ようとした時に、MacではChromeがメインブラウザなのでSafariをいちいち開くのが面倒なのでPocketに移行しようと思いました。

getpocket.com

そうした際に、今までSafariのリーディングリストにたまった400件ほどのリストをどうやってPocketに持っていこうか色々探した結果、こちらのツールを見つけました

github.com

2年くらいメンテされてなさそうでしたがなんとか使えましたw

使い方はリンク先にもあるように下記の手順で行います

  1. npm install -g reading-list-to-pocket
  2. 開発者用のページからPocketのアプリを作成してconsumre keyを取得する
    • アプリ名はなんでも良い
    • 下記のようにaddmodifyの権限設定が必要 f:id:litencatt:20180211150939p:plain
  3. reading-list-to-pocket --consumerKey <YOUR_APP_CONSUMER_KEY>を実行

実行するとこんな感じの表示がブラウザで表示され、f:id:litencatt:20180211150703p:plain

CLI上では下記のように表示されます

Now opening a browser to authenticate with Pocket...
Authorized successfully...
Syncing 464 items...
syncing done...

Pocketのマイリスト見に行くとリーディングリストにあったリンクが登録されていそうでした f:id:litencatt:20180211151244p:plain

Herokuへのdeploy方法を思い出す

1年ぶりくらいにHerokuにdeployしてみようとして色々詰まったので調べたことを残しておく。

ほぼ下記記事の内容で事足りました。
[Ruby] RailsをHerokuへデプロイする時の7つの注意事項 [Heroku] - Qiita

1年以上前にRailstutorialでHeroku使ったきりだったし、
開発ではMySQL使ってたのでrails_12factorとかひつようだったか?🤔と思いつつ、なんとかdeployまで完了。

下記のようなコマンドでmaster以外のbranchもdeployできるみたいだったがどうなんだろう…

$ git push heroku topic-branch-name:master --force

PC上で快適にEPUB形式データを読む

iOSバイスをお持ちの方はiBooksという素晴らしい電子書籍リーダーアプリが標準でインストールされており、スクロール表示でWebページを見るように縦or横スクロールさせて電子書籍を読むことができてとても快適です。

Mac版も同様にスクロール表示機能があるかと思いきや、まだ未対応の状況です。

 

長らくMac環境でEPUB形式のデータをスクロール表示させるためのアプリなどを探していたのですが、ようやく最近見つけたアプリをご紹介します。

 

1. Readium

現時点ではこれが表示の滑らかさなどで一番良さそうなアプリです。

Readium - Chrome ウェブストア

 

使い方は下記がわかりやすそうでした。

gihyo.jp

 

ちなみに技術評論社電子書籍EPUB形式もあるためよく購入しています。

 

2. BiB/i

Readiumに比べて若干読み込みやスクロールがもっさりしていますが、

ローカルにブラウザ上で動作するので英語の電子書籍など読む場合はすぐGoogle翻訳使えるので便利です。

また、GitHub上にコードが公開されていました。

bibi.epub.link

 

3. Murasaki

OS XEPUBリーダとしてMac App Storeに有料公開されているアプリ。今回試してはいません。

そして開発は2015年で止まっている感じでした。

Murasaki — The Scroll-based EPUB Reader for OS X

Murasaki ver. 2.3をリリースしました — Genji App Blog