Prérequis
- Django version: 2.1.7
- Python version: 3.6.7
- CentOS 7 (virtualbox)
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
- Setting up Django and your web server with uWSGI and nginx - uWSGI
- Nginx no such file or directory error - stackoverflow
Aucun commentaire:
Enregistrer un commentaire