laradock環境下建立laravel horizon並在Jobs裡面使用docker指令(1/2)

LSZ
5 min readSep 8, 2020

--

下一篇,如果對這方法沒興趣直接看第2篇的最後面有些參考指令跟資源。

需求:

已安裝好docker和docker-compose。

目的:

由於公司某個需求,需要在laravel job裡面用docker run執行某個環境複雜的image來處理檔案,所以才會有這一篇文章以記錄,避免忘記。

因為是把本機的docker.sock以volume的模式傳入docker container中,所以感覺並不是很安全,參考時應該注意。

從一個空的目錄開始,到使用job queue執行docker ps指令並將結果log起來,證明docker在jobs中有用,當然也可以跑docker run等指令。

設定laradock

空目錄:

git clone https://github.com/laradock/laradock.git
cd laradock
cp env-example .env

創建一個code資料夾,跟laradock同層。

調整laradock的.env:
APP_CODE_PATH_HOST設為../code。
MYSQL_VERSION設為5.7

在laradcok目錄底下,將laravel-horizon底下的conf複製到php-worker裡面。

cp laravel-horizon/supervisord.d/laravel-horizon.conf.example php-worker/supervisord.d/laravel-horizon.conf

改寫docker-compose.yml,php-worker的部分,將本機的docker.sock放入php-worker中。

在php-worker的Dockerfile裡新增docker

執行

docker-compose up -d mysql nginx php-worker redis

建立laravel

#執行
docker-compose exec workspace bash
#出現類似下面的輸出,已經內建了composer跟npm指令
root@5b3931a3ac58:/var/www#
composer create-project laravel/laravel blog#把blog資料裡的東西搬到/var/www底下,並刪除blog資料夾
cd blog
mv * ../
mv .* ../
cd ..
rm -r blog
#開啟storage、cache權限
chmod -R 777 storage/
chmod -R 777 bootstrap/cache
#安裝2個redis套件
composer require predis/predis
composer require ext-redis

打開網頁localhost

連線mysql:

hostname: 127.0.0.1
username: root
password: root

建立一個blog的database,調整laravel裡面的.env

php artisan migrate

注意裡面的DB_HOST必須是mysql不是127.0.0.1

建立laravel job

安裝laravel-horizon:

composer require laravel/horizon
php artisan horizon:install

將laravel的config/database.php裡面redis的client改成:

修改.env,QUEUE_CONNECTION改成redis

訪問網址http://localhost/horizon

--

--