Coreserver V2 に、Node.js (express) を導入しよう。
そう思ったものの、レンタルサーバーにExpress サーバーを立てることは容易ではなく、一日詰まってしまいました。
ですが、以下の方法により瞬殺でExpress環境を整えることができたので共有します。
詰まっていた理由
- VPSでないレンタルサーバーの場合、CGI スクリプトから各言語を動かすことになるが、js は対応していないっぽかった。
- 調べても、Flask サーバーを立てるHow to しか載っていない。
これだけ!解決法
npm にて、cgi-express をインストールすることで、解決
npm i cgi-express
もっと!解決法
以下、詳しく説明します。
nvm 経由で安定版 node をインストール
以下のページが参考になりました。
node のシンボリックリンクを作成
nvm 経由でインストールしたnode は、隠しファイル内に存在するため、このままではcgiでは読み込めません。そこで、シンボリックリンクを作成して、見えるパスからアクセスできるようにします。
これまた、以下のページが参考になりました。
express, cgi-express をインストール
npm i express
👇あまり認知されてない?っぽい神パッケージ。自己責任でオナシャス!
npm i cgi-express
index.cgi, .htaccess を作成
cgi スクリプトのpermission は、755 で。
index.cgi
#! /home/(ユーザー名)/.local/bin/node/v18.12.1/bin/node
const express = require('express')
const cgiExpress = require('cgi-express');
const app = express();
app.get('/', (req, res) => res.send('Hello World!'));
cgiExpress.execute(app);
.htaccess スクリプトのパーミッションは644
.htaccess (常時SSL化, 強制https化)
SetEnvIf Request_URI "." Ngx_Cache_NoCacheMode=off SetEnvIf Request_URI "." Ngx_Cache_StaticMode
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.cgi/$1 [QSA,L]
.htaccess (常時SSL化ではない)
SetEnvIf Request_URI "." Ngx_Cache_NoCacheMode=off SetEnvIf Request_URI "." Ngx_Cache_StaticMode
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.cgi/$1 [QSA,L]
終わり
おしまい!閉廷!
npm 神パッケージ制作ニキ、ありがと🍆