在服務器上部署 rails 項目筆記

前言:作 java 的時候,有接觸過服務器部署,當時是把 java 項目打成 war 包,而後上傳到服務器。接觸 ruby 語言以後,只侷限於開發模塊,實現功能,工做環境中嘗試折騰下服務器的機會不多,因此本身買了個服務器,本身找了個rails項目,是一個小的博客,想着弄個我的域名,掛在網上。並且正好能夠學下部署,纔有了這個筆記。java

一:安裝rvm、ruby、rails

安裝常見的系統依賴

sudo apt-get update
sudo apt-get install -y curl
curl -sSL https://git.io/vVHhe | bash

2.安裝 rvm

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL https://get.rvm.io | bash -s stable
source ~/.bashrc
source ~/.bash_profile

3.Ruby的安裝與切換

列出已知的Ruby版本

rvm list known

安裝一個Ruby版本

rvm install 2.3.1

這裏安裝了2.3.1,rvm list known列表裏面的均可以拿來安裝node

切換Ruby版本

rvm use 2.3.1

若是想設置爲默認版本,這樣一來之後新打開的控制檯默認的 Ruby 就是這個版本mysql

rvm use 2.3.1 --default

查詢已經安裝的ruby

rvm list

卸載一個已安裝版本(這步不要執行,只是告訴你rvm有這個操做)

rvm remove 2.2.0

4.安裝Rails

gem install rails -v 5.1.4

成功以後是這樣的 deploy_1.pnglinux

5.把本地項目上傳到服務器

scp -r folder root@ip:/root/

#folder是要複製的目錄
#ip是新服務器的ip

#二:安裝mysql、nginix、thinnginx

1.安裝mysql數據庫

sudo apt-get install mysql-server mysql-client libmysqlclient-dev

2.rails服務器thin的安裝

Thin是Rails的服務器,它實現了event machine,理論上能夠達到node同樣的效果,不過要看具體的業務邏輯。git

thin命令的基本用法 thin start|stop|restart 開啓|關閉|重啓sql

安裝thin的gem包

gem install thin

在4000端口啓動

bundle exec thin start -p 4000

這裏使用配置文件來啓動,在config下建立 thin.yml數據庫

chdir: '/root/RBlog' #這裏須要修改爲實際你項目的地址(好比我如今的項目地址是/root/RBlog)
environment: development
address: 0.0.0.0
port: 6661
timeout: 30
log: log/thin.log
pid: tmp/pids/thin.pid
max_conns: 1024
max_persistent_conns: 512
require: []
wait: 30
servers: 4
daemonize: true

執行命令:ubuntu

bundle exec thin start -C config/thin.yml

上面的意思是, 讓你的Rails應用(部署在 /opt/app/current 目錄下), 啓動在 4個端口(6661~6664)上,而且都是已 daemon 的形式來運行中止時,可使用 thin stop -C config/thin.yml, 也能夠直接kill all thin瀏覽器

3.安裝nginx

server {
   listen 80;
   charset utf-8;
   location / {
       proxy_pass          http://rails_servers;
       proxy_redirect      default;
       proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header    X-Real-IP $remote_addr;
       proxy_set_header    Host $http_host;
       proxy_next_upstream http_502 http_504 error timeout invalid_header;
  }
}
upstream rails_servers{
      server 127.0.0.1:6661;
      server 127.0.0.1:6662;
      server 127.0.0.1:6663;
      server 127.0.0.1:6664;
}

執行rails -t 測試一下配置文件是否成功 ubuntu_2.png

4.重啓nginx

nginx -s reload

這裏簡單說下nginx+thin

nginx至關於一個代理,當你在瀏覽器輸入:http://sai.com (我本身隨便模擬的域名,這個域名不存在) 的時候,先經過dns找到這個域名對應的ip,而後經過路由到達ip所在的服務器上,服務器發現用戶請求的是sai.com,而後nginx就根據配置文件裏配置sai.com,找到對應的項目,這個rails項目是由thin啓動的,而後nginx就把這個事交給thin,thin收到後就根據路由去到對應的controller,而後返回對應的頁面給到瀏覽器。

三:最後,再說下怎麼免輸入密碼登錄

ssh 無密碼登陸要使用公鑰與私鑰。linux下能夠用用ssh-keygen生成公鑰/私鑰對。

好比有機器A(192.168.1.155),B(192.168.1.181),現想A經過ssh免密碼登陸到B。

1.在A機下生成公鑰/私鑰對。

ssh-keygen -t rsa -P ''

-P表示密碼,-P '' 就表示空密碼,也能夠不用-P參數,這樣就要三車回車,用-P就一次回車。 它在家(/home/用戶名)下生成.ssh目錄,.ssh下有id_rsa和id_rsa.pub。

2.把A機下的id_rsa.pub的內容複製到B機下的.ssh/authorized_keys文件裏。

再從新ssh登陸就能夠免掉密碼了

相關文章
相關標籤/搜索