mixhost

mixhostでnode.jsをインストールして動かしてみる

mixhostでnode.jsって使えないのかな・・・?

やってみましょうか。

この記事ではmixhostでnode.jsを使うっていうことをやっていきます。

この記事で行うこと

  • Node.jsのインストールする
  • Node.jsサーバーを起動する
  • .htaccessを作成する
  • ブラウザからドメインにアクセスして表示する
  • デーモン化する

mixhostでnode.jsを使っていきましょう。

mixhostでnode.jsをインストールする

SSH接続する

Node.jsをインストールするためにまずはSSH接続します。

SSH接続の方法に関しては以下の記事で書いているのでよかったら参考にしてみてください。

mixhost

mixhostでSSH接続する方法を紹介します。

2022/9/19  

そんな疑問を解消するために、この記事ではmixhostで契約したサーバーにSSH接続する方法を紹介し ...

Node.jsをインストールする

// curlで入れる
$ curl -L git.io/nodebrew | perl - setup

// パスを通す
$ echo export PATH=$HOME/.nodebrew/current/bin:$PATH >> ~/.bashrc
$ echo export NODEBREW_ROOT=$HOME/.nodebrew >> ~/.bashrc
$ source ~/.bashrc

// nodeインストール
$ nodebrew install 16.17.0
$ nodebrew list
v16.17.0

current: none
$ nodebrew use v16.17.0
use v16.17.0

$ node -v
v16.17.0

nodeコマンドを実行

適当にJavaScriptを書いて実行してみます。

$ vi index.js
console.info("Hello Node.js!!")

$ node index.js
Hello Node.js!!

node ファイル名で実行できましたね。

Node.jsでhttpサーバーを立てる

Node.jsでhttpサーバーを立てます。コードはnodejs.orgを参照。

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

これで実行してみるとサーバーが起動しますね。

$ node index.js
Server running at http://127.0.0.1:3000/

ブラウザからNode.jsのhttpサーバーにアクセスする前の事前知識

ブラウザからドメインにアクセスしたときにNode.jsで動いているものを表示させたいんだけど、それをやるためには知らないといけないことがあるので少し書きます。

mixhostのドキュメントルート

mixhostのドキュメントルートは以下です。

  • 初期ドメイン・・・/home/ユーザー名/public_html/
  • 2つ目以降のドメイン・・・/home/ユーザー名/public_html/ドメイン名/

2つ名以降のドメインだと1つ目のドメインフォルダの中を参照するのがちょっと違和感ありますが、cPanel使っているカラフルボックスなんかもこういう構成ですね。

それぞれ参照されるファイルは以下のファイルたち。

  • index.html
  • index.php
  • index.php5
  • index,htm

例えば、初期ドメインでアクセスしたときに/home/ユーザー名/public_html/index.htmlが表示されるっていう流れです。

ドキュメントルートの流れは変えられない

このドキュメントルートなんかはWebサーバーの設定をいじれれば変えられるはずだけど、そこまでいじることはできません。

なのでこのドキュメントルートのままでNode.jsを動かしているサーバーに到達させる必要があります。

.htacccessは使えるので.htaccessでアクセスされた際の向き先を変更します。

どうせkillされると思います

ちゃんと動かすためにはnodeで動かすサーバーをデーモン化して動かす必要があるけど、レンタルサーバーだとそういう使い方をするとおそらくプロセス切られると思います。

.htaccessを作成する

.htaccessを以下に作成します。

  • 初期ドメインの場合・・・/home/ユーザー名/public_html/.htaccess
  • 2つ目以降のドメインの場合・・・/home/ユーザー名/public_html/ドメイン名/.htaccess
$ vi .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ http://127.0.0.1:3000/ [P,L]
</IfModule>

今回は127.0.0.1:3000で動かすのでこういう指定をしています。

Node.jsのコードを記述する

以下にファイルを作ってNode.jsでhttpサーバーを起動するコードを書きます。

  • 初期ドメインの場合・・・/home/ユーザー名/public_html/index.js
  • 2つ目以降のドメインの場合・・・/home/ユーザー名/public_html/ドメイン名/index.js
const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

ブラウザからドメインにアクセス

サーバーを起動してブラウザからドメインにアクセスします。

$ node index.js
Server running at http://127.0.0.1:3000/

表示できました。アクセスするドメインはもちろんmixhostに登録したドメインですよ。

Node.jsのサーバーをデーモン化する

SSH接続が切れたりすると簡単にNode.jsのサーバーは停止してしまうのでデーモン化します。

foreverをインストール。

$ npm install forever -g

foreverを使って動かします。

$ forever start index.js

これでSSH接続を切っても動くはずです。

停止する際には以下コマンドで止めることができます。

$ forever stop index.js

どうせ止まっちゃうんだろうなあ

mixhostはレンタルサーバーだし、こういうことをするのには向いていません。

こうやってやってもきっとnodeで動かしているサーバーは止まってしまうし、そうするとページにもアクセスできなくなります。

普通にVPS使ってやった方がいいですね。

まとめ

mixhostでNode.jsをインストールして使ってみました。やってみたことはこんな感じです。

  • Node.jsのインストール
  • Node.jsサーバーを起動する
  • .htaccessを作成する
  • ブラウザからドメインにアクセスして表示する
  • デーモン化する

ただこういうレンタルサーバーの中でサーバー起動してっていうことをやりたい場合には、VPS使ってやるのがおすすめですよ。

-mixhost