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.
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)
・ 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é
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é.
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.
# 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.
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
À 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.
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.)
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
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.
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é.
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