Ruby&Rails---Rails5在ubuntu16.04配置生产环境

进入阿里云的服务器
$ ssh root@120.77.45.76
root@120.77.45.76's password: ******

如果你之前ssh过这个服务器,然而服务器重装后,再次ssh,会出现这个错误:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!


图片.png

需要用下列的命令来解决这个问题

ssh-keygen -R 120.77.45.76
添加用户

因为用root操作还是不安全,我们需要创建一个用户
创建用户并且输入密码

root@aliyun-ubuntu-sever1:~# useradd -r -m -s /bin/bash hpd
root@aliyun-ubuntu-sever1:~# passwd hpd

要确保给hpd配置sudo的权限

root@aliyun-ubuntu-sever1:/home# chmod +w /etc/sudoers
root@aliyun-ubuntu-sever1:/home# vim /etc/sudoers
图片.png

之后撤销sudoers文件写权限

chmod u-w /etc/sudoers

然后我们ctrl+D退出server,在本地重新以hpd的用户登录

安装rbenv

让我们安装rbenv,我们将使用它来安装和管理我们的Ruby安装。 首先,更新apt-get:

sudo apt-get update

使用apt-get安装rbenv和Ruby依赖:

sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev

现在我们准备安装rbenv。最简单的方法是运行这些命令,作为将使用Ruby的用户:

cd
git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile

注:在Ubuntu桌面,更换所有出现.bash_profile与上面的代码块.bashrc 。 这将rbenv安装到您的主目录,并设置相应的环境变量,允许rbenv到活动版本的Ruby。 现在我们准备安装Ruby。

安装Ruby

我这边是使用2.3.0的ruby版本
rbenv install -v 2.3.0
rbenv global 2.3.0

在global子命令设置的Ruby的默认版本。如果要安装和使用其他版本,只需运行带有不同版本号的rbenv命令。 使用此命令验证Ruby是否已正确安装:

ruby -v

很可能你不会希望Rubygems为您安装的每个gem生成本地文档,因为这个过程可能很长。要禁用此功能,请运行以下命令:

echo "gem: --no-document" > ~/.gemrc

您还将要安装bundler gem,以管理您的应用程序依赖关系:

gem install bundler

现在Ruby已经安装,让我们安装Rails。

安装Rails

相同的用户,安装Rails使用此命令(您可以指定与特定版本-v选项):我这边是使用5.1.4的版本

gem install rails -v 5.1.4

当你安装Ruby或提供命令的Gem的新版本,您应该运行rehash子命令。 这将安装shims出于众所周知的rbenv所有的Ruby可执行文件,这将允许您使用可执行文件:

rbenv rehash

使用此命令打印其版本,验证Rails已正确安装:

rails -v

如果安装正确,您将看到安装的Rails版本。

安装Javascript运行时

一些Rails特性(例如资产管道)取决于Javascript运行时。我们将安装Node.js以提供此功能。 添加Node.js PPA到apt-get:

sudo add-apt-repository ppa:chris-lea/node.js

注意:如果出现Ubuntu的add-apt-repository: command not found,否则略过下列这个

sudo apt-get install software-properties-common python-software-properties

然后更新apt-get并安装Node.js包:

sudo apt-get update
sudo apt-get install nodejs

恭喜! Ruby on Rails现在安装在您的系统上。

安装PostgreSQL

首先,更新apt-get:

sudo apt-get update

然后安装PostgreSQL及其开发库:

sudo apt-get install postgresql postgresql-contrib libpq-dev

PostgreSQL现在已经安装,但你应该创建一个新的数据库用户,你的Rails应用程序将使用。
使用此命令创建一个PostgreSQL超级用户用户(用您自己的用户名替换高亮显示的单词):

sudo -u postgres createuser -s pguser

如果要为数据库用户设置密码,请使用以下命令输入PostgreSQL控制台:

sudo -u postgres psql

PostgreSQL的控制台被显示postgres=#提示符。 在PostgreSQL提示符处,输入此命令以设置您创建的数据库用户的密码:

\password pguser

在提示符处输入所需的密码,然后进行确认。

现在您可以通过输入以下命令退出PostgreSQL控制台:

\q
把项目传到服务器

我是想把项目传到github上,然后在服务器上用git clone把项目拷贝下来

配置数据库连接

请确保你在你的应用程序的根目录( cd ~/ appname )。

在您喜欢的文本编辑器中打开应用程序的数据库配置文件。 我们将使用vi:

vi config/database.yml

更新production部分,所以它看起来是这样的:

production:
  <<: *default
  host: localhost
  adapter: postgresql
  encoding: utf8
  database: appname_production
  pool: 5
  username: <%= ENV['APPNAME_DATABASE_USER'] %>
  password: <%= ENV['APPNAME_DATABASE_PASSWORD'] %>

注意,数据库的用户名和密码,被配置为通过环境变量,被读取APPNAME _DATABASE_USER和APPNAME _DATABASE_PASSWORD 。 将生产密码和秘密保留在应用程序代码库之外是最佳做法,因为如果您使用的是分布式版本控制系统(如Git),它们可以轻松暴露出来。 我们将讨论如何使用环境变量设置数据库认证。

保存并退出

安装rbenv-vars插件

在部署生产Rails应用程序之前,应该使用环境变量设置生产密钥和数据库密码。 一个简单的方法来管理环境变量,我们可以在运行时使用密码和秘密加载到我们的应用程序,是使用rbenv -瓦尔插件。

要安装rbenv -瓦尔插件,只需切换到.rbenv/plugins目录,并从GitHub克隆。 例如,如果rbenv安装在您的主目录中,请运行以下命令:

cd ~/.rbenv/plugins
git clone https://github.com/sstephenson/rbenv-vars.git

设置环境变量

现在安装了rbenv-vars插件,让我们设置所需的环境变量。

首先,生成秘密密钥,将用于验证签名的cookie的完整性:

cd ~/appname
rake secret

复制生成的密钥,然后打开.rbenv-vars用你喜欢的编辑器文件。 我们将使用vi:

vi .rbenv-vars

您在此设置的任何环境变量都可以由Rails应用程序读取。

首先,设置SECRET_KEY_BASE这样的变量(替换您刚才生成和复制的秘密高亮文本):

SECRET_KEY_BASE=your_generated_secret

接下来,设置APPNAME _DATABASE_USER这样的变量(与你的应用程序名称替换突出了“APPNAME”和“应用程序名称”与您的生产数据库的用户名):

APPNAME_DATABASE_USER=appname

最后,设置APPNAME _DATABASE_PASSWORD这样的变量(与你的应用程序名称替换突出了“APPNAME”和“prod_db_pass”与您的生产数据库的用户密码):

APPNAME_DATABASE_PASSWORD=prod_db_pass

保存并退出。

您可以通过运行以下命令,使用rbenv-vars插件查看为应用程序设置的环境变量:

rbenv vars

如果你改变你的秘密,数据库密码,更新.rbenv-vars文件。 请小心保持此文件为私有,并且不要包含任何公共代码存储库。

创建生产数据库

现在您的应用程序配置为与您的PostgreSQL数据库通信,让我们创建生产数据库:

RAILS_ENV=production rake db:create

注意:如果出现PG::ConnectionBad: FATAL: Peer authentication failed for user "user1",需要修改下配置:
修改 /etc/postgresql/9.5/main/pg_hba.conf

sudo vim /etc/postgresql/9.5/main/pg_hba.conf
图片.png

修改保存,重新启动pg

sudo service postgresql restart

后继续执行上面的创建生产数据库命令

现在运行此命令来更新生产数据库:

RAILS_ENV=production rake db:migrate

您还应预先编译资产:

RAILS_ENV=production rake assets:precompile

注意:如果出现Yarn executable was not detected in the system.

配置config/environments/prouction.rb
因为默认开发环境资源编译是关闭,所以要开启

  config.assets.compile = true

要测试应用程序是否工作,可以运行生产环境,并将其绑定到服务器的公共IP地址(替换服务器的公共IP地址):

RAILS_ENV=production rails server --binding=120.77.45.76

配置安全组

阿里云上有个安全组设置,可以控制ip的访问,如果没有配置的话,以上的是不能访问的


图片.png
安装redis

step1:下载

wget http://download.redis.io/releases/redis-4.0.8.tar.gz

step2:解压

tar zxvf redis-4.0.8.tar.gz

step3:复制,放到usr/local/redis目录下(先创建redis目录)

sudo mv redis-4.0.8/* /usr/local/redis/

step4:进入redis目录

cd /usr/local/redis/

step5:生成

sudo make

step6:测试,这段运行时间会较长

sudo make test

注意:如果make test不过,运行

sudo apt-get install tcl

step7:安装,将redis的命令安装到/usr/bin/目录

sudo make install

step8:配置文件,移动到/etc/目录下
配置文件目录为/usr/local/redis/redis.conf

sudo cp /usr/local/redis/redis.conf /etc/redis/

setp9:修改/etc/redis/中的配置文件
是否以守护进程运行
如果以守护进程运行,则不会在命令行阻塞,类似于服务
如果以非守护进程运行,则当前终端被阻塞
设置为yes表示守护进程,设置为no表示非守护进程
推荐设置为yes

daemonize yes
配置 navicat premium 能连接到服务器的pg数据库

https://www.qcloud.com/community/article/499397 可以参考这篇文章

图片.png

接下来,我们还要开启 PostgreSQL 允许通过 TCP/IP 进行连接的特性。这主要通过 postgresql.conf 配置文件控制,该文件和 pg_hba.conf 处于同一目录下。

sudo vi /etc/postgresql/9.5/main/postgresql.conf
图片.png

修改保存后,重启pg数据库

sudo service postgresql restart

然后连接


图片.png

配置rails在后台运行

配置config/puma.rb

daemonize true
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342