终极指南:如何用passenger-docker快速部署Rails、Django、Express应用
2026/5/4 11:58:28 网站建设 项目流程

终极指南:如何用passenger-docker快速部署Rails、Django、Express应用

【免费下载链接】passenger-dockerDocker base images for Ruby, Python, Node.js and Meteor web apps项目地址: https://gitcode.com/gh_mirrors/pa/passenger-docker

passenger-docker是一个专为Ruby、Python、Node.js和Meteor Web应用设计的Docker基础镜像集合。它基于Phusion Passenger构建,旨在简化Web应用的Docker镜像构建过程,让开发者能够轻松快速地部署各类Web应用。

为什么选择passenger-docker?

使用passenger-docker而非手动编写Dockerfile有以下优势:

  • 简化Dockerfile:你的Dockerfile可以更简洁,只需关注应用本身而非基础系统配置
  • 节省时间:减少编写正确Dockerfile的时间,专注于应用开发
  • 系统配置正确:避免基础系统配置错误,passenger-docker已做好所有正确设置
  • 加速构建过程:显著减少docker build时间,提高迭代效率
  • 减少部署下载时间:Docker只需下载一次基础镜像,后续部署仅需下载应用变更部分

passenger-docker包含哪些内容?

基础系统

  • Ubuntu 24.04 LTS作为基础系统
  • 正确的init进程,解决PID 1僵尸进程问题
  • 修复Docker与APT的不兼容性
  • syslog-ng日志系统
  • cron守护进程
  • Runit服务监控和管理

语言支持

  • Ruby 3.3.11、3.4.9、4.0.3以及JRuby 10.0.2.0和9.4.14.0(使用RVM管理)
  • Python 3.12,或Deadsnakes PPA提供的任何版本(3.10、3.11、3.12、3.13、3.14)
  • Node.js 24默认版本,或Nodesource提供的任何版本(20、22、24)
  • 构建系统、git和许多流行库的开发头文件,确保大多数原生扩展可顺利编译

Web服务器和应用服务器

  • Nginx 1.24(默认禁用)
  • Phusion Passenger 6(默认禁用,随Nginx一起启动)
    • 轻量级工具,简化Web应用与Nginx的集成
    • 提供多种生产级功能,如进程监控、管理和状态检查
    • 可替代(G)Unicorn、Thin、Puma、uWSGI等工具

辅助服务和工具

  • Redis 7.0(默认未安装)
  • Memcached(默认未安装)

镜像变体选择

passenger-docker提供多种镜像变体,满足不同用户需求:

Ruby镜像

  • phusion/passenger-ruby33- Ruby 3.3
  • phusion/passenger-ruby34- Ruby 3.4
  • phusion/passenger-ruby40- Ruby 4.0
  • phusion/passenger-jruby94- JRuby 9.4
  • phusion/passenger-jruby100- JRuby 10.0

Python镜像

  • phusion/passenger-python310- Python 3.10
  • phusion/passenger-python311- Python 3.11
  • phusion/passenger-python312- Python 3.12
  • phusion/passenger-python313- Python 3.13
  • phusion/passenger-python314- Python 3.14

Node.js和Meteor镜像

  • phusion/passenger-nodejs- Node.js 24

其他镜像

  • phusion/passenger-full- 包含上述所有语言支持
  • phusion/passenger-customizable- 仅包含基础系统,可通过Dockerfile进一步自定义

快速开始:基本Dockerfile配置

以下是使用passenger-docker的基本Dockerfile模板:

# 使用phusion/passenger-full作为基础镜像 FROM phusion/passenger-full:<VERSION> # 设置正确的环境变量 ENV HOME /root # 使用baseimage-docker的init进程 CMD ["/sbin/my_init"] # ... 放置你的构建指令 ... # 清理APT缓存 RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

Rails应用部署步骤 🚀

1. 创建Dockerfile

FROM phusion/passenger-ruby40:<VERSION> ENV HOME /root CMD ["/sbin/my_init"] # 启用Nginx和Passenger RUN rm -f /etc/service/nginx/down # 移除默认Nginx配置 RUN rm /etc/nginx/sites-enabled/default # 添加自定义Nginx配置 ADD nginx.conf /etc/nginx/sites-enabled/webapp.conf # 创建应用目录并设置权限 RUN mkdir /home/app/webapp COPY --chown=app:app . /home/app/webapp # 安装依赖 WORKDIR /home/app/webapp RUN bundle install --deployment --without development test # 清理 RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

2. 创建Nginx配置文件 (nginx.conf)

server { listen 80; server_name www.yourdomain.com; root /home/app/webapp/public; passenger_enabled on; passenger_user app; # 指定Ruby版本 passenger_ruby /usr/bin/ruby4.0; # 设置应用环境 passenger_app_env production; # 允许上传大文件 client_max_body_size 50M; }

3. 构建和运行容器

# 构建镜像 docker build -t your-rails-app . # 运行容器 docker run -d -p 80:80 --name rails-container your-rails-app

Django应用部署步骤 🐍

1. 创建Dockerfile

FROM phusion/passenger-python312:<VERSION> ENV HOME /root CMD ["/sbin/my_init"] # 启用Nginx和Passenger RUN rm -f /etc/service/nginx/down # 移除默认Nginx配置 RUN rm /etc/nginx/sites-enabled/default # 添加自定义Nginx配置 ADD nginx.conf /etc/nginx/sites-enabled/webapp.conf # 创建应用目录并设置权限 RUN mkdir /home/app/webapp COPY --chown=app:app . /home/app/webapp # 安装依赖 WORKDIR /home/app/webapp RUN pip install -r requirements.txt # 清理 RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

2. 创建Nginx配置文件 (nginx.conf)

server { listen 80; server_name www.yourdomain.com; root /home/app/webapp/public; passenger_enabled on; passenger_user app; # Python应用配置 passenger_app_type wsgi; passenger_startup_file passenger_wsgi.py; # 设置应用环境 passenger_app_env production; client_max_body_size 50M; }

3. 创建passenger_wsgi.py文件

import os import sys # 将应用目录添加到Python路径 sys.path.insert(0, '/home/app/webapp') os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') from django.core.wsgi import get_wsgi_application application = get_wsgi_application()

4. 构建和运行容器

# 构建镜像 docker build -t your-django-app . # 运行容器 docker run -d -p 80:80 --name django-container your-django-app

Express应用部署步骤 ⚡

1. 创建Dockerfile

FROM phusion/passenger-nodejs:<VERSION> ENV HOME /root CMD ["/sbin/my_init"] # 启用Nginx和Passenger RUN rm -f /etc/service/nginx/down # 移除默认Nginx配置 RUN rm /etc/nginx/sites-enabled/default # 添加自定义Nginx配置 ADD nginx.conf /etc/nginx/sites-enabled/webapp.conf # 创建应用目录并设置权限 RUN mkdir /home/app/webapp COPY --chown=app:app . /home/app/webapp # 安装依赖 WORKDIR /home/app/webapp RUN npm install --production # 清理 RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

2. 创建Nginx配置文件 (nginx.conf)

server { listen 80; server_name www.yourdomain.com; root /home/app/webapp/public; passenger_enabled on; passenger_user app; # Node.js应用配置 passenger_app_type node; passenger_startup_file app.js; # 设置应用环境 passenger_app_env production; client_max_body_size 50M; }

3. 构建和运行容器

# 构建镜像 docker build -t your-express-app . # 运行容器 docker run -d -p 80:80 --name express-container your-express-app

配置环境变量

一些Web框架会根据环境变量调整行为。例如,Rails尊重RAILS_ENV,而Connect.js尊重NODE_ENV。默认情况下,Phusion Passenger会将以下环境变量设置为production

  • RAILS_ENV
  • RACK_ENV
  • WSGI_ENV
  • NODE_ENV
  • PASSENGER_APP_ENV

要自定义这些环境变量,有两种方法:

方法1:在Nginx配置中设置

server { ... passenger_app_env staging; # 将环境设置为staging }

方法2:运行容器时设置

docker run -e PASSENGER_APP_ENV=staging YOUR_IMAGE

启用Redis和Memcached

启用Redis

# 启用Redis服务 RUN rm -f /etc/service/redis/down

Redis配置文件位于/etc/redis/redis.conf

启用Memcached

# 启用Memcached服务 RUN rm -f /etc/service/memcached/down

Memcached配置文件位于/etc/memcached.conf

容器管理技巧

检查应用状态

如果使用Passenger部署应用,可以运行以下命令检查状态:

passenger-status passenger-memory-stats

查看日志

重要日志文件位置:

  • /var/log/nginx/error.log- Nginx错误日志
  • /var/log/syslog- 系统日志
  • /home/app- 应用日志文件

进入正在运行的容器

使用docker exec进入容器:

# 查找容器ID docker ps # 进入容器 docker exec -t -i YOUR-CONTAINER-ID bash -l

总结

passenger-docker为Ruby、Python和Node.js应用提供了简单而强大的Docker部署解决方案。通过本文介绍的步骤,你可以快速部署Rails、Django或Express应用,而无需担心复杂的基础系统配置。无论是开发环境还是生产环境,passenger-docker都能帮助你简化部署流程,提高工作效率。

要开始使用passenger-docker,只需克隆仓库并按照相应框架的部署步骤操作:

git clone https://gitcode.com/gh_mirrors/pa/passenger-docker cd passenger-docker

祝你部署顺利!如有任何问题,可以查阅项目文档或提交issue寻求帮助。

【免费下载链接】passenger-dockerDocker base images for Ruby, Python, Node.js and Meteor web apps项目地址: https://gitcode.com/gh_mirrors/pa/passenger-docker

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询