使用Docker运行Laravel调度程序和队列

在Laravel中,当从虚拟服务器切换到Docker时,其中一个棘手的更改是如何运行调度程序和队列工作者。当PHP开发人员试图弄清楚如何在Docker中使用Laravel时,我发现这个问题经常出现。 您应该在主机服务器上运行它们吗?你应该在Docker容器中通过cron运行吗?我推荐在Docker中运行scheduler命令和Laravel队列的两种方法,我们将用一个完整(尽管很简单)的Docker设置来介绍这两种方法的基本原理,您可以用它来进行实验。 Multi-Purpose Docker Imagep>,您可以将工作负载拆分为单独的容器并独立地扩展它们。您可以有多个容器运行队列工作程序,一个容器运行调度程序,少数容器运行您的web应用程序。Laravel的设计是单片的,这意味着您的队列作业、调度命令和HTTP端点共享一个单一的代码库。 Dockerfile对于运行Laravel代码的每个上下文?一个用于web应用程序,一个用于队列,一个用于调度程序? 我建议,通过一些巧妙的脚本,我们可以构建一个灵活的Docker映像,它可以支持所有三个角色。这意味着要构建一个映像,它可以作为web服务器、调度运行程序或队列工作程序运行。 使用Docker,您可以以新的、令人兴奋的方式拆分工作负载,这在传统服务器上是不可能的。在Ubuntu服务器上,您可能会在同一台机器上运行web服务器、队列和调度程序命令。然而,对于Docker,在同一个容器中运行所有这些进程是没有意义的。 让我们看看如何使用bash脚本来运行Docker CMD来完成这个任务。 项目设置 在我们开始了解如何在Docker中以不同的角色运行应用程序之前,让我们用Docker使用Apache web服务器。 我们将使用官方的php Docker映像作为基本映像,Docker Compose运行MySQL和Redis。首先,让我们设置设置Docker环境所需的文件: 1laravel new docker-laravel2cd ./docker-laravel3mkdir docker/4touch docker-compose.yml5touch docker/Dockerfile6touch docker/start.sh7touch docker/vhost.confDocker Compose 这篇文章不是关于使用Docker Compose的,因此如果您不熟悉,我建议您阅读Docker Compose文档,我的Docker PHP书(也有一本书的版本)在全文中介绍了大量Docker编写示例。 这里是Docker编写文件,其中包含运行应用程序服务所需的服务: 1version: \"3\" 2services: 3app: 4image: laravel-www 5container_name: laravel-www 6build: 7context: . 8dockerfile: docker/Dockerfile 9depends_on:10- redis11- mysql12ports:13- 8080:8014volumes:15- .:/var/www/html16environment:17APP_ENV: local18CONTAINER_ROLE: app19CACHE_DRIVER: redis20SESSION_DRIVER: redis21QUEUE_DRIVER: redis22REDIS_HOST: redis2324redis:25container_name: laravel-redis26image: redis:4-alpine27ports:28- 16379:637929volumes:30- redis:/data3132mysql:33container_name: laravel-mysql34image: mysql:5.735ports:36- 13306:330637volumes:38- mysql:/var/lib/mysql39environment:40MYSQL_DATABASE: homestead41MYSQL_ROOT_PASSWORD: root42MYSQL_USER: homestead43MYSQL_PASSWORD: secret4445volumes:46redis:47driver: \"local\"48mysql:49driver: \"local\" 请注意CONTAINER_ROLE环境变量,它将在我们开始充实时起作用自定义Docker脚本。我们还为MySQL定义了一些开发数据库设置,并设置了一些卷来保存MySQL和Redis数据。 在app服务中,我们安装了一个卷,以便我们的PHP和前端代码更改在开发过程中立即反映出来。 Dockerfile,Laravel应用程序服务将从docker/Dockerfile构建,我们需要更新: 1FROM php:7.2-apache-stretch23COPY . /var/www/html4COPY docker/vhost.conf /etc/apache2/sites-available/000-default.conf56RUN chown -R www-data:www-data /var/www/html 7&& a2enmod rewrite 7***从官方的PHP Apache映像获取其大部分功能。我们正在复制Laravel代码和一个apachevhost文件。Vhost文件覆盖是必需的,这样我们就可以将DocumentRoot指向/var/www/html/public,这正是Laravel所期望的。 然后我们将文件的所有权更改为www-data用户,以获得生产中的正确权限。最后,我们启用modu rewrite,这样URL重写就可以工作了。Apache Vhost 接下来,我们需要填写docker/vhost.conf文件,指向public文件夹。将以下内容添加到docker/vhost.conf,并将其复制到图像中,重写000-default.confvhost文件: 1 2DocumentRoot /var/www/html/public 3 4 5AllowOverride all 6Require all granted 7 8 9ErrorLog ${APACHE_LOG_DIR}/error.log10CustomLog ${APACHE_LOG_DIR}/access.log combined11 此时您可以构建映像,并且应该能够在localhost:8080上获得Laravel的欢迎页面: 1docker-compose up --build 自定义Docker CMD指令正在使用Debian Stretch扩展正式的PHP Apache映像。如果您仔细查看我们正在扩展的基本Apache映像,您将看到一条CMD指令: 1CMD [\"apache2-foreground\"] 我们将在自己的Dockerfile中重写CMD指令,因此让我们首先为bash脚本构建一个结构,并在脚本中使用apache2-foreground。然后,我们将扩展脚本以包含计划程序和队列的角色。 将docker/Dockerfile更新为如下所示: 1FROM php:7.2-apache-stretch 2 3COPY . /var/www/html 4COPY docker/vhost.conf /etc/apache2/sites-available/000-default.conf 5COPY docker/start.sh /usr/local/bin/start 6 7RUN chown -R www-data:www-data /var/www/html 8&& chmod u+x /usr/local/bin/start 9&& a2enmod rewrite1011CMD [\"/usr/local/bin/start\"] 我们现在将bash脚本从docker/start.sh复制到/usr/local/bin/start并使其可执行。最后,我们重写CMD指令来运行bash脚本。 在填充队列工作线程之前,让apache服务器重新工作。添加以下内容cide to buy Laravel News可以得到一些回扣来帮助运行这个站点。

admin_action_{$_REQUEST[‘action’]}

do_action( "admin_action_{$_REQUEST[‘action’]}" )动作钩子::在发送“Action”请求变量时激发。Action Hook: Fires when an ‘action’ request variable is sent.目录锚点:#说明#源码说明(Description)钩子名称的动态部分$_REQUEST['action']引用从GET或POST请求派生的操作。源码(Source)更新版本源码位置使用被使用2.6.0 wp-admin/admin.php:...

日期:2020-09-02 17:44:16 浏览:1170

admin_footer-{$GLOBALS[‘hook_suffix’]}

do_action( "admin_footer-{$GLOBALS[‘hook_suffix’]}", string $hook_suffix )操作挂钩:在默认页脚脚本之后打印脚本或数据。Action Hook: Print scripts or data after the default footer scripts.目录锚点:#说明#参数#源码说明(Description)钩子名的动态部分,$GLOBALS['hook_suffix']引用当前页的全局钩子后缀。参数(Parameters)参数类...

日期:2020-09-02 17:44:20 浏览:1071

customize_save_{$this->id_data[‘base’]}

do_action( "customize_save_{$this->id_data[‘base’]}", WP_Customize_Setting $this )动作钩子::在调用WP_Customize_Setting::save()方法时激发。Action Hook: Fires when the WP_Customize_Setting::save() method is called.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分,$this->id_data...

日期:2020-08-15 15:47:24 浏览:807

customize_value_{$this->id_data[‘base’]}

apply_filters( "customize_value_{$this->id_data[‘base’]}", mixed $default )过滤器::过滤未作为主题模式或选项处理的自定义设置值。Filter Hook: Filter a Customize setting value not handled as a theme_mod or option.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分,$this->id_date['base'],指的是设置...

日期:2020-08-15 15:47:24 浏览:900

get_comment_author_url

过滤钩子:过滤评论作者的URL。Filter Hook: Filters the comment author’s URL.目录锚点:#源码源码(Source)更新版本源码位置使用被使用 wp-includes/comment-template.php:32610...

日期:2020-08-10 23:06:14 浏览:930

network_admin_edit_{$_GET[‘action’]}

do_action( "network_admin_edit_{$_GET[‘action’]}" )操作挂钩:启动请求的处理程序操作。Action Hook: Fires the requested handler action.目录锚点:#说明#源码说明(Description)钩子名称的动态部分$u GET['action']引用请求的操作的名称。源码(Source)更新版本源码位置使用被使用3.1.0 wp-admin/network/edit.php:3600...

日期:2020-08-02 09:56:09 浏览:877

network_sites_updated_message_{$_GET[‘updated’]}

apply_filters( "network_sites_updated_message_{$_GET[‘updated’]}", string $msg )筛选器挂钩:在网络管理中筛选特定的非默认站点更新消息。Filter Hook: Filters a specific, non-default site-updated message in the Network admin.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分$_GET['updated']引用了非默认的...

日期:2020-08-02 09:56:03 浏览:864

pre_wp_is_site_initialized

过滤器::过滤在访问数据库之前是否初始化站点的检查。Filter Hook: Filters the check for whether a site is initialized before the database is accessed.目录锚点:#源码源码(Source)更新版本源码位置使用被使用 wp-includes/ms-site.php:93910...

日期:2020-07-29 10:15:38 浏览:834

WordPress 的SEO 教学:如何在网站中加入关键字(Meta Keywords)与Meta 描述(Meta Description)?

你想在WordPress 中添加关键字和meta 描述吗?关键字和meta 描述使你能够提高网站的SEO。在本文中,我们将向你展示如何在WordPress 中正确添加关键字和meta 描述。为什么要在WordPress 中添加关键字和Meta 描述?关键字和说明让搜寻引擎更了解您的帖子和页面的内容。关键词是人们寻找您发布的内容时,可能会搜索的重要词语或片语。而Meta Description则是对你的页面和文章的简要描述。如果你想要了解更多关于中继标签的资讯,可以参考Google的说明。Meta 关键字和描...

日期:2020-10-03 21:18:25 浏览:1729

谷歌的SEO是什么

SEO (Search Engine Optimization)中文是搜寻引擎最佳化,意思近于「关键字自然排序」、「网站排名优化」。简言之,SEO是以搜索引擎(如Google、Bing)为曝光媒体的行销手法。例如搜寻「wordpress教学」,会看到本站的「WordPress教学:12个课程…」排行Google第一:关键字:wordpress教学、wordpress课程…若搜寻「网站架设」,则会看到另一个网页排名第1:关键字:网站架设、架站…以上两个网页,每月从搜寻引擎导入自然流量,达2万4千:每月「有机搜...

日期:2020-10-30 17:23:57 浏览:1308