Installing Passenger + Nginx on a Linux/Unix production server
for Python apps + Red Hat 6 / CentOS 6 (with RPM)
No Amazon Linux RPMs
Our YUM repository may not be used with Amazon Linux. Amazon Linux is too different from RHEL and CentOS. If you are on Amazon Linux, please go back to the operating system menu and select "Other / OS independent (generic installation method)".
On this page, we will install Passenger. After installing Passenger we can begin with deploying the app.
Table of contents
Step 1: upgrade your kernel, or disable SELinux
The first thing you need to do is to check on two things:
- Which kernel version are you running? You can find out by running
- Is SELinux enabled? You can find out by running
grep SELINUX /etc/selinux/config. If it says "enforcing" or "permissive", then SELinux is enabled. If it says "disabled", then SELinux is disabled.
If SELinux is enabled, then Passenger requires kernel >= 2.6.39. If your kernel is not recent enough, then there are two things you can do:
Disable SELinux completely. Edit
SELINUX=disabledand reboot. Note that merely setting SELinux to permissive mode is not enough.
- Upgrade your kernel to at least 2.6.39.
If your kernel version was already at least 2.6.39, or if SELinux was already disabled, then you can skip to the next step.
Step 2: enable EPEL
Passenger requires EPEL. The instructions differ depending on whether you are on Red Hat or CentOS.
install EPEL package
If your system is 64-bit:
$ if ! rpm -q epel-release; then sudo yum install -y yum-utils \ http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm; fi $ sudo yum-config-manager --enable epel
If your system is 32-bit:
$ if ! rpm -q epel-release; then sudo yum install -y yum-utils \ http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm; fi $ sudo yum-config-manager --enable epel
enable the 'optional' repository
|Enable the optional repository (rhel-6-server-optional-rpms). This can be done by enabling the RHEL optional subchannel for RHN-Classic. For certificate-based subscriptions see Red Hat Subscription Management Guide.|
$ sudo yum install -y epel-release yum-utils $ sudo yum-config-manager --enable epel
Step 3: install Passenger packages
These commands will install Passenger Nginx through Phusion's YUM repository. If you already had Nginx installed, then these commands will upgrade Nginx to Phusion's version (with Passenger compiled in).
# Install various prerequisites sudo yum install -y pygpgme curl # Add our el6 YUM repository sudo curl --fail -sSLo /etc/yum.repos.d/passenger.repo https://oss-binaries.phusionpassenger.com/yum/definitions/el-passenger.repo # Install Passenger Nginx sudo yum install -y nginx passenger
Step 4: enable the Passenger Nginx module and restart Nginx
/etc/nginx/conf.d/passenger.conf and uncomment
passenger_instance_registry_dir. For example, you may see this:
# passenger_root /some-filename/locations.ini; # passenger_ruby /usr/bin/ruby; # passenger_instance_registry_dir /var/run/passenger-instreg;
Remove the '#' characters, like this:
passenger_root /some-filename/locations.ini; passenger_ruby /usr/bin/ruby; passenger_instance_registry_dir /var/run/passenger-instreg;
If you don't see a commented version of
passenger_instance_registry_dir inside passenger.conf, then you need to insert them yourself.
passenger-config --root. It will tell output some path. For example:
$ passenger-config --root /some-filename/locations.ini
passenger_root configuration option into /etc/nginx/conf.d/passenger.conf using the value you obtained. Ensure that
passenger_instance_registry_dir is set to /var/run/passenger-instreg. For example:
passenger_root /some-filename/locations.ini; passenger_instance_registry_dir /var/run/passenger-instreg;
When you are finished with this step, restart Nginx:
$ sudo service nginx restart
Step 5: check installation
After installation, please validate the install by running
sudo /usr/bin/passenger-config validate-install. For example:
$ sudo /usr/bin/passenger-config validate-install * Checking whether this Phusion Passenger install is in PATH... ✓ * Checking whether there are no other Phusion Passenger installations... ✓
All checks should pass. If any of the checks do not pass, please follow the suggestions on screen.
Finally, check whether Nginx has started the Passenger core processes. Run
sudo /usr/sbin/passenger-memory-stats. You should see Nginx processes as well as Passenger processes. For example:
$ sudo /usr/sbin/passenger-memory-stats Version: 5.0.8 Date : 2015-05-28 08:46:20 +0200 ... ---------- Nginx processes ---------- PID PPID VMSize Private Name ------------------------------------- 12443 4814 60.8 MB 0.2 MB nginx: master process /usr/sbin/nginx 12538 12443 64.9 MB 5.0 MB nginx: worker process ### Processes: 3 ### Total private dirty RSS: 5.56 MB ----- Passenger processes ------ PID VMSize Private Name -------------------------------- 12517 83.2 MB 0.6 MB PassengerAgent watchdog 12520 266.0 MB 3.4 MB PassengerAgent server 12531 149.5 MB 1.4 MB PassengerAgent logger ...
If you do not see any Nginx processes or Passenger processes, then you probably have some kind of installation problem or configuration problem. Please refer to the troubleshooting guide.
Step 6: update regularly
Nginx updates, Passenger updates and system updates are delivered through the YUM package manager regularly. You should run the following command regularly to keep them up to date:
$ sudo yum update
After an update, you should restart Nginx. Doing so will automatically restart Passenger too.
Now that you have installed Passenger, you are ready to deploy your Python application on the production server!