Node.jsをレンタルサーバでも使ってみたいなあと思ったけれど、まあVPS使うしかないんだろうなと思ってググったらちょこちょこ出てくる。
同じこと考える人はやはりいるもので、とてもありがたい。
Qiitaだと例えばさくらでやっている方がいらっしゃるようだ。
さくらのレンタルサーバ(スタンダード)でNode.jsをインストールする
ただ、Node.jsは個人的にバージョンを管理できないと使いたくない。
無理をすればできたとしても、普通にインストールしかできないならまあいいか、と思っていました。
Perlがあればいいんやなって
普段はmacでhomebrew経由でまとめてインストールしてしまっていたのであまり見ていなかった(すみません)のですが、何かのきっかけで開発者様のgithubを眺めていたらperlでいいんですねこれ。
そもそもroot権限なし、というところを念頭に置かれたものだとか。ありがたい話。
perlならXSERVERにも当然入ってるしいけるよな、、、いけるよね?
ということでやってみました。
環境
- iMac 2017, macOS Sierra (10.12.6)
- XSERVER (3桁番台と2000番台)
前提
- sshで接続できること(ssh設定 | XSERVER)
macやlinuxならこれだけやってあればなんとかなります。
Windowsだとsshログインするために別途クライアントを用意する必要があるので、少々手間がかかりますがやることはほぼ同じです。私はwindowsだとRloginConEmuとGit Bashが一番好きです。
秘密鍵を~/.ssh/
に持ってきて~/.ssh/config
内に下記のように設定しておくとあとあと楽なのでやっておくとよいでしょう。
Host xserver
HostName <YourID>.xsrv.jp #サーバーアドレス
Port 10022 #ポートは10022番で固定
IdentityFile ~/.ssh/<YourPrivateKey>.key #ダウンロードした秘密鍵の場所
User <YourUserName> #設定したユーザー名
やってみる
基本は開発者であるhokaccha様のgithubリポジトリにある通りのコマンドでいいんですが、curlはデフォルトでは入ってはいるものの使えない(リンクできない)ため、ダウンロード→セットアップの手法を取ります。
gitかなんかを入れるときにcurlをソースから入れた方は使っても良いと思います。
$ wget git.io/nodebrew
$ perl nodebrew setup
すると、見覚えのある画面が。
Fetching nodebrew...
Installed nodebrew in $HOME/.nodebrew
========================================
Export a path to nodebrew:
export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================
言われた通りにパスを通します。
viでもechoでもなんでもいいので、追加。
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bashrc
設定読み込み
$ source ~/.bashrc
確認
$ 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####←ここの数字)のやつ。
$ 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
普通にいける。
もう一つ持っている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。
$ 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のバージョンでわかる人も多そう)けれど、ディストリビューションは同じ(当たり前か)で、バージョンが2つ違います。結構な差。
yu・・・げほん。パッケージマネージャ使えないので億劫。今回は見送り。
どうしてもやりたい人は、上記のエラーメッセージでググると幸せになれる、、、かもしれない。
(追記)なので、普通にサーバーのアップデートしましょう
3桁番台のやつは6000番台になりました。
上記のトラブルはなくなりました。
バージョンも上がって、色々新しい環境が使えるようになります。
詳しくは公式のお知らせをご覧ください。
なんかwgetでもうまくいかないとき
友人に聞かれたので調べたが、SSL通信を設定しているとうまくいかないときがあるようです。
--secure-protocol=TLSv1
とかもありますが、レンタルサーバを借りているあなたはきっと同じ画面の中にブラウザをよびだせるでしょう。
git.io/nodebrew
アドレスを直接打ち込んで、出てきたソースコードをコピー。
$ vi ~/nodebrew
できたファイルの中に、ペースト。で、セットアップ。
$ perl nodebrew setup
これでいけるはず。