Příprava linuxového serveru pro běh webové aplikaci v jazyce Python

11. března 2020

V tomto článku popíši instalaci linuxového serveru s distribucí Debian 9, na kterém zprovozním webovou aplikaci napsanou v jazyce Python. Nejdříve však bude potřeba zprovoznit web server, Python prostředí a propojit webserver s Python aplikací. Samozřejmě aplikace bude napojena i na SQL databázi, ale to již není předmětem tohoto článku.

Osnova

Postup instalace a konfigurace je následující:

  1. Instalace Pythonu
  2. Instalace a zprovoznění web serveru Nginx
  3. Zprovoznění prostředí pro Python
  4. Nastaveni Nginx
  5. Instalace Django
  6. Nastavení uwsgi
  7. Propojení Python aplikace a webserveru

Python

První co je potřeba zvolit je zdali aplikace budete potřebovat Python verze 3 nebo Python verze 2.

Instalace Pythonu verze 3:

apt-get install python3

Instalace Pythonu verze 2:
apt-get install python2

WSGI HTTP

WSGI je zkradka Web Server Gateway Interface. Je to konvence volání webových serverů a předávání požadavků na webové aplikace. Což podporuje i framework Django napsaný v programovacím jazyce Python. S tímto frameworkem vá ukáži jak zprovoznit Python webserver. Podrobnosti co je WSGI.

Krom frameworku Django existují i další frameworky napsané v jazyce Python například Flask.

Jako implementaci WSGI můžeme použít Gunicorn nebo UWSGI. Já někde používám UWSGI a někde Gunicorn.

Instalace uwsgi:

apt-get install  uwsgi
uwsgi ani nemusíme instalovat do systému, protože je možno použít verzi, kterou nainstalujeme spolu s knihovnami pro aplikaci.

Jak jsem již zmínil, jako web server použijeme Nginx. Proto pokud již máte nainstalován web server apache je dobré od něho systém vyčistit příkazem:

apt-get purge apache2

Web server Nginx nainstalujeme příkazem:

apt-get install nginx 

Nainstalujeme virtualenv, což je nástroj pro vytvoření izolovaného prostředí pro běh Python aplikací. Instalaci provedeme příkazem:

apt-get virtualenv 

Python web server obecný návod

Vytvoříme si prostředí pro webové aplikace v jazyce Python verze 2. Pro Python verze 3 je to téměř stejné.

Vytvoření adresáře, kde budeme mít prostředí a data projektu:

DIR=/var/www/test2/mysite
mkdir $DIR
cd $DIR
Založení izolovaného prostředí:
virtualenv --python=python2 --always-copy venv
Přepnutí do izolovaného prostředí:
source venv/bin/activate

Veškeré knihovny pro aplikaci do izolovaného prostředí budeme instalovat pomoci technologie pip.

UWSGI nemusíme mít v systému, ale můžeme ho instalovat rovnou do tohoto izolovaného příkazem:

pip install uwsgi

Virtual enviroment Python 3

Založení izolovaného prostředí:

virtualenv --python=python3 --always-copy venv
Přepnutí do prostředí:
source venv/bin/activate

Nastavení web serveru Nginx

Vytvoříme soubor /etc/nginx/sites-available/mysite_nginx.conf s obsahem:

# the upstream component nginx needs to connect to
upstream django {
    # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
    server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

# configuration of the server
server {
    # the port your site will be served on
    listen      8000;
    # the domain name it will serve for
    server_name example.com; # substitute your machine's IP address or FQDN
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;  
    # adjust to taste

    # Django media
    location /media  {
        alias /path/to/your/mysite/media;  
        # your Django project's media files - amend as required
    }

    location /static {
        alias /path/to/your/mysite/static; 
        # your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;
        include     /path/to/your/mysite/uwsgi_params;
        # the uwsgi_params file you installed
    }
}

Napojení web serveru na aplikaci je dobré udělat přes socket. Také je potřeba nastavit automaticky po naběhnutí serveru startovalo uwsgi. Na starých systémech se jedná o init skripty, ale na dnešních systémech (rok 2019) použijete určitě startování pomocí systemd. Zde je návod jak nastavit, aby uwsgi startovalo pomocí sysmted. A nenapomeňte zapnout automatický start služby příkazem:
systemctl enable webapp.service

Výsledkem bude server s prostředím pro web aplikace napsaných ve frameworku Django.
Zapomeňte nastavit i zabezpečení webu pomocí certifikátu a šifrovaného spojení HTTPS

Kdo potřebuje Instalaci a konfiguraci linuxového servery na míru neváhejte mě kontaktovat.

Video ukázka zprovoznění Python webserveru

Video ukázka s instalací a nastavením linuxového serveru pro běh Python aplikace s frameworkem Django. Použit je web server nginx a uwsgi.

    Osnova videa:
  1. Python instalace
  2. Web server Nginx
  3. Zprovoznění prostředí pro Python
  4. Nastaveni Nginx
  5. Instalace Django frameworku
  6. Nastavení uwsgi
  7. Propojení aplikace Pythonu a webserveru

Odkazy

Rozběhání Pythonu jako web aplikace:
Django a Nginx
nginx + Django + python 3

Seznam UWSGI parametrů: uwsgi_params