這篇文章將介紹如何在自己的電腦中用Docker建立Laravel8的開發環境。
https://docs.docker.com/get-docker/
docker --version
-> Docker version 20.10.2, build 2291f61
docker-compose --version
-> docker-compose version 1.27.4, build 40524192
https://github.com/scobin/docker-php
這次會製作四個服務。分別是nginx, php, db, phpmyadmin。
nginx、phpmyadmin直接使用已提供的映像檔。
php, db要客製化,所以使用Dockerfile來做設定。
php的Dockerfile在/php
資料夾下,可以看一下裡面的內容,這次要建立PHP8的環境,並且也安裝了composer。
db的Dockerfile在/mysql
資料夾下,這次要使用mysql8。
要對容器內的檔案做任何操作需要進入容器內執行指令,這有時相當不方便。
如果可以跟電腦檔案互相聯通,那麼我們不用進入容器內也可以對檔案做修改或查看那就做好不過了。
要做到這件事,可以使用volumns的描述來達成。
比方說,下面php的容器設定就是將專案嚇得/server
路徑跟容器內的/var/www/
路徑做相通。
如此,我們在/server
裡面建立Laravel應用時直接就等於在容器內的/var/www/
裡面建立Laravel應用,修改/server
下的內容等於修改容器內/var/www/
的內容。
php:
container_name: php-laravel
build: ./php
volumes:
- ./server:/var/www/:delegated
不只php容器,nginx容器也有相關設定,也可以參考一下。
nginx.conf
中的root設定裡,example-app是等一下要建立的Laravel應用程式的專案名稱,你可以自行修正,但修正後等一下建立Laravel應用時請一定要用一樣的名稱。
...
root /var/www/example-app/public;
index index.php index.html;
...
使用以下指令建立與啟動容器,第一次執行會需要比較長的時間,之後的啟動時間會縮短。
docker-compose up -d --build
使用以下指令關閉與刪除容器。
docker-compose down
如果不想刪除容器,可以用以下指令。
docker-compose stop
接下來進入php-laravel容器中安裝Laravel。
使用以下指令進入容器。
docker-compose exec php bash
當你成功建立與啟動容器後,可以進入php-laravel容器內檢查PHP、composer版本是否正確。
注意這時還沒有建立Laravel應用,所以你必須到var/www下建立Laravel應用。以下使用composer來建立名為example-app的Laravel應用程式。
(example-app請記得跟nginx.conf的跟目錄設定要一致。)
# change path according to your nginx.conf
cd ..
# create project
composer create-project laravel/laravel example-app
建立應用程式一樣需要一些時間請耐心等候。你可以利用這個時間用瀏覽器打開localhost:8811
檢查phpmyadmin的頁面是否正確顯示。
應用程式建立好後,用exit
指令退出容器,然後用以下指令重新啟動容器。
docker-compose restart
再用瀏覽器打開localhost:8010
看看Laravel的預設頁面是否正確顯示。
如果顯示成功那麼表示你的設定已經正確。恭喜你已經將PHP8, MySQL8, Laravel8的Docker環境順利建構完成。
如果你開啟localhost:8010
畫面後,看到以下錯誤訊息的話,請執行權限變更。
UnexpectedValueExceptionThe stream or file “/var/www/example-app/storage/logs/laravel.log” could not be opened in append mode: Failed to open stream: Permission denied
因為資料夾的權限設定不符合,因此修改權限設定。
先確認php-fpm的使用者名稱,根據php-fpm的config設定可以查看相關消息。
在php容器中,usr/local/etc/php-fpm.d/www.conf
中可以找到下面的設定。
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user’s group
; will be used.
user = www-data
group = www-data
因此將storage
跟bootstrap/cache
資料夾的所有者跟群組改為www-data。
這裡用以下方式修改,
#進入php容器
docker-compose exec php bash
# 修改權限設定
chown -R www-data:www-data /var/www/example-app/storage
chown -R www-data:www-data /var/www/example-app/bootstrap/cache
chmod -R 775 /var/www/example-app/storage
chmod -R 775 /var/www/example-app/bootstrap/cache
Laravel8+Vue3+Bootstrap5實作TODO List ep09:安裝bootstrap5並美化todo list畫面
Laravel8+Vue3+Bootstrap5實作TODO List ep07:安裝vue3跟基本設定
Laravel8+Vue3+Bootstrap5實作TODO List ep08:用vue重新製作todo list畫面
Laravel8+Vue3+Bootstrap5實作TODO List ep06:初步認識Web Route
Laravel8+Vue3+Bootstrap5實作TODO List ep05:製作新增、更新、刪除待辦事項的API