21步搞定Rails+pgsql+nginx項(xiàng)目部署

··

NO.1購(gòu)買(mǎi)域名并做域名解析

NO.2購(gòu)買(mǎi)主機(jī)

NO.3測(cè)試主機(jī)聯(lián)通

ping x.x.x.x

NO.4登錄到服務(wù)器

ssh root@x.x.x.x
輸入服務(wù)器提供商給你的密碼

NO.5 新建一個(gè)用戶(hù)來(lái)部署

adduser youngi --ingroup sudo
輸入密碼派歌,然后一直回車(chē)
然后切換到你新建的用戶(hù)su youngi,回到y(tǒng)oungi的主目錄 cd ~,就回到了youngi的主目錄

NO.6 安裝ruby

更新一下系統(tǒng)軟件倉(cāng)庫(kù)列表:
sudo apt-get update
安裝一些后面需要的庫(kù)和軟件:

                     libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 \
                     libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common````
安裝rbenv
rbenv 是一個(gè)安裝 ruby 和管理控制多個(gè) ruby 版本的工具
```cd
git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL```

安裝ruby
先安裝rvm
sudo apt-get install -y curl
curl -sSL https://git.io/vVHhe | bash
MIRROR=1 curl -sSL https://git.io/vVHhJ | bash
curl -sSL https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
rvm -v
RVM安裝好之后,安裝ruby
rvm install 2.1.2
rvm use 2.1.2 --default,設(shè)置默認(rèn)ruby版本的時(shí)候報(bào)錯(cuò)
`RVM is not a function, selecting rubies with 'rvm use ...' will not work.`
bash --login運(yùn)行這條命令后正常

youngi@iZ94qfjktlwZ:~$ rvm user 2.1.2 --default
Unrecognized option '2.1.2'.
Usage: rvm user [[gemsets] [rubies] [hooks] [pkgs] [wrappers] [all] [--skel]|none]報(bào)錯(cuò)

rvm reinstall ruby-2.1.2 --verify-downloads 2 解決
或者rvm use 1.9.2@newgemset --create --default

####NO.7 安裝rails
gem install rails

安裝rails報(bào)錯(cuò)偷俭,修改源
gem sources -r https://rubygems.org/
gem sources -a https://ruby.taobao.org/
gem install rails

####NO.8 安裝數(shù)據(jù)庫(kù)(pgsql)
客戶(hù)端安裝
`sudo apt-get install postgresql-client`
服務(wù)器安裝
`sudo apt-get install postgresql postgresql-contrib`
獲取Installing PostGIS, procedural languages, client interfaces等插件列表
`apt-cache search postgres`
Ruby PG gem安裝焕议,需要生成Native Extension
首先安裝相應(yīng)package
`sudo apt-get install libpq-dev`
找到pg_config所在位置
`sudo find / -name pg_config`
安裝pg gem
`gem install pg -- --with-pg-config=/usr/bin/pg_config`
到這里位置茄菊,數(shù)據(jù)庫(kù)就安裝完成了


####NO.9創(chuàng)建數(shù)據(jù)庫(kù)
pgsql初次安裝后唱捣,默認(rèn)生成一個(gè)名為postgres的數(shù)據(jù)庫(kù)和一個(gè)名為postgres的數(shù)據(jù)庫(kù)用戶(hù)舶胀。這里需要注意的是概说,同時(shí)還生成了一個(gè)名為postgres的Linux系統(tǒng)用戶(hù)。
1首先切換到postgres的Linux系統(tǒng)用戶(hù)
sudo su - postgres
2使用psql登錄數(shù)據(jù)庫(kù)
psql
3使用\password命令嚣伐,為postgres用戶(hù)設(shè)置一個(gè)密碼糖赔。
4.設(shè)置完密碼后創(chuàng)建一個(gè)用戶(hù)
CREATE USER youngi WITH PASSWORD '123345';(分號(hào)不能少)
5.創(chuàng)建數(shù)據(jù)庫(kù)
CREATE DATABASE nineseven OWNER youngi;
6.第四件事是將nineseven數(shù)據(jù)庫(kù)的所有權(quán)限都賦予youngi,否則youngi只能登錄控制臺(tái)轩端,沒(méi)有任何數(shù)據(jù)庫(kù)操作權(quán)限挂捻。
GRANT ALL PRIVILEGES ON DATABASE nineseven to youngi;


####NO.10 安裝imagemagick 6.9+版本(如果項(xiàng)目中用了RuCaptcha圖形驗(yàn)證碼gem包):
sudo apt-get install libmagick++-dev
wget http://www.imagemagick.org/download/ImageMagick.tar.gz
tar xzf ImageMagick.tar.gz
cd ImageMagick-6.9.3-7/
./configure
make
sudo make install
convert -list configure
/usr/local/bin/convert: error while loading shared libraries: libMagickCore-6.Q16.so.2: cannot open shared object file: No such file or directory
sudo ldconfig
convert -list configure
convert -version

####NO.11 安裝nginx

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7

讓 apt-get 支持 https
````sudo apt-get install apt-transport-https ca-certificates
sudo add-apt-repository 'deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main'
sudo apt-get update

安裝 nginx 和 passenger,注意這樣安裝,就不用執(zhí)行 passenger-install-nginx-module了刻撒,以前的運(yùn)行這個(gè)命令的時(shí)候經(jīng)常會(huì)出現(xiàn)由于內(nèi)存不夠?qū)е聢?zhí)行失敗骨田,很煩人的。

sudo apt-get install nginx-extras passenger
現(xiàn)在瀏覽器中訪問(wèn) happypeter.org 就可以看到 nginx 的默認(rèn)頁(yè)面了声怔,如果你看不到态贤,證明 nginx 沒(méi)有裝好。

NO.12 安裝 javascript 的運(yùn)行環(huán)境醋火,這個(gè)是跑 rails 應(yīng)用必須的悠汽。

sudo apt-get install nodejs

NO.13 通過(guò) scp 或者更為常見(jiàn)的用 git clone 命令用 github.com 上把代碼 clone 到服務(wù)器上。

拉下來(lái)代碼
scp 源碼 youngi@112.74.39.180:/home/youngi

NO.14 安裝 bundler芥驳,并用它來(lái)把項(xiàng)目需要的依賴(lài)包都安裝好

gem install bundler
rbenv rehash
cd meetup/
bundle

NO.15 然后執(zhí)行遷移文件柿冲,因?yàn)閿?shù)據(jù)庫(kù)前面已經(jīng)建好

bundle exec rake db:migrate RAILS_ENV=production
bundle exec rake db:seed RAILS_ENV=production

NO.16 把 js/css 等 asset 文件做預(yù)處理

bundle exec rake assets:precompile RAILS_ENV=production

NO.17 修改nginx配置

打開(kāi) nginx 的配置文件:
sudo vim /etc/nginx/nginx.conf
找到下面的兩行,取消注釋
passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/bin/ruby;
并把第二行改為
如果是用.rbenv安裝的ruby
passenger_ruby /home/peter/.rbenv/shims/ruby;
如果是用rvm安裝的ruby
passenger_ruby /home/youngi/.rvm/wrappers/ruby-2.1.2/ruby;
這里有個(gè)小技巧兆旬,就是在輸入路徑時(shí)假抄。按Ctrl+x+f這三個(gè)按鈕,可以自動(dòng)提示

NO.18 然后要來(lái)為項(xiàng)目丽猬,專(zhuān)門(mén)創(chuàng)建一個(gè)服務(wù)器配置文件宿饱。

cd /etc/nginx/sites-enabled
rm default
sudo vim nineseven.conf
寫(xiě)入如下內(nèi)容:
server {
listen 80 default;
server_name 97gun.com;
passenger_enabled on;
gzip on;
root /home/youngi/97gun/public;
}
修改完配置后,重啟服務(wù)器
sudo service nginx restart

NO.19 訪問(wèn)域名脚祟,發(fā)現(xiàn)報(bào)錯(cuò)

"Incomplete response received from application"
查看nginx報(bào)錯(cuò)信息:
發(fā)現(xiàn)信息如下:"from /home/youngi/.rvm/gems/ruby-2.1.2/gems/railties-4.2.5.2/lib/rails/application.rb:534:in `validate_secret_key_config!"

解決辦法:回到項(xiàng)目目錄谬以,執(zhí)行命令 rake secret
然后將生成的一串字符填入vim config/secrets.yml中的production下的secret_key_base中

NO.20 重啟nginx服務(wù)器

sudo service nginx restart
項(xiàng)目部署完成

NO.21 部署完成后新建task以生成管理員賬號(hào)

在lib下的tasks下面新建文件init.rake
namespace :init do
desc "add super admin"
task :super_admin => [:environment] do
User.create!(
name: "超級(jí)管理員",
mobile: "xxxx",
password: "xxxxx",
is_admin: true)
end
end

然后運(yùn)行rake init:super_admin RAILS_ENV=production

其他技巧:
為了安全起見(jiàn),也可以把數(shù)據(jù)庫(kù)密碼和其他參數(shù)放在環(huán)境變量中
編寫(xiě)環(huán)境變量
vim ~/.rails_env
載入環(huán)境變量
source ~/.rails_env

常用命令:
查看生產(chǎn)環(huán)境信息命名
tail -f log/production.log
nginx重啟命令
sudo service nginx restart
查看nginx報(bào)錯(cuò)命令
sudo tail -f /var/log/nginx/error.log
修改pgsql連接參數(shù)
vim /etc/postgresql/9.3/main/pg_hba.conf

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末由桌,一起剝皮案震驚了整個(gè)濱河市为黎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌行您,老刑警劉巖碍舍,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異邑雅,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)妈经,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)淮野,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人吹泡,你說(shuō)我怎么就攤上這事骤星。” “怎么了爆哑?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵洞难,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我揭朝,道長(zhǎng)队贱,這世上最難降的妖魔是什么色冀? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮柱嫌,結(jié)果婚禮上锋恬,老公的妹妹穿的比我還像新娘。我一直安慰自己编丘,他們只是感情好与学,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著嘉抓,像睡著了一般索守。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抑片,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天卵佛,我揣著相機(jī)與錄音,去河邊找鬼蓝丙。 笑死级遭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的渺尘。 我是一名探鬼主播挫鸽,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鸥跟!你這毒婦竟也來(lái)了丢郊?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤医咨,失蹤者是張志新(化名)和其女友劉穎枫匾,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體拟淮,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡干茉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了很泊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片角虫。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖委造,靈堂內(nèi)的尸體忽然破棺而出戳鹅,到底是詐尸還是另有隱情,我是刑警寧澤昏兆,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布枫虏,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏隶债。R本人自食惡果不足惜腾它,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望燃异。 院中可真熱鬧携狭,春花似錦、人聲如沸回俐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)仅颇。三九已至单默,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忘瓦,已是汗流浹背搁廓。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耕皮,地道東北人境蜕。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像凌停,于是被迫代替她去往敵國(guó)和親粱年。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • https://github.com/ruby-china/homeland/wiki/Ubuntu-12.04-...
    狂猿閱讀 688評(píng)論 0 0
  • Awesome Ruby Toolbox Awesome A collection of awesome Ruby...
    debbbbie閱讀 2,778評(píng)論 0 3
  • 當(dāng)時(shí)是哪樣執(zhí)著留著你罚拟?守在舊歲月的房子里台诗。 當(dāng)時(shí)我愛(ài)極了那走廊上的陽(yáng)光, 我說(shuō)我在一個(gè)地方呆久了赐俗,能聞得出春夏秋冬...
    木土有阿杜閱讀 517評(píng)論 1 2
  • 我認(rèn)為最關(guān)鍵的問(wèn)題是什么呢拉队?我可以說(shuō)啊是這個(gè)流量的粉絲,沒(méi)有流量做不起來(lái)的阻逮,尤其對(duì)于我們很多的新手來(lái)講是最困難的粱快,...
    小卡陳閱讀 357評(píng)論 0 1
  • 鋼筋混凝土梁式橋通常包括簡(jiǎn)支梁(T型梁事哭、少筋微彎板組合梁、π形梁及板梁等)币励、懸臂梁和連續(xù)梁等。當(dāng)其存在結(jié)構(gòu)缺陷珊拼,尤...
    狂奔的蝸牛_eb65閱讀 1,776評(píng)論 0 0