ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – 在Docker环境中使用Symfony进行生产

2019-07-01 21:25:26  阅读:216  来源: 互联网

标签:php docker docker-compose symfony


我想使用Docker-Compose在Docker上实现一个symfony应用程序.我将至少拥有以下容器:

> Nginx
> Rabbitmq服务器
> PHP-FPM
> MySQL
> Solr

目前我们也有使用上述设置的开发环境.

Symfony应用程序存储在本地(主机),然后在PHP-FPM容器上使用卷,以便它可以读取应用程序 – 这很有效.我们打入php-fpm容器来运行composer / app / console命令.

我们还手动运行使用来自rabbitmq服务器的消息的使用者(Symfony命令).

我的生产选择有哪些?

1)我可以创建一个运行应用程序的单个容器,然后允许其他容器使用它吗?我看到php-fpm容器需要访问应用程序代码 – 但我还想创建一个容器来运行一个消费者 – 传递服务的名称来运行到容器 – 这意味着我可以有一个单独的图像可以灵活地启动以处理来自任何队列的消息.此选项中的日志/缓存会发生什么?

2)是否将应用程序存储在需要它的每个图像中?这是我最不喜欢的选项,然后更新我需要构建每个图像的应用程序

3)我尚未探索过的东西?

我想允许对应用程序进行简单的更新 – 也许是脚本化的,但我也希望最大限度地减少停机时间 – 我可以使用haproxy或类似的东西 – 有其他人有任何经验在生产中运行多容器symfony应用程序吗?

解决方法:

我为每个服务运行一个容器.请记住,Docker原则之一是“关注点分离”.

不过,您可能在同一容器上安装了Nginx PHP-FPM.

要启动所有服务(在dev或prod环境中),您可以使用docker-compose和神奇的“SYMFONY_ENV = dev”环境变量来启动所有服务.
我建议在一个单独的conainer中启动使用者,但可能使用不同的项目/日志/缓存路径.考虑到生产中的消费者如果使用共享CPU /内存/磁盘运行,可能会影响在线性能.

我目前正在研究部署/ postdeploy webapp的替代方案,
 次优解决方案现在是一个简单的入口点bash脚本(传递给“docker run -d myimage php_entrypoint.sh”:

>准备环境
>下载和更新供应商
>将资源同步到cdn,更新db模式等
>运行应用程序服务器(在这种情况下,php-fpm,我使用supervisord来完成任务)

它导致这样的事情:

#$OPTIMIZE is an ENV-propagated or a calulated variable

su -c "php composer.phar install $OPTIMIZE" webmgr

cp -f web/HTACCESS_${SYMFONY_ENV} web/.htaccess

/usr/bin/supervisord -c /etc/supervisord/supervisord.conf

我使用supervisord的原因是我必须复制/挂载我需要运行的[program:]部分,从而维护一个对php-fpm和CLI /消费者工作都很好的单个php映像.我也可以在不杀死容器的情况下重启php appserver.
此外,supervisord在管理“守护程序”流程方面非常聪明.

更新

webapp作为卷安装,docker-compose.yml位于项目根目录中,该目录包含docker镜像配置和symfony项目.
这是docker-compose.yml的摘录

webapp_fpm:
  image: ...  
  volumes:
    - ./symfony:/var/www/html
    - ./docker-conf/supervisord:/etc/supervisord
    - /var/log/appname/symfony:/var/log/symfony
  entrypoint: "/bin/bash php_entrypoint.sh"

标签:php,docker,docker-compose,symfony
来源: https://codeday.me/bug/20190701/1350709.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有