[PYTHON] CentOS 7: Aktivieren Sie pyenv mit Apache (httpd) CGI

Dies ist der erste Beitrag. Ich bin auch ein Anfänger in der Programmierung. Ich denke, dass es viele Punkte gibt, die nicht erreicht werden können, deshalb freuen wir uns auf Ihre Vorschläge.

1. Zweck

Das Thema dieses Artikels ist der Fehler und seine Lösung, auf die ich beim Konfigurieren des CentOS 7 Apache (httpd) CGI für die Verwendung der virtuellen Umgebung pyenv gestoßen bin. Erstellen Sie einen Webserver, auf dem Python für jede virtuelle Umgebung ausgeführt werden kann. (Abschnitt 5 beschreibt eine Reihe von Schritten, einschließlich der Installation von Apache und pyenv)

2. Betriebsumgebung

・ CentOS 7

$ cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
$ uname -r
3.10.0-514.26.2.el7.x86_64

・ Apache (httpd) ・ Pyenv ・ SELinux ist deaktiviert

3. Motivation

Ich wollte einen Webserver erstellen, auf dem Python ausgeführt werden kann, was beim maschinellen Lernen große Beachtung findet. Da wir Anaconda und Tensorflow verwenden möchten, die für maschinelles Lernen unverzichtbar sind, ist ein Server wünschenswert, der in einer virtuellen Umgebung ausgeführt wird.   Als ich pyenv und httpd installiert und die Test-.py-Datei auf dem Server ausgeführt habe, ist ein Fehler aufgetreten und ich konnte nirgendwo eine direkte Lösung finden. Zur Erinnerung, ich werde pyenv unter CentOS verwenden. Ich werde es anerkennen, damit es für diejenigen hilfreich ist, die den von ihnen verwendeten Server herstellen möchten.

4. Fehler und Lösungen

4.1. Der aufgetretene Fehler

pyenv als root user

# git clone git://github.com/yyuu/pyenv.git ~/.pyenv

Ich habe es mit installiert. (Natürlich pyenv-virtualenv.) Eine sample.py-Datei mit Shebang, die wie folgt in / var / www / cgi-bin / angegeben ist

/var/www/cgi-bin/sample.py


#!/root/.pyenv/versions/{VIRTUAL_ENV_NAME}/bin/python

Platz und

# chmod 755 sample.py

Ich habe die Berechtigungen in geändert, aber die Browserseite wird unter http://127.0.0.1/cgi-bin/sample.py angezeigt (127.0.0.1 ist die IP-Adresse beim Surfen mit dem Browser des lokalen Computers). Es war ein interner Serverfehler. Folgendes ist der Inhalt:

500 Internal Server Error Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

Fehlerprotokoll

# tail /var/log/httpd/error_log

Gemäß

/var/log/httpd/error_log


[Fri Sep 15 18:39:12.890589 2017] [cgi:error] [pid 1302] [client 192.168.10.2:60025] AH01215: (13)Permission denied: exec of '/var/www/cgi-bin/sample.py' failed
[Fri Sep 15 18:39:12.890725 2017] [cgi:error] [pid 1302] [client 192.168.10.2:60025] End of script output before headers: sample.py

(Datum und Uhrzeit, Client-IP-Adresse und Portnummer werden bearbeitet.)

Siban arbeitete mit dem Standard-Python 2.7-Pfad #! / Usr / local / bin / python. Es scheint eine Ursache in Shiban zu geben.

4.2 Ursachen und Lösungen

Wenn Sie sich als root anmelden, scheint es, dass das Platzieren von pyenv direkt unter "/ root" (dh "/ root / .pyenv") die Ursache für den internen Serverfehler war. (Ist / root nicht zugänglich? Es scheint, dass Sie pyenv systemweit installieren müssen) Die Installation von pyenv in / usr / local / pyenv hat das obige Problem gelöst. Wenn Sie pyenv von Github installieren, führen Sie es mit dem folgenden Befehl aus.

# git clone git://github.com/yyuu/pyenv.git /usr/local/pyenv
# git clone git://github.com/yyuu/pyenv-virtualenv.git /usr/local/pyenv/plugins/pyenv-virtualenv

5. Von der Installation von Apache und pyenv bis zur Ausführung einer virtuellen Umgebung auf einem Webserver

Ab hier ist es ein zusätzlicher Abschnitt. Hier finden Sie eine Reihe von Schritten von der Installation von Apache und pyenv bis zur Ausführung einer virtuellen Umgebung von pyenv auf einem Webserver.

5.1. Installations- und Konfigurationseinstellungen für Apache (httpd)

Installieren Sie Apache.

$ sudo yum -y install httpd
$ sudo systemctl start httpd
$ sudo systemctl enable httpd

Führen Sie vim / etc / httpd / conf / httpd.conf aus und fügen Sie Folgendes hinzu.

/etc/httpd/conf/httpd.conf


<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options ExecCGI
    Require all granted
    AddHandler cgi-script .py .pyc
</Dicrectory>

(Der Befehl in der letzten Zeile dient zum Starten von Apache beim Start des Betriebssystems.)

5.2 Deaktivieren Sie SELinux

Seien Sie vorsichtig, wenn Sie die SELinux-Konfiguration bearbeiten. Im schlimmsten Fall scheint es eine Kernel-Panik zu verursachen.

$ getenforce
Disabled

Überprüfen Sie, ob es wird. Wenn es nicht "Deaktiviert" ist, müssen Sie SELinux bearbeiten.

$ sudo setenforce 0
$ sudo vim /etc/selinux/config

/etc/selinux/config


SELINUX=disabled

5.3. Installieren von pyenv

Installieren Sie die erforderlichen Pakete.

$ sudo yum -y install git
$ sudo yum -y group install "Development Tools"
$ sudo yum -y install readline-devel lib-devel bzip2-devel sqlite-devel openssl-devel

Installieren Sie pyenv von Github.

# git clone git://github.com/yyuu/pyenv.git /usr/local/pyenv
# git clone git://github.com/yyuu/pyenv-virtualenv.git /usr/local/pyenv/plugins/pyenv-virtualenv

Im Terminal.

Lassen Sie mich die Erstellung einer virtuellen Umgebung in diesem Artikel weglassen.

5.4 Führen Sie die virtuelle pyenv-Umgebung unter Apache aus

später,

/var/www/cgi-bin/sample.py


#!/usr/local/pyenv/versions/{YOUR_VIRTUAL_ENV_NAME}/bin/python

print("Content-Type text/html")
print("")
print("<!DOCTYPE html>")
print("<html>")
print("<head>")
print("    <metacharset='utf-8'>")
print("    <title>SAMPLE</title>")
print("</head>")
print("<body>")
print("    <h1>Hello, world!</h1>")
print("</body>")
print("</html>")

Im Verzeichnis / var / www / cgi-bin /. Wenden Sie {YOUR_VIRTUAL_ENV_NAME} auf den Namen Ihrer virtuellen Umgebung an.

chmod 755 /var/www/cgi-bin/sample.py

Und vergessen Sie nicht, Ihre Berechtigungen zu ändern.

Geben Sie http: // {IP-Adresse des Servers} /cgi-bin/sample.py in das URL-Suchfeld Ihres Browsers ein. Wenn Hallo, Welt! Angezeigt wird, ist der Vorgang abgeschlossen.

6. Referenz

Dies ist eine Referenz, die ich zitiert und als Referenz verwendet habe, um Probleme zu lösen und Beiträge zu leisten. ・ Bis Python3 unter CentOS7 --Qiita als CGI ausgeführt wird

Recommended Posts

CentOS 7: Aktivieren Sie pyenv mit Apache (httpd) CGI
CentOS8 + Apache2.4 + pyenv + mod_wsgi + Django-Projektbereitstellung
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
So installieren Sie Apache (httpd) unter CentOS7
So installieren Sie Apache (httpd) unter CentOS8
Spielen Sie mit CentOS 8
pyenv + pyenv-virtualenv (CentOS7)
Führen Sie es vorerst mit CentOS7 + Apache2.4 + Python3.6 aus
Erste Schritte mit apache2
Installieren Sie Python mit pyenv
Erstellen Sie python3.x mit pyenv
So installieren Sie Python2.7 python3.5 mit pyenv (unter RHEL5 CentOS5) (2016 Nov)
Richten Sie einen Webserver mit CentOS7 + Anaconda + Django + Apache ein
So starten Sie Apache durch Angabe von httpd.conf mit systemd (CentOS7, CentOS8)