mercredi 3 janvier 2018

Installation de Django pour python3


Prérequis

Installer Nginx

Ajouter ce dépôt:
$ sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
Et installer nginx.
$ sudo yum update
$ sudo yum install -y nginx
Démarrer et activer nginx.
$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Installer Python3

Ajouter le dépôt d'IUS:
$ sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm
Installer Python3.6 comme ça:
$ sudo yum install -y python36u python36u-libs python36u-devel python36u-pip python-pip gcc
Pour vérifier si Python 3.6 était installé, exécuter ces commands:
$ sudo python3.6 -V
$ sudo which python3.6

SELinux

SELinux interrompt Apache pour des raisons de sécurité. Je pense que c'est mieux de désactiver SELinux pendant le développement.
$ sudo setenforce 0
Ouvrir le fichier de "/etc/selinux/config":
$ sudo vi /etc/selinux/config
Et change le fichier comme ça:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.

SELINUX=disabled #Changer ICI!!!!!

# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Utiliser venv de Python3

Aller au répertoire de votre développement et utiliser venv:
$ cd /vagrant
$ python3.6 -m venv django-test
$ cd ./django-test
$ source bin/activate
Et nous aurons un environnement de votre Python. Dans l'environnement virtuel, nous pouvons utiliser d'autres version de Python.
Nous pouvons sortir d'environnement virtuel avec cette commande (mais ne quittez pas tout de suite):
$ deactivate
Mettre python3 à jour:
$ python3.6 -m pip install --upgrade pip

Installer Django

Installer Django comme ça:
$ cd /vagrant/django-test
$ python3.6 -m pip install Django
$ django-admin.py startproject mysite
$ cd mysite

Ajouter les hôtes autorisés

Ajouter "192.168.33.10" dans "Allowed_Hosts" dans ce fichier:
$ sudo vi /vagrant/django-test/mysite/mysite/settings.py
Changer et ajouter l'hôte autorisé:


Comment utilsier la commande de "vi" est ici:
Appuyez sur la touche A du clavier pour accéder au mode insérer pour pouvoir éditer le fichier. Appuyez sur la touche échap pour arrêter mode insérer, après d'avoir fini, appuyez sur les touches Shift + g pour aller en bas de page. Shift + zz pour enregistrer et fermer le fichier. On peut utiliser le mode commande en appuyant sur :. Pour enregistrer et quitter le mode commande, écrire :wq et appuyez sur entrée. Pour quitter le fichier sans sauvegarder, :q! et appuyez sur entrée. Pour chercher un mot, appuyez sur ? et écrire le mot cherché. Par exemple, si on écrit ?aaa et que l'on appuie sur entrée, "aaa" sera recherché et surligné dans le fichier. Appuyez sur n pour aller au résultat suivant.

Vérifier si Django fonctionne par son serveur intégré:
$ cd /vagrant/django-test/mysite
$ python3.6 manage.py runserver 0.0.0:8000
Et nous pouvons voir le message de Django dans ce URL: http://192.168.33.10:8000/
Désactiver le serveur intégré par Appuyer sur CTRL + c après voir le message de Django. 

Installer uWSGI

Installer uwsgi:
$ cd /vagrant/django-test/mysite
$ python3.6 -m pip install uwsgi
Voir la version:
$ uwsgi --version
2.0.18

Hello World

views.py

Ajouter un module de Django comme ça:
$ cd /vagrant/django-test/mysite
$ python3.6 manage.py startapp mywebsite
Et ouvrir 'views.py':
$ sudo vi /vagrant/django-test/mysite/mywebsite/views.py
et écrire comme ça:
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world Django!!!!")

urls.py (mywebsite)

Créer un fichier comme urls.py:
$ sudo vi /vagrant/django-test/mysite/mywebsite/urls.py
Et écrire comme ça et ce fichier va appeler la fonction d' index de views.py quand utilisateurs voient "/" de notre application de Django:
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

urls.py (mysite)

Changer le fichier urls.py de mysite aussi.
$ sudo vi /vagrant/django-test/mysite/mysite/urls.py
Changer comme ça. Nous devons importer include de django.urls:
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('mywebsite/', include('mywebsite.urls')),
    path('admin/', admin.site.urls),
]

Voir si ça fonctionne

Voir si Django fonctionne par le serveur intégré:
$ cd /vagrant/django-test/mysite
$ python3.6 manage.py runserver 0.0.0:8000
Voir http://192.168.33.10:8000/mywebsite/ et nous pouvons le message de la fonction d'index de 'views.py':

Voir si uWSGI peut se connecter Django

Voir si uWSGI peut se connecter Django par ces commandes:
$ cd /vagrant/django-test/mysite
$ uwsgi --http :8000 --module mysite.wsgi
Voir http://192.168.33.10:8000/mywebsite/ et nous pouvons le message de la fonction d'index de 'views.py'.

Utiliser Nginx et uWSGI ensemble

Créer mysite_nginx.conf:
$ sudo vi /vagrant/django-test/mysite/mysite_nginx.conf
Et écrire comme ça:
# mysite_nginx.conf
# 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 192.168.33.10; # 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 /vagrant/django-test/mysite/media;  # your Django project's media files - amend as required
    }

    location /static {
        alias /vagrant/django-test/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     /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
    }
}
Créer un lien symbolique et Nginx peut voir le fichier par le lien symbolique:
$ sudo ln -s /vagrant/django-test/mysite/mysite_nginx.conf /etc/nginx/conf.d/
Redémarrer Nginx:
$ sudo systemctl restart nginx
Démarrer uWSGI:
$ cd /vagrant/django-test/mysite
$ uwsgi --socket :8001 --module mysite.wsgi
Nous pouvons voir l'application de Django sur http://192.168.33.10:8000/mywebsite/ sans le serveur intégré parce que l'application utilise Nginx. Nous pouvons arrêter uWSGI par CTRL+c.

Les fichiers statiques

Ouvrir ce fichier:
$ sudo vi /vagrant/django-test/mysite/mysite/settings.py
Ajouter ça:
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
comme ça:

Et démarrer:
$ cd /vagrant/django-test/mysite
$ python3.6 manage.py collectstatic

Utiliser les sockets d'unix au lieu des ports

Ouvrir mysite_nginx.conf et changer "upstream django":
upstream django {
    server unix:/var/run/mysite.sock; # for a file socket
    # server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}
Redémarrer Nginx:
$ sudo systemctl restart nginx
Démarrer uWSGI:
$ sudo /vagrant/django-test/bin/uwsgi --socket /var/run/mysite.sock --module mysite.wsgi --chmod-socket=666
Voir si ça fonctionne sur http://192.168.33.10:8000/mywebsite/.

Nous pouvons deamonizer uWSGI:
$ sudo /vagrant/django-test/bin/uwsgi --socket /var/run/mysite.sock --module mysite.wsgi --chmod-socket=666 --daemonize /var/log/uwsgi.log
Pour voir le registre d'erreur de Nginx:
$ sudo less /var/log/nginx/error.log

Note

  • Nous ne pouvons pas mettre le fichier de socket à /tmp parce que les files à /tmp est peut-être  invisible par Nginx. 

Références

Aucun commentaire:

Enregistrer un commentaire