美文网首页程序员
在服务器上部署rails项目笔记

在服务器上部署rails项目笔记

作者: 程序员小哥哥 | 来源:发表于2018-01-24 15:33 被阅读0次

前言:做 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

成功之后是这样的

deploy_1.png

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登录就可以免掉密码了

相关文章

网友评论

    本文标题:在服务器上部署rails项目笔记

    本文链接:https://www.haomeiwen.com/subject/yetuaxtx.html