In this article we will show you how to easily implement a web application based on flask microstructure using Apache HTTP Server. Flask is a simple web framework written in Python. It is often called a microframework for its lightness and simplicity. However, it can also be used for larger projects and even for commercial projects. Apache is an easy-to-use, widely utilized HTTP server.
Server distributions such as EuroLinux, CentOS or Red Hat® Enterprise Linux® are ideal systems for this type of application.
Required components:
- Python3
- Virtualenv
- Apache HTTP Server / httpd
- mod_wsgi
- Flask.
Installation of components
Python3:
sudo yum install python3
Virtualenv:
sudo pip3 install virtualenv
Apache HTTP Server / httpd
sudo yum install httpd
sudo systemctl start httpd
sudo systemctl status httpd
mod_wsgi:
sudo yum install python3-mod_wsgi
Flask will be installed after creating the virtual environment with the virtualenv
command.
Creating an application
The application we create will be equipped with the simplest authentication mechanism and will display the user's status. If we are not logged in, it will display Guest
, and after logging in, the name of the active user. However, we will not deal with the issue of frontend here. It will be a simple stateless API that responds to Hello world!
.
We start developing the application by creating a directory in the /var/www/
folder. We immediately create a virtual environment in it. We can do this in the directory next to or directly in the directory where we intend to place the application.
cd /var/www/
sudo mkdir /var/www/hello_world
sudo virtualenv hello_world
Then we activate the virtual environment and use pip
to install flask
.
cd hello_world
. bin/activate
sudo pip3 install flask
Now we create 3 files inside the directory:
- run.py – responsible for starting the application manually in order to test its operation
#!/usr/bin/env python3
import os
from app import app
if __name__ == "__main__":
port = int(os.environ.get("PORT", 5000))
app.run(host='0.0.0.0', port=port, debug=True)
- app/__init__.py – defines the package of files that make up the application
#!/usr/bin/env python
from .web import app
- app/web.py – contains all the logic of our application. Decorator @app.route defines the URI, return returns the response that the user will see.
#!/usr/bin/env python
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello world!"
Now we can test the operation of our application:
FLASK_APP=run.app; flask run
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
After entering the address received in the terminal into the browser, we should be greeted with the words Hello world!
.
Preparing Apache server
The last step will be to prepare the configuration of wsgi and Apache HTTP server.
The wsgi.py file indicates the place where the Python modules are installed in the previously prepared virtual environment, imports sys and site packages and our application.
#!/usr/bin/env python
import sys
import site
site.addsitedir('/var/www/hello_world/lib/python3.6/site-packages')
sys.path.insert(0, '/var/www/hello_world)
from app import app as application
Then we configure the Apache server. We add the following configuration to the file that can be found in /etc/httpd/conf/httpd.conf
for Enterprise-class operating systems such as EuroLinux or CentOS:
/etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ServerName localhost
WSGIDaemonProcess hitme user=apache group=apache threads=2
WSGIScriptAlias / /var/www/hello_world/wsgi.py
<Directory /var/www/hello_world>
Require all granted
</Directory>
</VirtualHost>
We restart the Apache HTTP server:
sudo systemctl restart httpd
Now you just need to check that after typing localhost
in the browser, you are greeted with the message Hello world!
.
Summary
In this way, a simple website can be used to display data on the server and it is easy to add new functionalities to it. In the following articles, we will show you how to implement various methods of user authentication and authorization, as well as a simple database.