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