Php 在参数中设置symfony缓存目录

Php 在参数中设置symfony缓存目录,php,symfony,security,docker,docker-compose,Php,Symfony,Security,Docker,Docker Compose,我正在为Symfony应用程序构建docker环境。我为每个应用程序提供了一个容器,并为链接到应用程序服务器的web根目录附加了一个仅用于数据的容器。作为基础设施安全强化的一部分,这些数据容器被设置为只读,以防止任何远程代码攻击。然后,每个应用程序都有一个侧车容器,可以将日志写入其中 Symfony当前将缓存写入的默认cache\u dir位置 ${web_root}/app/cache/${env} 它位于只读数据容器中 当尝试启动应用程序时,我得到了这个错误 无法在缓存目录中写入 显然,由

我正在为Symfony应用程序构建docker环境。我为每个应用程序提供了一个容器,并为链接到应用程序服务器的web根目录附加了一个仅用于数据的容器。作为基础设施安全强化的一部分,这些数据容器被设置为只读,以防止任何远程代码攻击。然后,每个应用程序都有一个侧车容器,可以将日志写入其中

Symfony当前将缓存写入的默认
cache\u dir
位置

${web_root}/app/cache/${env}
它位于只读数据容器中

当尝试启动应用程序时,我得到了这个错误

无法在缓存目录中写入

显然,由于它位于只写容器中,因此会发生这种情况

我已经设置了我的日志\u路径是在的读写侧车日志容器中的只读容器外部的参数中设置的

/data/logs/symfony
这很好用

我已经阅读了Symfony关于如何超越目录结构的烹饪书,但它只建议如何在
AppKernal.php
中实现这一点,我不想这样做,因为路径可能会根据其在
local/uat/prod
环境中的情况而改变

我们根据部署到的环境,从构建服务器向Symfony提供不同的参数,因此将此配置放在这里是有意义的


是否有人知道是否可以在配置中覆盖缓存目录,而不是编辑
AppKernal.php

我正在容器外部创建缓存文件,并使用
-v
将目录装载到容器中

$DIR是当前位置

htdocs,其中包含web文件

然后确保允许容器写入
缓存\u文件夹
。优点是,如果重新创建容器,不会丢失任何数据。这也将覆盖文件夹
/var/www/html/app/cache

另一种方法是在每个容器中执行此操作,但每次重新启动时都要松开设置

chmod -R 777 ${web_root}/app/cache/${env}

下面是我正在使用的docker compose yml文件的一个简化示例,其中包含一个只读父数据容器和两个用于缓存和记录的侧车容器:rw access,它覆盖了包含在只读父路径中的路径

docker-compose-base.yml

data-container-common.yml

logging-common.yml


AppKernal.php有什么问题?这是来自他们的食谱
return dirname(uuu DIR_uuu)。'/var/'.$this->environment./cache'
env已经存在,您可以用自定义配置路径替换
dirname(_DIR__)。'/var/'
,因为路径更改超过$this->environment,所以我们试图保持env的代码不可知性,它需要依赖于环境的ifs或交换机,我们不想这样做。您的意思是在另一个只读数据容器中的路径上安装一个数据容器吗?在哪里使用docker来管理卷上的acl?例如卷来自:-myapp dc:ro将超越这些规则?我不确定你的确切意思,但我会用更多代码更新我的答案她想要
-v$DIR/htdocs:/var/www/html:ro
,这确实很有趣,如果父文件夹是只读的,并使用r/w在父文件夹中重新装入另一个文件夹。你能测试一下吗?如果你有
-v$DIR/htdocs:/var/www/html:ro
和另一个挂载
-v$DIR/logs:/var/www/html/app/cache:rw
我同意,你只需重新挂载一个已经存在于只读容器中的文件夹,作为一个具有:rw权限的单独卷,它就可以工作了。我将很快提供一个完整的答案和带有代码示例的示例。谢谢你的主意!!!!
chmod -R 777 ${web_root}/app/cache/${env}
version: '2.0'

# maintainer james.kirkby@sonyatv.com
# @big narstie said "dont f*** up the #base"

services:

  # web server
  pitchapp-web:
    hostname: pitchapp-web
    depends_on:
      - pitchapp-dc   
      - pitchapp-log-sc
      - pitchapp-cache-sc
      - pitchapp-fpm
    volumes_from:
      - pitchapp-dc
      - pitchapp-log-sc:rw
      - pitchapp-cache-sc:rw
    links:
      - pitchapp-fpm
    build:
      args: 
        - APP_NAME=pitchapp  
        - FPM_POOL=pitchapp-fpm
        - FPM_PORT=9001
        - PROJECT=pitch
        - APP_VOL_DIR=/data/www
        - CONFIG_FOLDER=app/config
        - ENVIRONMENT=dev
        - ENV_PATH=dev   
      context: ./pitch
      dockerfile: Dockerfile
    ports:
      - "8181:80"
    extends:
      file: "shared/dev-common.yml"
      service: dev-common-env
    env_file: 
      - env/dev.env

  # web data-container
  pitchapp-dc: 
    volumes:
      - /data/tmp:/data/tmp:rw      
      - /Sites/pitch/pitchapp:/data/www/dev/pitch/pitchapp/current:ro
    hostname: pitchapp-dc
    container_name: pitchapp-dc       
    extends:
      file: "shared/data-container-common.yml"
      service: data-container-common-env
    read_only: true
    working_dir: /data/www                      

  # web cache sidecar
  pitchapp-cache-sc:
    volumes:
      - /data/cache/pitchapp:/data/www/dev/pitch/pitchapp/current/app/cache/dev:rw
    hostname: pitchapp-cache-sc
    container_name: pitchapp-cache-sc
    extends:
      file: "shared/data-container-common.yml"
      service: data-container-common-env              
    read_only: false
    working_dir: /data/cache    

  # web log sidecar
  pitchapp-log-sc: 
volumes:
  - /data/log/pitchapp:/data/log:rw   
  - /data/log/pitchapp/symfony:/data/www/dev/pitch/pitchapp/current/app/logs:rw   
    build:
      args:
        - APP_NAME=pitchapp          
        - TARGET_SERVICE=pitchapp
    hostname: pitchapp-log-sc
    container_name: pitchapp-log-sc
    extends:
      file: "shared/logging-common.yml"
      service: logging-common-env       
version: '2.0'

services:
  data-container-common-env:
    build:
      context: ./docker-data-container
      dockerfile: Dockerfile 
    image: jkirkby91/docker-data-container   
    env_file: 
      - env/data.env           
    restart: always
    privileged: false 
    tty: false
    shm_size: 64M
    stdin_open: true
version: '2.0'

services:
  logging-common-env:
    build:
      context: ./logging
      dockerfile: Dockerfile
    image: jkirkby91/docker-data-container    
    env_file: 
      - env/logging.env           
    restart: always
    working_dir: /data/log
    privileged: false 
    tty: false
    shm_size: 64M
    stdin_open: true       
    read_only: false