1. 程式人生 > >docker 完美搭建 laravel 執行環境(含 佇列 和 定時任務 )

docker 完美搭建 laravel 執行環境(含 佇列 和 定時任務 )

本文github庫:https://github.com/xiaoemoxiw/docker.git

國內碼雲庫:https://gitee.com/jlgg/docker.git

docker搭建PHP(laravel)環境,是docker的其中一塊應用。對於laravel開發者來說,使用docker來搭建整個完整的環境是一個及其方便方案。

本方案使用的是php-7.12,nginx的最新版本,mysql-5.7的環境。在php映象裡面,安裝composer,npm(cnpm)的包。可以基本滿足larave開發的所有需要。

一、安裝docker

注意:成功安裝完docker以後,需要使用docker加速器,不然拉映象會十分慢。

1、Centos安裝

推薦方式:利用阿里雲的yum映象。

(2)更新好yum源後,執行 

   # yum update

(3) 安裝docker

 # yum install -y docker

(4)使用yum安裝方式,已經把docker-compose安裝好了,推薦使用。

(5)docker加速器修改方案:

        curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://9d4cd35f.m.daocloud.io

該指令碼可以將 --registry-mirror 加入到你的 Docker 配置檔案 /etc/docker/daemon.json 中。

成功後重啟docker

centos6:service docker restart

centos7:systemctl restart docker

官方安裝方法:

(2)按照官方描述步驟,一步步執行即可。

4、mac系統安裝

若是mac系統,則推薦官方安裝包,請在官方下載mac安裝包,直接安裝即可。

加速器新增方法:

右鍵點選桌面頂欄的 docker 圖示,選擇 Preferences ,在 Daemon 標籤(Docker 17.03 之前版本為 Advanced 標籤)下的 Registry mirrors 列表中加入下面的映象地址:

http://9d4cd35f.m.daocloud.io

3、windows安裝

個人不推薦安裝Windows版的docker版本,通過各種測試,Windows在資料卷處理的時候,會出現比較多問題,解決起來比較麻煩,如果你有神一般的解決bug的能力,可以嘗試。

個人推薦在本地安裝一個centos的環境,然後在安裝centos的安裝步驟去安裝docker,安裝完docker以後,可以通過samba來共享檔案,或者使用虛擬機器的共享功能來共享檔案。

二、初始化yml檔案

    在git上把檔案拉到本地,然後進入專案目錄。在專案根目錄裡面,有一個docker-compose-demo.yml 檔案,執行一下命令初始化一個新的yml檔案。

    # mv docker-compose-demo.yml docker-compose.yml

三、配置nginx

(1)進入nginx目錄,並建立nginx的conf.d配置目錄

    # cd ./nginx

    # mkdir conf.d

(2)建立nginx配置檔案

    # cp nginx/demo_php_conf.d.conf nginx/conf.d

    執行以上命令得到其中一個nginx的示例配置檔案,這裡可以配置無限多個站點,可以自定義nginx檔案格式

(3)配置yml檔案

    增加一個埠,請在docker-compose.yml的nginx裡面的ports中增加相應的埠

    如增加一個8080埠,則增加一項[- "8080:8080"]

四、配置php-fpm

    php-fpm容器,也就是php容器,這裡面集成了定時任務(cron)和程序管理(supervisor)這兩個工具。一般在laravel裡面需要使用佇列,控制佇列多執行緒併發,是需要這兩個應用的。

1、定時任務(cron)

定時任務放在cron資料夾中,增加新的定時任務檔案,需要在supervisor中的program.conf指定讀取的檔案。

現在是有一個檔案為laravel,裡面定義了基礎的排程任務。

在 php-fpm/supervisor/program.conf中

        [program:crontab]

        command=crontab /var/spool/cron/crontabs/laravel

建議所有的排程任務都放在php-fpm/cron/laravel,不然還需要在docker-compose.yml指明檔案共享。

2、程序管理(supervisor)

在初始化時,需要修改

php artisan路徑 queue:work redis --queue=佇列名稱 --sleep=3 --tries=3

具體參考laravel手冊

現在程序管理配置檔案中包括了佇列任務,定時任務和php-fpm程序。

其中[program:php-fpm]和[program:cron-restart]項不能修改。

增加一項程序,新增一項

[program:程序名稱] 

具體的程序內容

五、執行docker

在docker-compose.yml所在目錄,也就是docker程式碼的根目錄,執行一下命令。

啟動專案:docker-compose up -d

關閉專案:docker-compose down

六、進入容器

本專案的根目錄下有一個叫exec.sh的指令碼,在本目錄下執行[./exec.sh 容器名稱]即可進入目錄。

注意:

在執行[./exec.sh 容器名稱]之前,先執行[chmod +x ./exec.sh]命令,給指令碼賦予執行許可權。

exec.sh更方便的使用方式

執行:

cp ./exec.sh /usr/local/bin/exec.sh && chmod +x /usr/local/bin/exec.sh

在任何目錄下,都可以執行 [exec.sh 容器名稱] 來進入容器

進入php容器:exec.sh php

進入mysql容器:exec.sh mysql

進入redis容器:exec.sh redis

進入nginx容器:exec.sh nginx

七、執行npm(cnpm)或者composer

完成進入容器這個步驟以後,通過exec php 進入php容器

然後直接執行cnpm或者composer即可



作者:精靈GG
連結:https://www.jianshu.com/p/6c779d7f6f29
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。