CentOS7 でrailsの環境構築


CentOS7 でrailsの環境構築

こんばんは。
gCストーリー沖永です。
初級エンジニアです。

Linuxのコマンドを何一つ知らなかった頃、
railsの環境構築に相当苦労したことを覚えています。
丸6日はかかりました。

そこで本日は、
誰でも1日でrailsの環境構築ができる手順を記載しようと思います。

■前提
OS: CentOS7.1
#はルート権限で、%はユーザー権限でコマンドを打っています。

■ユーザの追加
ルートは権限が強すぎるので、新しくユーザーを追加します。

% useradd okinaga

ユーザー okinaga のパスワードを変更。

% passwd okinaga
新しいパスワード:
新しいパスワードを再入力してください:
passwd: 全ての認証トークンが正しく更新できました。

■ SELinuxの無効化
SELinuxが起動していると、
インストール作業等に支障をきたすので無効にします。

% setenforce 0
% vi /etc/selinux/config

設定ファイルもいじります。

SELINUX=disabled

■sudoの設定
作成したユーザーがsudoを使えるように設定します。

% sudo visudo
# %wheel  ALL=(ALL)       NOPASSWD: ALL

↓ ###コメントアウトを外す。

%wheel  ALL=(ALL)       NOPASSWD: ALL
% usermod -G wheel okinaga

■パッケージのインストール

% yum -y groupinstall "Development Tools"
% yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel
% yum -y install mariadb-server mariadb-devel
% yum -y install ImageMagick ImageMagick-devel ipa-pgothic-fonts

■ rbenvのインストール 【root権限】
rubyのバージョン管理を行うプログラムをインストールします。
rbenv, ruby-build を /usr/local にインストール

% git clone git://github.com/sstephenson/rbenv.git /usr/local/rbenv
% git clone git://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build

rbenv の準備ができたら、/etc/profile に下記の設定を追記

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


設定を記述した後、/etc/profile を読み込む。

% source /etc/profile

■/etc/sudoers の内容を変更
sudo でrbenvコマンドを使えるようにします。

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

ruby・bundler・railsをインストール

$ rbenv install 2.2.3
$ rbenv rehash
$ rbenv global 2.2.3
$ yum -y install gem
$ gem install bundler
$ gem install rake
$ gem install rails --no-document

■mariadb設定

$ sudo vi /etc/my.cnf.d/my.cnf
[mysqld]
character-set-server = utf8

$ sudo vi /etc/my.cnf.d/mysql-clients.cnf
[mysql]
default-character-set = utf8
show-warnings

自動起動するように設定する。

$ sudo systemctl enable mariadb.service


mysqlにログインする。

$ mysql –uroot –p

ユーザーを作り、権限を与える。

select Host, User,Password from mysql.user;

create user 'rails'@'localhost' identified by 'パスワード';

grant all privileges on rails_app.* to 'rails'@'localhost' identified by 'パスワード';

■nginxインストール


$ sudo yum --enablerepo=epel -y install nginx

$ systemctl start nginx.service
$ systemctl enable nginx.service
$ firewall-cmd --permanent --zone=public --add-service=http
$ firewall-cmd --permanent --zone=public --add-service=https
$ firewall-cmd --permanent --zone=public --add-service=ssh
$ firewall-cmd --reload
$ ip a

nginxの動作確認をする。

$ curl localhost

■クローン
ここはcapistranoを使うといいらしい。(また調べます。)

$ mkdir アプリ名
$ 
sudo git clone -b dev_151015 https://github.com/グループ名/アプリ名.git
$ 
bundle install

データベース移行

$ 

rake db:migrate RAILS_ENV=production

■unicorn動作確認

$ gem install unicorn
$ sudo chmod 666 Gemfile.lock
$ bundle update
$ sudo chown -R okinaga: okinaga rails_app/
$ sudo firewall-cmd --add-port=3000/tcp
$ sudo vi config/secrets.yml

変数を指定し読み込む

$ sudo vi ~/.bash_profile
$ bundle exec unicorn_rails -l 3000 -E production

IPアドレス:3000で動作確認する


$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D

#プロセス確認を確認する。

$ ps -ef | grep unicorn | grep -v grep

$ kill -9 [Process ID]

■unicornとnginx連携 ファイル設定

$ sudo vi /etc/nginx/conf.d/rails_app.conf
server unix:/var/www/rails_app/shared/tmp/unicorn.sock fail_timeout=0;
server {
  listen 80;
  client_max_body_size 4G;
  server_name rails_app.co.jp;
  keepalive_timeout 5;
  root /var/www/rails_app/current/public;
  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    if (!-f $request_filename) {
      proxy_pass http://unicorn_server;
 break;
    }
  }

  error_page 500 502 503 504 /500.html;
  location = /500.html {
 root /var/www/rails_app;
 }

}
$ sudo vi /var/www/rails_app/current/config/unicorn/production.rb
@app_path = '/var/www/rails_app'
working_directory @app_path + "/current"

worker_processes 2
preload_app true
timeout 30
listen "#{@app_path}/shared/tmp/unicorn.sock", :backlog => 64
pid "#{@app_path}/shared/tmp/pids/unicorn.pid"</p>

stderr_path "#{@app_path}/shared/log/unicorn.stderr.log"
stdout_path "#{@app_path}/shared/log/unicorn.stdout.log"

before_fork do |server, worker|
  ENV['BUNDLE_GEMFILE'] = File.expand_path('Gemfile', ENV['RAILS_ROOT'])
end

before_fork do |server, worker|
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.connection.disconnect!
  end
  old_pid = "#{server.config[:pid]}.oldbin"
  if File.exists?(old_pid) &amp;&amp; server.pid != old_pid
    begin
      Process.kill("QUIT", File.read(old_pid).to_i)
      rescue Errno::ENOENT, Errno::ESRCH
    end
  end
end

after_fork do |server, worker|
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.establish_connection
  end
end

雑記:改めて文字に起こしてみると、
自分がわかっている部分とまだわかっていない部分が明確になりますね。


「CentOS7 でrailsの環境構築」への6件のフィードバック

    1. 通りすがりさま

      ご指摘ありがとうございます。
      ミスですので、修正しておきます
      sudo は不要でした。;;

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です