Utiliser Django pour développer un site Web de blog et le déployer en ligne à l'aide de Nginx + Gunicorn sur Alibaba Cloud (Déploiement)

Dans le dernier article, nous avons réalisé un projet Django local et implémenté les fonctions de liste et de détails du blog.

Utilisez Django pour développer un site Web de blog et déployez-le en ligne à l'aide de Nginx + Gunicorn sur Alibaba Cloud (Développement)_Li Weiwei wiwi's blog-CSDN blog Dans cet article, nous allons implémenter un simple site Web de blog personnel via Django + MySQL, et en même temps utilisez-le sur Alibaba Cloud via Nginx et gunicorn réalise le déploiement et l'exploitation en ligne du site Web. https://blog.csdn.net/agelee/article/details/127425833

Dans cet article, nous utiliserons Nginx et Gunicorn pour implémenter le déploiement en ligne du projet Django sur Alibaba Cloud.

Pendant le développement, nous avons utilisé le propre serveur de développement de Django, mais ses performances étaient trop faibles pour être utilisées dans un environnement en ligne. Par conséquent, lors du déploiement en ligne, nous devons non seulement installer Django, mais aussi Nginx et Gunicorn. Le workflow de ces trois frères est le suivant :

  • Le client envoie une requête http et Nginx sert d'interface serveur externe directe pour analyser la requête http.
  • S'il s'agit d'une demande de ressource statique, elle sera gérée par Nginx lui-même (extrêmement efficace)
  • S'il s'agit d'une demande de ressource dynamique, transmettez-la à Gunicorn
  • Une fois que Gunicorn a prétraité la demande, transmettez-la à Django et termine enfin le retour de la ressource.

Les étapes pour déployer un projet Django sont à peu près les suivantes :

  • Préparez le serveur (ouvrez le port 80)
  • Préparer les outils de connexion à distance au serveur et de transfert de fichiers (Xshell et Xftp)
  • Installer Python, Nginx, Mysql
  • Créer une base de données
  • Modifier le fichier de configuration du projet Django
  • Transférer le projet Django vers le serveur
  • Installez les packages Python pertinents contenus dans le projet Requirements.txt
  • Collecter des ressources statiques
  • Configurer les paramètres de proxy liés à Nginx
  • Installer et activer Gunicorn
  • essai

Préparer le serveur

Cet article utilise Alibaba Cloud. Les serveurs Alibaba Cloud peuvent être essayés pendant un mois. Nous utilisons le serveur d'essai comme exemple pour mettre en œuvre le déploiement du projet.

Dans l'interface d'activation du service, vous pouvez remplir les autres informations à votre guise. Nous utilisons la version Ubuntu 22.04 64 bits du système d'exploitation.

Lors de son activation, nous choisissons uniquement le système d'exploitation et aucune autre application n'est préinstallée.

Après l'activation, entrez dans l'interface de l'instance de gestion et vous pourrez voir notre contenu de champ le plus critique, l'adresse IP publique :39.107.240.223

Réinitialisez ensuite notre mot de passe d'instance (sinon la clé secrète sera utilisée par défaut lors de la connexion au serveur)

Vérifiez ensuite les ports entrants dans notre groupe de sécurité. Au moins les ports 80 et 22 doivent être ouverts.

Installez Xshell et Xftp

Xshell et Xftp sont des outils distants développés par NetSarang.

  • Xshell peut se connecter et contrôler le serveur à distance
  • Xftp peut transférer des fichiers à distance vers le serveur

L'adresse de téléchargement est la suivante. Pour un usage personnel, utilisez simplement la version gratuite.

Gratuit pour la maison/l'école - Site Web NetSarang https://www.xshell.com/zh/free-for-home-school/

Après avoir installé le logiciel, nous ouvrons d'abord Xshell, créons une nouvelle session et saisissons l'adresse du réseau public d'Alibaba Cloud sur l'hôte.

Sélectionnez Authentification utilisateur, entrez votre nom d'utilisateur et votre mot de passe de connexion et cliquez sur le bouton Connecter pour terminer la connexion.

Les méthodes d'installation et de connexion de Xftp et Xshell sont presque les mêmes, il n'y aura donc pas d'introduction particulière ici.

Logiciel d'installation de serveur

Avant d'installer le logiciel, nous mettons d'abord à niveau la version de la bibliothèque système pour éviter les problèmes causés par des versions système obsolètes.

~$ sudo apt-get update
~$ sudo apt-get upgrade

Installez les logiciels nécessaires : Nginx, Python, PIP et PIP installent la virtualenvbibliothèque d'environnement virtuel Python.

~$ sudo apt-get install nginx
~$ sudo apt-get install python3
~$ sudo apt-get install python3-pip
~$ sudo pip3 install virtualenv

Installer MySQL

sudo apt install mysql-server

Vérifier l'état de fonctionnement

sudo systemctl status mysql

Une fois l'installation terminée, utilisez la commande pour vous connecter directement en tant qu'utilisateur root.

sudo mysql

(Sur MySQL 8.0, l'utilisateur root est autorisé par défaut via le plug-in auth_socket et ne peut pas se connecter avec un mot de passe. La connexion par mot de passe ne peut être activée qu'après avoir modifié le mot de passe.)

Entrez ensuite les deux commandes suivantes dans l'interface de commande mysql pour remplacer le mot de passe de l'utilisateur root par votre dernier mot de passe :

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';

mysql> FLUSH PRIVILEGES;

Quittez MySQL :

mysql> exit

Vérifiez ensuite si la connexion à l'aide du mot de passe root a réussi :

mysql -u root -p

L'interface suivante représente une connexion réussie.

Idéalement, nous avons créé la base de données ensemble (à condition que le nom soit le même que celui que nous avons créé localement) :

mysql> CREATE DATABASE IF NOT EXISTS django_blog DEFAULT CHARSET utf8;

Modifier le fichier de configuration du projet Django

Si nous déployons le projet en ligne, nous devons modifier le fichier de configuration django4blog/settings.py.

DEBUG = False

ALLOWED_HOSTS = ['*']

# 静态文件收集目录
STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')

Implique principalement 3 points :

  • Désactivez le mode débogage lors du déploiement pour éviter les problèmes de sécurité (Django ne traitera plus les ressources statiques pour le moment).
  • ALLOWED_HOSTS spécifie le nom du serveur ou l'adresse IP autorisée à accéder, et l'astérisque indique que toutes les demandes sont autorisées. Veuillez le remplacer par votre nom de domaine ou votre adresse IP lors du déploiement réel, par exemple ALLOWED_HOSTS = [ '127.0.0.1'].
  • Il existe de nombreux fichiers statiques dans le projet. Lors du déploiement, vous devez trouver un endroit pour les collecter uniformément, qui est l'adresse spécifiée par STATIC_ROOT. Après avoir spécifié cette adresse, Django peut utiliser la commande pour tout collecter (y compris la page d'administration qui (fourni avec Django) pendant le déploiement. Les ressources statiques associées (css, js, etc.) sont toutes collectées dans des dossiers désignés, ce qui nous permet de les charger plus facilement de manière uniforme pendant le déploiement.

Ensuite, nous devons modifier la configuration pour résoudre le problème cross-domaine du déploiement en ligne :

Installez d'abord le package avec PIPdjango-cors-headers :

pip install django-cors-headers

Modifiez ensuite le fichier de configurationdjango4blog/settings.py

INSTALLED_APPS = [
    ......
    'corsheaders',  #解决浏览器跨域问题
    ......
]

MIDDLEWARE = [
    ......
    'corsheaders.middleware.CorsMiddleware',  #解决浏览器跨域问题
    'django.middleware.common.CommonMiddleware', #解决浏览器跨域问题
    ......
]

CORS_ORIGIN_ALLOW_ALL = True #解决浏览器跨域问题
CORS_ALLOW_CREDENTIALS = True #解决浏览器跨域问题

SECURE_CROSS_ORIGIN_OPENER_POLICY = 'None'  #Django4 特定解决浏览器跨域问题

De plus, si le mot de passe de la base de données de notre serveur est incohérent avec le mot de passe de la base de données locale, nous pouvons modifier les paramètres du fichier de configuration à l'avance :

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',    # 数据库引擎
        'NAME': 'django_blog', # 数据库名称
        'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1
        'PORT': 3306, # 端口
        'USER': 'root',  # 数据库用户名
        'PASSWORD': 'newpassword', # 数据库密码 修改为服务器数据库密码
    }
}

Enfin, nous dressons une liste des bibliothèques que nous devons utiliser dans notre projet local afin qu'elles puissent être installées uniformément sur le serveur.

Entrez la commande dans l'environnement virtuel local :pip freeze > requirements.txt

(env) E:\django_project\django4blog>pip freeze > requirements.txt

Obtenez le fichier manifeste de la bibliothèque requirements.txt.

Transférer le projet Django vers le serveur

Après avoir révisé les paramètres du projet local, nous nous connectons à Xftp et copions directement le dossier du projet local django_projectsur le serveur

Revenez à l'interface d'exploitation du serveur de Xshell et entrez dans notre dossier de projetdjango_project

cd django_project

Générez ensuite un environnement virtuel sur le serveur :

virtualenv --python=python3.10 myenv

Entrez dans l'environnement virtuel :

source env/bin/activate

Allez dans django4blogle dossier du projet :

cd django4blog

Entrez la commande suivante pour installer les bibliothèques Python nécessaires au projet.

(env) ../django4blog# pip3 install -r requirements.txt

Si pip3 install -r requirements.txtl'erreur suivante se produit pendant la commande.

En effet, la version de la bibliothèque tzdata locale est trop élevée. La version image d'Alibaba ne prend actuellement en charge que 2022.4. Pour le moment, nous pouvons directement modifier la version tzdata dans exigences.txt en 2022.4.

La commande de modification de fichier Ubuntu est la suivante :

vi requirements.txt,ouvre un fichier

Appuyez sur la touche Inser ou i pour commencer à modifier le fichier et changer la version de tzdata en 2022.4

Une fois la modification terminée, appuyez d'abord sur la touche Échap, puis entrez la commande :wqpour enregistrer et quitter le fichier.

Réexécutez la commande

pip3 install -r requirements.txt

Installation réussie

Entrez ensuite les commandes suivantes pour terminer la collecte de ressources statiques et la migration des données.

(env) ../django4blog# python3 manage.py collectstatic
(env) ../django4blog# python3 manage.py migrate

À ce stade, notre travail de déploiement pour la partie développement et codage est terminé.

Configuration de Nginx

L'étape suivante consiste à activer Nginx et à configurer les proxys associés.

Tout d’abord, nous supprimons les fichiers de configuration et de connexion par défaut de Nginx default.

Entrez séparément /etc/nginx/sites-availableet /etc/nginx/sites-enabledentrez les commandes dans les deux dossiers :

sudo rm -r defaultSupprimez defaultles fichiers.

Ensuite, nous entrons /etc/nginx/sites-availableet créons notre propre fichier de configuration :django4blog

(myenv) root.../etc/nginx/sites-available# cd /etc/nginx/sites-available
(myenv) root.../etc/nginx/sites-available# vi django4blog

Entrez le contenu de configuration suivant :

server {
  charset utf-8;
  listen 80;
  server_name 39.107.240.223;  # 改成你的 IP

  location /static {
    alias /root/django_project/django4blog/collected_static;
  }

  location / {
    proxy_set_header Host $host;
    proxy_pass http://unix:/tmp/39.107.240.223.socket;  # 改成你的 IP
  }
}

 :wq Après avoir enregistré et quitté, entrez la commande

sudo ln -s /etc/nginx/sites-available/django4blog /etc/nginx/sites-enabled

Vérifiez ensuite les informations utilisateur du fichier de configuration Nginx :

Modifiez ce nom d'utilisateur root, sinon une erreur d'autorisation 403 pourrait être signalée.

cd /etc/nginx# , vi nginx.confchangez l'utilisateur en root

Enfin, actualisez les informations de configuration de Nginx :

sudo service nginx reload

Préparer les utilisateurs backend et activer Gunicorn

Retournez d'abord dans le répertoire où se trouve le projet , entrez dans l'environnement virtuel et entrez la commande pour créer un super compte :cd django_project/django4blog

python manage.py createsuperuser

Installez ensuite Gunicorn :

pip3 install gunicorn

Démarrez-le gunicornet remplacez-le par votre propre adresse de réseau public et votre propre nom de projet.

gunicorn --bind unix:/tmp/39.107.240.223.socket django4blog.wsgi:application

Testez et exécutez

Retournez au système local et saisissez l'adresse dans le navigateur : http://39.107.240.223/

Courir avec succès ! !

Ensuite, nous nous connectons au backend http://39.107.240.223/admin/ et ajoutons quelques données.

Retour à la page d'accueil

Lire la page de détails de l'article

Je suppose que tu aimes

Origine blog.csdn.net/agelee/article/details/127485674
conseillé
Classement