【发布时间】:2021-01-14 00:09:41
【问题描述】:
我正在使用 Docker 平台在 AWS Elastic Beanstalk 上部署 Laravel 应用程序。我的 Dockerfile 中的步骤之一是使用 Laravel mix 通过运行 npm run production 来捆绑资产,如下所示。
# Dockerfile
...
RUN echo "${ALPINE_MIRROR}/edge/main" >> /etc/apk/repositories \
&& apk add --no-cache nodejs nodejs-npm --repository="http://dl-cdn.alpinelinux.org/alpine/edge/community" \
&& npm install \
&& 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 仪表板(在配置中)中配置了它们,构建脚本也不会选择它们。一种快速解决方法是在 Dockerfile 中定义 ARG 变量,但我不希望这些信息以纯文本形式显示。
我试图四处寻找解决方案,但没有运气。任何建议都会很有帮助。谢谢。
【问题讨论】:
-
您可以使用 SSM 参数存储或秘密管理器传递您的秘密吗?
-
我设法使用了存储在 S3 存储桶中并且只能通过同一 VPC 中的资源访问的机密。然后下载这些机密并将其用作构建时环境变量。谢谢!
-
感谢您告诉我。很高兴它成功了。
标签: laravel docker amazon-elastic-beanstalk laravel-mix docker-build