Vagrantで既存Railsアプリ(+Puppeteer)をgithubからcloneして動かすところまで
始めに
今日まで(amazon買収前の)cloud9を騙し騙し使ってきたけど、ついに2019年末でstopするよ的な警告が出だしたのでローカル環境に載せ替えるテスト。
dockerにしようとしたけど、ある画面を開くとRailsサーバーのローカルにあるpuppeteerからPDFを出力して自動ダウンロードするという飛び道具な機能があり、docker-composeでのpuppeteerのインストールやRackサーバのマルチプロセスでの動作がうまく行かなくて挫折。。
改めてVagrantで実行出来るようにするまでの記録。
開発環境
MacBook Pro (macOS Mojave)
Vagrant 2.1.4
VirtualBox 5.2.18
いざ
ゲストOSはCentOS7、インストールするRubyは2.4.3(既存システムなのでバージョン低し)
vagrant box add centos/7
vagrant init centos/7
vagrant plugin install vagrant-vbguest
Vagrantfileに以下を追記
config.vm.network "forwarded_port", guest: 3000, host: 3000
config.vm.synced_folder ".", "/vagrant",type:"virtualbox"
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
end
vagrant起動
vagrant up
vagrant ssh
ファイアウォールいらないので
[vagrant@localhost ~]$ sudo systemctl stop firewalld
rbenvをインストール
[vagrant@localhost ~]$ sudo yum -y install git
[vagrant@localhost ~]$ sudo yum update -y nss curl libcurl
[vagrant@localhost ~]$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
[vagrant@localhost ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
[vagrant@localhost ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
[vagrant@localhost ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
[vagrant@localhost ~]$ source ~/.bash_profile
#確認
[vagrant@localhost ~]$ rbenv --version
rubyをインストール
#多分いろいろ入っていないので
[vagrant@localhost ~]$ sudo yum -y install bzip2 gcc openssl-devel readline-devel zlib-devel gcc-c++
#いよいよ
[vagrant@localhost ~]$ rbenv install 2.4.3
DBはmysqlを使っているのでインストール
[vagrant@localhost ~]$ yum remove mariadb-libs -y
[vagrant@localhost ~]$ rm -rf /var/lib/mysql
[vagrant@localhost ~]$ sudo yum -y localinstall https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
[vagrant@localhost ~]$ sudo yum -y install mysql-community-server
#起動&自動起動設定
[vagrant@localhost ckhs]$ sudo systemctl start mysqld.service
[vagrant@localhost ckhs]$ sudo systemctl enable mysqld.service
#rootの初期パスワードの確認
[vagrant@localhost ~]$ cat /var/log/mysqld.log | grep 'temporary password'
#root@localhost: のあとに出て来るのが初期パスワード
#rootパスワード変更&セキュリティ設定
mysql_secure_installation
#mysql 8.0で、パスワードを空に設定する
#8.0だとvalidationコンポーネントが動いていてパスワードを空に出来ない。
#開発環境だし空でも問題ないので、コンポーネントを無効化して空にする。
[vagrant@localhost ~]$ mysql -u root -p
# 変更したパスワードで入る
mysql> UNINSTALL COMPONENT 'file://component_validate_password';
mysql> set password for root@localhost = '';
mysql> quit
#パス無しで入れるか確認
[vagrant@localhost ~]$ mysql -u root
mysql> quit
ソースコードをgitからclone
#/vagrant が共有フォルダになっているので、 ~/workspace にシンボリックリンクを作成
[vagrant@localhost ~]$ ln -s /vagrant ~/workspace
[vagrant@localhost ~]$ cd workspace
#ssh-keygenやgit configなど、いつものやつをやってから
[vagrant@localhost ~]$ git clone ssh://git@リポジトリ
[vagrant@localhost ~]$ cd リポジトリ名のディレクトリ
bundle install
[vagrant@localhost リポジトリ]$ gem install bundler
#mysql使うので
[vagrant@localhost リポジトリ]$ sudo yum -y install mysql-devel
[vagrant@localhost リポジトリ]$ bundle install
node + puppeteerのインストール(package.jsonより)
#今回はnode8を入れたいので
[vagrant@localhost ckhs]$ curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
[vagrant@localhost リポジトリ]$ sudo yum install -y nodejs
[vagrant@localhost リポジトリ]$ npm install
rails 起動
#DB・テーブル・初期データ作成
[vagrant@localhost リポジトリ]$ bin/rails db:create
[vagrant@localhost リポジトリ]$ bin/rails db:migrate
[vagrant@localhost リポジトリ]$ bin/rails db:seed
#起動
[vagrant@localhost リポジトリ]$ bin/rails s -b 0.0.0.0
起動できた!!
ホストマシンからブラウザでlocalhost:3000にアクセスすると表示できますした。
が、PDFダウンロード画面に行くとこんなのが出てpuppeteerが動かない問題発生
(node:4572) UnhandledPromiseRejectionWarning: Error: Failed to launch chrome! /vagrant/ckhs/node_modules/puppeteer/.local-chromium/linux-650583/chrome-linux/chrome: error while loading shared libraries: libX11.so.6: cannot open shared object file: No such file or directory
まぁ、見たまんま libX11.so.6 が読めないということで
sudo yum install -y libX11
で解決か!?
(node:4701) UnhandledPromiseRejectionWarning: Error: Failed to launch chrome! /vagrant/ckhs/node_modules/puppeteer/.local-chromium/linux-650583/chrome-linux/chrome: error while loading shared libraries: libXcomposite.so.1: cannot open shared object file: No such file or directory
同じような問題が発生
この後調査の結果、依存ライブラリをまとめて入れろとのこと
sudo yum -y install libX11 libXcomposite libXcursor libXdamage libXext libXi libXtst cups-libs libXScrnSaver libXrandr alsa-lib pango atk at-spi2-atk gtk3
動いた!!!!
終わりに
この記事書く前に、一度CentOS6で環境構築して、ほぼ最後まで行ってからpuppeteerがCentOS6で動かないことに気づいて凹んだ。。
同じ状況のどなたかにお役に立てれば幸いです。
この記事が気に入ったらサポートをしてみませんか?