Hello There!!, In the previous blog we lean how to deploy a rails application with passenger and nginx. Today we are going to learn how to deploy a rails application with passenger and nginx with SSL. Here is an example of that
Remove previously installed nginx
if you have already installed nginx then first remove the existing nginx before we start. For remove nginx run the command.
sudo apt-get remove nginx nginx-full nginx-light nginx-naxsi nginx-common
Remove old unicorn
If your site was running on unicorn then first uninstall unicorn and remove all unicorn config. Do the following steps.
sudo rm /etc/init.d/YOUR_APP_UNICORN_CONFIG_FILE_NAME
sudo update-rc.d -f YOUR_APP_UNICORN_CONFIG_FILE_NAME remove
Install nginx with passenger
First find the release of your ubuntu machine by running lsb_release -a
and copy the code name for further use. Now run the following commands to install nginx with passenger:
1. sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
2. sudo apt-get install -y apt-transport-https ca-certificates
3. sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger CODE_NAME_OF_RELEASE main > /etc/apt/sources.list.d/passenger.list'
4. sudo apt-get update
5. sudo apt-get install -y nginx-extras passenger
Enable the nginx passenger module
Edit /etc/nginx/nginx.conf
and uncomment passenger_root
and passenger_ruby
. For example, you may see this:
# passenger_root /some-filename/locations.ini;
# passenger_ruby /usr/bin/passenger_free_ruby;
Remove the ‘#’ characters.
Check the installation
After installation you can validate the installation by running the following command: sudo passenger-config validate-install
Create a nginx config for your application
- Remove the existing file
/etc/nginx/site-enabled/default
. - Create new config file for your application and write the following lines inside that file:
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name _;
# SSL configuration
ssl on;
ssl_certificate SSL.crt_PATH;
ssl_certificate_key App.key_PATH;
ssl_prefer_server_ciphers On;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
#Enabling application to being included via the iframes
add_header X-Frame-Options ALLOW; // DENY if you want to deny your application to include in iframe
# Enabling passenger for application
passenger_enabled on;
# Rails environment for application
passenger_app_env staging;
# Applications root
root YOUR_APP_PUBLIC_DIRECTORY_PATH;
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
error_page 500 502 504 /500.html;
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /503.html break;
}
if (-f $document_root/../tmp/maintenance.txt) {
return 503;
}
}
server {
listen 80;
rewrite ^/(.*) https://$host$request_uri permanent;
}
Restart nginx service
After setting all the configs you need to restart the nginx service by running sudo service nginx restart
.
Restart passenger
If you want to restart passenger then you need to touch a file tmp/restart.txt. touch YOUR_APP_DIRECTORY/tmp/restart.txt
Show maintenance page during maintenance
You just need to do the steps:
touch YOUR_APP_DIRECTORY/tmp/maintenance.txt
after finish the maintenance just remove this file.rm YOUR_APP_DIRECTORY/tmp/maintenance.txt
and your application is live again.
Thanks for the reading !!!!!!