美文网首页程序员
在服务器上部署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