Ubuntu 16.04上使用Nginx Passenger 部署 Rails

本文参照Ruby China的教程,在阿里云ubuntu 16.04上部署自己的rails应用,逐步列出遇到的问题及其解决方案

创建账号

以root账户登录服务器,运行:

$ useradd -m -s /bin/bash deploy

$ adduser deploy sudo

$ passwd deploy

退出root账户,以deploy登录。

使用 RVM 安装 Ruby

更新 apt,并安装 curl:

$ sudo apt-get update
$ sudo apt-get install curl

安装RVM

$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
$ \curl -sSL https://get.rvm.io | bash -s stable
$ source ~/.bashrc
$ source ~/.bash_profile

安装 Ruby

$ rvm use --install --default 2.4.1

安装Passenger

Passenger 是一个 app server,支持基于 Rack 框架的 Ruby app(包括 Rails),作为模块变异到Nginx,不需要自己启动。

安装 Passenger 最简单的方法是通过 apt 安装,首先导入 Passenger 的密钥([官方文档](
https://www.phusionpassenger.com/library/install/nginx/install/oss/trusty)):

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

安装 apt 插件以支持 https 传输:

sudo apt-get install apt-transport-https ca-certificates

添加 apt 源(对应 Ubuntu 16.04 LTS):

$ sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger xenial main > /etc/apt/sources.list.d/passenger.list'
$ sudo apt-get update

安装 Passenger 的包:

$ sudo apt-get install nginx-extras passenger

修改 nginx 配置,编辑 /etc/nginx/nginx.conf,找到这一行的注释:

# include /etc/nginx/passenger.conf;

应用部署

创建文件夹:

$ sudo mkdir -p /var/www/dodolee.club
$ sudo chown deploy:deploy /var/www/dodolee.club

clone 项目文件:

$ /var/www/dodolee.club
$ git clone https://github.com/LuoYeGuFei/dodolee_blog.git current

当前项目使用mysql,安装mysql:

$ sudo apt-get install mysql-server

mysql 相关配置可能出现的问题:

  • Access denied for user ‘root’@’localhost’,要解决这个问题,只需要在/etc/mysql/mysql.conf.d/mysqld.cnf中找到[mysqld]模块,插入skip-grant-tables

  • 无法通过/tmp/mysql.sock 连接:

    $ ln -s /run/mysqld/mysqld.sock /tmp/mysql.sock
  • 远程无法连接mysql:阿里云添加安全规则,允许访问3306端口


执行 migrate

$ bundle install
$ RAILS_ENV=production rake db:create db:migrate

执行 assets precompile:

$ rails assets:precompile

Nginx 配置

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

$ rm /etc/nginx/sites-enabled/default

新建网站配置:

$ touch /etc/nginx/sites-enabled/example.com.conf

编辑 /etc/nginx/sites-enabled/example.com.conf,写入以下内容:

server {
    listen 80 default;
    server_name example.com; # 这里填写你真实域名
    root /var/www/example.com/current/public;
    passenger_enabled on;
}

重启 nginx:

$ sudo service nginx restart

网站依旧无法访问

  1. config/database.yml 中定义的ENV['DATABASE_PASSWORD']不存在,可以在~/.bash_profile中export,然后source一下;
  2. Missing secret_key_base for ‘production’ environment, set this value in config/secrets.yml: 执行rails secret RAILS_ENV=production, 将生成的key作为secret_key_base export;
  3. 无法通过IP访问:添加80/80端口的安全规则;
  4. 修改主机名后出现错误“sudo: unable to resolve host lyz”:sudo vi /etc/hosts , 127.0.0.1 lyz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值