终极指南:如何用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.3phusion/passenger-ruby34- Ruby 3.4phusion/passenger-ruby40- Ruby 4.0phusion/passenger-jruby94- JRuby 9.4phusion/passenger-jruby100- JRuby 10.0
Python镜像
phusion/passenger-python310- Python 3.10phusion/passenger-python311- Python 3.11phusion/passenger-python312- Python 3.12phusion/passenger-python313- Python 3.13phusion/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-appDjango应用部署步骤 🐍
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-appExpress应用部署步骤 ⚡
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_ENVRACK_ENVWSGI_ENVNODE_ENVPASSENGER_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/downRedis配置文件位于/etc/redis/redis.conf。
启用Memcached
# 启用Memcached服务 RUN rm -f /etc/service/memcached/downMemcached配置文件位于/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),仅供参考