Django

Création d'une application Django sur le serveur Ubuntu

Création d'une application Django sur le serveur Ubuntu
Django est une plate-forme commune pour le développement de sites Web, d'applications Web et d'API Web. Il existe de nombreux avantages à utiliser le framework Django pour votre projet en tant qu'outil et si vous n'êtes pas sûr que ce soit la bonne solution, il vous suffit de vous tourner vers les nombreuses grandes marques utilisant Django dans leur pile.

Déployer Django dans un environnement de production pour la première fois peut être une tâche ardue. Souvent, les développeurs lancent une instance Linux sur le cloud pour leur environnement de production.

Dans ce tutoriel, nous allons vous montrer comment lancer Django en production, en utilisant une nouvelle instance Ubuntu.

Nous supposerons que toutes vos modifications sont effectuées sur le serveur et que vous exécutez les commandes en tant que root.

Pour ce tutoriel, nous utilisons Ubuntu 18.04.2 LTS

Création d'un utilisateur pour le projet

Nous allons créer un nouvel utilisateur, django, pour exécuter notre application. Cela offre un léger avantage de sécurité.

Pour créer le nouvel utilisateur :

useradd -m django

le -m drapeau crée un nouveau répertoire personnel : /accueil/django.

Configuration de l'environnement Python

Tout d'abord : mettez à jour vos listes de paquets avec apt-get mise à jour

Ubuntu 18.04 est livré avec Python 3.6, mais il n'est pas livré avec pip, dont vous aurez besoin pour installer vos dépendances.

apt-get installer python3-pip

Maintenant que nous avons pip, créons un environnement virtuel. Les environnements virtuels aident à éviter les conflits avec les packages Python utilisés par Linux.

pip3 installer virtualenv
cd /accueil/django
environnement virtuel

Vous avez maintenant créé un Python 3 virtuel.6 environnement dans le /accueil/django/env dossier qui peut être activé avec la commande suivante : Maintenant que nous avons pip, créons un environnement virtuel. Les environnements virtuels aident à éviter les conflits avec les packages Python utilisés par Linux.

source /home/django/env/bin/activate

Mise en place du projet Django

Pour ce tutoriel, nous allons créer un projet Django temporaire. Si vous déployez votre propre code, vous devrez plutôt le télécharger sur le serveur. Nous fonctionnerons dans le répertoire personnel, /home/django.Mise en place du projet Django

Créons le projet Django :

cd /accueil/django
source env/bin/activate
pip installer django
Django-admin tutoriel startproject

Vérifiez que les choses fonctionnent en exécutant :

tutoriel cd
python gérer.py runserver 0.0.0.0:80

Notre instance Ubuntu s'exécute à 178.128.229.34 donc nous allons nous connecter à http://178.128.229.34.Vérifiez que les choses fonctionnent en exécutant :

Vous verrez probablement quelque chose comme ceci :

Pour résoudre ce problème, nous allons modifier /home/django/tutorial/tutorial/settings.py. Trouve ALLOWED_HOSTS = [] et réglez-le sur :

ALLOWED_HOSTS = [
'178.128.229.34' # remplacez ceci par l'adresse IP de votre serveur
ou le nom de domaine que vous utilisez pour vous connecter
]

Revenons maintenant à http://178.128.229.34 :

Génial! Nous sommes en ligne!

Configuration de PostgreSQL, la base de données

Par défaut, Django utilise une base de données SQLite3. Malheureusement, SQLite3 n'autorise pas les écritures simultanées. Si votre site Web n'a qu'un seul utilisateur qui modifie les données et que le reste des visiteurs ne fait que lire des pages, cela peut être approprié. Mais si plusieurs personnes modifient des données en même temps, vous souhaiterez probablement utiliser un backend différent.

Les choix courants sont PostgreSQL et Mysql. Nous allons utiliser PostgreSQL pour ce tutoriel.

Commencez par installer PostgreSQL :

apt-get installer postgresql

Ensuite, lancez psql, un shell de base de données. Par défaut, seul l'utilisateur postgres est capable de se connecter à la base de données, nous devrons donc d'abord nous authentifier en tant qu'utilisateur :

su - postgres
psql

Ensuite, nous avons besoin d'une base de données et d'un utilisateur pour accéder à cette base de données :

créer un didacticiel de base de données ;
créer l'utilisateur tutorial_user avec le mot de passe crypté 'tutorial_password' ;
accordez tous les privilèges sur le didacticiel de base de données à tutorial_user ;

Maintenant, tapez exit ou appuyez deux fois sur Ctrl-D : une fois pour quitter psql et une fois pour vous déconnecter du shell de postgresuser.

Génial! Maintenant, nous avons configuré notre base de données et nos utilisateurs. Vérifions que nous pouvons nous connecter à notre base de données.

Nous allons essayer d'ouvrir un shell de base de données, cette fois en nous connectant à la base de données que nous avons créée avec l'utilisateur que nous avons créé :

psql -Ututorial_user -dtutorial -h127.0.0.1 -W

À l'invite, entrez le mot de passe que nous avons créé : tutorial_password.

Si vous voyez un shell de base de données, vous avez réussi. Si vous voyez des erreurs, vous devrez revenir en arrière et comprendre ce qui ne va pas.

Connecter Django à la base de données

Pour connecter Django à la base de données, nous devons d'abord installer l'adaptateur Python PostgreSQL :

pip installer psycopg2-binaire

Alors ouvrons-nous /home/django/tutorial/tutorial/settings.pyet configurer la connexion.

Trouvez votre connexion à la base de données actuelle ; si vous ne l'avez pas modifié, cela pourrait ressembler à ceci :

BASES DE DONNÉES =
'défaut':
'MOTEUR': 'django.db.backends.sqlite3',
'NOM' : os.chemin.join(BASE_DIR, 'db.sqlite3'),

Pour nous connecter à PostgreSQL, nous allons le remplacer par ce qui suit :

BASES DE DONNÉES =
'défaut':
'MOTEUR': 'django.db.backends.postgresql_psycopg2',
'NAME' : 'tutoriel',
'UTILISATEUR' : 'utilisateur_tutoriel',
'MOT DE PASSE' : 'tutorial_password',
'HTE' : '127.0.0.1',
'PORT': '5432',

Testons la connexion :

cd /accueil/django/tutoriel
python gérer.py runserver 0.0.0.0:80

Vous devriez à nouveau pouvoir visiter votre site Web (pour nous à l'adresse http://178.128.229.34/, mais remplacez-le par votre IP ou votre nom d'hôte).

Si tout va bien, on peut continuer.

Configuration de nginx, le serveur Web

Quand tu cours python gérer.py runserver, vous utilisez le serveur de développement de Django. C'est génial pour le développement local, mais comme avec SQLite3, ce n'est pas vraiment adapté à la production.

Les choix courants pour les serveurs Web de production sont nginx et Apache. Pour ce tutoriel, nous utiliserons nginx.

Installez nginx en utilisant les éléments suivants :

apt-get installer nginx

Maintenant, si tout a bien fonctionné, nginx devrait s'exécuter sur le port 80. Allez-y et consultez votre site Web; tu devrais voir:

Super, donc nginx est opérationnel! Ensuite, nous devrons le configurer pour communiquer avec Django. Ouvrez le fichier de configuration nginx, situé dans /etc/nginx/sites-available/default. Remplaçons le fichier par le suivant :

django en amont
serveur 127.0.0.1:8000;

serveur
écouter 80 ;
emplacement /
try_files $uri @send_to_django;

emplacement @send_to_django
proxy_set_header Hôte $http_host;
proxy_redirect désactivé ;
proxy_pass http://django;

Testez le fichier de configuration en exécutant nginx -t. Si tout va bien, nous pouvons recharger en exécutant nginx -s reload.

Maintenant, si vous visitez votre site, vous verrez ce qui suit :

Chaque fois que vous voyez cela, cela signifie que nginx n'a pas pu transmettre la demande au processus en amont. Pour le moment, c'est parce qu'il essaie de transmettre la demande à 127.0.0.1:8000 mais aucun processus n'écoute à cette adresse.

Démarrons le serveur de développement Django et réessayez :

cd /accueil/django/tutoriel
python gérer.py runserver 127.0.0.1:8000

et encore visiter votre site web. Vous devriez voir votre application Django.

Monter Django sur Gunicorn

N'oubliez pas que nous ne voulons pas utiliser notre serveur de développement Django en production. Au lieu de cela, nous utiliserons un serveur Web Server Gateway Interface (WSGI) pour exécuter Django. Nginx transmettra la demande au serveur WSGI, qui exécute Django.

Les choix courants pour un serveur WSGI sont Gunicorn et uWSGI. Pour ce tutoriel, nous utiliserons Gunicorn.

Installons Gunicorn :

pip installer gunicorn

Ensuite, nous pouvons démarrer gunicorn comme suit :

cd /accueil/django/tutoriel
tutoriel gunicorn.wsgi

Vous devriez maintenant pouvoir visiter votre site Web et voir votre application fonctionner correctement.

Exécuter Gunicorn en tant que service

Il y a quelques problèmes avec l'exécution de gunicorn comme ceci:

  1. Si nous fermons la session SSH, le processus gunicorn s'arrêtera.
  2. Si le serveur redémarre, le processus gunicorn ne démarre pas.
  3. Le processus s'exécute en tant que root. Si les pirates trouvent un exploit dans le code de notre application, ils pourront exécuter des commandes en tant que root. Nous ne voulons pas de cela ; mais c'est pourquoi nous avons créé le djangouser!

Pour résoudre ces problèmes, nous allons exécuter Gunicorn en tant que service systemd.

cd /accueil/django
bac mkdir
cd /home/django/bin
toucher démarrer-serveur.sh

Dans le serveur de démarrage.sh :

cd /accueil/django
source env/bin/activate
tutoriel cd
tutoriel gunicorn.wsgi

Vous pouvez maintenant tester le script :

cd /home/django/bin
serveur de démarrage bash.sh
# visitez votre site Web, il devrait être en cours d'exécution

Nous créons maintenant le service systemd pour Gunicorn. Créer /etc/systemd/system/gunicorn.service comme suit :

[Unité]
Description=Gunicorne
Après=réseau.cible
[Un service]
Type=simple
Utilisateur=django
ExecStart=/home/django/bin/start-server.sh
Redémarrer=en cas d'échec
[Installer]
WantedBy=multi-utilisateur.cible

Maintenant, activons le service et démarrons-le

systemctl activer gunicorn
systemctl démarrer gunicorn

Vous devriez pouvoir voir votre site Web pour le moment.

Nous pouvons désactiver gunicorn comme suit :

systemctl stop gunicorn

Et vous devriez voir un 502 Bad Gateway.

Enfin, vérifions le cycle de démarrage :

systemctl démarrer gunicorn
redémarrer maintenant

Lorsque votre machine revient en ligne, vous devriez voir que votre site Web est en ligne.

Fichiers statiques

Si vous visitez le panneau d'administration de Django sur votre site Web à l'adresse /admin/ (pour nous, il s'agit de http://178.128.229.34/admin/), vous remarquerez que les fichiers statiques ne se chargent pas correctement.

Nous devrons créer un nouveau dossier pour les fichiers statiques :

cd /accueil/django
mkdir statique

Ensuite, nous disons à Django que c'est là qu'il doit placer les fichiers statiques en éditant /home/django/tutorial/tutorial/settings.py, et en ajoutant :

STATIC_ROOT = '/home/django/static/'

Nous pouvons maintenant rassembler les fichiers statiques :

cd /accueil/django
source env/bin/activate
tutoriel cd
python gérer.py collectstatic

Enfin, nous devons dire à nginx de servir ces fichiers statiques.

Ouvrons /etc/nginx/sites-available/default et ajoutons ce qui suit directement au-dessus de votre emplacement/bloc :

emplacement /statique/
racine /home/django;
try_files $uri =404;

L'ensemble du fichier devrait maintenant ressembler à ceci :

django en amont
serveur 127.0.0.1:8000;

serveur
écouter 80 ;
emplacement /statique/
racine /home/django;
try_files $uri =404;

emplacement /
try_files $uri @send_to_django;

emplacement @send_to_django
proxy_set_header Hôte $http_host;
proxy_redirect désactivé ;
proxy_pass http://django;

Nous pouvons recharger le fichier en utilisant nginx -s reload

Et voila! Vos fichiers statiques fonctionneront désormais pleinement.

Conclusion

À ce stade, votre application Django fonctionne correctement. Si vous avez des exigences particulières, vous devrez peut-être configurer un cache comme Redis ou une file d'attente de messages comme Rabbit MQ. Vous souhaiterez peut-être également configurer un déploiement continu car la procédure de déploiement peut prendre un certain temps.

Une autre étape importante consiste à prendre les mesures appropriées pour sécuriser votre machine Ubuntu. Sinon, vous pourriez constater que votre serveur se comporte mal!

Bonne chance!

Comment télécharger et jouer à Civilization VI de Sid Meier sur Linux
Présentation du jeu Civilization 6 est une version moderne du concept classique introduit dans la série de jeux Age of Empires. L'idée était assez sim...
Comment installer et jouer à Doom sur Linux
Introduction à Doom La série Doom est née dans les années 90 après la sortie du Doom original. Ce fut un succès instantané et à partir de ce moment-là...
Vulkan pour les utilisateurs Linux
Avec chaque nouvelle génération de cartes graphiques, nous voyons les développeurs de jeux repousser les limites de la fidélité graphique et se rappro...