You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS ECS Fargate上配置Bitnami Drupal的私有文件目录?

在AWS ECS Fargate上配置Bitnami Drupal私有文件目录的方案

ECS Exec是不是最优方案?

ECS Exec能快速进入容器临时修改settings.php,但绝非生产环境的最优选择——容器重启后所有修改会丢失,没法持久化,也违背了基础设施即代码的原则。生产环境更推荐可复用、能自动化的配置方式。

方法1:替换为自定义settings.php文件

从本地复制

  1. 先在本地编辑好包含私有目录配置的settings.php,比如加上:
    $settings['file_private_path'] = '/opt/bitnami/drupal/private-files';
    
  2. 用ECS Exec命令把本地文件推送到容器:
    aws ecs execute-command --cluster <你的集群名> --task <任务ID> --container drupal --interactive --command "bash -c 'cat > /opt/bitnami/drupal/sites/default/settings.php' < ./local-settings.php"
    
    记得替换命令里的集群名、任务ID和本地文件路径。

从S3复制

  1. 把配置好的settings.php上传到S3桶,同时给ECS任务的IAM角色加上S3读取权限
  2. 进入容器后用AWS CLI拉取文件:
    aws s3 cp s3://<你的S3桶名>/settings.php /opt/bitnami/drupal/sites/default/settings.php
    
    要是想自动化,也可以在任务启动时加初始化脚本,但得先确保容器里装了AWS CLI(Bitnami默认镜像没有的话,得自定义镜像安装)。

方法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打包进去:

  1. 写一个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
    
  2. 构建镜像并推送到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
    
  3. 在ECS任务定义里用这个自定义镜像,这样每次启动容器都会自带配置好的settings.php。

EFS挂载捷径

要让私有文件持久化,必须把EFS挂载到容器的私有目录:

  1. 在ECS任务定义里添加EFS卷:
    • 卷名:比如drupal-private-files
    • EFS文件系统ID:填你的EFS实例ID
    • 挂载路径:/opt/bitnami/drupal/private-files(要和settings.php里的file_private_path完全一致)
    • 给ECS任务执行角色加上EFS访问权限
  2. 配置好后,所有私有文件都会存在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:05:26