慕凡(@ryudoawaru)'s blog

目前還沒想到

Install Ruby / Rails / Passenger / PostgreSQL Stack in RHEL and Variant OS (前篇)

| Comments

在敝公司五倍紅寶石每期的RUBY ON RAILS 從零開始課程中,常常會遇到學員詢問如何在 LinodeDigital Ocean 這類 VPS 平台中安裝 Ruby / Rails Stack 的相關問題,以下的文章將簡介在目前最新版的 RHEL 系 OS 上安裝 Rails Stack 的步驟。

本篇文章的 Rails Stack 包含:

  1. 系統上可以跑多重版本的 Ruby
  2. Rails 5
  3. PostgreSQL 9.6
  4. 使用 Passenger 為 Application Server,Nginx 為 Web Frontend Server

本篇文章適用的 Linux Distribution:

  1. RedHat Enterprise 7
  2. CentOS 7
  3. Fedora 24+
  4. 其它 RHEL 衍生的,以 systemd 為啟動系統的 Linux Distribution 們 (理論上)

從乾淨的 OS 開始,步驟大致如下:

  • 安裝必要套件
  • 安裝 PGDG Repo & PostgreSQL
  • 編譯 Ruby
  • 安裝與編譯 Passenger / Nginx Extension
  • 編譯 Nginx
  • 啟動設定
  • Logrotate 設定

注意:以下所有步驟皆需以 root 身份或 sudo 執行

安裝必要套件

1
yum groupinstall "Development Tools"

如果是 Fedora 的話,通常還會有 “C Development Tools and Libraries” 和 “D Development Tools and Libraries” 兩種

1
yum install v8-devel v8 screen libmcrypt-devel wget libxslt-devel libxml2-devel gdbm-devel libffi-devel zlib-devel openssl-devel libyaml-devel readline-devel curl-devel  pcre-devel git memcached-devel valgrind-devel ImageMagick-devel ImageMagick npm geoip-devel pcre-devel gd-devel openssl-devel

套件說明:

主要是針對編譯 Ruby 所需,以及其它常見的 RubyGem 如 RMagick 或是 Asset Pipeline 編譯 JS 所需要的套件等。

安裝 PGDG Repo / PostgreSQL

什麼是 PGDG

PGDG (PostgreSQL Global Development Group) 是 PostgreSQL (以下簡稱 PgSQL) 的開發單位的簡稱,PGDG Repo 是 PgSQL 的官方為各大 Linux Distribution 提供的套件庫。

安裝步驟:

這邊找到對應的 PgSQL 版本與 Distribution 的對應 RPM Url 後,在 Console 下:

以 Fedora 25 + PgSQL 9.6 為例:

1
rpm -Uvh https://download.postgresql.org/pub/repos/yum/9.6/fedora/fedora-25-x86_64/pgdg-fedora96-9.6-3.noarch.rpm

然後安裝 PgSQL Server 與開發套件

1
yum install postgresql96 postgresql96-devel postgresql96-server postgresql96-libs postgresql96-contrib

請注意如果你安裝的不是 9.6 的話,請將上面的 96 改成對應的版號即可

編譯 Ruby

這邊不使用 rvm 或 rbenv 等 Ruby 版本管理套件,而是採用將不同的 Ruby 版本安裝到不同路徑的方式來解決可能在 Server 上同時運行多版本 Ruby 的需求。

路徑設定原則:

例如 2.3 就安裝到 /usr/local/ruby23,2.4就在 /usr/local/ruby24 以此類推

流程:

  • 下載 CRuby source code
1
cd /usr/src && wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.3.tar.bz2
  • 解壓縮
1
tar -jxvf ruby-2.3.3.tar.bz2
  • configure
1
cd ruby-2.3.3 && ./configure --prefix=/usr/local/ruby23
  • make
1
make && make install

其它版本可以比照辦理。

安裝 Passenger 與 Nginx Module

  • 在執行任何 Ruby 指令前請記得設定系統路徑到要使用 Ruby 版本的 bin 目錄,例如:
1
export PATH=$PATH:/usr/local/ruby23/bin:

或是把以上內容加到 ~/.bash_profile 的尾端,讓每次登入時自動執行。

  • 安裝 bundler & passenger Gem
1
gem install passenger bundler

此時要注意安裝的 Passenger 版號,進入 Passenger 目錄編譯 Passenger Nginx Module,以 Ruby 2.3 和 Passenger 5.1.1 為例:

1
2
cd /usr/local/ruby23/lib/ruby/gems/2.3.0/gems/passenger-5.1.1/
rake nginx
  • 下載 Nginx 源碼並使用編譯好的 Passenger Module 編譯 (以 1.10.1 版為例)
1
2
3
4
5
6
7
cd /usr/src && wget http://nginx.org/download/nginx-1.10.1.tar.gz

tar -zxvf nginx-1.10.1.tar.gz && cd nginx-1.10.1

./configure --with-http_v2_module --with-http_ssl_module --prefix=/usr/local/nginx --with-http_image_filter_module --with-http_gzip_static_module --with-http_secure_link_module --with-http_stub_status_module --add-module="/usr/local/ruby23/lib/ruby/gems/2.3.0/gems/passenger-5.1.1/src/nginx_module"

make && make install #這裡會將 Nginx 安裝到 /usr/local/nginx 下

至此為止 Nginx 已設定完成,後續操作請看下篇

Comments