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

··
21步搞定Rails+pgsql+nginx项目部署_第1张图片

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

NO.2购买主机

NO.3测试主机联通

ping x.x.x.x

NO.4登录到服务器

ssh [email protected]
输入服务器提供商给你的密码

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 源码 [email protected]:/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

你可能感兴趣的:(21步搞定Rails+pgsql+nginx项目部署)