少し時間が取れるようになったので、前から気になっていたNode.jsについて試してみようと思ったが、Vagrantのバージョンが古かったりで、環境構築に悪戦苦闘したのでそのメモ。
作業環境
■前提
VirtualBox, Vagrantインストール済み
■環境
OS:OSX10.10.5(Yosemite)
VirtualBox:4 → 5.0.18 (変更前忘れ)
Vagrant:1.6 → 1.8.1
ゲストOS:CentOS7
Node.js:v5.11.0
nvm:0.31.0
VirtualBox, Vagrantのバージョンアップ
NodejsからprivateIPでアクセスするため下記設定にする。(privateIPは任意)
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos7.0"
config.vm.network "forwarded_port", guest: 1337, host: 1337
config.vm.network "private_network", ip: "192.168.33.11"
end
ってのっけからエラーか。。。
Vagrantfileにprivate_network指定を外すとエラーなし。
デバイス関連でエラー、調べてみるとCentOS7よりアダプタ名がeth0からenp0s8などに変わっていたためであった。
(無理やり?)enp0s8でvagrant upする方法、バグ対応プラグインインストールしたが起動せず。
Vagrant入れたのがCentOS7リリースされる前だったからだなと思い、バージョンアップで解決。
バージョンアップ方法は、
各サイトより最新版ダウンロードし、インストールするのみです。
[Qiita]Mac で vagrant をバージョンアップするを参考にさせて頂きました。
nvmでNode.jsインストール
Node.jsのバージョン管理ツール。バージョンの切り替えするやつすね。rubyのrbenv版ですね。nvmを利用してNode.jsインストールします。
(nvm:Node Version Manager)
$ vagrant up
$ vagrant ssh
−−仮想マシン−−
$ git clone https://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh
$ nvm help
$ nvm list-remote /* show Node.js version list */
:
$ nvm install v5.11.0
$ nvm ls
-> v5.11.0
default -> v5.11.0
node -> stable (-> v5.11.0) (default)
stable -> 5.11 (-> v5.11.0) (default)
iojs -> N/A (default)
$ nvm alias default v0.10.26 /* default Node.js setting */
$ vi ~/.bash_profile
if [[ -s ~/.nvm/nvm.sh ]];
then source ~/.nvm/nvm.sh
fi
[Qiita]centos + node.js + npm + nvm インストールを参考にさせて頂きました。
Node.jsでhello world!
$ node
> console.log("hello world!");
hello world!
ふむふむ。
ブラウザからhello world!
仮想マシン上の適当な場所にhello.jsを配置。
// HTTPパッケージを読み込み
var http = require('http');
// WebServerObjectを作成
var server = http.createServer();
// HTTP RequestがあったらdoRequestで処理
server.on('request', doRequest);
// リクエストを受け取るポートを指定
server.listen(1337);
console.log('Server running!');
// リクエストの処理
function doRequest(req, res) {
// ヘッダー
res.writeHead(200, {'Content-Type': 'text/plain'});
// 出力
res.write('hello world!\n');
// 終了
res.end();
}
$ node hello
Server running!
これで待ち受け状態ね。
mac側ブラウザ
192.168.33.11:1337 にアクセス不可。。。localhost:1337 ももちろんダメ。
おう!なにも反応しないやんけ。
ブラウザからのアクセス不可対応
1, 仮想マシン側firewallの設定を無効にする。
$ sudo systemctl stop firewalld
2, Vagrantfileのforwarded_portにidを指定する。
Vagrant側のサイトにidの利用について記載ないので、詳細は不明。
ただデフォルトでsshのportをforwardするのから重複してだめなのかな?
変更前
config.vm.network "forwarded_port", guest: 1337, host: 1337
変更後
config.vm.network "forwarded_port", guest: 1337, host: 1337, id:"http"
ブラウザからアクセス・・・
hello world!
表示!192.168.33.11:1337 も localhost:1337 もOKだったよ。
okidoki.