2015-11-21 6 views
0

J'ai un problème étrange avec Elastic Beanstalk. J'ai déployé un projet Django sur une instance EC2 auto-scalling.Comment supprimer certains paramètres d'Apache d'Amazon Elastic Beanstalk?

Dans le répertoire .ebextensions j'avais un fichier python.config avec ces lignes à la fin:

option_settings: 
    "aws:elasticbeanstalk:application:environment": 
    DJANGO_SETTINGS_MODULE: "myapp.settings_eb_staging" 
    "PYTHONPATH": "/opt/python/current/app/django-myapp:$PYTHONPATH" 
    "aws:elasticbeanstalk:container:python": 
    WSGIPath: myapp/wsgi.py 
    NumProcesses: 3 
    NumThreads: 20 
    "aws:elasticbeanstalk:container:python:staticfiles": 
    "/static/": "myapp/static/" 
    "/favicon.ico": "myapp/static/site/img/favicon.ico" 

Quand je déployé le projet avec

$ eb deploy 

le processus de déploiement créé cette configuration Apache qui peut être trouvé à /etc/httpd/conf.d/wsgi.conf:

Alias /favicon.ico /opt/python/current/app/myapp/static/site/img/favicon.ico 
<Directory /opt/python/current/app/myapp/static/site/img/favicon.ico> 
Order allow,deny 
Allow from all 
</Directory> 

C'était évidemment faux, parce que le favicon.ico est un fichier, pas un répertoire.

J'ai donc essayé d'enlever la dernière ligne de python.config fichier:

"/favicon.ico": "myapp/static/site/img/favicon.ico"

puis redéployer le projet.

Le problème est que la directive Apache reste là. J'ai également essayé de supprimer la directive manuellement, mais après le déploiement suivant, il apparaît à nouveau. J'ai même essayé de reconstruire l'environnement, mais il a quand même créé la mauvaise directive de configuration d'Apache.

Comment puis-je m'en débarrasser?

Répondre

0

Il s'avère que le fichier de configuration wsgi.conf peut être écrasé dans le fichier .ebextensions/python.config. Voilà ce que je l'ai fait:

  1. SSH à l'instance EC2 par eb ssh et obtenir le contenu de wsgi.conf avec cat /etc/httpd/conf.d/wsgi.conf.

  2. Créez un fichier .ebextensions/wsgi.conf et copiez le contenu de l'étape précédente. Supprimer les directives Apache sur le répertoire statique et favicon.

  3. Modifier le .ebextensions/python.config et ajouter une commande à copier wsgi.conf-/tmp/ répertoire (qui est probablement utilisé au cours du processus de déploiement):

    container_commands: 
        01_refresh_apache_conf: 
        command: "cp .ebextensions/wsgi.conf /tmp/wsgi.conf" 
        02_migrate: 
        command: "source /opt/python/run/venv/bin/activate && python manage.py migrate --noinput" 
    leader_only: true 
        03_collectstatic: 
        command: "source /opt/python/run/venv/bin/activate && python manage.py collectstatic --noinput" 
    
    option_settings: 
        "aws:elasticbeanstalk:application:environment": 
        DJANGO_SETTINGS_MODULE: "myapp.settings_eb_staging" 
        "PYTHONPATH": "/opt/python/current/app/django-myapp:$PYTHONPATH" 
        "aws:elasticbeanstalk:container:python": 
        WSGIPath: myapp/wsgi.py 
        NumProcesses: 3 
        NumThreads: 20 
        "aws:elasticbeanstalk:container:python:staticfiles": 
        "/static/": "myapp/static/" 
    
  4. Commit à git et déployer avec eb deploy.

P.S. pour montrer la favicon du répertoire statique, je devais ajouter son chemin complet dans le modèle base.html:

<link rel="shortcut icon" href="{{ STATIC_URL }}site/img/favicon.ico" /> 
0

Vous pouvez simplement copier votre propre wsgi.conf (httpd conf) au répertoire parent et ainsi votre dossier être utilisé à la place de la valeur par défaut.

container_commands: 
    03_wsgireplace: 
    command: 'cp . ebextensions/wsgi.conf ../wsgi.conf'