J’ai configuré uwsgi
et nginx
séparément pour un serveur de production python en suivant ce lien . Je les ai configurés séparément avec la configuration de travail. Mon seul uwsgi
fonctionne très bien et nginx
seul fonctionne bien. Mon problème est que je uwsgi
d’utiliser docker pour cette configuration et que je ne suis pas capable d’exécuter simultanément uwsgi
et nginx
, même si j’utilise un fichier bash. Vous trouverez ci-dessous les parties pertinentes de ma configuration.
Dockerfile :
#python setup RUN echo "daemon off;" >> /etc/nginx/nginx.conf RUN rm /etc/nginx/sites-enabled/default RUN ln -s mysite.conf /etc/nginx/sites-enabled/ EXPOSE 80 CMD ["/bin/bash", "start.sh"]
mysite.conf
upstream django { # server unix:///path/to/your/mysite/mysite.sock; # for a file socket server 127.0.0.1:8001; # for a web port socket } server { listen 80; server_name aa.bb.cc.dd; # ip address of the server charset utf-8; # max upload size client_max_body_size 75M; # adjust to taste location / { uwsgi_pass django; include /etc/nginx/uwsgi_params; # the uwsgi_params file } }
start.sh :
service nginx status uwsgi --socket :8001 --module server.wsgi service nginx restart service nginx status # ------- > doesn't get executed :(
sortie du fichier shell
Quelqu’un peut-il m’aider comment configurer cela en utilisant un script bash?
Votre script start.sh
risque de se terminer immédiatement après l’exécution de ces deux commandes.
Cela mettrait fin au conteneur juste après le démarrage.
Vous devez au moins vous assurer que la commande nginx start ne se ferme pas tout de suite.
L’ image officielle de nginx utilise :
nginx -g daemon off;
Une autre approche consisterait à conserver votre script tel /etc/supervisor/conf.d/supervisord.conf
, mais à utiliser pour CMD un superviseur , en déclarant votre script dans /etc/supervisor/conf.d/supervisord.conf
.
De cette façon, vous ne vous exposez pas au ” problème de récolte de zombies PID 1 “: arrêter votre conteneur attend la fin des deux processus avant de quitter.
Je pense qu’il y a une alternative très simple mais importante à souligner.
Votre scénario initial était:
Je ne pense pas que vous devriez aller avec un truc compliqué pour exécuter les deux processus dans le même conteneur.
Vous devez simplement exécuter uwsgi et nginx dans des conteneurs séparés.
De cette façon, vous réalisez: