1. 安裝 Ubuntu 16.04 Host
我們使用docker來安裝rails應用程式
使用docker有以下好處
1. 可將rails應用程式,連同執行環境
發布至任何可以執行docker的linux機器
2. 開發環境和執行環境分離,host機器上無需安裝ruby
3. 可自在的測試各種rails版本
2. 登入帳號以 rails ( UID = 1000 ) 為範例
我們會在docker上創建一個一模一樣的帳號(UID = 1000)
這樣的好處在於docker rails可以和host機器共用檔案
因為我們會凍結docker rails的執行環境
程式碼由host的IDE(rubymine,vs core等)來負責更新
而rails站台產生的永續資料,也不會因為container的關閉而消失
3. 安裝docker套件
sudo apt-get update
sudo apt-get install docker.io
sudo docker pull ubuntu:16.04
4.設定ubuntu image
啟動ubuntu container
sudo docker run -t -i ubuntu:16.04 /bin/bash
在container中安裝相依套件
apt-get update
apt-get install vim
apt-get install build-essential
apt-get install bison
apt-get install openssl
apt-get install libreadline6
apt-get install libreadline6-dev
apt-get install curl
apt-get install zlib1g
apt-get install zlib1g-dev
apt-get install libssl-dev
apt-get install libyaml-dev
apt-get install libsqlite3-0
apt-get install libsqlite3-dev
apt-get install sqlite3
apt-get install libxml2-dev
apt-get install libxslt-dev
apt-get install autoconf
apt-get install libc6-dev
apt-get install nodejs
apt-get install libcurl4-openssl-dev
apt-get install imagemagick
apt-get install wget
apt-get install sudo
apt-get install tzdata
5. 編譯ruby直譯器
可以至官網下載新版原始碼
cd ~
wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.gz #下載原始碼
tar zxv -f ruby-2.4.2.tar.gz #解壓縮
cd ruby-2.4.2 #進入原始碼目錄
./configure #產生Makefile
make #開始編譯
make install #安裝
ruby -v #測試ruby
6. 建立帳號
這個帳號要與host的登入帳號UID一樣
系統建立時第一個帳號UID為1000
這樣container和host可以共用資料夾
useradd rails -m -s /bin/bash
passwd rails
7. 安裝rails
gem install rails --no-ri --no-rdoc #使用gem來安裝rails
exit #離開docker container
8. 將container儲存為docker image
我們剛才的container需要儲存為docker image
從此之後便可以任意啟動,拷貝至其他dockersudo docker ps -a
你可以看見這樣的訊息
CONTAINER ID IMAGE COMMAND CREATED STATUS
e495fd4faaf7 ubuntu:16.04 "/bin/bash" 24 hours ago Exited
記下CONTAINER ID
本例是e495fd4faaf7
以下指令可以將container儲存成image
sudo docker commit -m "註解打這裡" e495fd4faaf7 rails
以下指令可以看見剛才新增的image
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rails latest 5feec0b18ece About a minute ago 1.168 GB
9.啟動rails執行環境
sudo docker run -t -i --rm -p 3000:3000 -v /home/rails:/home/rails rails sudo -i -u rails /bin/bash
參數解析
-t -i綁定標準輸出入
-rm
離開container就立即刪除
-p 3000:3000
將 主機 3000 port 導向 container 3000 port
-v /home/rails:/home/rails
將 主機的家目錄綁定到 container 的家目錄
1.你在container家目錄所做的變更( rails new, rails generate 等等 )都會反映到主機家目錄
2.主機的IDE(rubymine,vs core等等)的編輯結果,container也存取得到
-i -u rails /bin/bash
以使用者rails登入container
10. 於conatiner環境中執行rails指令
cd ~
rails new ggg --skip-bundle
cd ggg ; bundle install --path=vendor/bundle
rails s -b 0.0.0.0
此時打開host端瀏覽器輸入http://127.0.0.1:3000即可看見 welcome 頁面
最後
rails從5.0開始的預設應用伺服器是puma,不再是webrick
所以我們只要安裝ngnix做反向代理伺服器
接著讓puma執行在product模式便足敷使用