Debian 9下安装Ruby on Rails与NGINX

Ruby on Rails是一个Web框架,允许Web设计人员和开发人员实现动态的功能齐全的Web应用程序。在生产中部署Rails应用程序时,开发人员可以从几个流行的应用程序服务器中进行选择,包括Puma,Unicorn和Passenger。本指南将使用Passenger,因为它可以方便地与NGINX集成。

注意本指南是为非root用户编写的。需要提升权限的命令带有前缀sudo。如果您不熟悉该sudo命令,可以查看我们的“ 用户和组”指南。

开始之前

  1. 按照入门和保护服务器指南进行操作,并设置Linode的主机名。 要检查主机名运行:hostname hostname -f第一个命令应显示短主机名,第二个命令应显示完全限定的域名(FQDN)。
  2. 更新系统:sudo apt-get update && sudo apt-get upgrade安装依赖项
  3. 安装使用Ruby,构建Ruby模块和运行Rails应用程序所需的系统包:

sudo apt-get install build-essential dirmngr gnupg ruby ruby-dev zlib1g-dev libruby libssl-dev libpcre3-dev libcurl4-openssl-dev rake ruby-rack

安装Ruby

使用Ruby版本管理器(RVM)安装Ruby。确保在Gemfile中安装与Rails版本兼容的Ruby版本。本指南将使用Rails 5.1.4和Ruby 2.4.2

安装mpapis GPG密钥:

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

如果这不起作用dirmngr,则默认情况下可能尚未安装您的系统。安装它以纠正错误:

sudo apt install dirmngr

运行官方RVM安装脚本:

curl -sSL https://get.rvm.io | bash -s stable --ruby

安装过程将输出必须在使用RVM之前运行的命令:

source /home/username/.rvm/scripts/rvm

检查以下要求rvm

rvm requirements

安装Ruby版本并将其设置为系统的默认版本:

rvm install ruby rvm --default use ruby

如果您的项目需要不同版本的ruby,请明确安装该版本:

rvm install ruby-2.5.0 rvm --default use ruby-2.5.0

安装Rails

使用Rubygems包管理器安装Rails。将以下版本替换为适合您应用的版本:

代码语言:txt
复制
gem install rails -v 5.1.4

安装NGINX和乘客

安装NGINX:

sudo apt install nginx

Phusion拥有一个包含最新版Phusion Passenger的存储库。要将其添加到包管理器,请首先安装Phusion PGP密钥:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7 sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger stretch main > /etc/apt/sources.list.d/passenger.list'

为APT启用HTTPS支持:

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

更新本地包数据库并安装Phusion Passenger:

sudo apt-get update sudo apt-get install libnginx-mod-http-passenger

启用passenger并启动NGINX

NGINX现已安装在系统上,但未启用对Phusion Passenger的支持。以root身份或使用sudo命令打开文件/etc/nginx/conf.d/mod-http-passenger.conf并验证以下两行是否存在且未注释:

/etc/nginx/conf.d/mod-http-passenger.conf1 2

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini; passenger_ruby /usr/bin/passenger_free_ruby;注意如果该文件尚不存在,则需要创建该文件并手动添加这些行。

重启NGINX:

sudo systemctl restart nginx

要验证是否已正确安装和启用Passenger支持:

sudo passenger-memory-stats

如果Passenger正在运行,则应在“Passenger processes”部分下显示一些正在运行的进程:

----- Passenger processes ----- PID VMSize Private Name ------------------------------- 14337 420.8 MB 1.1 MB Passenger watchdog 14340 559.3 MB 1.4 MB Passenger core 14345 292.5 MB 1.2 MB Passenger ust-router

安装MySQL支持(可选)

如果部署的应用程序使用MySQL,请按照Debian 8指南中的MySQL安装数据库服务器。安装并正确配置后,发出以下命令:

代码语言:txt
复制
sudo apt-get install libmysqlclient-dev

部署Rails应用程序

将您的Rails应用程序复制到您的Linode。导航到应用程序的根目录并安装所有依赖项:

cd railsapp bundle install

Rails需要JavaScript运行时。安装Node.js:

sudo curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - sudo apt install nodejs

注意如果您的Gemfile已包含therubyracer,或者您的系统上有另一个JavaScript运行时,则可以跳过此步骤。

  1. /etc/nginx/sites-available/default在文本编辑器中打开并default_serverserver块的前两行中删除: 在/ etc / nginx的/网站可用/默认1 2 3 4 5 server { listen 80; listen :::80; . . .
  2. 由于您使用的是RVM,因此您需要指定Passenger应使用哪个版本的Ruby:

rvm use passenger-config --ruby-command

passenger-config命令将生成几行输出,类似于:

passenger-config was invoked through the following Ruby interpreter: Command: /home/username/.rvm/gems/ruby-2.4.2/wrappers/ruby Version: ruby 2.4.2p198 (2017-09-14 revision 59899) x86_64-linux To use in Apache: PassengerRuby /home/username/.rvm/gems/ruby-2.4.2/wrappers/ruby To use in Nginx : passenger_ruby /home/username/.rvm/gems/ruby-2.4.2/wrappers/ruby To use with Standalone: /home/username/.rvm/gems/ruby-2.4.2/wrappers/ruby /home/username/.rvm/gems/ruby-2.4.2/gems/passenger-5.1.11/bin/passenger start

复制NGINX系列以用于下一步。

为您的Rails应用配置新站点。/etc/nginx/sites-available/railsapp在文本编辑器中创建并添加以下内容:

在/ etc / nginx的/网站可用/ railsapp1 2 3 4 5 6 7

server { listen 80 default_server; server_name 192.0.2.0; passenger_ruby /home/path/to/ruby/installation; passenger_enabled on; root /path/to/app/public; }

设置server_nameLinode的公共IP地址或FQDN,并将root路径替换为Rails应用程序的路径。粘贴passenger-config命令的输出以替换该passenger_ruby行。

创建符号链接以sites-enabled激活新站点:

sudo ln -s /etc/nginx/sites-available/railsapp /etc/nginx/sites-enabled/railsapp

重启NGINX:

sudo systemctl restart nginx

在Web浏览器中,导航到您的Linode的公共IP地址。您的Rails应用程序现在应该是活动的。

下一步

现在您的应用程序正在运行,请考虑使用Capistrano等构建工具或Travis或Jenkins等持续集成(CI)工具来加速部署工作流程。

更多信息

有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。

  • Passenger Official Debian 9安装指南
  • Ruby和Passenger Quickstart
  • Ruby on Rails主页
  • Ruby on Rails文档
  • NGINX主页
  • NGINX文档
  • NGINX配置