I. 寫在開始之前
在看Part2的同時,相信大家都已經根據Part1完成AWS帳號註冊以及伺服器的建立了!接著我們就要在伺服器上嘗試手動部署,也就是在Amazon EC2上使用Nginx+Passenger建立一個部署的環境,並將Rails網站部署在該伺服器上。
Nginx是目前最流行的網站伺服器之一,其運作效率高;而Passenger是一套Apache和Nginx的擴充模組,在部署Ruby on Rails上設定較為簡單,因此選擇兩者進行網站的部署。
II. 提醒事項
§ 確認伺服器已經建立完成,且可以SSH連線
§ 伺服器採用的是Ubuntu 14.04 LTS
§ 在本文中寫給讀者看的註解會使用 % 符號
§ [ ] 為reference,會將網址放在最後提供參照
§ 如果是終端機的指令前面會加上$,輸入時只需要輸入這個符號後的程式碼
III. 部署流程
「本機端」
本機端需要為Server端的部署做一些前置作業
1.將database.yml檔加入.gitignore
(1) 打開.gitignore檔
(2)在裡面加上
/config/database.yml
% 這一步驟很重要,因為database.yml裡面會有database設定的一些資料,不能被git紀錄,否則有些敏感的資訊可能就會被盜用。之後有一些含有secret之類的資料也要比照處理。
2.Gemfile修改
(1)將therubyracer的註解打開
(2)將sqlite3移到development的group裡面去(如果沒有就自己寫一個group),並且新增production group在裡面加入mysql2 gem
gem 'therubyracer', platforms: ruby
group :development do
gem 'sqlite3'
end
group :production do
gem 'mysql2', '~> 0.3.18'
end
% 後面兩個區塊是因為我們在production環境需要使用mysql資料庫,因此我們在專案中安裝mysql2 adapter好讓我們能跟資料庫溝通;原本使用的sqlite3就必須指定只有development環境才使用。
% mysql2的版本指定為0.3.18是因為Rails4.x.x會和最新版的mysql2有衝突
3.如果有使用devise gem的話必須到config/initializers/devise.rb中將以下uncomment(取消註解)
config.secret_key = ‘…....’
「Server端」
如同前一篇所設定,server端採用Ubuntu 14.04LTS
這邊讓我們來談一下伺服器。目前我們建立了一台遠端伺服器準備將專案deploy到上面好讓大家都可以看到網站。要有辦法這樣的話,首先我們就要設定該伺服器的環境,包括標題所述的Nginx、Passenger,以及需要的資料庫、rbenv(ruby的版本控制)等等,完成了這些以後我們再將專案放上去,讓server自動運行網站。
另外值得一提的是伺服器非常重視權限,在上面可以創建很多帳號,讓每個帳號都擁有不一樣的權限,這樣的話就比較不會因為不小心而弄壞了什麼東西。這些在後面也會實作到,所以這一篇的內容會比較多,希望大家有耐心的看下去。
1.首先先連線到server端
$ ssh -i <name>.pem ubuntu@<server_ip>
%
2.系統更新(在進行任何安裝之前將系統更新到最新)
依序輸入
$sudo apt-get update
$sudo apt-get upgrade
$sudo apt-get autoremove
% autoremove是將升級過程中用到但是升級完後不需要的套件刪除
3.設定時區
$sudo dpkg-reconfigure tzdata
4.安裝需要的套件
$sudo apt-get -y install build-essential git-core curl libssl-dev libreadline5 libreadline-gplv2-dev zlib1g zlib1g-dev libmysqlclient-dev libcurl4-openssl-dev libxslt-dev libxml2-dev
5.安裝system-wide rbenv(Ruby的版本控制)
參考 https://gist.github.com/v1nc3ntlaw/1441139
(1)安裝rbenv
$sudo git clone git://github.com/sstephenson/rbenv.git /usr/local/rbenv
(2)將rbenv加入PATH裡面(當run command時會去找PATH看對應的可用file)
$sudo vim /etc/profile.d/rbenv.sh
(進入vim編輯模式)
在編輯模式裡輸入(先按i,然後再把下面那段複製貼上)
export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"
完成後存檔退出(先按esc,再按:wq,再按Enter)
(3)修改權限
$sudo chmod +x /etc/profile.d/rbenv.sh
(將rbenv.sh加入可執行(executable)的權限)
(4)安裝ruby-build
$git clone git://github.com/sstephenson/ruby-build.git /tmp/ruby-build
$sudo /tmp/ruby-build/install.sh
(5)轉換權限至root
$sudo su -
(6)安裝Ruby(看你的專案ruby版本是什麼就安裝什麼)
$rbenv install 2.2.4
$rbenv global 2.2.4
$rbenv rehash
6.安裝ImageMagick
$apt-get install imagemagick
7.安裝MySQL
$sudo apt-get mysql-server
(中途輸入密碼,密碼要記得)
$sudo apt-get install libmysqlclient-dev mysql-com mysql-client
8.安裝Passenger
$gem install passenger
9.用Passenger安裝Nginx
(1)安裝Nginx
$passenger-install-nginx-module
% 過程中會需要你按三次enter,都直接按就好
(2)安裝Nginx init script
$git clone git://github.com/jnstq/rails-nginx-passenger-ubuntu.git
$sudo mv rails-nginx-passenger-ubuntu/nginx/nginx /etc/init.d/nginx
$sudo chown root:root /etc/init.d/nginx
(3)設定Nginx conf
$vim /opt/nginx/conf/nginx.conf
(進入vim編輯模式)
找到server的hash,在裡面加上(一樣要先按i才能編輯)
root /home/apps/training/public;
passenger_enabled on;
接著把server hash裡其他不重要的都刪掉,最後會是這樣
server {
listen 80;
server_name localhost;
root /home/apps/<app_name>/public;
passenger_enabled on;
}
% 其中
(4)重新開啟Nginx
$sudo /etc/init.d/nginx restart
(有寫OK的話代表成功)
10.進行apps帳號設定
(1) 先安裝必要的gem
$gem install bundle
$gem install execjs
(2)新增user
$sudo adduser apps
% 接下來的的操作都要用apps這個帳號,如果還沒切換可以輸入
$sudo su - apps
(3)確認ruby版本
$ruby -v
(2.2.4 correct)
(4) 產生ssh-key並貼到github上
$ssh-keygen
( 連按三次enter)
$more ~/.ssh/id_rsa.pub
(複製並貼到github ssh key設定的頁面上)
% 這步驟是要讓server可以直接提取github上面的專案
11.clone自己的專案
$git clone git@github.com:alan123/training.git
% 上面是範例github以及專案名稱,要把那邊換成你們自己的
% 而”git@github”這樣的連結代表我是用SSH方法去github拿專案,如果上一步沒設定好這一步就無法成功
12.設定config/database.yml
production:
adapter: mysql2
encoding: utf8
database: training
pool: 5
username: root
password: ""
socket: /var/run/mysqld/mysqld.sock
% 當你把專案clone過來之後,你的server上就有一份完整的專案,資料夾結構就和你本機端的一模一樣,你可以輸入ls看目前這一層有什麼檔案和資料夾。要進到config/database.yml就必須
$vim training/config/database.yml
(training要換成你的專案名稱)
% 另外裡面的database要換成你的專案名稱,password要填入你前面在設定MySQL時設定的值
13.安裝專案需要的gem&跑rake任務
(1)安裝專案gem
$cd training
(training改為你的專案名稱)
$bundle install
% 接著應該會噴錯誤,他會告訴你apps這個帳號不夠權限安裝gem(在系統層)如下
Your user account isn’t allowed to install to the system Rubygems.% 但由於apps是我們設定用來deploy的,不應該給他太多權限,這樣才能以防萬一,因此根
You can cancel this installation and run:
bundle install –path vendor/bundle
to install the gems into ./vendor/bundle/, or you can enter your password and install the bundled gems to Rubygems using sudo.
據建議我們將gem安裝在 vendor/bundle裡面
$bundle install --path vendor/bundle --without development test
% 上面順便讓development和test group裡面的gem不會被安裝,因為我們根本用不到,第一次安裝好後,以後都只需要bundle install即可
(2)跑rake任務
$RAILS_ENV=production bundle exec rake db:create
$RAILS_ENV=production bundle exec rake db:migrate
$RAILS_ENV=production bundle exec rake assets:precompile
% 上面分別是建立資料庫、遷移資料庫、將靜態檔案precompile
(3)在config/secrets.yml中加上production的密碼
$vim config/secrets.yml
(進入vim編輯模式)
可以直接將development的secret_key_base複製貼到production上
development:
secret_key_base: c5c5c4e1fa5b620d39b384c8169
test:
secret_key_base: e5515ebeade651145843b86f755
production:
secret_key_base: c5c5c4e1fa5b620d39b384c8169
14.重開nginx,看是否成功
$sudo /etc/init.d/nginx restart
15.在瀏覽器輸入server的ip,看看網站首頁有沒有出現,有的話就成功啦!!
I am really happy with your blog because your article is very unique and powerful for new reader.
回覆刪除Click here:
Selenium Training in Chennai | Selenium Training in Bangalore | Selenium Training in Pune | Selenium online Training
Smm panel
回覆刪除Smm Panel
iş ilanları
İnstagram Takipçi Satın Al
hırdavatçı burada
beyazesyateknikservisi.com.tr
servis
tiktok jeton hilesi
Good content. You write beautiful things.
回覆刪除korsan taksi
mrbahis
vbet
mrbahis
hacklink
sportsbet
sportsbet
vbet
taksi
Good text Write good content success. Thank you
回覆刪除betpark
betmatik
kibris bahis siteleri
kralbet
slot siteleri
mobil ödeme bahis
poker siteleri
tipobet
https://saglamproxy.com
回覆刪除metin2 proxy
proxy satın al
knight online proxy
mobil proxy satın al
87SDLC
bitlis
回覆刪除kastamonu
çorum
van
sakarya
7M6GG
rize evden eve nakliyat
回覆刪除muğla evden eve nakliyat
kırıkkale evden eve nakliyat
mardin evden eve nakliyat
istanbul evden eve nakliyat
1NS
href="https://istanbulolala.biz/">https://istanbulolala.biz/
回覆刪除KD2
FAA95
回覆刪除order primobolan
order masteron
masteron for sale
Antep Evden Eve Nakliyat
Balıkesir Evden Eve Nakliyat
Mersin Evden Eve Nakliyat
order steroids
order trenbolone enanthate
Silivri Duşa Kabin Tamiri
0AE12
回覆刪除gümüşhane kadınlarla sohbet
hakkari bedava sohbet siteleri
konya kadınlarla ücretsiz sohbet
rastgele görüntülü sohbet uygulaması
izmir canli sohbet chat
mobil sesli sohbet
sakarya kızlarla rastgele sohbet
zonguldak ücretsiz sohbet odaları
antep canlı sohbet odaları
6325A
回覆刪除Görüntülü Sohbet
Clubhouse Takipçi Satın Al
Okex Borsası Güvenilir mi
Likee App Beğeni Satın Al
Binance Komisyon Ne Kadar
Referans Kimliği Nedir
Binance Hesap Açma
Görüntülü Sohbet
Twitter Retweet Hilesi
D3467
回覆刪除uniswap
pancakeswap
layerzero
satoshivm
dappradar
poocoin
dao maker
pudgy penguins
quickswap
B1252
回覆刪除Güzelyurt
Çavdarhisar
Akhisar
Keçiören
Serinhisar
Çınarcık
Hilvan
Çanakkale
Twitter Türk İfşa
XFHBFGNJHY
回覆刪除شركة تنظيف
YJGIYHUGUH
回覆刪除شركة مكافحة النمل الابيض بالجبيل
شركة عزل اسطح بمكة GtsCBqQaZU
回覆刪除