This guide will help us deploy a flask application on a VPS via SSH. There are several ways to deploy python based apps but in this case, we will use Apache and Phusion Passenger – the same software used in shared hosting.
Requirements
- root access to the server
- Ubuntu 20.04 installed
- Minimum 512MB RAM, 10GB space
- a domain/subdomain pointed to your VPS IP address
The steps involved are as follows:
1.Install needed software (Python3, Apache, Passenger and Git)
2.Upload you website
3.Setup server configuration
Lets get started
Install needed software
The software needed are python3, Apache, Passenger and Git
Uninstall Python 2
$ sudo apt remove python2
$ sudo apt remove python-is-python2
$ sudo apt autoremove --purge
Install Python 3
$ sudo apt-get update
$ sudo apt-get install -y python3 python3-pip
Install Apache
$ sudo apt-get install apache2
Install Passenger and needed Apache modules
$ 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 $ sudo apt-get install -y libapache2-mod-passenger $ sudo a2enmod passenger $ systemctl restart apache2
Install Git
$ sudo apt-get install -y git
Upload your website
We will use git to upload our website. To do this, you need to have your website already available in a repo such as Github or Gitlab.
Create a user for your app. We will call our user appuser
$ useradd appuser
$ passwd appuser
Create your application directory
$ sudo mkdir -p /var/www/awesomeapp
$ sudo chown appuser: /var/www/awesomeapp
Clone your app
$ cd /var/www/awesomeapp && sudo -u appuser -H git clone https://gitlab.com/username/awesomeapp.git
Note: If you do not have an app in a repo such as Github or Gitlab already, please manually upload your app files to /var/www/awesomeapp
Setup server configuration
The next thing is to complete the set up of our app. This means we install the application requirements and configure Apache
Install app requirements
Your app should have a requirements.txt file. Run the command below to install required files
$ pip3 install -r requirements.txt
Create an Apache VHOST file using the following command. We’ll assume your domain is called truehosttestdomain.com
$ sudo vim /etc/apache2/sites-enabled/awesomeapp.conf
Copy the content below
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName truehosttestdomain.com
ServerAlias truehosttestdomain.com
# Tell Apache and Passenger where your app's code directory is
DocumentRoot /var/www/awesomeapp/code/
PassengerAppRoot /var/www/awesomeapp/code
# Tell Passenger that your app is a Python app
PassengerAppType wsgi
PassengerStartupFile passenger_wsgi.py
ErrorLog /var/www/truehosttestdomain.com/logs/error.log
CustomLog /var/www/truehosttestdomain.com/logs/access.log combined
Alias /static/ /var/www/awesomeapp/static
<Directory /var/www/awesomeapp/static>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Restart apache and check your domain online!
$ systemctl restart apache2
Leave A Comment?