XSERVER(エックスサーバー)にNode.jsをインストールするときはnodebrew使うと楽

Node.jsをレンタルサーバでも使ってみたいなあと思ったけれど、まあVPS使うしかないんだろうなと思ってググったらちょこちょこ出てくる。
同じこと考える人はやはりいるもので、とてもありがたい。

Qiitaだと例えばさくらでやっている方がいらっしゃるようだ。
[さくらのレンタルサーバ（スタンダード）でNode.jsをインストールする](https://qiita.com/azk0305/items/0bdb0fdab4bc8ebb5909)

ただ、Node.jsは個人的にバージョンを管理できないと使いたくない。
無理をすればできたとしても、普通にインストールしかできないならまあいいか、と思っていました。

# Perlがあればいいんやなって

普段はmacでhomebrew経由でまとめてインストールしてしまっていたのであまり見ていなかった（すみません）のですが、何かのきっかけで開発者様のgithubを眺めていたらperlでいいんですねこれ。
そもそもroot権限なし、というところを念頭に置かれたものだとか。ありがたい話。

perlならXSERVERにも当然入ってるしいけるよな、、、いけるよね？

ということでやってみました。

# 環境

- iMac 2017, macOS Sierra (10.12.6)
- XSERVER (3桁番台と2000番台)

# 前提

- sshで接続できること（[ssh設定 | XSERVER](https://www.xserver.ne.jp/manual/man_server_ssh.php)）

macやlinuxならこれだけやってあればなんとかなります。
Windowsだとsshログインするために別途クライアントを用意する必要があるので、少々手間がかかりますがやることはほぼ同じです。私はwindowsだと~~Rlogin~~ConEmuとGit Bashが一番好きです。

秘密鍵を`~/.ssh/`に持ってきて`~/.ssh/config`内に下記のように設定しておくとあとあと楽なのでやっておくとよいでしょう。

```~/.ssh/config
Host xserver
  HostName <YourID>.xsrv.jp #サーバーアドレス 
  Port 10022 #ポートは10022番で固定
  IdentityFile ~/.ssh/<YourPrivateKey>.key #ダウンロードした秘密鍵の場所
  User <YourUserName> #設定したユーザー名
```

# やってみる

基本は開発者である[hokaccha様のgithubリポジトリにある通りのコマンドでいい](https://github.com/hokaccha/nodebrew)んですが、curlはデフォルトでは入ってはいるものの使えない(リンクできない)ため、ダウンロード→セットアップの手法を取ります。
gitかなんかを入れるときにcurlをソースから入れた方は使っても良いと思います。

```bash:shell
$ wget git.io/nodebrew
$ perl nodebrew setup
```

すると、見覚えのある画面が。

```bash:shell
Fetching nodebrew...
Installed nodebrew in $HOME/.nodebrew

========================================
Export a path to nodebrew:

export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================
```

言われた通りにパスを通します。
viでもechoでもなんでもいいので、追加。

```bash:shell
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bashrc
```

設定読み込み

```bash:shell
$ source ~/.bashrc
```

確認

```bash:shell
$ nodebrew -v

nodebrew 0.9.7

Usage:
    nodebrew help                         Show this message
    nodebrew install <version>            Download and install <version> (compile from source)
    nodebrew install-binary <version>     Download and install <version> (binary file)
    nodebrew uninstall <version>          Uninstall <version>
    nodebrew use <version>                Use <version>
    nodebrew list                         List installed versions
    nodebrew ls                           Alias for `list`
    nodebrew ls-remote                    List remote versions
    nodebrew ls-all                       List remote and installed versions
    nodebrew alias <key> <value>          Set alias
    nodebrew unalias <key>                Remove alias
    nodebrew clean <version> | all        Remove source file
    nodebrew selfupdate                   Update nodebrew
    nodebrew migrate-package <version>    Install global NPM packages contained in <version> to current version
    nodebrew exec <version> -- <command>  Execute <command> using specified <version>

Example:
    # install from binary
    nodebrew install-binary v0.10.22

    # use a specific version number
    nodebrew use v0.10.22

    # io.js
    nodebrew install-binary io@v1.0.0
    nodebrew use io@v1.0.0
```

やったぜ。
これで終わりです。
あとはいつも通り、インストールできます。

# 終わりとでも思っていたのか。ばかめ。

自戒を込めて。
依存パッケージの関係上、借りているサーバーのマシンが古いと新しいバージョンのnodeは動かないようです。

最初に試したのは個人で新しく契約した2000番台(契約したときのsv####←ここの数字)のやつ。

```bash:2000番台のサーバー
$ nodebrew install-binary stable
$ nodebrew ls
v8.7.0
current none
$ nodebrew use v8.7.0
use v8.7.0
$ node -v
v8.7.0
```

普通にいける。

もう一つ持っている３桁番台前半のやつは、

```bash:3桁番台のサーバー
$ nodebrew install-binary stable
$ nodebrew ls
v8.7.0
current none
$ nodebrew use v8.7.0
$ node -v
node: /lib64/libc.so.6: version `GLIBC_2.7' not found (required by node)
node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.10' not found (required by node)
node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by node)
node: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.3' not found (required by node)
node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by node)
```

あらら。
幸い私の目的は別に最新のでなくても達成可能なので問題ないですが、最新版を使いたい方は要注意。
このサーバーでも6までは動きました。npmは3.10.10。

```bash:3桁番台のサーバー
$ nodebrew install-binary v6.11.4
$ nodebrew ls
v8.7.0
v6.11.4
current v8.7.0
$ nodebrew use v6.11.4
$ node -v
v6.11.4
$ npm -v
3.10.10
```

XSERVER側は公表していないから書かない（他で探すと普通に書いてあるしglibのバージョンでわかる人も多そう）けれど、ディストリビューションは同じ（当たり前か）で、バージョンが２つ違います。結構な差。

yu・・・げほん。パッケージマネージャ使えないので億劫。今回は見送り。

どうしてもやりたい人は、上記のエラーメッセージでググると幸せになれる、、、かもしれない。

# （追記）なので、普通にサーバーのアップデートしましょう

3桁番台のやつは6000番台になりました。
上記のトラブルはなくなりました。

バージョンも上がって、色々新しい環境が使えるようになります。
詳しくは公式のお知らせをご覧ください。


# なんかwgetでもうまくいかないとき
友人に聞かれたので調べたが、SSL通信を設定しているとうまくいかないときがあるようです。

`--secure-protocol=TLSv1`とかもありますが、レンタルサーバを借りているあなたはきっと同じ画面の中にブラウザをよびだせるでしょう。

```:ブラウザのアドレスバー
git.io/nodebrew
```

アドレスを直接打ち込んで、出てきたソースコードをコピー。

```bash:shell
$ vi ~/nodebrew
```

できたファイルの中に、ペースト。で、セットアップ。

```bash:shell
$ perl nodebrew setup
```

これでいけるはず。