[PYTHON] CentOS8 + Apache2.4 + pyenv + mod_wsgi + Déploiement de projet Django

J'ai eu du mal alors j'ai pris une note.

supposition

--Créez un environnement virtuel CentOS8 à l'aide de VMware et créez-y un serveur Web.

Installation d'Apache

$ dnf list | grep httpd

Outre le corps httpd

Vous pouvez voir qu'il y a de telles choses. Installez-les avec l'unité principale car vous en aurez besoin à l'avenir.

$ dnf -y install httpd httpd-tools httpd-devel httpd-manual
$ dnf list --installed | grep httpd  #Vérifiez s'il est installé

$ systemctl start httpd
$ systemctl status httpd  #Vérifiez si Apache peut être démarré
$ systemctl enable httpd  #Activer le démarrage automatique

Définir le pare-feu

$ firewall-cmd --add-service=http --zone=public --permanent
$ firewall-cmd --reload
$ firewall-cmd --list-all  #Vérifiez si http est ajouté aux services

Contrôle de fonctionnement

Tout d'abord, accédez à http: // localhost /. OK si la page de test Apache est affichée. Ensuite, placez le fichier HTML et vérifiez s'il est affiché.

$ touch /var/www/html/index.html
$ vi /var/www/html/index.html  #Rédigez le code HTML approprié

Si vous accédez à http: // localhost / et que HTML s'affiche, c'est OK.

Modifier le fichier de configuration Apache

Essayez de spécifier le domaine en utilisant / etc / hosts.

$ vi /etc/hosts  #127.0.0.Exemple sur la ligne 1.ajouter com
$ mkdir /var/www/example.com
$ touch /var/www/example.com/index.html
$ vi /var/www/example.com/index.html  #Rédigez le code HTML approprié

Modifiez la configuration Apache. Puisque nous prévoyons d'utiliser SSL ou d'utiliser plusieurs domaines plus tard, définissez-le comme VirtualHost.

$ touch /etc/httpd/conf.d/virtual.conf
$ vi /etc/httpd/conf.d/virtual.conf
$ service httpd configtest  #Vous pouvez vérifier la syntaxe du fichier de paramètres

conf:/etc/httpd/conf.d/virtual.conf


<VirtualHost *:80>
  DocumentRoot /var/www/example.com
  ServerName example.com
  <Directory "/var/www/example.com">
    Require all granted
  </Directory>
</VirtualHost>

Au moment du test de configuration

Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message

Quand apparaît, spécifiez le ServerName dans httpd.conf comme on vous l'a dit.

/etc/httpd/conf/httpd.conf (autour des lignes 98-99)


ServerName example.com:80

Enfin redémarrez Apache et vérifiez le fonctionnement

$ systemctl restart httpd

Maintenant, lorsque vous visitez http: // localhost / ou http://example.com, vous verrez / var / www / example.com / index.html.

installation de pyenv-Python

installation pyenv

$ dnf -y install git  #Installez git pour faire un clone git
$ git clone https://github.com/pyenv/pyenv.git /var/www/pyenv
$ vi ~/.bash_profile  #Ajoutez ce qui suit

~/.bash_profil (note supplémentaire)


export PYENV_ROOT="/var/www/pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

Initialement, la destination d'installation de pyenv était / root / .pyenv, mais si elle est sous la racine, il semble qu'elle ne soit accessible qu'avec l'autorité root (Apache n'est pas accessible), donc Apache a l'autorité pour l'installer/ Il a été changé en var / www /.

source ~/.bash_profile  #Appliquer bash
pyenv --version  #Contrôle de fonctionnement

Installation de Python 3.x.x

A partir de là, nous procéderons en corrigeant la trajectoire tout en émettant des erreurs, donc si vous allez pratiquer cette procédure, nous vous recommandons de la lire jusqu'au bout avant d'essayer.

Tout d'abord, essayez d'installer Python normalement

$ pyenv install 3.x.x

Ensuite, j'ai eu une erreur comme celle-ci.

zipimport.ZipImportError: can't decompress data; zlib not available

Alors installez zlib.

$ dnf -y install zlib zlib-devel

Peut-être que zlib est déjà installé. Je dois installer certains paquets dans le futur, mais je dois aussi installer -devel avec le corps principal.

Je retrouve mon esprit et installe Python, mais j'obtiens à nouveau une erreur.

(Extrait)


WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

Il y a ERROR et WARNING, mais les deux doivent être résolus à la fin, alors installez le package manquant.

python


$ dnf -y install bzip2 bzip2-devel readline readline-devel openssl openssl-devel

Installez à nouveau Python. Cela réussit, mais un avertissement est donné.

WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?

Ce sera également un problème plus tard, alors installez-le.

$ dnf -y install sqlite sqlite-devel

Vous avez enfin installé Python.

pyenv versions  #3.x.Assurez-vous que x est installé
pyenv global 3.x.x  #Appliquer la version Python à l'ensemble
python --version  #3.x.Confirmez que x fonctionne

#Mettez également à jour et confirmez pip
pip install --upgrade pip
pip --version

Installation de Django

pip install django

C'est facile à oublier.

Introduction de mod_wsgi

mod_wsgi est obtenu par wget à partir des fichiers de téléchargement de PyPI. Il semble qu'il existe différentes manières d'obtenir mod_wsgi, mais pour le moment, j'ai réussi cette méthode, je vais donc la décrire.

$ cd /var/www/
$ wget https://files.pythonhosted.org/packages/...Abréviation.../mod_wsgi-x.x.x.tar.gz
$ tar -zxvf mod_wsgi-x.x.x.tar.gz 
$ cd mod_wsgi-x.x.x/
$ ./configure --with-python=/var/www/pyenv/versions/3.x.x/bin/python

Lorsque j'essaye de taper la commande make ici, j'obtiens l'erreur suivante:

Erreur: /usr/lib/rpm/redhat/redhat-hardened-cc1:Il n'y a pas de tel fichier ou répertoire

Alors installez plus loin redhat-rpm-config.

$ dnf -y install redhat-rpm-config

Quand je lance à nouveau make`` make install, j'obtiens l'erreur suivante

'xxx' can not be used when making a shared object; recompile with -fPIC

Cette erreur peut être résolue en ajoutant CFLAGS =" -fPIC " lors de l'installation de Python. J'ai donc réinstallé Python.

$ CFLAGS="-fPIC" pyenv install 3.x.x
$ make
$ make install

Cela générera / etc / httpd / modules / mod_wsgi.so. Maintenant que l'installation de WSGI est terminée, placez le fichier de projet sous / var / www / projectname, modifiez à nouveau les paramètres Apache et redémarrez.

conf:/etc/httpd/conf.d/virtual.conf


LoadModule wsgi_module /etc/httpd/modules/mod_wsgi.so
WSGIPythonHome /var/www/pyenv/versions/3.x.x
WSGIPythonPath /var/www/pyenv/versions/3.x.x/lib/python3.x/site-packages
WSGIPythonPath /var/www/projectname

<VirtualHost *:80>
  DocumentRoot /var/www/projectname
  ServerName example.com

  WSGIScriptAlias / /var/www/projectname/projectname/wsgi.py
  <Directory "/var/www/projectname">
    Require all granted
  </Directory>

  #Collecter de la statique côté projet django
  Alias /static/ /var/www/projectname/static/
  <Directory "/var/www/projectname/static">
    Require all granted
  </Directory>
</VirtualHost>

WSGIPythonHome est un script Python vers lequel sys.prefix pointe. L'un des «WSGIPythonPath» est le «sys.path» qui se termine par «site-packages». L'autre est le répertoire personnel du projet Django, qui semble devoir être décrit à la fois.

À partir de là, continuez en vérifiant l'erreur ci-dessous.

tail /etc/httpd/logs/error_log

L'erreur suivante apparaîtra immédiatement, alors agissez.

failed to map segment from shared object
Unable to configure formatter 'django.server'

Ceux-ci peuvent être résolus en désactivant SELinux et en définissant le propriétaire et le groupe de fichiers sous / var / www / apache.

setenforce 0
chown -R apache:apache /var/www/

Après avoir redémarré Apache, vous devriez voir votre projet Django sur http: // localhost. Lorsque j'accède à http://example.com, j'obtiens une erreur DisallowedHost du côté Django, mais comme indiqué dans le message d'erreur, elle est affichée en ajoutant ʻexample.com à ʻALLOWED_HOSTS dans settings.py.

Recommended Posts

CentOS8 + Apache2.4 + pyenv + mod_wsgi + Déploiement de projet Django
Django - Déploiement de l'hôte virtuel mod_wsgi Apache
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
Django / Apache / mod_wsgi: aucun module nommé importlib
Django + Apache avec mod_wsgi sur Windows Server 2016
CentOS 7: Activez pyenv avec Apache (httpd) CGI
Exécutez une application django sur Windows + Apache + mod_wsgi + service.
CentOS8 --Jouer --Django
CentOS8 --Installer --Django
Référence du projet Django
pyenv + pyenv-virtualenv (CentOS7)
Publiez votre application Django sur Amazon Linux + Apache + mod_wsgi
mémo de déploiement heroku (Django)
Construction de l'environnement du projet Django
Django - démarrer le projet sans démarrer le projet
[Django] Renommer le projet
Démarrer un projet Django