Je suis cela pour déployer une application de flacon (monde simple, bonjour)} sur Ubuntu 16-04. Didacticiel Digital Ocean
Tout fonctionne bien jusqu'à Test uWSGI Serving . Après cela, j’ai suivi l’étape décrite et quand j’ai enfin atteint le fond et vérifié l’adresse IP du serveur, j’ai eu:
502 Bad Gateway
OK bien. J'ai cherché et vérifié mon journal d'erreur, j'ai eu ceci: -
2017/01/16 05:29:27 [crit] 20714#20714: *2 connect() to unix:/home/sajjan/project/project.sock failed (2: No such file or directory) while connecting to upstream, client: xx.9.xxx.xxx, server: 138.xxx.xx.xxx, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/home/sajjan/project/project.sock:", Host: "xx.xx.xx.xx"
Donc, après avoir pris un journal des erreurs, j'ai créé le fichier project.sock manuellement. à nouveau Allez à l'adresse IP du serveur, puis à la même erreur "502 passerelle incorrecte"
A nouveau vérifié le journal des erreurs et trouvé ceci
2017/01/16 06:07:11 [crit] 20874#20874: *1 connect() to unix:/home/sajjan/project/project.sock failed (13: Permission denied) while connecting to upstream, client: 47.9.237.113, server: XX.XX.XX.XX, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/home/sajjan/project/project.sock:", Host: " XX.XX.XX.XX "
J'ai compris le problème de l'autorisation et changer l'autorisation à l'aide de la commande ci-dessous
Sudo chmod 666 project.sock
Maintenant, j'ai vérifié la permision (en utilisant ls -l nom de fichier)
-rw-rw-rw- 1 root root 0 Jan 16 05:31 project.sock
Maintenant, je reviens pour vérifier l'adresse IP du serveur, mais j'ai trouvé le même "502 Bad Gateway". Encore une fois, j'ai vérifié le journal des erreurs et j'ai trouvé ceci:
017/01/16 06:13:31 [error] 20897#20897: *6 connect() to unix:/home/sajjan/project/project.sock failed (111: Connection refused) while connecting to upstream, client: 47.9.237.113, server: XX.XX.XX.XX, request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://unix:/home/sajjan/project/project.sock:", Host: " XX.XX.XX.XX ", referrer: "http:// XX.XX.XX.XX /"
J'ai googlé pour l'erreur ci-dessus lu beaucoup au cours des deux derniers jours, mais rien ne semble fonctionner pour moi. J'ai vérifié ces réponses mais aucune aide stackanswer-1stackanswer-2 et avec ces mots, j'ai vérifié tout le fil de la communauté numérique-océan mais rien ne semble fonctionner.
Je suis totalement débutant sur les serveurs et je ne connais pas grand chose à Ubuntu. Si vous pouvez m'aider à découvrir ce qui ne va pas ou suggérer un meilleur tutoriel/des moyens de déployer mon application de flacon, je vous en serais reconnaissant.
Ce sont mes fichiers
bonjour.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "<h1 style='color:blue'>Hello There!</h1>"
if __== "__main__":
app.run(Host='0.0.0.0')
project.ini
[uwsgi]
module = wsgi:app
master = true
processes = 5
socket = /home/sajjan/project/project.sock
chmod-socket = 660
vacuum = true
die-on-term = true
wsgi.py
from hello import app
if __== "__main__":
app.run()
Le fichier ci-dessous est:/etc/nginx/sites-available/project
server {
listen 80;
server_name 138.197.28.107;
location / {
include uwsgi_params;
uwsgi_pass unix:/home/sajjan/project/project.sock;
}
}
Quand je lance la commande:
Sudo service uwsgi restart
sortie:
Failed to restart wsgi.service: Unit wsgi.service not found.
tout en sortie de
Sudo service nginx status/restart
puis cela montre que nginx est en cours d'exécution.
Aidez-moi, si quelque chose d'autre que vous voulez savoir, faites le moi savoir. Merci
EDIT:
J'ai créé un fichier project.service et son contenu est:
[Unit]
Description=uWSGI instance to serve project
After=network.target
[Service]
User=sajjan
Group=www-data
WorkingDirectory=/home/sajjan/project
Environment="PATH=/home/sajjan/project/venv/bin"
ExecStart=/home/sajjan/project/venv/bin/uwsgi --ini project.ini
[Install]
WantedBy=multi-user.target
J'ai compris que je devais courir en-dessous de la commande:
Sudo systemctl start project
La sortie est:
Warning: project.service changed on disk. Run 'systemctl daemon-reload' to reload units.
et quand je cours
Sudo systemcl reload project
puis sortie:
Failed to reload project.service: Job type reload is not applicable for unit project.service.
See system logs and 'systemctl status project.service' for details.
et quand je vérifie le "systemctl status project.service"
● project.service - uWSGI instance to serve project
Loaded: loaded (/etc/systemd/system/project.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2017-01-16 17:49:29 UTC; 6min ago
Main PID: 27157 (code=exited, status=203/EXEC)
Jan 16 17:49:29 learningwithpython systemd[1]: Started uWSGI instance to serve project.
Jan 16 17:49:29 learningwithpython systemd[1]: project.service: Main process exited, code=exited, status=203/EXEC
Jan 16 17:49:29 learningwithpython systemd[1]: project.service: Unit entered failed state.
Jan 16 17:49:29 learningwithpython systemd[1]: project.service: Failed with result 'exit-code'.
J'ai eu le même problème en utilisant le guide. Pour autant que j'ai lu; 502 mauvaise passerelle est un symptôme de l’impossibilité pour Nginx de se connecter correctement à l’uwsgi. Changer les autorisations sur le socket a résolu le problème pour moi.
Sudo chmod 777 /home/sajjan/project/project.sock
Sudo systemctl restart nginx
777 est un peu excessif, mais c’est un moyen rapide et sale de vérifier s’il s’agit bien d’un problème d’autorisations.
Nginx n'a pas la permission d'écrire dans le socket. L'attribution du mode approprié avec la commande ci-dessous m'a aidé.
chmod 0755 /to/project
J'ai vu votre commentaire sur https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-16-04
essayez d’exécuter Sudo /etc/init.d/nginx start
Puis essayez d’ouvrir http: // serveur_domaine_ou_IP
Si cela fonctionne, tapez which uwsgi
pour trouver le bon chemin uwsgi et changez "/etc/systemd/system/myproject.service"
changement
Environment="PATH=/home/sammy/myproject/myprojectenv/bin" ExecStart=/home/sammy/myproject/myprojectenv/bin/uwsgi --ini myproject.ini
dans le chemin réel au lieu du chemin env.
Je résout ce problème à travers ces commandes.