21步搞定Rails+pgsql+nginx项目部署

··

NO.1购买域名并做域名解析

NO.2购买主机

NO.3测试主机联通

ping x.x.x.x

NO.4登录到服务器

ssh root@x.x.x.x
输入服务器提供商给你的密码

NO.5 新建一个用户来部署

adduser youngi --ingroup sudo
输入密码,然后一直回车
然后切换到你新建的用户su youngi,回到youngi的主目录 cd ~,就回到了youngi的主目录

NO.6 安装ruby

更新一下系统软件仓库列表:
sudo apt-get update
安装一些后面需要的库和软件:

                     libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 \
                     libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common````
安装rbenv
rbenv 是一个安装 ruby 和管理控制多个 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,设置默认ruby版本的时候报错
`RVM is not a function, selecting rubies with 'rvm use ...' will not work.`
bash --login运行这条命令后正常

youngi@iZ94qfjktlwZ:~$ rvm user 2.1.2 --default
Unrecognized option '2.1.2'.
Usage: rvm user [[gemsets] [rubies] [hooks] [pkgs] [wrappers] [all] [--skel]|none]报错

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

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

安装rails报错,修改源
gem sources -r https://rubygems.org/
gem sources -a https://ruby.taobao.org/
gem install rails

####NO.8 安装数据库(pgsql)
客户端安装
`sudo apt-get install postgresql-client`
服务器安装
`sudo apt-get install postgresql postgresql-contrib`
获取Installing PostGIS, procedural languages, client interfaces等插件列表
`apt-cache search postgres`
Ruby PG gem安装,需要生成Native Extension
首先安装相应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`
到这里位置,数据库就安装完成了


####NO.9创建数据库
pgsql初次安装后,默认生成一个名为postgres的数据库和一个名为postgres的数据库用户。这里需要注意的是,同时还生成了一个名为postgres的Linux系统用户。
1首先切换到postgres的Linux系统用户
sudo su - postgres
2使用psql登录数据库
psql
3使用\password命令,为postgres用户设置一个密码。
4.设置完密码后创建一个用户
CREATE USER youngi WITH PASSWORD '123345';(分号不能少)
5.创建数据库
CREATE DATABASE nineseven OWNER youngi;
6.第四件事是将nineseven数据库的所有权限都赋予youngi,否则youngi只能登录控制台,没有任何数据库操作权限。
GRANT ALL PRIVILEGES ON DATABASE nineseven to youngi;


####NO.10 安装imagemagick 6.9+版本(如果项目中用了RuCaptcha图形验证码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,注意这样安装,就不用执行 passenger-install-nginx-module了,以前的运行这个命令的时候经常会出现由于内存不够导致执行失败,很烦人的。

sudo apt-get install nginx-extras passenger
现在浏览器中访问 happypeter.org 就可以看到 nginx 的默认页面了,如果你看不到,证明 nginx 没有装好。

NO.12 安装 javascript 的运行环境,这个是跑 rails 应用必须的。

sudo apt-get install nodejs

NO.13 通过 scp 或者更为常见的用 git clone 命令用 github.com 上把代码 clone 到服务器上。

拉下来代码
scp 源码 youngi@112.74.39.180:/home/youngi

NO.14 安装 bundler,并用它来把项目需要的依赖包都安装好

gem install bundler
rbenv rehash
cd meetup/
bundle

NO.15 然后执行迁移文件,因为数据库前面已经建好

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

NO.16 把 js/css 等 asset 文件做预处理

bundle exec rake assets:precompile RAILS_ENV=production

NO.17 修改nginx配置

打开 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;
这里有个小技巧,就是在输入路径时。按Ctrl+x+f这三个按钮,可以自动提示

NO.18 然后要来为项目,专门创建一个服务器配置文件。

cd /etc/nginx/sites-enabled
rm default
sudo vim nineseven.conf
写入如下内容:
server {
listen 80 default;
server_name 97gun.com;
passenger_enabled on;
gzip on;
root /home/youngi/97gun/public;
}
修改完配置后,重启服务器
sudo service nginx restart

NO.19 访问域名,发现报错

"Incomplete response received from application"
查看nginx报错信息:
发现信息如下:"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!"

解决办法:回到项目目录,执行命令 rake secret
然后将生成的一串字符填入vim config/secrets.yml中的production下的secret_key_base中

NO.20 重启nginx服务器

sudo service nginx restart
项目部署完成

NO.21 部署完成后新建task以生成管理员账号

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

然后运行rake init:super_admin RAILS_ENV=production

其他技巧:
为了安全起见,也可以把数据库密码和其他参数放在环境变量中
编写环境变量
vim ~/.rails_env
载入环境变量
source ~/.rails_env

常用命令:
查看生产环境信息命名
tail -f log/production.log
nginx重启命令
sudo service nginx restart
查看nginx报错命令
sudo tail -f /var/log/nginx/error.log
修改pgsql连接参数
vim /etc/postgresql/9.3/main/pg_hba.conf

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容