On a previous article, we looked at deploying a flask application on Ubuntu 20.04 using Apache and Passenger
It is also possible to deploy an application on Passenger alone, without integrating it with another web server such as Apache or Nginx.
Prerequisites
- A domain name (or subdomain) we’ll use to access our deployed application
- A server installed with Ubuntu 20.04
- Python 3.x. Our sample app runs on python 3.
- Your application should be pushed to Github or Gitlab. I use Gitlab here
Procedure
1. Acquire a server.
As I mentioned earlier, I use Truehost Cloud for my servers.
2. Uninstall Python 2 (If it comes by default with your installation) and Install Python3
To uninstall Python 2, run the commands below
sudo apt remove python2
sudo apt remove python-is-python2
sudo apt autoremove --purge
To install python3, run the command below
sudo apt-get update
sudo apt-get install -y python3 python3-pip
You can then run the command below to set aliases for python and python3 commands
sudo apt-get install python-is-python3
3. Install Passenger
Install Passenger’s GPT keys
sudo apt-get install -y dirmngr gnupg
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
sudo apt-get install -y apt-transport-https ca-certificates
Add passengers repository
sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger bionic main > /etc/apt/sources.list.d/passenger.list'
sudo apt-get update
Install Passenger
sudo apt-get install -y passenger
4. Create a user for your app.
We’ll create a user with the name portfolio, as our app is called portfolio
useradd portfolio
passwd portfolio
5.Install Git
We’ll deploy using git
sudo apt-get install -y git
6. Upload your files
I’ll navigate to my application root directory and pull my app files from Gitlab. My application root directory is This is /var/www/portfolio
sudo mkdir -p /var/www/portfolio
sudo chown portfolio: /var/www/portfolio
To pull your code, run the following
cd /var/www/portfolio
sudo -u portfolio -H git clone https://gitlab.com/wwmwabini/portfolio.git code
Replace the git URL with your application URL
7. Install app dependencies
App dependencies are normally saved in a file called requirements.txt. To get this file, access terminal on your web development environment and run the command below
pip freeze >> requirements.txt
You can then upload the requirements.txt file to your server document root and run the command below to install the dependencies
pip3 install -r requirements.txt
8. Create a Passenger config file
Navigate to the document root of your app and create a Passengerfile.json file
cd /var/www/portfolio/code
sudo vim Passengerfile.json
Insert the code below
{
// Tell Passenger that this is a Python app.
// Replace "passenger_wsgi.py" with your app's WSGI entry point file.
"app_type": "wsgi",
"startup_file": "passenger_wsgi.py",
// Run the app in a production environment. The default value is "development".
"environment": "production",
// Run Passenger on port 80, the standard HTTP port.
"port": 80,
// Tell Passenger to daemonize into the background.
"daemonize": true,
// Tell Passenger to run the app as the given user. Only has effect
// if Passenger was started with root privileges.
"user": "portfolio"
}
Replace “portfolio” with your application user you created in step 4
9. Fix permissions
sudo chown portfolio: Passengerfile.json
10. Start Passenger
sudo passenger start
Walaah! Your application should be up and running
Troubleshooting.
If you bump into any errors, check out our previous article on how to debug or contact me via the contact page for assistance.