LoginSignup
7
7

More than 5 years have passed since last update.

CentOS6.4上でMojolicious+WebSocket+SSL環境構築

Last updated at Posted at 2014-01-03

Perlをあまり使ったことがなかったので、メモ的に…

PerlとCPANのインストール

実際にはこれに加えてDBとかWebサーバとかも必要になるけど、まずは最低限ということで。

$ yum -y update
$ yum -y install perl cpan

CPANでインストール中の質問をデフォルトで答えるための設定

インストールしているモジュールが依存しているモジュールも一緒にインストールするか?という質問にyesで答えるための設定。
これをしておかないと、沢山のモジュールを入れるときは結構面倒くさい。

$ cpan
cpan> o conf prerequisites_policy follow
cpan> o conf commit
cpan> q

必要なモジュールをインストール

あんまり一気に入れるとうまくいかない場合があったので、少しずつ…

$ cpan -i CGI Cwd DBI Encode File LWP Mail::Sendmail Math::BigInt JSON
$ cpan -i Time::Local Time::HiRes Mojolicious
$ cpan -i Module::Build DateTime

ここまで構築したところで、WebSocketを使ったチャットプログラムのサンプルを動かしてみる。
参考:Mojolicious::Lite で WebSocket を使ったチャットを作る(現時点:2012年3月10日で動くコード)

$ morbo app.pl
[info] Listening at "http://*:3000".
Server available at http://127.0.0.1:3000.

無事に動いた。

暗号化

WebSocketで暗号化を行う際にはプロトコルがws://ではなくwss://となるので、予めソースの該当部分を書き換えておく。分かりやすくするためにポートも変更。

【変更前】
var ws = new WebSocket('ws://localhost:3000/echo');

【変更後】
var ws = new WebSocket('wss://localhost:3001/echo');

morboのオプションでポート指定して起動する。

$ morbo -l "https://*:3001" app.pl
IO::Socket::SSL 1.75 required for TLS support at /usr/local/share/perl5/Mojo/IOLoop.pm line 119

IO::Socket::SSLモジュールが無い、と怒られるのでインストール。

$ cpan -i IO::Socket::SSL
(中略)
cp lib/Net/SSLeay/Handle.pm blib/lib/Net/SSLeay/Handle.pm
/usr/bin/perl "-Iinc" /usr/share/perl5/ExtUtils/xsubpp  -typemap /usr/share/perl5/ExtUtils/typemap -typemap typemap  SSLeay.xs > SSLeay.xsc && mv SSLeay.xsc SSLeay.c
gcc -c   -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g   -DVERSION=\"1.55\" -DXS_VERSION=\"1.55\" -fPIC "-I/usr/lib64/perl5/CORE"   SSLeay.c
SSLeay.xs:153:25: error: openssl/err.h: No such file or directory
SSLeay.xs:154:27: error: openssl/lhash.h: No such file or directory

依存モジュールであるNet::SSLeayのインストール中に大量のエラーが発生して失敗。
そもそもOpenSSLが入っていないことが問題ということで、いくつか関連するものをインストールする。
参考:CPANでNet::SSLeayのインストールに失敗する時の対処法

$ yum -y install openssl-devel zlib-devel readline-devel
$ cpan -i IO::Socket::SSL
$ morbo -l "https://*:3001" app.pl
[info] Listening at "https://*:3001".
Server available at https://127.0.0.1:3001.

今度はうまくいった。
ブラウザからSSL版のページにアクセスし、無事にWebSocketの通信も動いていることを確認できた。

7
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7