我是新手,在练习部署 rails. 其中的关键步骤,安装 Nginx + Passenger
本来是按照教程里这个步骤操作:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
sudo apt-get install -y apt-transport-https ca-certificates
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
sudo apt-get install -y nginx-extras passenger
但是第 5 步遇到依赖报错了(类似这样:
epends: perlapi-5.18.2 but it is not installable
Depends: libc6 (>= 2.14) but 2.13-38+deb7u8 is to be installed
Depends: libgd3 (>= 2.1.0~alpha~) but it is not installable
Depends: libperl5.18 (>= 5.18.2) but it is not installable
Recommends: passenger (< 5.0.5) but 1:5.0.4-1~trusty1 is to be installed )
搜了一圈定位到问题:上面适用于 Ubuntu 16.04;而不适用于我在用的 18.04 搜到几个遇到相同的同学说重装到 16.04 才解决问题。 于是我先用独立安装的 Nginx 的方式安装好了: 参考文档 https://www.phusionpassenger.com/library/install/standalone/install/oss/bionic/#
但后面配置了 nginx 之后就又报错了,报错信息:
unknown directive "passenger_show_version_in_header" in /etc/nginx/nginx.conf
configuration file /etc/nginx/nginx.conf test failed
然后把根据报错信息搜到的可能的解决方案都尝试了一遍,都没有搞定: 比如 根据官方的 针对 ubuntu 18.04 来安装 Passenger + Nginx https://www.phusionpassenger.com/library/install/nginx/install/oss/bionic/ 比如 github 的 issue Passenger + Nginx on ubuntu 18.04 is not working https://github.com/phusion/passenger_apt_automation/issues/22 里面两个人提到的可能的办法也试过了
我用 nginx -V 查看了 始终没有 passenger module
请问有什么不改用其他版本的系统的解决办法么? 如果只能改用其他版本系统的话,用比 18.04 更高的版本可以解决这个问题么?
你误解我了。我是真的想知道现在新手,应该要用什么来部属,因为 gorails 教程也是 passenger ??
https://www.phusionpassenger.com/features。看一下这个页面。passenger 免费版不支持 Zero-downtime Rolling Restarts,需要企业版才可以,而 puma 是支持的
好吧,我告诉你原因,在第三行里的 xenial 是 ubuntu16.04 的代码。18.04 是 bionic
第三行应该是这个样子的
sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger bionic main > /etc/apt/sources.list.d/passenger.list'
https://www.phusionpassenger.com/docs/tutorials/deploy_to_production/
这里是官网,自己去选择一下对应的一些参数,才可以。
之前尝试过根据官方的 针对 ubuntu 18.04 来安装 Passenger + Nginx https://www.phusionpassenger.com/library/install/nginx/install/oss/bionic/ 还是一样的报错
你 rails 啥版本.5.0 之后的都自带的 5.0 的 puma 吧... 建议直接用 puma 就行了. 部署工具简单用的话可以用 mina https://github.com/mina-deploy/mina
5.0 之后的 puma 可以直接 systemd 的托管. 基于 mina 我有个库可以直接用 https://github.com/Oyaxira/mina-nginx-puma
现在小项目起新服务器,不走 docker 的话基本都只需要安装 rvm/rbenv 装 ruby. 数据库啥的 然后直接装 nginx 默认版本 mina init; mina setup 一下直接 deploy 就行了
用编译方式安装 passenger,先安装 passenger 的 gem 包
gem install passenger
然后用 passenger 安装 nginx
passenger-install-nginx-module
一共 2 条命令全部搞定。安装的过程中会让你选择安装的模块,和安装路径。默认在/opt/nginx 这样安装好的 nginx 是包含 passenger 的。
不赞同某些楼的说法。
passenger 新手和老手用都没问题,很舒服很傻瓜,我们生产环境一直都在用。
不支持 Zero-downtime,直接在部署脚本里写一条 curl,访问一下项目页面激活一下就行了,不是什么事。
passenger_show_version_in_header
这个参数配置没必要。sudo apt install nginx
即可。mod-http-passenger.conf
这个文件进行了修改。/etc/nginx/nginx.conf
这个文件完全没修改。/etc/nginx/sites-enabled/default
这个文件的 root 修改了,增加了一行passenger_enabled on
;以上。
01 touch /data/www/xxxx/current/tmp/restart.txt
✔ 01 [email protected] 0.221s
02 curl http://xxx
02 % Total % Received % Xfe
02 rd Average Speed Time Time
02 Time Current
02
02 Dload U
02 pload Total
02 Spent Le
02 ft Spe
02 ed
0 02
02 0
02 0 0
02 0
02 0
02 0
02 0
02 --:--
02 :-- -
02 -:--:--
02 --:--:
02 -- 0
0 0 0 0 0 0 0 0 --:--:-
02 - 0:00:01 --:--:-- 0
100 1200 0 1200 0 0 5
02 54 0 --:--:-- 0:00:02 --:--:-- 554
100 1200 0 1200 0 0 554
02 0 --:--:-- 0:00:02 --:--:-- 554
02 <!DOCTYPE html>
02 <html>
02
02 <head>
xxxxxxxx
02
02
02
02 </div>
02
02 </body>
02
02 </html>
02
✔ 02 [email protected] 2.450s
普通 4 核云服务器,远程 curl 一下就 2.45 秒
不知道在你的概念里 2.45 秒属不属于几秒的范围,更何况不同规模的 app 用时也不一样。线上环境如果重启的时候如果不用滚动更新的办法,2.45 秒 + 的延迟所有系统都能接受吗?puma 支持 hot reload, phased restart,又是免费开源的官方推荐,不想花钱又不想麻烦时选择 puma 不是很正常的选择吗
不知道你的项目线上重启的原因是什么。
我这里一般 2 种情况,1 业务逻辑更新,2bug 修复。
无论那种情况,都应该立即停止错误/过时的版本,避免产生错误的业务数据。而不是为了 2、3 秒钟“用户体验”,盲目追求技术自嗨。
用户不是傻子,无法响应,第一时间会反应是不是自己网络问题,而刷新重试。而所有页面和 API 都是按幂等设计的,提交不成功,重试即可,这才是高可用性系统的设计基本原则。