no-image

VagrantとVirtualBoxでCentOSにnginxとpumaのRails環境を構築する

VagrantとVirtualBoxを使ってrailsの開発環境を構築しました。データベースはPostgreSQLを選択しています。普段はDockerを推していますが、今回は久しぶりにVagrantでのrailsで、しかもnginxとpumaのunix-socket接続に大分手間取りました。ansibleを使った構成管理をしようかとも思ったんですが、Dockerを勉強するのと同じくらい大変そうに感じたので、構成管理ツールは引き続きDockerに絞って行っていこうと思います。

バージョン情報

  • Mac OS 10.11.6(El Capitan)
  • Vagrant 2.1.1 ダウンロード
    • plugins
    • vagrant-vbguest (0.15.2)
  • Virtualbox 5.2.12 ダウンロード
  • CentOS 7
    • rbenv 1.1.1-37-g1c772d5
    • ruby 2.5.1p57
    • nginx version: nginx/1.15.0
    • psql (PostgreSQL) 11beta1
  • rails 5.2.0

その他情報

vagrant設定

vagrant設定をしていきます。[ config.vm.synced_folder ]の[ type: ]は適切なものを指定しないと、共有マウントがうまくいかない場合がありました。

centos設定

centos設定をしていきます。[ SELINUX無効化 ]を忘れると、後にpumaが起動しない原因になるので注意してください。[centos7]では、日本語ロケールがなくて日本語の表示文字化けする場合がありますので、[ glibc-common ]を再インストールすれば解消されます。

railsインストール

railsインストールをしていきます。gitを利用したインストール方法になります。[ rbenv install ]はかなり時間がかかりますので気長にいきましょう。

nginxインストール

nginxインストールをしていきます。自動起動設定後は[ Vagrantfile ]の[ config.vm.network “private_network” ]で指定したipでスタートページが表示できます。

postgresqlインストール

postgresqlインストールをしていきます。Baseリポジトリでは[ exclude=postgresql* ]をして無効化してあります。

checking for pg_config… no
No pg_config… trying anyway. If building fails,
please try again with
–with-pg-config=/path/to/pg_config
checking for libpq-fe.h… no
Can’t find the ‘libpq-fe.h header

pg gemインストールをした際に、上記のエラーが表示されたら、[ pg_config ]を指定して再度gemインストールを行ってください。

rails起動

rails起動をしていきます。

rake aborted!
Bundler::GemRequireError: There was an error while trying to load the gem ‘uglifier’.
Gem Load Error is: Could not find a JavaScript runtime. See ?
https://github.com/rails/execjs for a list of available runtimes.

db作成した際に、上記のエラーが表示されたら[ Gemfile ]の[ mini_racer ]を有効化して再度[ bundle install ]して下さい。

migrationテスト

migrationテストをしていきます。

puma-nginxをunix-socket接続

puma-nginxをunix-socket接続していきます。ここでうまくunix-socket接続ができず、大分手間取ってしまいました。

puma設定

puma設定をしていきます。実際に使ったことがないため何とも言いがたいのですが、参考サイトを見た時に実行権限の都合上vagrantディレクトリの外にシェアディレクトリを作成したほうが良いとあったのでそうしています。シェアディレクトリは自動では生成されないようなので手動で作成します。

bundler: failed to load command: puma (/home/vagrant/.rbenv/versions/2.5.1/bin/puma)
Errno::EACCES: Permission denied – connect(2) for /puma_shared/sockets/puma.sock

pumaを起動した際、上記のエラーが出た時は、シェアディレクトリの権限を[ ls -la ]コマンドなので確認して下さい。もし権限がrootになっていたらvagrantに変更して、再度[ bundle exec puma ]を実行して下さい。

nginx設定

nginx設定をしていきます。[ server unix: ]は[ puma.rb ]の[ bind “unix://#{shared_dir}/sockets/puma.sock” ]と同じpathを設定して下さい。[ server_name ]は[ Vagrantfile ]の[ config.vm.network “private_network” ]で指定したipを設定して下さい。

puma-nginxをunix-socket接続起動

puma-nginxをunix-socket接続起動をしていきます。うまく接続されていればnginxのスタートページを表示した[ http://192.168.33.10/ ]でrailsのスタートページが表示されるようになっています。

今回はあくまでpuma-nginxをunix-socket接続起動できている状態を確認することを最優先にして[ puma.rb ]や[ app-name.conf(nginxの設定のため作成したファイル) ]は最低限の内容にしています。下記の参考サイトなど見て、必要に応じて調整していってもらえればと思います。

参考サイト