ConoHaWING+CGI環境構築=perl,ruby,python,node=

node
スポンサーリンク

ConoHaWINGでCGI環境構築

レンタルサーバー(ConoHa WING )でCGI環境を作る際は幾つかポイントが有りますので確認しておきましょう。

.htaccessの追加変更

.htaccessの追加変更

Options +ExecCGI
AddHandler cgi-script .cgi .py .rb .jss .pl
.phpを入れるとServerErrorになります。

ここでは、node用CGIのファイル拡張子は「.jss」にしています。
勿論、「.js」を指定してもOKです。

プログラムファイルの設定

基本中の基本なのですが、結構やりがちなミスです。
特に改行コードがWindowsでは「CRLF」でLinuxでは「LF」Macでは「CR」になります。
「suexec policy violation~~End of script output before headers」エラーが出たらファイル設定を確認

ファイル文字コード:「utf-8(BOMなし)
ファイルの改行コード:「LF」Linuxサーバーの場合
ファイルの属性:「755」実行権を付与

 
ファイルを右クリック
属性変更をクリック

属性を「755」に設定して適用
エラー確認

perlCGIプログラミング

#!/usr/bin/perl
print "Content-Type: text/html; charset=utf-8\n\n";
print "<html>";
print "<body>";
print "<h1>パール ワールド!</h1>";
print "</body>";
print "</html>";

rubyCGIプログラミング

#!/opt/alt/ruby25/bin/ruby
print <<END
Content-Type: text/html; charset=utf-8

<html>
<head>
<title>CGI Test</title>
</head>
<body>
<h1>ルビー ワールド!</h1>
</body>
</html>
END
/opt/alt/ruby25/bin/ruby
ConoHaWINGの場合は、ConoHa プログラミング言語パス で確認出来ます。

pythonCGIプログラミング

pythonは、一手間かけないとエラーが出ます。「UnicodeEncodeError: ‘ascii’ codec can’t encode 」エラーがでたら、下記を追加しましょう。

import sys
import io
sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding=’utf-8′)
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding=’utf-8′)
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding=’utf-8′)
/opt/alt/python37/bin/python3
ConoHaWINGの場合は、ConoHa プログラミング言語パス で確認出来ます。
#!/opt/alt/python37/bin/python3
import sys
import io

sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')

print("Content-type: text/html; charset=utf-8\n")
print("<html>")
print("<body>")
print("<h1>パイソン ワールド!</h1>")
print("</body>")
print("</html>")

レンタルサーバーにnode.jsを入れてみる

レンタルサーバー(ConoHa WING )にnode.jsをインストールして「ナンセンス」と言われるCGIで使って見ましょう。

ConoHaWINGでSSHキーの作成

ネームタグは、分かりやすい物に変更して結構です。

SSHキーがダウンロードされます。お好きなフォルダに移動して下さい。

「ホスト名」「ポート番号」「ユーザー名」「ダウンロードしたKeyファイル」が必要です。

ConoHaWINGにPowerShellでアクセス

PowerShellを「Winロゴマーク+Xキー」⇨「Iキー(アイキー)」で起動して
SSHコマンドでアクセスします。

「ホスト名」:host111.conoha.ne.jp
「ポート番号」:8022
「ユーザー名」:a11223344
「Keyファイル」:C:\ssh\key.pem
の場合

ssh a11223344@host111.conoha.ne.jp -p 8022 -i C:\ssh\key.pem

でアクセスします。

SSHでnodeバージョン管理nvmとnodeをインストール

curl -o- https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash

Close and reopen your terminal to startと出ます。
「NVM_DIR」を「export」でセットして
「bash」で再起動
「nvm」を起動

export NVM_DIR="$HOME/.nvm"
bash
nvm

nvmが起動しマニュアルが表示します。

インストール出来るnodeのバージョン確認

nvm ls-remote

node最新バージョンインストール

nvm install node
nvm use node

node安定版インストール

nvm install --lts --latest-npm
nvm use node --lts

node,npmバージョン確認

node -v
npm -v

npmバージョンアップ

nvm install-latest-npm

インストール済のバージョンを表示

nvm ls

エイリアス設定を確認

nvm alias

CGIでnodeを使うための設定

nodeのインストール先を「which node」で確認

which node
~/.nvm/versions/node/v16.1.0/bin/node

ユーザーフォルダ(上の~部分)の確認

pwd
/home/a11223344

a11223344は各ユーザー名になります。
よってnodeのフルパスは

/home/a11223344/.nvm/versions/node/v16.1.0/bin/node

CGIの1行目(シバンshebang)は次のようになります。
シバンは、ファイルの1行目に無ければいけません。
#が1文字目と言う事です。

#!/home/a11223344/.nvm/versions/node/v16.1.0/bin/node

しかし、このままだと
「suexec policy violation~~End of script output before headers」エラーがでます。

「.nvm」の部分がドットから始ま(隠しファイル)っているためです。

そこで、nodeのシンボリックリンクを「/home/ユーザー名/bin/」にリンクします。

ConoHaでは、「/home/ユーザー名/bin/」にはPATHが通っている見たいです。

echo $PATH

しかし「~/bin」は無いと思うので「lsコマンド」で「bin」が無ければ作ってからリンクします。

mkdir ~/bin
ln -s ~/.nvm/versions/node ~/bin/node

これで、「/home/a11223344/bin/node/v16.1.0/bin/node」でnodeを起動出来ます。(v16.1.0は、nodeのバージョン各自変更して下さい。)
よって、CGIの1行目(シバンshebang)は次のようになります。

#!/home/a11223344/bin/node/v16.1.0/bin/node

nodeでCGIプログラミング

準備が整いました。「Node.js ワールド!」を表示させましょう。
標準出力は「console.log」を使います。
「Content-type」の最後の改行「\n」は、一つなのでPythonと同じですね。「console.log」に改行が含まれていると言う事です。

*node用CGIのファイル拡張子は「.jss」にしています。

#!/home/a11223344/bin/node/v16.1.0/bin/node
console.log('Content-type: text/html; charset=utf-8\n');
console.log('<h1>Node.js ワールド!</h1>');

アップロードしてください。
そして実行するのですが・・・

ここで、焦らずファイルの設定をもう一度確認しましょう。

ファイル文字コード:「utf-8(BOMなし)
ファイルの改行コード:「LF」LinuxServerの場合
ファイルの属性:「755」実行権限を与える

まとめ

今回はレンタルサーバーのConoHa WING でCGI環境を作りperl,ruby,python,nodeで動かしてみました。

プログラムは、簡単な物ですがpythonやnodeは一手間必要でかつ情報が少ないので、参考になれば幸いです。

nodeでCGIはナンセンス」らしいのですが、自分用のツールを作る程度なら全然良いと思います。自分の使い慣れた言語で作って下さい。プロセスが別になるので処理が遅くなってしまうと思いますが・・・

今度、同じデータベースをPHP,Python,NodeのCGIでアクセス出来る様にして、体感的にスピードがどれだけ変わるか試してみたいです。

レンタルサーバーでNodeを使うにはportable-nodeを使う方法が有るみたいです。

Nodeはバージョン管理が出来た方が良い方はnvmを使って見てください。

また恐らくConoHaWING以外のレンタルサーバー(エックスサーバー 等)でも使えると思いますので試してみてください。

タイトルとURLをコピーしました