まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

2015/03

SSL のオレオレ自己署名証明書を、ワイルドカード対応で作成する手順です。CentOS 上での作業を前提で説明します。
ワイルドカード対応といっても、普通のオレオレ証明書(?)の時と比べてそんなに大きく変わるわけではありません。

CentOS のターミナルを開いて、以下を順次実行していきます。
なお、今回は "yellowmix.net" というドメイン向けのワイルドカード対応証明書を作る前提で説明します。

まずは普通に秘密鍵を作成:
# openssl genrsa -out server.key 2048

次に CSR (署名要求)ファイルを作成、ここでホスト名をワイルドカードで指定します:
# openssl req -new -key server.key -out server.csr
  :
  :
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Chiba
Locality Name (eg, city) [Default City]:Funabashi
Organization Name (eg, company) [Default Company Ltd]:YellowMix Ltd
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:*.yellowmix.net
Email Address []:

  :
  : (残りは全て Enter キーで)

最後に証明書を作成します。この例では約10年間(3653日)有効な証明書を作成しています:
# openssl x509 -days 3653 -in server.csr -out server.crt -req -signkey server.key

ここまでの作業で server.key, server.csr, server.crt の3ファイルができているはずです。

SSL を使ったウェブページの動作確認程度であればこれで充分です。
ワイルドカードで作ったので、ホスト名(****.yellowmix.net の **** 部分)が何であってもこの証明書1つで使えるはず。


次回は、作成したこのワイルドカード対応 SSL 証明書を IBM Bluemix 環境で使ってみます。


(2015/Feb/08 追記 続きはこちら)
IBM Bluemix を独自ドメインで使う(SSL編)

 

リアルタイムに商品の最安値を調べるサービス「ねっぴ」を開発・運営しています:
ねっぴ(http://neppi.co/) 


サービス内のカテゴリを展開したり、検索窓から製品を検索して商品を絞込むと、その商品の販売を取り扱っていそうなウェブサービスを探し、取り扱っていた場合はそのサービス内での最安値を探し、最終的には価格順にソートして「どこで買うと安いか」を表示してくれる(クリックすればそのまま購入ページにいける)、というサービスです:
2015030500


有名な価格比較サイトと同様のサービスと理解いただくのが分かりやすいと思います。ただ上記のようにそのサイトもねっぴでは比較対象の1つと考えていて、必ずしもそのサイトが最安値を提供しているわけではないことがわかります。ねっぴは「その場で」&「リアルタイムに」価格を検索して比較する点が異なります。


サービスの使い方はこちらに簡単なオンラインヘルプを用意しています。ユーザートラッキングなどを目的とはしていないため、面倒なサインアップなど不要で、誰でも利用できます:
「ねっぴ」の使い方


本ブログエントリでは、「ねっぴ」の環境や技術的な内容について紹介します。
参考までに、こちらは以前に某LTでねっぴと試作段階の TweetsMapper について紹介した資料です:
ねっぴ on IDCF


上記資料内でも触れていますが、元々ねっぴは自宅サーバー環境で開発・動作確認等を行い、テスト運用を経て何度かの引越を経験し、現在は IDC フロンティア 様の IDCF クラウドを利用して運用しています。


基本構成としては一般的(?)な Linux + Tomcat + MySQL で、高速化のために一部 memcached を併用しています。 データベースの日次バックアップには Amazon S3 互換の Object Storage を使っています(参考)。 IDCF クラウドのサーバーインスタンスにはスワップメモリ領域が用意されていなくて不安(というか不安定)だったので、Linux の起動時にスワップファイルを作成して利用するようにしました(参考)。 更に IDCF を通じて利用できる Mackerel 監視サーバーを有効化するため、エージェントを導入しています:
2015030502


ここまでの環境を IDCF クラウドの light.S1 サーバー1台(!)でまかなえています。ディスクは ROOT の 15GB のみで追加なし、Mackerel は IDCF を通じて使う場合の特別プランが用意されていて、追加料金なしでもそれなりに使えます。Object Storage とネットワーク I/O は無料枠の範囲内で収まっています。

・・・というわけで、この「ねっぴ」の環境はバックアップや監視まで含めて light.S1 サーバーの月額最低料金である 500 円で実現している(!)、ということになります:
2015030501


うーん、我ながら俺って優秀やりくり上手でいい主夫になれるかもw まあやりくり上手というよりは「無茶」なだけかもしれませんけど。。。

ただこの環境を IDCF の light.S1 サーバー1台で提供している背景についても触れておく必要があります。
もともと IDCF クラウドに移る前は別業者の同価格帯のクラウド(というか VPS)を使っていました。サービスとして公開できていましたが、開発環境をそっくりそのまま公開した感じで、パフォーマンスレベルなどは二の次、という感じでした。開発者視点で考えると、そもそもどのレベルを求めるのか?という話にもなってしまい、現在もそこまでしっかり考えて公開しているわけではないのですが、当時は単に「動いたものをそのまま公開した」というレベルでした。その時点ではバックアップはしていません。監視もシェルスクリプトレベルでした。

このサービスは「リアルタイム価格検索」を行うことと、商品マスターをクローリングするという特性上、ネットワークのバックボーン性能がサービス性能に影響する度合いが大きいという特徴があります。実はここだけで見ると、自宅ネットワーク内のサーバーで運用する、という選択肢もありました。

その頃、当時仕事上で携わっていた業務で IDCF クラウドを使うことになり、light.S1 インスタンスが500円/月で提供されていること、ネットワークバックボーンに関しては非常に高いコストパフォーマンスを発揮してくれることが魅力でした。 


とはいえ移行を考えると、上記のように IDCF クラウドにはスワップメモリがないという問題があったり、当時使っていたクラウドの方がディスク容量を多く提供してくれたり、という比較要素もありました。一方で IDCF クラウド側にも無料枠で提供されている Object Storage や Mackerel といったプラス要素があり、結局は何をどう比較するか、という判断になりました。まあスワップメモリに関してはディスク上にファイルとして用意するという回避手段があること、ディスクは多いほど嬉しいけどサービスを展開する上で困るほど少なかったわけではないことが分かり、そして何よりもサービスの肝になるネットワーク性能が自宅ネットワークをも上回っていた、という違いが決め手でした。 これがディスク容量が問題になるようなケースだと結局月額料金の差になってしまうため違う判断になる可能性もありましたが、このねっぴに関してはほぼ同額の比較になりました。

結局、現時点でこのサービスを運営する先としてコストパフォーマンスでのベストは何か、という最終判断として IDCF クラウドを選んだ、という結論です。


おまけですが FAQ の1つをここに書いておきます。サービス名の「ねっぴ」は「較」の「値比」を無理やり発音した結果です。



 

アプリケーションサーバーに PHP を使い、データベースサーバーに MySQL を使っている多くのケースで phpMyAdmin が同時にインストールされているのではないかと思っています。自分もその条件で使うサーバーがあったので phpMyAdmin をインストールして、いざアクセス! しようとしたら「MySQL を 5.5.0 以降にアップグレードしてください」というエラーメッセージに遭遇しました:
2015030501


これは phpMyAdmin のバージョン 4.2 以降では PHP 5.3 以上、MySQL 5.5 以上が動作要件になっていたのでした。CentOS6 の yum でデフォルトインストールされる MySQL は MySQL 5.1 なので、このエラーメッセージが表示されたものだと思います:
2015030502



で、これを回避するには MySQL のバージョンを上げるしかないか・・・ ということはありません。動作要件の MySQL が 5.1 でもよかった頃の phpMyAdmin バージョンを使う、という手もあります。具体的には phpMyAdmin 4.0.X 系は PHP 5.1 以上&MySQL 5 以上が動作要件なので、この最新版をダウンロードし、これをセットアップして使うという方法でも回避できます:
2015030503


phpMyAdmin 4.0.10.8 をダウンロード&セットアップして、PHP と MySQL はそのままで phpMyAdmin にアクセスすると、無事に phpMyAdmin のトップページが表示されました:
2015030504

MySQL ではなく MariaDB の場合も、対応する MySQL のバージョンによっては同じエラーになると思います。お気をつけて。



 

最近のクラウド環境では、初期状態で SSH(22) のみファイアウォールを通す設定になっているケースが一般的です。HTTP(80) を通したい場合は別途設定が必要ですが、SSH だけは無条件に使える設定になっている、という意味です。まあ HTTP サーバーを導入するにしても SSH が使えると便利ですよね。

この SSH サーバーの動作ポート番号を 22 番から別の番号へ変更したい場合の設定は /etc/ssh/sshd_config を変更します:
#Port=22
となっている箇所のコメントを外して、例えば
Port=10022
のように変更します。これで再起動すると SSH(SFTP) は 10022 番ポートで稼働します。










 

世のノーツ開発者の興味が XPages に寄っている中で、1世代前の技術情報になることをご容赦ください(苦笑)。

久しぶりに触ったノーツに、久しぶりにプラグインをインストールしようとしてハマりました。何言っても言い訳になることはわかった上で、でもこの業界で1年半のブランクは大きいようです(苦笑)。


ノーツ(IBM Notes) はバージョン8から Eclipse RCP(Rich Client Platform) をベースとしたクライアントに生まれ変わり、Eclipse 向けに提供されているプラグインをノーツにもインストールできるようになりました。そもそも Eclipse は開発環境なので、世に出ているプラグインは開発環境向けのものが多いです。それもあって、プラグインの互換性は100%ではないのですが、Eclipse のプラグイン開発技術やスキルを使ってノーツの機能拡張もできるようになった、というものでした。

Eclipse の場合、プラグインをインストールしようとするとメニューの Help から Install New Software を選んで・・という手順になります:
2015030101


ノーツの場合はその方法からして異なるのですが、実はそれ以前に「そもそもプラグインインストールをメニューに表示するための準備」が必要でした。

それが
 (ノーツをインストールしたディレクトリ)/framework/rcp/plugin_customization.ini ファイルに
 com.ibm.notes.branding/enable.update.ui=true の一行を追加する
というもの。これをしてノーツを再起動すると、メニューの File - Application からインストールができるようになる・・・ はずだったのです。

でも試してみたらこんな感じ。File - Application までは表示されるのですが、その先にインストールの選択肢がありません:
2015030102


あれ?これは何?? と驚きましたが、どうやらノーツのバージョン9からこの部分の仕様が変更されていた模様です。詳しくはこちらの Technote にかかれていましたが、この設定に加えてランタイム設定の com.ibm.notes.branding.prefs ファイルから一行削除する必要がありそうでした:
[ファイル] - [アプリケーション] - [インストール] メニューが plugin_customization.ini ファイルで設定しても表示されない


ここまでの設定をしてノーツを再起動すると、無事にインストールメニューまでが表示されるようになりました:
2015030103


うーん、しばらく離れていて気づきませんでした。いつの間に・・・

この方法で UpdateSite の URL を指定して Eclipse プラグインをインストールすることができます。

またノーツ用の拡張機能を使って Eclipse プラグインを開発することもできますが、その手順の解説がどこかにないかなあ、と探していたら、こんなページを見つけてしまいました。今となっては懐かしくもあり、恥ずかしくもある技術解説ページです:
Lotus Notes 8 プラグインでグラフィックコンテキストを利用する



で、個人的にこんなの(画面右)を作ってたりします:
2015030104

このプラグインはいずれ公開したいとずっと思っていて、でもそれには公開 Domino サーバーが必要で、さてどうしたものか・・・と悩んでいたのですが、最近になって IBM Bluemix を使う方法を思いつきました。いずれ公開しますのでお楽しみに。なお、その際はこのページに書かれた設定も必要になると思うので、その時にまた参照してください。




このページのトップヘ