Ruby on Rails是一个Web框架,允许Web设计人员和开发人员实现动态的功能齐全的Web应用程序。在生产中部署Rails应用程序时,开发人员可以从几个流行的应用程序服务器中进行选择,包括Puma,Unicorn和Passenger。本指南将使用Passenger,因为它可以方便地与NGINX集成。
注意本指南是为非root用户编写的。需要提升权限的命令带有前缀
sudo
。如果您不熟悉该sudo
命令,可以查看我们的“ 用户和组”指南。
开始之前
- 按照入门和保护服务器指南进行操作,并设置Linode的主机名。 要检查主机名运行:hostname hostname -f第一个命令应显示短主机名,第二个命令应显示完全限定的域名(FQDN)。
- 更新系统:sudo apt-get update && sudo apt-get upgrade安装依赖项
- 安装使用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。将以下版本替换为适合您应用的版本:
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安装数据库服务器。安装并正确配置后,发出以下命令:
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运行时,则可以跳过此步骤。
/etc/nginx/sites-available/default
在文本编辑器中打开并default_server
从server
块的前两行中删除: 在/ etc / nginx的/网站可用/默认1 2 3 4 5 server { listen 80; listen :::80; . . .- 由于您使用的是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_name
Linode的公共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配置