嘿,
几天来,我试图为我的Laravel应用程序找到一个好的解决方案。我使用Docker和Docker compose来组织我的堆栈,并将其拆分为以下服务:
- Nginx服务请求
- PHP-FPM用于处理从Nginx传递到Laravel应用程序的请求
- PHP-FPM用于处理Laravel应用程序的队列
- PHP-FPM用于处理Laravel应用程序的时间表
- MariaDB作为数据库
PHP-FPM的服务使用相同的自定义Docker镜像,为Laravel应用程序添加必要的文件。
我的问题是,我不知道我应该如何提供我的Laravel应用程序的文件到服务。我可以想到两种方法:
1.复制自定义Dockerfile中的文件。使用这种方法,我可以通过自定义注册表部署我的应用程序,并通过更改docker-compose.yml
中的入口点来启动队列和时间表。缺点是我不知道Nginx应该如何访问容器中的文件,尤其是静态资产。这也使开发过程变得更加困难。
1.将文件作为卷绑定到容器中。这解决了(几乎)第一种方法的所有缺点,但我想不出一个好的解决方案来启动队列和调度工人(以Docker的方式)。
我会非常感谢任何帮助和有用的建议。在阅读了很多问题在这里在SO和其他博客文章和观看一些YouTube视频后,我非常非常困惑。
2条答案
按热度按时间vs91vp4v1#
你可以在Dockerfile中安装supervisor并在其中运行必要的服务:cron,php-fpm,queue。
Dockerfile
字符串
supervisord.conf
型
crontab
型
1sbrub3j2#
在dockerish的方式下,你可以做的是将服务分离到不同的容器中,这样队列和cron作业就不会影响你的基本主应用程序。
字符串
在这里,我们首先创建laravel应用程序镜像,然后使用同一镜像在单独的容器中运行队列工作器和任务调度器。您的nginx服务将仅从laravel-app容器提供服务。