2014-07-17 3 views
10

Tentative de déploiement d'une image Docker dans AWS Elastic Beanstalk s'exécutant sur une seule instance pour le moment. Tout fonctionne bien, à part WebSockets que j'utilise via Socket.IO.WebSockets sur Elastic Beanstalk avec Docker

Another post suggère d'enlever nginx, mais cela n'est plus possible ou n'est simplement pas une option pour les déploiements avec Docker.

J'ai un script python qui modifie la configuration de nginx pour autoriser les connexions WebSocket. Quand je ssh dans l'instance et exécutez ce script, cela fonctionne. Cependant, cette partie de la configuration nginx n'existe pas encore lors de l'exécution d'ebextensions, donc je ne peux pas exécuter ce script automatiquement.

Si vous voulez l'essayer vous-même, j'essaye de déployer databench_examples. Il fonctionne lorsque vous le déployez avec eb init et eb start, puis ssh dans l'instance et passez à /var/app/current et exécutez sudo python nginx_socketio_conf.py qui modifie le fichier de configuration nginx. Si cela ne fonctionne pas, vous voyez une erreur 500 dans la console du navigateur pour le handshake Socket.IO lors de l'exécution de l'analyse simplepi.

Répondre

6

Vous avez raison de dire que le fichier de configuration nginx n'existe pas lors de l'exécution d'ebextensions. Voici pourquoi: ce fichier de configuration est généré dynamiquement après l'application est déployée car le mappage de port pour le conteneur Docker n'est pas connu avant l'arrêt du conteneur. Votre script Python génial exécuté par ebextensions n'a donc pas de fichier de configuration à utiliser.

Une autre approche classique ne fonctionne pas, à savoir l'écriture du fichier de configuration nginx à /etc/nginx/conf.d parce que la directive location doit exister à l'intérieur du bloc server dans la configuration sites_enabled. Donc c'est un non.

J'ai créé un PR pour illustrer une approche qui fonctionnera: https://github.com/svenkreiss/databench_examples/pull/3 Il s'agit d'une technique non documentée qui place le script de mutation Python/nginx au bon endroit dans le répertoire hooks d'Elastic Beanstalk. Le script est ensuite exécuté par Elastic Beanstalk immédiatement après la configuration nginx est générée (Elastic Beanstalk va exécuter des scripts exécutables dans les sous-répertoires de crochets dans l'ordre alphabétique, d'où le préfixe 01_.

Merci,

Evan

+0

Salut Evan, j'ai un problème similaire avec le port mongoDB 27017. Voici ma question complète (http://stackoverflow.com/q/26478962/1116959), que me suggérez-vous de faire pour le réparer? Merci –

+0

Pour référence, ce PR est en train de déposer un script dans/opt/elasticbeanstalk/hooks/appdeploy/enact/qui réécrit la configuration mise en place par l'Amazon – rektide

+1

Pour redémarrer nginx, j'ai dû utiliser "sudo initctl restart nginx" au lieu de "service restart nginx" pour que cela fonctionne correctement. –

Questions connexes