起因:做 java 的时候,有接触过服务器部署,当时是把 java 项目打成 war 包,然后上传到服务器.接触 ruby 语言之后,只局限于开发模块,实现功能,工作环境中也没有机会尝试折腾下服务器,最近这段时间不是很忙,买了个服务器,自己找了个 rails 项目,是一个小的博客,想着弄个个人域名,挂在网上.而且正好可以学下部署,才有了这个笔记.
一:安装 rvm,ruby,rails
1. 安装常见的系统依赖
sudo apt-get update
sudo apt-get install -y curl
curl -sSL https://git.io/vVHhe | bash
2. 安装 rvm(登陆官网,查看安装方式 https://www.rvm.io/ )
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 列表里面的都可以拿来安装
切换 Ruby 版本
rvm use 2.3.1
如果想设置为默认版本,这样一来以后新打开的控制台默认的 Ruby 就是这个版本
rvm use 2.3.1 --default
查询已经安装的 ruby
rvm list
卸载一个已安装版本
rvm remove 2.2.0
4. 安装 Rails
gem install rails -v 5.1.4
成功之后是这样的
deploy_1.png
二:安装 mysql,nginix,thin
1. 安装 mysql 数据库
sudo apt-get install mysql-server mysql-client libmysqlclient-dev
2.rails 服务器 thin 的安装
Thin 是 Rails 的服务器,它实现了 event machine,理论上可以达到 node 一样的效果,不过要看具体的业务逻辑.
thin 命令的基本用法
thin start|stop|restart 开启 | 关闭 | 重启
1. 安装 thin 的 gem 包
gem install thin
2. 在 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
执行命令:
bundle exec thin start -C config/thin.yml
上面的意思是, 让你的 Rails 应用(部署在 /opt/app/current 目录下), 启动在 4 个端口(6661~6664) 上,并且都是已 daemon 的形式来运行
停止时,可以使用 thin stop -C config/thin.yml, 也可以直接 killall 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
重启 nginx
nginx -s reload
这里简单说下 nginx+thinnginx 相当于一个代理,当你在浏览器输入: 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 登录就可以免掉密码了
来源: http://www.jianshu.com/p/54f14dcf185d