JavaScript
Node.js
Ubuntu
vagrant

VagrantでPuppeteerの環境構築をする

以前にVagrant + Dockerで Puppeteer を超簡単に実行するという記事を書きましたが
「Docker使う必要なくね?!?」って感じていたのでVagrantだけで環境整えました。

事前準備

VartualBoxのインストール
Vagrantのインストール

ディレクトリ構成

.
├── Vagrantfile
└── provisioning
     └── init.sh

2ファイル用意するだけです。

Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.network "forwarded_port", guest: 3000, host: 3000
  config.vm.network "private_network", ip: "192.168.33.10"

  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    vb.customize ["setextradata", :id, "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled", 0]
  end

  config.vm.provision "shell", :path => "provisioning/init.sh", :privileged => false
end

全体はこんな感じです。

  config.vm.box = "ubuntu/xenial64"
  config.vm.network "forwarded_port", guest: 3000, host: 3000
  config.vm.network "private_network", ip: "192.168.33.10"

CentOSでも実行できるみたいですが、情報が少なかったためUbuntuにしました。
OSのインストールでちょっと時間がかかります。ちょっと。

  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    vb.customize ["setextradata", :id, "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled", 0]
  end

メモリは1024でも良いかなーって思います。

  config.vm.provision "shell", :path => "provisioning/init.sh", :privileged => false

privisionはprovision/init.shを実行するように設定します。
:privileged => false で設定しないと全てrootで実行されるようです。

init.sh

# install git
sudo apt-get update
sudo apt-get install -y git

# cloning nvm
git clone https://github.com/creationix/nvm.git ~/.nvm
source ~/.nvm/nvm.sh

# export nvm path
echo '
# nvm設定
[[ -s ~/.nvm/nvm.sh ]] && . ~/.nvm/nvm.sh
nvm use default
npm_dir=${NVM_PATH}_modules
export NODE_PATH=$npm_dir
' >> ~/.bash_profile
source ~/.bash_profile
nvm install v8.4.0

# install puppeteer
npm i puppeteer
sudo apt-get install -y gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils

# install japanese font
sudo apt-get -y install language-pack-ja-base language-pack-ja
sudo update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
source /etc/default/locale
sudo apt-get install fonts-ipafont-gothic fonts-ipafont-mincho

全体はこんな感じです。

# install git
sudo apt-get update
sudo apt-get install -y git

nvmをcloneするためにgitをインストールします。

# cloning nvm
git clone https://github.com/creationix/nvm.git ~/.nvm
source ~/.nvm/nvm.sh

githubからnvmのインストール

# export nvm path
echo '
# nvm設定
[[ -s ~/.nvm/nvm.sh ]] && . ~/.nvm/nvm.sh
nvm use default
npm_dir=${NVM_PATH}_modules
export NODE_PATH=$npm_dir
' >> ~/.bash_profile
source ~/.bash_profile
nvm install v8.4.0

nvmのコマンドが使えるようにPATHを通します。
そしてnode v8.4.0 のインストール。

# install puppeteer
npm i puppeteer
sudo apt-get install -y gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils

いよいよPuppeteerのインストール。
合わせて色々インストールしてますが、これをインストールしないとエラー出るみたいです。

# install japanese font
sudo apt-get -y install language-pack-ja-base language-pack-ja
sudo update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
source /etc/default/locale
sudo apt-get install fonts-ipafont-gothic fonts-ipafont-mincho

Chromiumで日本語フォントが文字化けするため、日本語フォントのインストール。

Vagrant up

上記2ファイルを用意できたら

vagrant up
vagrant ssh

あとは、jsファイルを作成して

node ***.js

で実行できます。

おわりに

ubuntuのインストールにめちゃめちゃ時間がかかるので軽量なものがあれば教えて欲しいです。。。