前言:做 java 的时候,有接触过服务器部署,当时是把 java 项目打成 war 包,然后上传到服务器。接触 ruby 语言之后,只局限于开发模块,实现功能,工作环境中尝试折腾下服务器的机会很少,所以自己买了个服务器,自己找了个rails项目,是一个小的博客,想着弄个个人域名,挂在网上。而且正好可以学下部署,才有了这个笔记。
一:安装rvm、ruby、rails
安装常见的系统依赖
sudo apt-get update
sudo apt-get install -y curl
curl -sSL https://git.io/vVHhe | bash
2.安装 rvm
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有这个操作)
rvm remove 2.2.0
4.安装Rails
gem install rails -v 5.1.4
成功之后是这样的
5.把本地项目上传到服务器
scp -r folder root@ip:/root/
#folder是要复制的目录
#ip是新服务器的ip
二:安装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 开启|关闭|重启
安装thin的gem包
gem install thin
在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, 也可以直接kill all 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
4.重启nginx
nginx -s reload
这里简单说下nginx+thin
nginx相当于一个代理,当你在浏览器输入: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登录就可以免掉密码了
网友评论