MacにてNodeを構築してみた
初めに
Mac環境にて、NodeJSを構築したことない為、
やってみようかなと思った。
簡単設計
MacBook Proは私用のやつなので、プラベートアカウントも使っている。
そこでファイアウォールやVirus対策ソフトいっさい入っていない為、攻撃されても気づかない。
そのリンクを考えた上で、仮想マシンを構築して対応するようにする。
環境構築
Vagrant
Vagrant by HashiCorp へアクセスし、DMGファイルをダウンロードしてインストールする。
結局仮想マシンののプロバイダもいる為、virtualboxも一緒にインストールする。
Downloads – Oracle VM VirtualBox
とりあえず下記のページ通りに、ターミナルで下記のコマンドを叩く
vagrant init centos/7
vagrant up
が、下記のエラーが出ていた。
Stderr: VBoxManage: error: The virtual machine 'zhangnan_default_1523764035777_67688' has terminated unexpectedly during startup with exit code 1 (0x1) VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component MachineWrap, interface IMachine
調べてみると、MacOSのセキュリティー制限により、カーネルがブロックされたようだね。。
high sierra - VirtualBox 5.1.8 installation didn't install kernel extensions. How do I fix this? [macOS 10.13] - Ask Different
https://blog.keinos.com/20180204_3232
記事の通りにやってみた結果、問題なく起動できた。
そしてSSHしてみたら
choukusunokinoMacBook-puro:~ zhangnan$ vagrant ssh default [vagrant@localhost ~]$
無事にログインできた!
NodeJS
下記のページをベースにして、インストールする
Installing Node.js via package manager | Node.js
バージョンについて、LTSはNodeJS8だが、最新版で良い為、NodeJS 9 にいく
# ソースlocation指定 curl --silent --location https://rpm.nodesource.com/setup_9.x | sudo bash - # yum sudo yum -y install nodejs sudo yum install gcc-c++ make
そして試してやってみると、
うまく行った。
Express - Helloworld!
まずはフォルダを作成する
[vagrant@localhost ~]$ mkdir myapp [vagrant@localhost ~]$ cd myapp/
そしてnpmで初期化
[vagrant@localhost myapp]$ npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See `npm help json` for definitive documentation on these fields and exactly what they do. Use `npm install <pkg>` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. package name: (myapp) myapp version: (1.0.0) description: Test App entry point: (index.js) test command: git repository: keywords: author: ZHang license: (ISC) About to write to /home/vagrant/myapp/package.json: { "name": "myapp", "version": "1.0.0", "description": "Test App", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "ZHang", "license": "ISC" } Is this ok? (yes)
いろんなのパラメータが聞かれた為、とりあえず規定値でいく
ここでyesをして、初期化が完了した。
そして、expressをインストール
npm install express --save
...が失敗した!
[vagrant@localhost myapp]$ npm install express --save Unhandled rejection Error: ENOSPC: no space left on device, open '/home/vagrant/.npm/_cacache/tmp/56b3b56a' Unhandled rejection Error: ENOSPC: no space left on device, open '/home/vagrant/.npm/_cacache/tmp/91ff8c38'
あれ?
[vagrant@localhost myapp]$ df -ah . Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 38G 38G 60K 100% /
100%?!
調べてみると、vagrantは暗黙でmacのユーザーフォルダから、仮想マシンへrsyncしてくれている。。。
これって、38GBでも足りないぞ...
そしてこの感じで設定変更し、スペースを解放して再installすれば
Disabling Default Rsync Of The Vagrant Docker Provider | WizOne Solutions
[vagrant@localhost myapp]$ npm install express --save npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN myapp@1.0.0 No repository field. + express@4.16.3 added 50 packages in 2.108s
成功!
じゃサクッと、
[vagrant@localhost myapp]$ cat index.js var express = require('express'); var app = express(); app.get('/', function (req, res) { res.send('Hello World!'); }); app.listen(3000, function () { console.log('Example app listening on port 3000!'); });
index.jsを作成してみた。
それで、Helloworldができたはずだ。
[vagrant@localhost myapp]$ node index.js Example app listening on port 3000!
けど、Macからアクセスできないでは??
そしてVagrantの設定ファイル*1にて、ポートマッピングを追加
config.vm.network "forwarded_port", guest: 3000, host: 1234
そしてhost側で
choukusunokinoMacBook-puro:Applications zhangnan$ vagrant reload
guest側にsshして、再起動してみ
choukusunokinoMacBook-puro:~ zhangnan$ vagrant ssh default Last login: Sun Apr 15 05:36:57 2018 from 10.0.2.2 [vagrant@localhost ~]$ cd myapp/ [vagrant@localhost myapp]$ ll total 28 -rw-rw-r--. 1 vagrant vagrant 211 Apr 15 05:47 index.js drwxrwxr-x. 50 vagrant vagrant 4096 Apr 15 05:46 node_modules -rw-rw-r--. 1 vagrant vagrant 13423 Apr 15 05:46 package-lock.json -rw-rw-r--. 1 vagrant vagrant 264 Apr 15 05:46 package.json [vagrant@localhost myapp]$ node index.js Example app listening on port 3000!
そーしーて
Job Done.
*1:一番最初に起動した際に、Vagrantfileという名前のファイルが同じフォルダにて作成されたはず