您的位置:首页 > 运维架构 > Nginx

Ubuntu 16.04上使用Nginx Passenger 部署 Rails

2018-01-11 20:33 381 查看
本文参照
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


网站依旧无法访问

config/database.yml
中定义的
ENV['DATABASE_PASSWORD']
不存在,可以在
~/.bash_profile
中export,然后source一下;

Missing
secret_key_base
for ‘production’ environment, set this value in
config/secrets.yml
: 执行
rails secret RAILS_ENV=production
, 将生成的key作为
secret_key_base
export;

无法通过IP访问:添加80/80端口的安全规则;

修改主机名后出现错误“sudo: unable to resolve host lyz”:
sudo vi /etc/hosts ,  127.0.0.1    lyz
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ubuntu16.04 阿里云