Help us understand the problem. What is going on with this article?

VPS上のCentOS 7にRails環境を構築する

More than 5 years have passed since last update.

RailsアプリをCentOSのApache上でサブディレクトリ(hogehoge.com/piyo)で動作させる方法についてまとめてみました。
[環境]CentOS7、Ruby2.1.4、Rails4.1.7、rbenv0.4.0-129-g7e0e85b、Passenger4.0.531

必要なソフトウェアのインストール

$ sudo yum -y update && sudo yum -y install git sqlite sqlite-devel httpd-devel curl-devel apr-devel apr-util-devel libffi-devel openssh
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
~~略~~
完了しました!

rbenv、ruby-build、Rubyのインストール

$ cd /usr/local
$ sudo git clone git://github.com/sstephenson/rbenv.git
Cloning into 'rbenv'...
remote: Counting objects: 2002, done.
remote: Total 2002 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (2002/2002), 318.88 KiB | 186.00 KiB/s, done.
Resolving deltas: 100% (1249/1249), done.
$ sudo mkdir rbenv/plugins && cd rbenv/plugins
$ sudo git clone git://github.com/sstephenson/ruby-build.git
Cloning into 'ruby-build'...
remote: Counting objects: 4031, done.
remote: Total 4031 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (4031/4031), 701.51 KiB | 267.00 KiB/s, done.
Resolving deltas: 100% (2043/2043), done.


$ sudo visudo -f /etc/sudoers.d/rbenv

#↓追加
Defaults !secure_path
Defaults env_keep += "PATH RBENV_ROOT"

$ sudo vim /etc/profile.d/rbenv.sh

#↓追加
export RBENV_ROOT="/usr/local/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"

#ここまでできたら一度ログアウトし再度ログインしてください。

$ sudo chmod -R 777 /usr/local/rbenv
$ rbenv install 2.1.4 #他のバージョンでも可
Downloading ruby-2.1.4.tar.gz...
-> http://
Installing ruby-2.1.4...


$ rbenv global 2.1.4 #他のバージョンをインストールした場合はそのバージョンを指定する
$ rbenv rehash

必要なgemのインストール

$ gem install rails passenger therubyracer sqlite3 bundler
Fetching: thread_safe-0.3.4.gem (100%)
Successfully installed thread_safe-0.3.4
Fetching: tzinfo-1.2.2.gem (100%)
Successfully installed tzinfo-1.2.2
~~略~~
33 gems installed

passengerモジュールをApacheにインストール

$ sudo passenger-install-apache2-module
/usr/local/rbenv/versions/2.1.4/lib/ruby/gems/2.1.0/gems/passenger-4.0.53/bin/passenger-install-apache2-module:42: warning: Insecure world writable dir /usr/local/rbenv/versions/2.1.4/bin in PATH, mode 040777
Welcome to the Phusion Passenger Apache 2 module installer, v4.0.53.

This installer will guide you through the entire installation process. It
shouldn't take more than 3 minutes in total.

Here's what you can expect from the installation process:

 1. The Apache 2 module will be installed for you.
 2. You'll learn how to configure Apache.
 3. You'll learn how to deploy a Ruby on Rails application.

Don't worry if anything goes wrong. This installer will advise you on how to
solve any problems.

Press Enter to continue, or Ctrl-C to abort.
#enterを押す

--------------------------------------------

Which languages are you interested in?

Use <space> to select.
If the menu doesn't display correctly, press '!'

 ‣ ⬢  Ruby
   ⬢  Python
   ⬡  Node.js
   ⬡  Meteor
#enterを押す

--------------------------------------------

Checking for required software...

 * Checking for C compiler...
      Found: yes
      Location: /usr/bin/cc
 * Checking for C++ compiler...
      Found: yes
      Location: /usr/bin/c++
 * Checking for Curl development headers with SSL support...
~~略~~

--------------------------------------------
Almost there!

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /usr/local/rbenv/versions/2.1.4/lib/ruby/gems/2.1.0/gems/passenger-4.0.53/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /usr/local/rbenv/versions/2.1.4/lib/ruby/gems/2.1.0/gems/passenger-4.0.53
     PassengerDefaultRuby /usr/local/rbenv/versions/2.1.4/bin/ruby
   </IfModule>

After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!

Press ENTER to continue.
#enterを押す


--------------------------------------------

Deploying a web application: an example

Suppose you have a web application in /somewhere. Add a virtual host to your
Apache configuration file and set its DocumentRoot to /somewhere/public:

   <VirtualHost *:80>
      ServerName www.yourhost.com
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /somewhere/public    
      <Directory /somewhere/public>
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options -MultiViews
         # Uncomment this if you're on Apache >= 2.4:
         #Require all granted
      </Directory>
   </VirtualHost>

And that's it! You may also want to check the Users Guide for security and
optimization tips, troubleshooting and other useful information:

  /usr/local/rbenv/versions/2.1.4/lib/ruby/gems/2.1.0/gems/passenger-4.0.53/doc/Users guide Apache.html
  https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html

Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)
https://www.phusionpassenger.com

Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.

Apacheへの設定追加

$ passenger-install-apache2-module --snippet > ~/passenger.conf
$ sudo mv ~/passenger.conf /etc/httpd/conf.d/
$ sudo vim /etc/httpd/conf.d/rails.conf

NameVirtualHost *:80
<VirtualHost *:80>
    PassengerEnabled On
    RailsEnv development
    RailsBaseURI /hellorails
</VirtualHost>
#↑追加

$ sudo systemctl restart httpd

テスト用のRailsアプリの作成

$ sudo mkdir /var/www/app && sudo chmod 777 /var/www/app && cd /var/www/app
$ rails new hellorails
      create  
      create  README.rdoc
      create  Rakefile
      create  config.ru
      create  .gitignore
      create  Gemfile
~~略~~
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.
         run  bundle exec spring binstub --all
* bin/rake: spring inserted
* bin/rails: spring inserted

$ cd hellorails
$ vim Gemfile

# gem 'therubyracer',  platforms: :ruby
#↓javascriptランタイムを有効にする
gem 'therubyracer',  platforms: :ruby

$ cd /var/www/html
$ ln -s /var/www/app/hellorails/public hellorails

SELinuxの無効化

$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28
$ sudo vim /etc/selinux/config 
#↑/etc/sysconfig/selinux ではなく

SELINUX=enforcing
#↓デフォルトの起動モードを変更
SELINUX=permissive

$ setenforce 0

http://[ドメイン名]/hellorails
でテストアプリへアクセスできるはずです。

参考リンク

rbenvをシステムワイドにインストールする » つくば日記(仮)
rbenv+ruby-buildをインストールする手順 (CentOS/RedHat) | WEB ARCH LABO
CentOSにPassenger/Ruby2.0/Rails4.0をインストールしてみる(rbenv版) - yk5656 diary
Linux(CentOS)のApache+PassengerでRuby on Railsを動かす
Apache 2.2 に Phusion Passenger をプラグインする手順 (CentOS/RedHat) | WEB ARCH LABO
Redmine 2.5をCentOS 6.5にインストールする手順 | Redmine.JP Blog
5.4. SELINUX の有効化および無効化

nametaketakewo
プログラミングできないので美味しい炒飯の作り方など投稿しようと思います。
https://nametaketakewo.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした