iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 3
7
Modern Web

Laravel 6.0 初體驗!怎麼用最新的 laravel 架網站!系列 第 3

[Day 3] 框架裝好了,那畫面呢?聊環境建置,docker 和 laradock

  • 分享至 

  • xImage
  •  

框架安裝好,檔案也都處理完了,資料夾結構的觀念也釐清了一部分。可是!都到第三天的教學了,現在還沒有看到畫面,怎麼回事?

有檔案,完全沒有畫面

對熟悉網頁開發的讀者來講,應該很清楚問題的癥結:雖然程式碼都在,目前網站上還沒有實際運行。

所以!現在就要帶領各位讀者們進行運行環境的建置了!

筆者這裡,建議使用 docker 建構你的測試環境,這樣可以保證有一天,要是你希望網站對外公開時,能最大的減少環境所產生的風險。雖然學習 docker 需要不少時間成本,但是相當值得!

首先,是在你的開發機器上面安裝 docker:

安裝時會要求你申請 docker Hub 網站的帳號 這不是什麼奇怪的網站,不用擔心,可以放心的申請。

依照步驟安裝好之後,我們在指令列裡面,確認一下是否安裝成功

$ docker --version

Docker version 19.03.1, build 74b1e89

如果能成功地看到安裝的 docker 版本訊息,那麼恭喜你!你已經安裝成功了

接著,我們來安裝 Laradock 囉!

Laradock

什麼是 Laradock 呢?

laradock logo

簡單的說,Laradock 是一個運行 PHP 網頁環境的 docker 環境套裝。

如同官網所說的「Use Docker First - Then Learn About It Later」,藉由這個套裝,我們可以暫時先不用理會 docker image,docker container 等等觀念,直接先使用並體會到 docker 的好處,然後再學習 docker 許多使用上的觀念。

接著,我們就開始學習怎麼用吧!

安裝 git

對已經安裝過 git 的讀者來說,可以省略這個段落

要安裝 Laradock,我們建議使用 git 這個版本控制軟體進行下載。

操作完所有程序之後,我們一樣檢查一下是否成功安裝 git

$ git --version
git version 2.20.1 (Apple Git-117)

如果能成功看到版本號,那麼就代表我們安裝成功了!往下一步邁進

安裝 Laradock

然後,我們下載 Laradock。在 Laravel60demo/ 裡面,我們執行

$ git clone https://github.com/Laradock/laradock.git

下載到指定位置之後,我們進入到 laradock/ 資料夾看看內容。

$ cd laradock
$ ls
DOCUMENTATION           couchdb                 haproxy                 laravel-horizon         mosquitto               postgres-postgis        traefik
LICENSE                 docker-compose.sync.yml hhvm                    logs                    mssql                   rabbitmq                travis-build.sh
adminer                 docker-compose.yml      ide-codiad              logstash                mysql                   redis                   varnish
aerospike               docker-registry         ide-icecoder            maildev                 neo4j                   redis-cluster           workspace
apache2                 docker-sync.yml         ide-theia               mailhog                 nginx                   redis-webui             zookeeper
aws-eb-cli              docker-web-ui           ide-webide              manticore               percona                 rethinkdb
beanstalkd              elasticsearch           ipython                 mariadb                 php-fpm                 selenium
beanstalkd-console      env-example             jenkins                 memcached               php-worker              solr
caddy                   gitlab                  jupyterhub              minio                   phpmyadmin              sonarqube
cassandra               grafana                 kibana                  mongo                   portainer               sync.sh
certbot                 graylog                 laravel-echo-server     mongo-webui             postgres                thumbor

確認下載完成了,檔案也沒有問題,我們準備開始建置我們的環境

運行 Laradock 之前,我們記得建立好 Laradock 所需的 .env 檔案,這邊我們先使用原本就附加的範例檔案 env-example

laradock/ 資料夾裡面執行

$ cp env-example .env

確認建立好 .env 之後,我們來開啟運行網站所需的服務

$ docker-compose up -d nginx mysql workspace

注意這邊的參數不能省略!省略了會一次打開所有的服務,電腦很快就撐不住了 !

跟官網的範例不一樣,筆者這邊移除了部分的服務,這樣讓之後的教學更加單純。

檢查一下是不是成功了,我們用 docker ps 這個指令看看:

$ docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                      NAMES
4bbce5b03331        laradock_nginx       "/bin/bash /opt/star…"   5 seconds ago       Up 4 seconds        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   laradock_nginx_1
1132b59579fd        laradock_php-fpm     "docker-php-entrypoi…"   6 seconds ago       Up 5 seconds        9000/tcp                                   laradock_php-fpm_1
bd2bfcf72e83        laradock_workspace   "/sbin/my_init"          7 seconds ago       Up 6 seconds        0.0.0.0:2222->22/tcp                       laradock_workspace_1
bf98e008c16b        docker:dind          "dockerd-entrypoint.…"   8 seconds ago       Up 7 seconds        2375/tcp                                   laradock_docker-in-docker_1
8ca010fdce32        laradock_mysql       "docker-entrypoint.s…"   8 seconds ago       Up 7 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp          laradock_mysql_1

看起來好像成功囉? 我們接著連線到自己的電腦看看吧!

連線到 http://127.0.0.1/

Laravel 6.0 welcome page

成功啦!!!(撒花)(撒花)(撒花)


補充幾個常見的錯誤

如果你看到的是 404 畫面

很可能是因為,我們安裝 laradock 的位置出錯了,導致無法正確抓到 Laravel 框架程式的位置

這時候我們看看 laradock 資料夾是否確實在專案資料夾裡面,如果不是的話,刪掉重新安裝就好


另外有讀者看到的是 500 畫面

一般來說 500 代表的是網站運行錯誤,發生的原因很多,會需要更多的資訊才能找到錯誤。

不過,一個很常發生在剛安裝 Laravel 初期的錯誤,是沒有成功安裝 .env 檔案

這時候只要將專案整個重新刪除重裝即可。

或者,可以在專案資料夾內,直接使用範例 env 檔案

$ cp .env.example .env

然後下指令補齊 Laravel 的 secret key

$ php artisan key:generate

這樣就可以囉!


總算不再沒有畫面了,今天就到這邊囉!各位明天見!


上一篇
[Day 2] 版本怎麼不是 6.0?聊聊版本編號與 Laravel 架構
下一篇
[Day 4] Hello World! 開啟我們自己的第一個網頁!
系列文
Laravel 6.0 初體驗!怎麼用最新的 laravel 架網站!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
Rex Chien
iT邦新手 4 級 ‧ 2019-09-06 09:45:47

是說在 docker-compose.yml 檔案裡面有看到

  • nginx 相依於 php-fpm
  • php-fpm 又相依於 workspace

所以 docker-compose up -d nginx mysql workspace 這行應該是可以把 workspace 拿掉

ReccaChao iT邦新手 1 級 ‧ 2019-09-06 10:01:30 檢舉

你說的沒錯!即使把 workspace 拿掉,所開啟的容器是一模一樣的。

個人認為在官方的教學中,在命令保留這個詞,可能是讓不熟悉的用戶知道實際上開啟的服務有 nginx,mysql 和放置程式碼用的 workspace。因此這裏保留這個指令,而不是使用更簡潔的 docker-compose up -d nginx mysql

非常感謝回應!

1
阿瑜
iT邦研究生 4 級 ‧ 2019-09-09 15:35:35

我的無法正常開啟,請問這是什麼問題 ?


我重裝 LaravelDock

變成 404 not found

看更多先前的回應...收起先前的回應...
ReccaChao iT邦新手 1 級 ‧ 2019-09-09 16:00:17 檢舉

你好

以這個畫面來看,看不太出問題喔。
因為目前看起來,docker 的設置和 container 個數都沒有問題。
而因為程式設置而產生 Http Status 500 的可能性實在太多了。

如果無法透過 google 找出問題的話,或許從頭開始一次這份教學,能解決這個問題。

不好意思沒幫上忙

ReccaChao iT邦新手 1 級 ‧ 2019-09-09 16:20:01 檢舉

一個不確定是不是這樣的可能性:

請問你的 Laravel60/ 專案裡面,有 .env 這個檔案嗎?
如果沒有,可能是 Laravel 安裝時有問題,導致這個檔案沒有出現。

如果是這樣,可以在 Laravel60/ 裡面執行 cp .env.example .env

然後執行 php artisan key:generate

再看看網頁能不能正常出現

阿瑜 iT邦研究生 4 級 ‧ 2019-09-09 16:28:39 檢舉

好的 我試試

阿瑜 iT邦研究生 4 級 ‧ 2019-09-09 16:32:02 檢舉

我有這個檔案

再執行 php artisan key:generate 後
出現

ReccaChao iT邦新手 1 級 ‧ 2019-09-09 16:55:16 檢舉

不是在 laradock 裡面找,是在 Laravel60/ 資料夾裡面檢查

ReccaChao iT邦新手 1 級 ‧ 2019-09-09 16:56:33 檢舉

404 通常是安裝的位置錯誤,不是在 Laravel 專案內下載 laradock 資料夾,導致資料夾路徑不正確。

阿瑜 iT邦研究生 4 級 ‧ 2019-09-09 17:20:32 檢舉


有了 ,謝謝你 !!!

0
ckp6250
iT邦好手 1 級 ‧ 2019-11-26 16:42:27

打卡上課!

1
SarahCheng
iT邦新手 5 級 ‧ 2020-02-07 13:17:08

想請問安裝 docker 出現以下錯誤
ERROR: for laradock_nginx_1 Cannot start service nginx: Ports are not available: listen tcp 0.0.0.0:80: bind: address already in use
但是下指令查看 lsof -n -i:80 是空的
喔喔 我知道了 我的php和Apache綁著
關掉 Apache 即可 sudo apachectl stop
謝謝 不好意ㄙ~

我要留言

立即登入留言