Configuration de Nginx et uWSGI pour une application Django

Installation des paquets de développement essenteils pour le système :

sudo apt-get update
sudo apt-get install build-essential zlib1g-dev bzip2 libpcre3-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev

Configuration du gestionnaire de paquets Python :

curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
sudo python2.7 get-pip.py

Pip permet une gestion avancée des paquets, incluant l'installation, la mise à jour et la désinstallation.

Installation de uWSGI via pip :

pip install uWSGI
uwsgi --version

Pour vérifier le fonctionnement de uWSGI, créez un fichier test_app.py avec le contenu suivant :

def web_app(environ, start_response):
    status = '200 OK'
    headers = [('Content-Type', 'text/html; charset=utf-8')]
    start_response(status, headers)
    return [b"Salut le monde"]

Exécutez uWSGI pour tester :

uwsgi --http 0.0.0.0:9090 --wsgi-file test_app.py

Configuration de uWSGI pour Django :

Créez un fichier uwsgi_config.ini avec des paramètres adaptés :

[uwsgi]
socket = 127.0.0.1:8001
chdir = /chemin/vers/projet_django
module = projet.wsgi:application
processes = 4
threads = 2

Installation de Django :

pip install django==2.2.28

Configuration des paramètres Django dans settings.py :

Définissez la base de données, par exemple pour SQLite ou MySQL, selon les besoins.

Application des migrations de la base de données :

python manage.py makemigrations
python manage.py migrate

Lancement du serveur de développement Django :

python manage.py runserver 0.0.0.0:8080

Installation de Nginx depuis les sources :

wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -xzf nginx-1.24.0.tar.gz
cd nginx-1.24.0
./configure --prefix=/opt/nginx-1.24.0 \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre
make
sudo make install

Vérificatino de la version installée :

/opt/nginx-1.24.0/sbin/nginx -v

Création d'un utilisateur dédié pour Nginx :

sudo groupadd webadmin
sudo useradd -g webadmin -s /sbin/nologin webuser

Configuration principale de Nginx (/opt/nginx-1.24.0/conf/nginx.conf) :

user webuser webadmin;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /run/nginx.pid;

events {
    use epoll;
    worker_connections 1024;
}

http {
    include mime.types;
    default_type application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

    sendfile on;
    tcp_nopush on;
    keepalive_timeout 65;
    tcp_nodelay on;

    gzip on;
    gzip_min_length 1024;
    gzip_types text/plain text/css application/json application/javascript text/xml;

    server {
        listen 80;
        server_name mon-domaine.com;

        access_log /var/log/nginx/access.log main;

        location / {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:8001;
            client_max_body_size 10M;
        }

        location /static/ {
            alias /chemin/vers/statiques_django/;
            expires 30d;
        }

        location ~* \.(jpg|jpeg|png|gif|ico)$ {
            expires 7d;
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root /opt/nginx-1.24.0/html;
        }
    }
}

Validation de la syntaxe du fichier de configuration :

/opt/nginx-1.24.0/sbin/nginx -t

Démarrage du service Nginx :

sudo /opt/nginx-1.24.0/sbin/nginx

Étiquettes: nginx uwsgi Django Python Linux

Publié le 6 juin à 19h45