资讯专栏INFORMATION COLUMN

Passenger + Nginx + Rails 生产环境配置

kid143 / 1398人阅读

摘要:设置密码将用户加入群组退出登录,使用新用户登录。所幸,提供直连,在配置里面只限定本地连接基本上还是可以保证数据安全的,所以目前就采用直连的方式。决定转战其他的服务器。

本文中我将描述在 DigitalOcean 上配置 Rails 生产环境的过程,希望对有相同需求的人一定的帮助

0x01. 创建服务器

如果你刚刚购买了 DigitalOcean 的服务,先添加一台机器,小应用的话 $5/Y 的即可,操作系统选择Ubuntu 14.04,基本纯前端操作,这里就不在赘述。

0x02. 添加用户

开始我们会使用 root 账号登录服务器,但是出于安全考虑,一般我们的 web 应用不能使用 root 用户运行,所以我们先需要添加一个专门的部署用户。名字随便起,这里就是 rails-deploy。

adduser rails-deploy

设置密码

passwd rails-deploy

将用户加入 sudo 群组

adduser rails-deploy sudo

退出 ssh 登录,使用新用户登录。

0x03. 安装 Ruby

为了安装和本地开发环境相同的 Ruby 这里选择从源码编译安装,先安装一些必要的库:

sudo apt-get install build-essential libssl-dev libyaml-dev libreadline-dev openssl curl git-core zlib1g-dev bison libxml2-dev libxslt1-dev libcurl4-openssl-dev nodejs 

然后创建目录并下载ruby源码:

mkdir ~/ruby
cd ~/ruby
wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz
tar -xzf ruby-2.1.2.tar.gz
cd ruby-2.1.2

开始编译

./configure
make
sudo make install

查看安装结果

ruby -v
$ ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]

最后删除源码

rm -rf ~/ruby
0x04. 安装 Passenger 和 Nginx

Passenger 是一个比较好的 Rails 服务器,我们选择用它来运行 rails 并使用 Nginx 做反向代理。

我们选择使用 apt 来安装 Passenger,先安装 PGP key

bashsudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7

创建 apt 源文件

sudo vim /etc/apt/sources.list.d/passenger.list

加入下面这行,并保存退出

deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main

修改此文件所属用户和权限

sudo chown root: /etc/apt/sources.list.d/passenger.list
sudo chmod 600 /etc/apt/sources.list.d/passenger.list

更新 apt 缓存

sudo apt-get update

安装 Nginx

sudo apt-get install nginx-extras passenger

此操作将有可能会覆盖我们新安装的 ruby ,可做如下操作修复:

sudo rm /usr/bin/ruby
sudo ln -s /usr/local/bin/ruby /usr/bin/ruby
0x05. 设置 Web 服务器

打开 nginx 配置文件:

sudo vim /etc/nginx/nginx.conf

在 http 块找到下面两行

# passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
# passenger_ruby /usr/bin/ruby;

取消这两行的注释并修改第二行路径,如下

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/local/bin/ruby;
0x06. Clone 代码

安装 Rails

bashsudo gem install --no-rdoc --no-ri rails

clone 项目代码

cd ~
git clone https://github.com/YOURNAME/REPO.git current
cd project/
bundle install

安装数据库(根据你的项目需求)

bashsudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
0x07. 配置数据库

从安全的角度考虑,应该是为每个web 应用创建一个用户并且给予最小权限的,但是在这个过程中遇到的mongoid 的bug:

SegmentFault

最终没有成功,希望有经验的朋友可以给予帮助。

所幸,momgo提供直连,在配置里面只限定本地连接基本上还是可以保证数据安全的,所以目前就采用直连的方式。

0x07. 启动服务器
rake assets:precompile # 编译静态文件
# passenger start -e production
# 上面这个命令可选执行,主要是为了测试是否配置成功
0x08. 修改 Nginx 配置

删除原有的默认网站配置:

sudo rm /etc/nginx/sites-enabled/default
sudo vim /etc/nginx/sites-enabled/example.com.conf

加入如下代码:

server {
    listen 80 default;
    server_name example.com;
    root /home/rails-deploy/project;
    passenger_enabled on;
    rails_env production;
}

然后重启nginx

sudo service nginx restart

写在最后:按照道理来讲,这样的配置应该已经好了,开始很奇怪我的80端口访问报错 403,然后查了nginx 的日志发现报了下面的错误:

[error] 2269#0: *1 directory index of "/home/rails-deploy/project/" is forbidden, client: xxx.xxx.xxx.xxx, server: example.cn, request: "GET / HTTP/1.1", host: "example.cn"

在这里拖了整整两天之后,我看到了这里的一段讨论,然后就默默的打算放弃了。决定转战其他的ruby 服务器。

这里的问题貌似是passenger的问题,之前在 StackOverflow上看到这个问题但没解决。

顺便说一下就是我遇到的情况和上面Ruby china 上的那位一样,在项目目录下面放个index.html就可以访问了,也就是说项目目录的权限是没有问题的。

==== update ====

此刻我内心无比激动啊,这个问题终于解决了,原来是网站跟目录配置的问题应该root到项目的public目录下面。

不过又遇到了另一个问题,他说我的 gem 没安装,需要运行bundle install,可能是安装过程中权限问题,用sudo bundle install 就好了 : http://stackoverflow.com/questions/22663498/rails-phusion-passenger-er...

总之算是跑起来了,谢天谢地啊!

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

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

相关文章

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

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

    UsherChen 评论0 收藏0
  • 在阿里云 (aliyun) 服务器上搭建Ruby On Rails生产环境

    摘要:最近总是在配置阿里云的服务器,遇到不少问题,现小结一下,供大家参考阿里云的一键安装全环境下载一键安装全环境压缩包上传至服务器,解压执行脚本,具体步骤详见这里任意选择一种方法执行脚本方法一方法二安装与指定的版本安装与指定的版本注意安 最近总是在配置阿里云的服务器,遇到不少问题,现小结一下,供大家参考~~ 1、阿里云的一键安装web全环境 下载一键安装web全环境 sh.zip 压缩...

    Snailclimb 评论0 收藏0
  • 在阿里云 (aliyun) 服务器上搭建Ruby On Rails生产环境

    摘要:最近总是在配置阿里云的服务器,遇到不少问题,现小结一下,供大家参考阿里云的一键安装全环境下载一键安装全环境压缩包上传至服务器,解压执行脚本,具体步骤详见这里任意选择一种方法执行脚本方法一方法二安装与指定的版本安装与指定的版本注意安最近总是在配置阿里云的服务器,遇到不少问题,现小结一下,供大家参考~~ 1、阿里云的一键安装web全环境 下载一键安装web全环境 sh.zip 压缩包 上传...

    fizz 评论0 收藏0
  • 从零搭建 Redmine 的踩坑之路

    摘要:登陆还是很基础的东西了,之前学习过,按照默认的手册,直接上来提示然而并没有管,而是先更新走一波。重新登陆上去,配置一下的用户环境然后又看到了熟悉的警告微笑面对吧。 [TOC] 远程登陆 Linux 游说老板和 IT 需要一台云主机来部署一个 Redmine,今天终于可以用了! 主机是天翼云的,具体为什么用他家此处不表,目测有华为做技术支持。8 核 16 GB,搭载个 Redmine 应...

    tomorrowwu 评论0 收藏0
  • 前后端分离实践 — 如何解决跨域问题

    摘要:原文链接随着前端越来越火,越来越多的人推崇前后端分离,后端只提供,前端只负责消费。这样我们就能更加专注自己的事情了,比如前端可以使用任何想要的工具等等,后端也不用因为集成前端的代码而苦逼加班了。 原文链接 随着前端越来越火,越来越多的人推崇前后端分离,后端只提供API,前端只负责消费API。这样我们就能更加专注自己的事情了,比如前端可以使用任何想要的工具(Webpack、Gulp等等)...

    Enlightenment 评论0 收藏0

发表评论

0条评论

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