[PYTHON] CentOS 7: Activez pyenv avec Apache (httpd) CGI

Ceci est le premier message. Je suis aussi un débutant en programmation. Je pense que de nombreux points ne peuvent être atteints, nous attendons donc avec impatience vos suggestions.

1. Objet

Le sujet de cet article est l'erreur et sa solution que j'ai rencontrée lors de la configuration de l'environnement virtuel pyenv pour qu'il soit disponible dans le CGI d'Apache (httpd) dans CentOS 7. Créez un serveur Web capable d'exécuter Python pour chaque environnement virtuel. (La section 5 décrit une série d'étapes, y compris l'installation d'Apache et de pyenv)

2. Environnement d'exploitation

・ 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 est désactivé

3. Motivation

Je voulais créer un serveur Web capable d'exécuter Python, ce qui suscite beaucoup d'attention dans l'apprentissage automatique. Puisque nous voulons utiliser Anaconda et Tensorflow, qui sont indispensables pour l'apprentissage automatique, un serveur qui s'exécute dans un environnement virtuel est souhaitable.   Lorsque j'ai installé pyenv et httpd et exécuté le fichier de test .py sur le serveur, j'ai eu une erreur et je n'ai pas trouvé de solution directe nulle part, donc pour rappel, je vais utiliser pyenv sur CentOS. Je vais le reconnaître pour qu'il soit utile à ceux qui veulent créer le serveur qu'ils ont utilisé.

4. Erreurs et solutions

4.1. L'erreur qui s'est produite

pyenv en tant qu'utilisateur root

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

Je l'ai installé avec. (Bien sûr, pyenv-virtualenv.) Un fichier sample.py avec Shebang spécifié comme suit dans / var / www / cgi-bin /

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


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

Place et

# chmod 755 sample.py

J'ai changé les autorisations dans, mais la page du navigateur affichée à http://127.0.0.1/cgi-bin/sample.py (127.0.0.1 est l'adresse IP lors de la navigation avec le navigateur de la machine locale) C'était une erreur de serveur interne. Voici le contenu:

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.

Journal des erreurs

# tail /var/log/httpd/error_log

Selon

/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

(La date et l'heure, l'adresse IP du client et le numéro de port sont modifiés)

Siban a travaillé avec le chemin par défaut de Python 2.7, #! / Usr / local / bin / python. Il semble y avoir une cause à Shiban.

4.2. Causes et solutions

Lors de la connexion en tant que root, il semble que placer pyenv directement sous / root (c'est-à-dire / root / .pyenv) était la cause de l'erreur du serveur interne. (/ Root n'est-il pas accessible? Il semble que vous deviez installer pyenv à l'échelle du système) L'installation de pyenv dans / usr / local / pyenv a résolu le problème ci-dessus. Ainsi, lors de l'installation de pyenv à partir de Github, exécutez-le avec la commande ci-dessous.

# 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. De l'installation d'Apache et de pyenv à l'exécution d'un environnement virtuel sur un serveur Web

À partir de maintenant, c'est une section supplémentaire. Voici une série d'étapes allant de l'installation d'Apache et de pyenv à l'exécution d'un environnement virtuel de pyenv sur un serveur Web.

5.1. Installation et configuration d'Apache (httpd)

Installez Apache.

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

Exécutez vim / etc / httpd / conf / httpd.conf et ajoutez ce qui suit.

/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>

(La commande sur la dernière ligne sert à démarrer Apache au démarrage du système d'exploitation.)

5.2. Désactiver SELinux

Soyez prudent lors de l'édition de la configuration SELinux. Dans le pire des cas, cela semble provoquer une panique du noyau.

$ getenforce
Disabled

Vérifiez si cela devient. S'il n'est pas "Désactivé", vous devez éditer SELinux.

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

/etc/selinux/config


SELINUX=disabled

5.3. Installation de pyenv

Installez les packages prérequis.

$ 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

Installez pyenv depuis 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

Dans le terminal.

Concernant la création d'environnement virtuel, permettez-moi de l'omettre dans cet article.

5.4. Exécuter l'environnement virtuel pyenv sur Apache

plus tard,

/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>")

Dans le répertoire / var / www / cgi-bin /. Appliquez {YOUR_VIRTUAL_ENV_NAME} au nom de votre environnement virtuel.

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

Et n'oubliez pas de modifier vos autorisations.

Saisissez http: // {Adresse IP du serveur} /cgi-bin/sample.py dans le champ de recherche d'URL de votre navigateur. Lorsque Hello, world! S'affiche, le processus est terminé.

6. Référence

Il s'agit d'une référence qui a été citée et utilisée comme référence lors de la résolution de problèmes et de la contribution. ・ Jusqu'à ce que Python3 s'exécute en CGI sur CentOS7 --Qiita

Recommended Posts

CentOS 7: Activez pyenv avec Apache (httpd) CGI
CentOS8 + Apache2.4 + pyenv + mod_wsgi + Déploiement de projet Django
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
Comment installer Apache (httpd) sur CentOS7
Comment installer Apache (httpd) sur CentOS8
Jouez avec CentOS 8
pyenv + pyenv-virtualenv (CentOS7)
Exécutez avec CentOS7 + Apache2.4 + Python3.6 pour le moment
Premiers pas avec apache2
Installez Python avec pyenv
Construisez python3.x avec pyenv
Comment installer Python2.7 python3.5 avec pyenv (sur RHEL5 CentOS5) (novembre 2016)
Configurer un serveur Web avec CentOS7 + Anaconda + Django + Apache
Comment démarrer Apache en spécifiant httpd.conf avec systemd (CentOS7, CentOS8)