如何在AWS ECS Fargate上配置Bitnami Drupal的私有文件目录?
在AWS ECS Fargate上配置Bitnami Drupal私有文件目录的方案
ECS Exec是不是最优方案?
ECS Exec能快速进入容器临时修改settings.php,但绝非生产环境的最优选择——容器重启后所有修改会丢失,没法持久化,也违背了基础设施即代码的原则。生产环境更推荐可复用、能自动化的配置方式。
方法1:替换为自定义settings.php文件
从本地复制
- 先在本地编辑好包含私有目录配置的
settings.php,比如加上:$settings['file_private_path'] = '/opt/bitnami/drupal/private-files'; - 用ECS Exec命令把本地文件推送到容器:
记得替换命令里的集群名、任务ID和本地文件路径。aws ecs execute-command --cluster <你的集群名> --task <任务ID> --container drupal --interactive --command "bash -c 'cat > /opt/bitnami/drupal/sites/default/settings.php' < ./local-settings.php"
从S3复制
- 把配置好的
settings.php上传到S3桶,同时给ECS任务的IAM角色加上S3读取权限 - 进入容器后用AWS CLI拉取文件:
要是想自动化,也可以在任务启动时加初始化脚本,但得先确保容器里装了AWS CLI(Bitnami默认镜像没有的话,得自定义镜像安装)。aws s3 cp s3://<你的S3桶名>/settings.php /opt/bitnami/drupal/sites/default/settings.php
方法2:向现有settings.php追加配置
如果不想完全替换文件,只想加私有目录配置,用这条命令:
aws ecs execute-command --cluster <你的集群名> --task <任务ID> --container drupal --interactive --command "echo '\$settings[\'file_private_path\'] = \'/opt/bitnami/drupal/private/files\';' >> /opt/bitnami/drupal/sites/default/settings.php"
注意引号的转义,避免命令解析出错。但同样,这种方式是临时的,容器重启后配置就没了。
方法3:生产级持久化方案
自定义Docker镜像
基于Bitnami Drupal镜像构建自己的镜像,把预配置的settings.php打包进去:
- 写一个
Dockerfile:FROM bitnami/drupal:latest COPY settings.php /opt/bitnami/drupal/sites/default/settings.php RUN chown bitnami:bitnami /opt/bitnami/drupal/sites/default/settings.php - 构建镜像并推送到AWS ECR:
docker build -t your-ecr-repo/drupal-custom . aws ecr get-login-password | docker login --username AWS --password-stdin <你的ECR仓库URI> docker push your-ecr-repo/drupal-custom - 在ECS任务定义里用这个自定义镜像,这样每次启动容器都会自带配置好的
settings.php。
EFS挂载捷径
要让私有文件持久化,必须把EFS挂载到容器的私有目录:
- 在ECS任务定义里添加EFS卷:
- 卷名:比如
drupal-private-files - EFS文件系统ID:填你的EFS实例ID
- 挂载路径:
/opt/bitnami/drupal/private-files(要和settings.php里的file_private_path完全一致) - 给ECS任务执行角色加上EFS访问权限
- 卷名:比如
- 配置好后,所有私有文件都会存在EFS上,不管容器重启还是扩容,数据都不会丢。
启动时自动注入配置
用Terraform或CloudFormation定义ECS任务时,在command里加初始化脚本,启动容器时自动追加配置:
bash -c "echo '\$settings[\'file_private_path\'] = \'/opt/bitnami/drupal/private-files\';' >> /opt/bitnami/drupal/sites/default/settings.php && /opt/bitnami/scripts/drupal/run.sh"
结合EFS挂载,就能实现配置自动生效且数据持久化。
内容的提问来源于stack exchange,提问作者Jordan
相关产品推荐
相关产品推荐

