Azure

Movable Type 7をAzure Web Apps で使う方法 - Perl導入編

はじめに

今回の記事はAzure Advent Calendarに投稿した記事になります。

また、過去記事(Microsoft Azure Advent Calendar 2016 ネタ)として立ち上げてすぐ利用する利用を書いています。

今更、Perlなんてなどと思うかもしれませんが一定の需要はあります(たぶん)
そうMovable Typeです。Movable Type 導入のための前段階としてこの記事を書いています。
2回に分けて書いていきます。

  • Perl導入編
  • Movable Type導入編

1回目はPerl導入編を解説していきます。
Perlの導入から必要モジュールのインストールまで書いていきます。

Strawberry Perlの導入

現在、Windowsベースで利用できるPerlはStrawberry Perlの一択だと考えています。
Active Perlという選択肢もありますが、CPANがデフォルトで利用できないという問題が発生します。
インストールすることも可能ですがコンパイルする必要があります。

今回はStrawberry Perlを利用します。

記事は古いですが、projectkuduの記事を参考に進めています。

Web Appsのkuduを利用しインストールを進めます。
前提の環境としてWeb AppsをWindows、PHP7.3で立てておきます。

CPANを利用して必要なモジュールも導入していきます。

インストール

Strawberry Perlをインストールしていきます。

高度なツールからkuduを立ち上げます。

公式で検証済みのPerl 5.30 32bit(Portal editionでZIPじゃないので注意)をダウンロードします。

Debug consoleからCMDを開きます。
perlをインストールするディレクトリ perl を作成します。

C:\home>mkdir perl

作成したディレクトリに移動しダウンロードしたZIPファイルをドラッグしてアップロード&解凍します。

IISでFastCGIを利用するためFCGIをインストールします。
(MT7がFastCGIで動かないためインストールに必須ではありません)

FCGIをいうディレクトリを作成します。

C:\home\perl\perl\lib>mkdir FCGI

FCGI-IIS-0.05.tar.gzをダウンロードします。

解凍後、作成したディレクトリにIIS.pmをアップロードします。

以上でインストールは完了です。

設定

perlをCGIとして動作させるにはハンドラーマッピングの設定を行います。
Web Appsから構成を開き、パスのマッピングを開きます。

設定では*.plの拡張子のものをFCGIとして動作させるという設定です。

ノーマルのCGIとして動作させることも可能です。
(MT7ではこの方法のみ動作を確認しています)

<?xml version="1.0"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="CGI"
           path="*.cgi" verb="*"
           modules="CgiModule" scriptProcessor='C:\home\perl\perl\bin\perl.exe "%s" %s'
           resourceType="Unspecified" />
    </handlers>
    <cgi createProcessAsUser="false" />
  </system.webServer>
</configuration>

次に動作確認です。

動作確認

hello worldを表示させます。

hello.pl

print "Content-type: text/plain\n\n";
print "hello world!\n";

これをメモ帳などで作成してC:\home\site\wwwroot へアップロードします。
あとはアクセスして表示されることを確認します、

FCGIの場合、ノーマルなCGIの場合で表示できれば問題ないです。

CPANモジュールをインストール

次にCPANモジュールをインストールする方法です。

Web appsでCPANモジュールをインストールする場合には、最初にパスを通す必要がありますが、解凍したPerlの中にそれ用スクリプトがあるので実行します。

C:\home\perl>portableshell.bat

実行して完了です。

MT7では以下のモジュールが必要となります。

  • CGI
  • Image::Size
  • File::Spec (バージョン 0.8 以上)
  • CGI::Cookie
  • LWP::UserAgent
  • parent
  • HTML::Entities (バージョン 3.6.9 以上)
  • Scalar::Util

ここで重要なのはCPANではなくCPANMを利用する点です。
CPANを利用するとgmakeで失敗するケースがあります。

試しにImage::Sizeをインストールしてみます。
CPANMの本体はC:\home\perl\perl\bin>にあるので移動します。

C:\home\perl\perl\bin>cpanm.bat Image::Size

(大文字小文字区別します)

初回はDBを作成されたり少々時間がかかります。

完了後はインストールされたか確認します。

C:\home\perl\perl\bin>cpanm.bat Image::Size
Image::Size is up to date. (3.300)

再度、インストールコマンドを実行するとインストールのバージョンが確認できます。

同じように他のモジュールをインストールします。

DBD::mysqlをインストール

外部DBとしてmysqlを利用する場合、通常はDBD::mysqlをCPANでインストールする必要がありますがバグのせいか動作しません。

これは解決方法がStackOverflowに記載されています。

C:\home\perl\c\bin\libmysql_.dllをc:\home\perl\perl\vendor\lib\auto\DBD\mysqlにコピーします。

C:\home\perl\c\bin>cp libmysql_.dll c:\home\perl\perl\vendor\lib\auto\DBD\mysql

web apps を再起動します。
以上でMySQLにも接続できるようになるためAzure MySQLをMT7のDBとして利用できます。

おわりに

今回はPerlのインストール、モジュールのインストール、MySQLを利用できるようにするの3点です。
これでPerlを使って様々なことができると思います。

次回はMT7のインストールを行っていいきたいと思います。

-Azure
-,