#laravel #docker #amazon-elastic-beanstalk #laravel-mix #docker-build
#laravel #docker #amazon-elastic-beanstalk #laravel-mix #docker-сборка
Вопрос:
Я развертываю приложение Laravel с использованием платформы Docker на AWS Elastic Beanstalk. Одним из шагов в моем Dockerfile является объединение ресурсов с использованием Laravel mix, выполнив npm run production
, как показано ниже.
# Dockerfile
...
RUN echo "${ALPINE_MIRROR}/edge/main" >> /etc/apk/repositories
amp;amp; apk add --no-cache nodejs nodejs-npm --repository="http://dl-cdn.alpinelinux.org/alpine/edge/community"
amp;amp; npm install
amp;amp; npm run production
Когда выполняется эта команда, одним из шагов, которые она запускает, является копирование созданных ресурсов в Amazon S3, как показано ниже:
mix.webpackConfig({
plugins: [
new s3Plugin({
exclude: /.*.(html|php|htaccess|txt|json)/,
s3Options: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
region: process.env.AWS_DEFAULT_REGION,
},
s3UploadOptions: {
Bucket: process.env.AWS_BUCKET,
},
directory: 'public',
})
]
});
Как видно выше, скрипту нужны переменные среды AWS для работы. Однако сценарий сборки не распознает их, даже если они настроены на панели инструментов Elastic Beanstalk (в конфигурации). Одним из быстрых решений было бы определить ARG
переменные в Dockerfile, но я не хочу, чтобы эта информация была видна в виде обычного текста.
Я пытался искать решения, но мне не повезло. Любой совет был бы действительно полезен. Спасибо.
Комментарии:
1. Можно ли передавать свои секреты с помощью хранилища параметров SSM или диспетчера секретов?
2. Мне удалось использовать секреты, хранящиеся в корзине S3 и доступные только через ресурсы в том же VPC. Затем эти секреты загружаются и используются в качестве переменных среды во время сборки. Спасибо!
3. Спасибо, что дали мне знать. Рад, что это сработало.
Ответ №1:
Мне удалось добиться того, что мне было нужно, используя справку из этого руководства:
В основном:
- Создайте корзину для хранения файла с нужными вам переменными.
- Установите политику корзины, чтобы ограничить доступ к одному и тому же VPC
- В Dockerfile запустите скрипт, который загрузит этот файл и загрузит переменные среды.
Спасибо!
Ответ №2:
Если вы хотите, чтобы эти переменные env отражались на этапе сборки, добавьте их в соответствующий раздел env проекта сборки кода.
Если вы используете ECS с Elastic beanstalk, то эти переменные среды должны быть определены в среде определения задачи.