docker运行laravel项目,有没有必要安装一个新的容器运行消息队列?

目前有的容器:nginx、php、mysql,我想的是再单独安装一个ubuntu容器,专门运行消息队列

让PHP再次伟大
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 31

必须是分开的, 假如你要运行 100 个 api 容器, 但是队列容器只需要 10 个。 这边我的项目有两个 Dockerfile Dockerfile

FROM phpswoole/swoole:php7.4-alpine

# 一个安装 PHP 扩展的脚本
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/

RUN install-php-extensions pcntl redis pdo_mysql

WORKDIR /var/www
COPY . .
RUN chmod -R 0777 storage && \
    chmod -R 0777 bootstrap/cache && \
    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ && \
    composer install --optimize-autoloader --no-dev && \
    php artisan config:cache && \
    php artisan route:cache && \
    php artisan view:cache && \
    php artisan laravels publish --no-interaction

CMD ["php", "bin/laravels", "start", "--env=product"]

Dockerfile.queue

FROM phpswoole/swoole:php7.4-alpine

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && cat /etc/apk/repositories

# 快速安装 PHP 扩展
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
RUN install-php-extensions pcntl redis pdo_mysql zip

WORKDIR /var/www
COPY . .
RUN chmod -R 0777 storage && \
    chmod -R 0777 bootstrap/cache && \
    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ && \
    composer install --optimize-autoloader --no-dev

## 安装 supervisor 守护进程
RUN apk add supervisor

## 修改配置文件
RUN mkdir /etc/supervisor.d/ &&  echo $'\n\
[program:laravel-worker] \n\
process_name=%(program_name)s_%(process_num)02d \n\
command=/usr/local/bin/php /var/www/artisan queue:work --sleep=3 --tries=3 \n\
numprocs=12 \n\
autostart=true \n\
autorestart=true \n\
## 重定向错误到 stdout  \n\
redirect_stderr=true \n\
stdout_logfile_maxbytes=10MB \n\
stdout_logfile=/var/www/storage/logs/queue.log \n'\
> /etc/supervisor.d/laravel-worker.ini

## 启动队列服务: 必须增加 --nodaemon 参数
CMD ["/usr/bin/supervisord", "--nodaemon", "-c", "/etc/supervisord.conf"]

参考我的博客链接: www.shiguopeng.cn/posts/2022030118...

11个月前 评论
zhangrongwang 10个月前
lun1bz 10个月前
lun1bz 10个月前
seth-shi (作者) 10个月前
lun1bz 10个月前

必须是分开的, 假如你要运行 100 个 api 容器, 但是队列容器只需要 10 个。 这边我的项目有两个 Dockerfile Dockerfile

FROM phpswoole/swoole:php7.4-alpine

# 一个安装 PHP 扩展的脚本
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/

RUN install-php-extensions pcntl redis pdo_mysql

WORKDIR /var/www
COPY . .
RUN chmod -R 0777 storage && \
    chmod -R 0777 bootstrap/cache && \
    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ && \
    composer install --optimize-autoloader --no-dev && \
    php artisan config:cache && \
    php artisan route:cache && \
    php artisan view:cache && \
    php artisan laravels publish --no-interaction

CMD ["php", "bin/laravels", "start", "--env=product"]

Dockerfile.queue

FROM phpswoole/swoole:php7.4-alpine

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && cat /etc/apk/repositories

# 快速安装 PHP 扩展
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
RUN install-php-extensions pcntl redis pdo_mysql zip

WORKDIR /var/www
COPY . .
RUN chmod -R 0777 storage && \
    chmod -R 0777 bootstrap/cache && \
    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ && \
    composer install --optimize-autoloader --no-dev

## 安装 supervisor 守护进程
RUN apk add supervisor

## 修改配置文件
RUN mkdir /etc/supervisor.d/ &&  echo $'\n\
[program:laravel-worker] \n\
process_name=%(program_name)s_%(process_num)02d \n\
command=/usr/local/bin/php /var/www/artisan queue:work --sleep=3 --tries=3 \n\
numprocs=12 \n\
autostart=true \n\
autorestart=true \n\
## 重定向错误到 stdout  \n\
redirect_stderr=true \n\
stdout_logfile_maxbytes=10MB \n\
stdout_logfile=/var/www/storage/logs/queue.log \n'\
> /etc/supervisor.d/laravel-worker.ini

## 启动队列服务: 必须增加 --nodaemon 参数
CMD ["/usr/bin/supervisord", "--nodaemon", "-c", "/etc/supervisord.conf"]

参考我的博客链接: www.shiguopeng.cn/posts/2022030118...

11个月前 评论
zhangrongwang 10个月前
lun1bz 10个月前
lun1bz 10个月前
seth-shi (作者) 10个月前
lun1bz 10个月前

我是用的同一个镜像,启动多个容器来处理

github.com/dora-exku/php-env

11个月前 评论

在原有的容器中加入一个新的进程来处理消息队列,不大需要单独再创建一个 Ubuntu 容器吧。用Supervisor啥的

11个月前 评论
陈先生

docker 的原则就是一个进程一个容器,单一进程原则。 不要看网上都在搞的那个启动容器后直接启动 supervisor,然后 supervisor 拉起来 php-fpm & queue。都是些离谱的东西。简单说你想一个容器跑两个进程,就意味着你无法确保你的每一个进程都是健康的。一个 php-cli 容器吃不了几个内存的,建议加一个容器用来跑 queue

11个月前 评论
陈先生 (作者) 10个月前
lun1bz 10个月前
lun1bz 10个月前
陈先生 (作者) 10个月前
lun1bz 10个月前
lun1bz 10个月前
陈先生 (作者) 10个月前
lun1bz 10个月前
Pon 2个月前

可以有,想把压力分散就可以这么做

11个月前 评论

本地调试 不需要吧

11个月前 评论

消息队列有多种实现的后端,如果mysql就不需要,因为你已经有了。如果rabbitmq,则需要安装新的容器。

11个月前 评论
勇敢的心 (楼主) 11个月前

需要用到 Redis 或 MQ 这种软件的话,就再弄几个容器,不用都塞在 PHP 那个容器里。比如我用 laradock,用到哪些就启动哪些

11个月前 评论

意思是单独起一个容器ubuntu 来在这个容器里面安装消息队列的东?

11个月前 评论
skarner

常驻进程的,应该单独启一个进程来跑

11个月前 评论

建议分开,两个互不影响!

11个月前 评论

话说docker开发,你们的开发环境怎么做的配置.有相关链接吗

11个月前 评论
lun1bz 10个月前
sanders

用 sail 都解决了,还很简单。

11个月前 评论

再加上 reids、laravel-horizon两个容器

11个月前 评论

当然是分开。 如果是本地自己使用的话,那什么还要使用容器来处理消费问题呢。 如果是做单元测试,那应该直接用方法来替代消费者? 如果是性能测试,那在自己的机器上多开容器是不是也挺折磨的 :grin:

11个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!