资讯专栏INFORMATION COLUMN

使用passenger在Centos7部署nginx+Ruby on Rails

UsherChen / 3622人阅读

摘要:是一个能快速搭建环境的工具,它能快速的将和部署到你的服务器中,是部署环境就如同环境那样简单快速,让人愉悦。在上跑一般只有在生产环境下才会使用,因而默认下就是环境设置为生产环境,而初始化时默认没有对生产环境进行密钥配置。

passenger

passenger是一个能快速搭建web环境的工具,它能快速的将nginxpassenger部署到你的服务器中,是部署ruby环境就如同php环境那样简单快速,让人愉悦。下面我将使用这个工具将一个几乎空白的web服务器打造成一个高效的ruby服务器

centos7

centos7是最新的centos版本带来了一系列新特性,包括对Docker的支持和性能的提高,centos 6和 centos 7性能对比

安装ruby环境

首先下载rvm(ruby虚拟机)

shellcurl -L get.rvm.io | bash -s stable

安装rvm

shellsource /etc/profile.d/rvm.sh

安装ruby(请选择官网上最新的版本,使用ruby就要一直坚定的使用其最新版本)

shellrvm install 2.2.1

安装完成后只要运行ruby -v有显示版本号就证明已经安装成功了

安装Passenger 和 Nginx

首先使用gem安装passenger

shellgem install passenger

由于nginx不支持动态的模块载入,所以要使用passenger来进行编译安装由passenger修改过的nginx

接下来安装nginx+passenger

shellpassenger-install-nginx-module

运行了这个命令后,按照提示一步步安装

1.Yes: download, compile and install Nginx for me. (recommended)
The easiest way to get started. A stock Nginx 1.0.10 with Passenger
support, but with no other additional third party modules, will be
installed for you to a directory of your choice.

2.No: I want to customize my Nginx installation. (for advanced users)
Choose this if you want to compile Nginx with more third party modules
besides Passenger, or if you need to pass additional options to Nginx"s
"configure" script. This installer will 1) ask you for the location of
the Nginx source code, 2) run the "configure" script according to your
instructions, and 3) run "make install".
Whichever you choose, if you already have an existing Nginx configuration file,
then it will be preserved.

Enter your choice (1 or 2) or press Ctrl-C to abort:

当遇到这个选择时,建议选择1,1代表自动完整安装并配置nginx,2是代表根据自己需求定制nginx.

安装完成后系统会提示,nginx安装的目录,在centos7下默认是安装在/opt/nginx下,配置文件是默认在/opt/nginx/conf/nginx.conf

打开nginx.conf我们可以看到,passenger已经在nginx的配置文件上做了一点小配置

passenger_root /usr/local/rvm/gems/ruby-2.2.1/gems/passenger-5.0.10;
passenger_ruby /usr/local/rvm/gems/ruby-2.2.1/wrappers/ruby;
安装rails并初始化一个rails项目

使用gem安装rails

shellgem install rails

初始化一个rails项目

shellrails new sample_app

第一次初始化rails时一般会报出缺少gem的警告,此时只需要将rails的镜像改为淘宝镜像,详见http://ruby.taobao.org,然后执行

shellbundle install

当执行完毕后,一个rails项目的初始化就完成了

配置nginx

打开配置文件

vim /opt/nginx/conf/nginx.conf

这里给出一份最简单能运行的nginx.conf(注意:rails项目的目录是/opt/www)

nginx{
  worker_processes  1;

  events {
      worker_connections  1024;
  }


  http {
      passenger_root /usr/local/rvm/gems/ruby-2.2.1/gems/passenger-5.0.10;
      passenger_ruby /usr/local/rvm/gems/ruby-2.2.1/wrappers/ruby;

      include       mime.types;
      default_type  application/octet-stream;

      sendfile        on;
      keepalive_timeout  65;
      server {
          #监听的端口
          listen       8080;
          server_name  127.0.0.1;
          #web根目录,一定是rails项目下的public
          root /var/www/sample_app/public/;
          #一定要记得将这个选项设置为on
          passenger_enabled on;
      }    
  }

运行

shellsbin/nginx -t

如果没有报错,那说明配置成功了。那么已经万事大吉了吗?并没有!!

配置Centos7防火墙

Centos7后已经废弃了原来的iptables,改而使用firewall,默认情况下centos7系统不允许任何外来访问,就算你把firewall关了也没用,所以必须配置firewall

shellfirewall-cmd --zone=public --add-port=8080/tcp --permanent

这个命令表示,允许外部访问8080端口,重载一下firewall的配置,就外部就能访问服务器的8080端口了

配置Rails的生产环境

配置完Centos7的防火墙后,访问rails程序时就会报出一个403的forbidden错误,仔细查看日志后,发现了问题了的原因

App 6361 stderr: [ 2015-06-16 11:27:24.1412 6376/0x00000001d35760(Worker 1) utils.rb:85 ]: *** Exception RuntimeError in Rack application object (Missing `secret_token` and `secret_key_base` for "production" environment, set these values in `config/secrets.yml`) (process 6376, thread 0x00000001d35760(Worker 1)):

这个错误表示Rails生产环境下的密钥没有配置。在nginx上跑rails一般只有在生产环境下才会使用,因而passenger默认下就是rails环境设置为生产环境,而rails初始化时默认没有对生产环境进行密钥配置。这时就需要我们自己去配置rails的密钥了

railsGemfile中加入

rubygem "dotenv-rails"

然后运行

shellbundle install

安装完这个gem后就可以配置我们的生产环境密钥了

首先在sample_app目录下建立一个.env文件

然后运行

shellrake secret 

这个命令会随机生成一个安全密钥,将这个密钥复制下来,然后在.env中添加

rubySECRET_KEY_BASE = 你的密钥

最后修改sample_app目录下的config/secrets.yml

yml
development: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> test: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

这样一来密钥配置就完成了,重启nginx就能成功访问到rails项目了

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39172.html

相关文章

  • Passenger + Nginx + Rails 生产环境配置

    摘要:设置密码将用户加入群组退出登录,使用新用户登录。所幸,提供直连,在配置里面只限定本地连接基本上还是可以保证数据安全的,所以目前就采用直连的方式。决定转战其他的服务器。 本文中我将描述在 DigitalOcean 上配置 Rails 生产环境的过程,希望对有相同需求的人一定的帮助 0x01. 创建服务器 如果你刚刚购买了 DigitalOcean 的服务,先添加一台机器,小应用的话 ...

    kid143 评论0 收藏0
  • ruby之道(工具篇):CentOS7下搭建ruby on rails开发环境

    摘要:安装是一个命令行工具,提供多版本环境的管理和切换,还可以根据项目管理不同的。如果没有生成,这一步可能会失败,直接生成之后再执行安装即可。还可能遇到有关的问题根据提示执行。然后就能看到安装上了。如果安装不上,可以尝试连接后再安装。 1、安装rvm curl -L https://get.rvm.io | bash -s stable rvm是一个命令行工具,提供多版本ruby环境的管理和...

    kidsamong 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<