[PYTHON] CentOS8 + Apache2.4 + pyenv + mod_wsgi + Django-Projektbereitstellung

Es fiel mir schwer, also machte ich mir eine Notiz.

Annahme

--Erstellen Sie mit VMware eine virtuelle CentOS8-Umgebung und erstellen Sie dort einen Webserver. --Django-Projekt wurde erstellt. Verwenden Sie einen freigegebenen Ordner oder FTP, um zusammen mit dem Projektordner zu CentOS (diesmal / var / www / projectname /) zu wechseln.

Apache-Installation

$ dnf list | grep httpd

Neben dem httpd Körper

Sie können sehen, dass es solche Dinge gibt. Installieren Sie diese zusammen mit dem Hauptgerät, da Sie sie in Zukunft benötigen werden.

$ dnf -y install httpd httpd-tools httpd-devel httpd-manual
$ dnf list --installed | grep httpd  #Überprüfen Sie, ob es installiert ist

$ systemctl start httpd
$ systemctl status httpd  #Überprüfen Sie, ob Apache gestartet werden kann
$ systemctl enable httpd  #Aktivieren Sie den automatischen Start

Stellen Sie die Firewall ein

$ firewall-cmd --add-service=http --zone=public --permanent
$ firewall-cmd --reload
$ firewall-cmd --list-all  #Überprüfen Sie, ob den Diensten http hinzugefügt wurde

Funktionsprüfung

Greifen Sie zunächst auf http: // localhost / zu. OK, wenn die Apache-Testseite angezeigt wird. Platzieren Sie als Nächstes die HTML-Datei und prüfen Sie, ob sie angezeigt wird.

$ touch /var/www/html/index.html
$ vi /var/www/html/index.html  #Schreiben Sie den entsprechenden HTML-Code

Wenn Sie auf http: // localhost / zugreifen und HTML angezeigt wird, ist dies in Ordnung.

Bearbeiten Sie die Apache-Konfigurationsdatei

Versuchen Sie, die Domain mit / etc / hosts anzugeben.

$ vi /etc/hosts  #127.0.0.Beispiel in Zeile 1.add com
$ mkdir /var/www/example.com
$ touch /var/www/example.com/index.html
$ vi /var/www/example.com/index.html  #Schreiben Sie den entsprechenden HTML-Code

Edit Apache conf. Da wir SSL verwenden oder später mehrere Domänen verwenden möchten, legen Sie es als VirtualHost fest.

$ touch /etc/httpd/conf.d/virtual.conf
$ vi /etc/httpd/conf.d/virtual.conf
$ service httpd configtest  #Sie können die Syntax der Einstellungsdatei überprüfen

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>

Zum Zeitpunkt von config test

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

Wenn angezeigt wird, geben Sie den Servernamen in "httpd.conf" an, wie Ihnen mitgeteilt wurde.

/etc/httpd/conf/httpd.conf (um die Zeilen 98-99)


ServerName example.com:80

Starten Sie schließlich Apache neu und überprüfen Sie den Vorgang

$ systemctl restart httpd

Wenn Sie jetzt http: // localhost / oder http://example.com besuchen, wird / var / www / example.com / index.html angezeigt.

pyenv-Python-Installation

pyenv Installation

$ dnf -y install git  #Installieren Sie git, um einen Git-Klon zu erstellen
$ git clone https://github.com/pyenv/pyenv.git /var/www/pyenv
$ vi ~/.bash_profile  #Fügen Sie Folgendes hinzu

~/.bash_Profil (zusätzlicher Hinweis)


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

Ursprünglich war das Installationsziel von pyenv "/ root / .pyenv". Wenn es sich jedoch unterhalb des Stamms befindet, kann anscheinend nur mit Root-Berechtigung darauf zugegriffen werden (auf Apache kann nicht zugegriffen werden), sodass Apache die Berechtigung hat, es zu installieren. Es wurde in var / www / `geändert.

source ~/.bash_profile  #Bash anwenden
pyenv --version  #Funktionsprüfung

Python 3.x.x Installation

Von hier an werden wir fortfahren, während wir die Flugbahn korrigieren, während Fehler ausgegeben werden. Wenn Sie dieses Verfahren üben möchten, empfehlen wir, dass Sie es bis zum Ende lesen, bevor Sie es versuchen.

Versuchen Sie zunächst, Python normal zu installieren

$ pyenv install 3.x.x

Dann habe ich so einen Fehler bekommen.

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

Installieren Sie also zlib.

$ dnf -y install zlib zlib-devel

Vielleicht ist zlib bereits installiert. Ich muss in Zukunft einige Pakete installieren, aber ich muss auch -devel zusammen mit dem Hauptteil installieren.

Ich denke wieder darüber nach und installiere Python, erhalte aber erneut eine Fehlermeldung.

(Auszug)


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?

Es gibt FEHLER und WARNUNG, aber beide müssen am Ende behoben werden. Installieren Sie also das fehlende Paket.

python


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

Installieren Sie Python erneut. Es ist erfolgreich, aber eine Warnung wird gegeben.

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

Dies wird auch später ein Problem sein, installieren Sie es also.

$ dnf -y install sqlite sqlite-devel

Jetzt ist Python endlich installiert.

pyenv versions  #3.x.Stellen Sie sicher, dass x installiert ist
pyenv global 3.x.x  #Wenden Sie die Python-Version auf das Ganze an
python --version  #3.x.Bestätigen Sie, dass x funktioniert

#Aktualisieren und bestätigen Sie auch pip
pip install --upgrade pip
pip --version

Django Installation

pip install django

Es ist leicht zu vergessen.

Einführung von mod_wsgi

mod_wsgi wird von wget aus Download-Dateien von PyPI bezogen. Es scheint, dass es verschiedene Möglichkeiten gibt, mod_wsgi zu erhalten, aber vorerst ist mir diese Methode gelungen, daher werde ich sie beschreiben.

$ cd /var/www/
$ wget https://files.pythonhosted.org/packages/...Abkürzung.../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

Wenn ich versuche, hier den Befehl make einzugeben, wird folgende Fehlermeldung angezeigt:

Error: /usr/lib/rpm/redhat/redhat-hardened-cc1:Es gibt keine solche Datei oder kein solches Verzeichnis

Installieren Sie also "redhat-rpm-config" weiter.

$ dnf -y install redhat-rpm-config

Wenn ich make`` make install erneut ausführe, wird der folgende Fehler angezeigt

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

Dieser Fehler kann behoben werden, indem bei der Installation von Python "CFLAGS =" -fPIC "hinzugefügt wird. Also habe ich Python erneut installiert.

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

Dadurch wird "/ etc / httpd / modules / mod_wsgi.so" generiert. Nachdem die WSGI-Installation abgeschlossen ist, geben Sie die Projektdatei als "/ var / www / projectname" ein, bearbeiten Sie die Apache-Einstellungen erneut und starten Sie sie neu.

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>

  #Sammeln Sie statische Aufladung auf der Django-Projektseite
  Alias /static/ /var/www/projectname/static/
  <Directory "/var/www/projectname/static">
    Require all granted
  </Directory>
</VirtualHost>

WSGIPythonHome ist ein Python-Skript, auf das sys.prefix verweist. Einer der "WSGIPythonPath" ist der "sys.path", der mit "site-packages" endet. Das andere ist das Home-Verzeichnis des Django-Projekts, das anscheinend beide beschrieben werden muss.

Fahren Sie von hier aus fort, während Sie den folgenden Fehler überprüfen.

tail /etc/httpd/logs/error_log

Der folgende Fehler wird sofort angezeigt. Ergreifen Sie daher Maßnahmen.

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

Diese können behoben werden, indem Sie SELinux deaktivieren und den Eigentümer und die Gruppe von Dateien unter / var / www / apache festlegen.

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

Nach dem Neustart von Apache sollte Ihr Django-Projekt unter http: // localhost angezeigt werden. Wenn ich auf http://example.com zugreife, wird auf der Django-Seite ein "DisallowedHost" -Fehler angezeigt. Dieser wird jedoch angezeigt, wenn ich "example.com" gemäß der Fehlermeldung zu "ALLOWED_HOSTS" in "settings.py" hinzufüge.

Recommended Posts

CentOS8 + Apache2.4 + pyenv + mod_wsgi + Django-Projektbereitstellung
Django - Bereitstellung des virtuellen Hosts Apache mod_wsgi
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
Django / Apache / mod_wsgi: Kein Modul namens importlib
Django + Apache mit mod_wsgi unter Windows Server 2016
CentOS 7: Aktivieren Sie pyenv mit Apache (httpd) CGI
Führen Sie eine Django-Anwendung unter Windows + Apache + mod_wsgi + aus.
CentOS8 --Play --Django
CentOS8 --Installieren - Django
Django-Projektbasislinie
pyenv + pyenv-virtualenv (CentOS7)
Veröffentlichen Sie Ihre Django-App unter Amazon Linux + Apache + mod_wsgi
Heroku-Einsatznotiz (Django)
Bau der Django-Projektumgebung
Django - Projekt starten ohne Projekt starten
[Django] Benennen Sie das Projekt um
Starten Sie ein Django-Projekt