Amazon aws эластичный бобовый шток. Файлы настраиваемой конфигурации не работают

У меня возникла проблема с пользовательским файлом конфигурации в эластичном бобовом стекле aws.

Мое приложение - это приложение python flask.

Я помещаю файл 01wsgi.config в .ebextensions.

и застегните его, затем загрузите в эластичный бобовый шток.

Источник развернут хорошо, но конфигурация не выполнена.

Как я могу заставить его работать правильно?

Структура каталогов

:

source_root
  - .ebextensions
     -- 01wsgi.config
  - application
  - application.wsgi

Содержимое 01wsgi.config:

files:
  "/etc/httpd/conf.d/wsgi.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      LoadModule wsgi_module modules/mod_wsgi.so
      WSGIPythonHome /opt/python/run/baselinenv
      WSGISocketPrefix run/wsgi
      WSGIRestrictEmbedded On

      <VirtualHost *:80>
      #############
      # TYPES FIX #
      #############
      AddType text/css .css
      AddType text/javascript .js

      ####################
      # GZIP COMPRESSION #
      ####################
      SetOutputFilter DEFLATE
      AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml text/javascript application/x-javascript application/x-httpd-php
      BrowserMatch ^Mozilla/4 gzip-only-text/html
      BrowserMatch ^Mozilla/4\.0[678] no-gzip
      BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
      BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
      SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip
      Header append Vary User-Agent env=!dont-vary

      Alias /static/(.*)? /opt/python/current/app/application/frontend/static-build/
      <Directory /opt/python/current/app/application/frontend/static-build/>
      Order allow,deny
      Allow from all
      Header append Cache-Control "max-age=2592000, must-revalidate"
      </Directory>

      WSGIScriptAlias / /opt/python/current/app/application.py

      <Directory /opt/python/current/app/>
      Order allow,deny
      Allow from all
      </Directory>

      WSGIDaemonProcess wsgi processes=1 threads=15 display-name=%{GROUP} \
      python-path=/opt/python/current/app:/opt/python/run/venv/lib/python2.7/site-packages user=wsgi group=wsgi \
      home=/opt/python/current/app
      WSGIProcessGroup wsgi
      WSGIScriptReloading On
      </VirtualHost>

Я выполнил следующий документ:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers.html

решаемые

Поместите файл wsgi.conf в каталог .ebextensions.

И создайте файл конфигурации, который скопирует wsgi.conf в ondeck.

Содержимое 01wsgi.config:

container_commands:
  replace_wsgi_config:
    command: "cp .ebextensions/wsgi.conf /opt/python/ondeck/wsgi.conf"

Ответ 1

Я хотел добавить некоторую информацию о другой полученной информации: Beanstalk перезапишет ваш файл хостов apache, если вы внесете изменения, которые не выполняют полное развертывание (например, переменные среды изменения). В большинстве случаев ваш веб-сервер перестанет обслуживать ваше приложение, если вы на самом деле не настроите wsgi.conf.

Теперь, чтобы быть ясным, вы правы в том, что вам нужно поместить конфигурацию WSGI в каталог .ebextentions. Затем вы используете команду контейнер, чтобы переместить файл конфигурации в местоположение, на которое смотрит EB. Вы можете сделать это безопасно с помощью этой команды:

# Replace the default wsgi with ours
cp .ebextensions/wsgi.conf ../wsgi.conf

Чтобы ваш пользовательский wsgi.conf не был перезаписан во время обновления, не выполняющего развертывание, вам нужно будет обезвредить привязку привязки к сети, которая воссоздает wsgi.conf. Я не нашел никаких документов вокруг этого, но пользовательские перехватчики документированы, а собственные работают одинаково.

Вот патч обезьяны, который я использовал:

# Elastic Beanstalk always forces generation of apache hosts,
# stop it by returning true in the function that does it
sed '    /return True # YOUTILY HACK/d' /opt/elasticbeanstalk/hooks/config.py | sed -e 's/def generate_apache_config(params, filename):/def generate_apache_config(params, filename):\n    return True # YOUTILY HACK/1' -e 's/if not os.path.exists(WSGI_STAGING_CONFIG):/if not os.path.exists(WSGI_STAGING_CONFIG):\n        return True # YOUTILY HACK/1' > /tmp/config.py && mv -f /tmp/config.py /opt/elasticbeanstalk/hooks/config.py

SSH в экземпляр EB и взгляните на /opt/elasticbeanstalk/hooks/config.py, и вы увидите, что делает EB во время развертываний или обновлений среды.

Счастливое AWSing!