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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。