コレグレーデギネード

WindowsとかUbuntuとかRubyとかRailsとか

Ubuntu22.04.3 Server にRailsの本番環境を整える [Apache Passenger]

  • VirtualBoxにインストールされたUbuntu22.04.1 Serverが対象
  • vimssh、git、curlがインストール済みであること
  • rubyバージョンは2.7.1
  • railsバージョンは6.1.7.6
  • データベースはPostgreSQLを使用
  • ImageMagickを使用
  • Apach、Passengerを使用
  • リモートでDeployできる環境構築まで

Ruby管理ツールrbenvをインストールする

$ sudo git clone https://github.com/rbenv/rbenv.git /usr/local/rbenv
$ sudo git clone https://github.com/rbenv/ruby-build.git /usr/local/rbenv/plugins/ruby-build

visudo コマンドで編集
Defaults secure_pathの変更
Defaults env_keepの追加

$ sudo visudo
Defaults    secure_path ="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rbenv/bin:/usr/local/rbenv/shims"
Defaults    env_keep +="RBENV_ROOT"

/etc/profileの一番下に下記の設定を追記

$ sudo vim /etc/profile
export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"

設定を反映

$ source /etc/profile

Rubyに必要なライブラリーをインストール

sudo apt install autoconf bison build-essential libssl-dev libyaml-dev libreadline-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev

Rubyをインストール

$ sudo rbenv install 2.7.1

2.7.1を通常使用するバージョンに指定

$ sudo rbenv global 2.7.1

設定を反映

$ source /etc/profile

Rubyがインストールされたか確認

$ ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]

bundlerのインストールする

$ sudo gem install bundler

rubygemsのアップデート

$ gem update --system 3.2.33

nodeをインストールする

$ curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
$ sudo apt-get install nodejs

yarnをインストールする

$ sudo npm install -g yarn

PostgreSQLをインストールする

$ sudo apt install postgresql

ライブラリをインストール

$ sudo apt install libpq-dev

ユーザの追加

$ sudo su - postgres
$ createuser --createdb [user]

ImageMagickをインストールする

$ sudo apt install imagemagick

ライブラリをインストールする

$ sudo apt install libmagickcore-dev

Apacheをインストールする

$ sudo apt  install apache2 apache2-dev

パッセンジャーをインストールする

$ sudo gem install passenger

新しくgemパッケージをインストールしたのでコマンドが使えるように読み込む

$ sudo rbenv rehash

モジュールをインストールする

$ sudo passenger-install-apache2-module

必要なライブラリをインストールするように指示されるのでその通りにインストールする

$ sudo apt-get install libcurl4-openssl-dev apache2-dev libapr1-dev libaprutil1-dev

再度passenger-installコマンドを実行

$ sudo passenger-install-apache2-module

インストールが終了するとApacheの設定ファイルに挿入する記述が表示されるので保存しておく。なお、passenger-installコマンドで再表示可能。

$ sudo passenger-install-apache2-module --snippet
LoadModule passenger_module /usr/local/rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/passenger-6.0.20/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/passenger-6.0.20
  PassengerDefaultRuby /usr/local/rbenv/versions/2.7.1/bin/ruby
</IfModule>

Apacheの設定ファイルの最下部にPassengerの記述を挿入

$ vim /etc/apache2/apache2.conf
:
LoadModule passenger_module /usr/local/rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/passenger-6.0.20/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/passenger-6.0.20
  PassengerDefaultRuby /usr/local/rbenv/versions/2.7.1/bin/ruby
</IfModule>

Apacheのデフォルトのバーチャルホスト設定を無効にする

$ sudo a2dissite 000-default
Site 000-default disabled.
To activate the new configuration, you need to run:
  systemctl reload apache2

新しくバーチャルホストの設定ファイルを作る

$ sudo vim /etc/apache2/sites-available/example.conf
<VirtualHost *:80>
        ServerName www.example.com
        ServerAlias example.com
        DocumentRoot /var/www/example/current/public
        ErrorLog ${APACHE_LOG_DIR}/example.error.log
        CustomLog ${APACHE_LOG_DIR}/example.access.log combined
        LogLevel warn
        <Directory "/var/www/example/current/public">
          Require all granted
        </Directory>
</VirtualHost>

バーチャルホスト設定の有効化

$ sudo a2ensite example.conf

ルートディレクトリの作成

$ sudo mkdir /var/www/example

ルートディレクトリの所有者をデプロイするユーザーへ変更

$ sudo chown [user] /var/www/example

ルートディレクトリのパミッションを変更

$ sudo chmod 755 /var/www/example

Apache再起動

$ sudo service apache2 reload

master.keyのコピー

<strong>config/master.keyをサーバーの/var/www/example/shared/config/master.keyにコピー</strong>

プロジェクトをサーバーにデプロイ

$ cap production deploy