Развертывание Beanstalk игнорирует мои файлы конфигурации nginx в .ebextensions - PullRequest
0 голосов
/ 03 мая 2020

Я размещаю свое Java веб-приложение в среде Elasti c Beanstalk с одним экземпляром, и я добавил несколько файлов ebextension, которые успешно создают файлы конфигурации для меня при каждом развертывании. Однако я не могу найти способ заставить Beanstalk добавлять новые конфиги в каталоги /etc/nginx или /etc/nginx/conf.d.

Я выполнил шаги, описанные здесь: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/https-singleinstance-java.html

Моя структура пакета развертывания выглядит следующим образом:

$ zip -r deploy.zip api-1.0-SNAPSHOT-all.jar .ebextensions
  adding: api-1.0-SNAPSHOT-all.jar (deflated 11%)
  adding: .ebextensions/ (stored 0%)
  adding: .ebextensions/ssl-certificates.config (deflated 37%)
  adding: .ebextensions/https-instance-securitygroup.config (deflated 38%)
  adding: .ebextensions/nginx/ (stored 0%)
  adding: .ebextensions/nginx/conf.d/ (stored 0%)
  adding: .ebextensions/nginx/conf.d/https.conf (deflated 61%)

Мои файлы представляют собой почти одну копию копии примеров в руководстве выше.

Во время развертывания оба моих *.config файлы успешно выполняются, но /etc/nginx/conf.d/https.conf отсутствует. Я попытался обойти эту проблему, удалив каталог .ebextensions/nginx и заменив его другим файлом .config, который создает /etc/nginx/conf.d/https.conf с нуля, но это не помогло, и файл все еще отсутствовал.

I s sh -ed на мой экземпляр EC2 и вот что я нашел в /var/log/eb-engine.log:

2020/05/03 19:42:37.754375 [INFO] Executing instruction: configure proxy Nginx
2020/05/03 19:42:37.754393 [WARN] skipping nginx folder under .ebextensions
2020/05/03 19:42:37.754670 [INFO] No plugin in cfn metadata.

Я чувствую, что мог упустить что-то очень очевидное здесь, но удивительно, я не смог найти никакого решения к моей проблеме. Мысли? Спасибо!

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Я только что решил ту же проблему.

Вы можете легко решить эту проблему, настроив следующую структуру каталогов.

~/my-app/
|-- readme.md
|-- .ebextensions/
|   |-- options.config       # Option settings
|   -- cloudwatch.config     # Other .ebextensions sections, for example 
-- .platform/
    -- nginx/                # Proxy configuration
        |-- nginx.conf
        -- conf.d/
            -- custom.conf
            -- elasticbeanstalk
               |-- server.conf

для получения дополнительной информации см. url

мой /var/log/eb-engine.log показал строку сообщения ниже.

Running command /bin/sh -c cp -rp /var/app/staging/.platform/nginx/. /var/proxy/staging/nginx
0 голосов
/ 05 мая 2020

Я чувствую, что я единственный человек на инте rnet с этой проблемой. ; -)

Немного больше покопавшись в журналах, я понял, что Beanstalk просто перезаписывает мою конфигурацию nginx в самом конце процесса развертывания. Это означало, что все файлы, созданные мной .ebextensions, были потеряны.

Мне не удалось найти «правильное» решение, но я обошел его с помощью ловушки после развертывания. Мой конфигурационный файл nginx теперь создается в /home/ec2-user, а не /etc/nginx, например:

files:
  /home/ec2-user/https.conf:
    content: |
      server {
        listen       443;
        server_name  localhost;

        ssl                  on;
        ssl_certificate      /etc/pki/tls/certs/server.crt;
        ssl_certificate_key  /etc/pki/tls/certs/server.key;

        ssl_session_timeout  5m;

        ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers   on;

        location / {
          proxy_pass  http://localhost:5000;
          proxy_http_version 1.1;
          proxy_set_header    Connection          $connection_upgrade;
          proxy_set_header    Upgrade             $http_upgrade;
          proxy_set_header    Host                $host;
          proxy_set_header    X-Real-IP           $remote_addr;
          proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
          proxy_set_header    X-Forwarded-Proto   https;
        }
      }

А затем в .platform/hooks/postdeploy/99_hack_nginx.sh (убедитесь, что этот каталог включен в ваш пакет развертывания - таким же образом, как .ebextensions):

cp /home/ec2-user/https.conf /etc/nginx/conf.d
sudo systemctl reload nginx

Убедитесь, что он имеет правильный режим:

chmod +x .platform/hooks/postdeploy/99_hack_nginx.sh

Разверните и наслаждайтесь трафиком HTTPS c.

...