在参数中设置symfony缓存目录

时间:2016-06-09 10:33:46

标签: php symfony security docker docker-compose

我正在为Symfony应用程序构建一个docker环境。每个应用程序都有一个容器,其中包含一个仅附加数据的容器,用于链接到应用程序服务器的Web根目录。作为基础结构安全加固的一部分,这些数据容器设置为只读,以防止任何远程代码利用。然后每个应用程序还有一个侧车容器,允许写入日志。

Symfony目前将缓存写入

的默认from zip import ZipFile for name in ZipFile('zipfile.zip').namelist(): print('Listing zip files: %s' % name) 位置
cache_dir

哪个位于只读数据容器中

尝试启动应用程序时出现此错误

  

无法写入缓存目录

显然,它只在写入容器中才会发生

我设置我的log_path是在读写边车日志记录容器中的只读容器外的参数中设置的

${web_root}/app/cache/${env}

工作正常。

我已经阅读了关于如何覆盖目录结构的Symfony食谱,但它只建议如何在/data/logs/symfony 中执行此操作,我不想这样做,因为路径可能会改变,取决于它是否在AppKernal.php环境中。

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

是否有人知道是否可以覆盖配置中的缓存目录而不是编辑local/uat/prod

2 个答案:

答案 0 :(得分:3)

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

$ DIR是当前位置

网页文件

的htdocs
docker run -d \
   -v $DIR/htdocs:/var/www/html \
   -v $DIR/cache_folder:/var/www/html/app/cache

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

另一种方法是在每个容器内部执行此操作,但每次重启都会松开设置

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

答案 1 :(得分:1)

这是我正在使用的docker-compose yml文件的简化示例,其中包含一个带有2个sidecar容器的只读父数据容器,用于缓存和记录:rw访问覆盖了只读的路径父路径

  

搬运工-撰写-base.yml

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       
  

数据容器common.yml

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
  

测井common.yml

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