Swoft 系列教程:(1)使用 Docker 安裝部署 Swoft

之前有寫過一篇 Docker 安裝部署 Swoft 的文章,但有些冗餘混亂,故重寫作爲教程的開篇。要不讀讀看?

Swoft項目:https://github.com/swoft-clou...
Swoft文檔:https://doc.swoft.org/
Swoft鏡像:https://hub.docker.com/r/swof...

Swoft 簡介

首個基於 Swoole 原生協程的新時代 PHP 高性能協程全棧框架,內置協程網絡服務器及常用的協程客戶端,常駐內存,不依賴傳統的 PHP-FPM,全異步非阻塞 IO 實現,以類似於同步客戶端的寫法實現異步客戶端的使用,沒有複雜的異步回調,沒有繁瑣的 yield, 有類似 Go 語言的協程、靈活的註解、強大的全局依賴注入容器、完善的服務治理、靈活強大的 AOP、標準的 PSR 規範實現等等,可以用於構建高性能的Web系統、API、中間件、基礎服務等等。

即異步非阻塞IO,EventLoop,事件驅動。cpu_num 個 worker 即可承載高併發請求,提供協程/異步IO客戶端,數據庫連接池,對象連接池,任務進程池。優雅的註解聲明,IOC/DI容器,嚴格遵循PSR規範。

Swoft 鏡像的主要用途

Swoft 官方提供了基於 Debine 的 Docker 鏡像。鏡像中已安裝配置好運行 Swoft 的所需組件及依賴:PHP 7.0+ / Swoole / Composer / Pecl。雖然不使用鏡像從頭安裝部署以上幾項組件也不難,但鏡像內置可以開箱即用,免去了這些略繁瑣的工作,讓我們儘可能快的投入到 Swoft 的開發中去。

此外

Swoft 鏡像與開發的配合

如果只是單純的想快速體驗 Swoft,使用 docker run -p 80:80 swoft/swoft 拉取創建容器訪問即可。

如何正確的在 Swoft 項目的開發中使用鏡像呢?如果是要將鏡像好好利用到開發工作中,則需要清楚一下幾點。

  • 鏡像內置完全安裝的 Swoft 框架,但它只是用來快速演示的,並不是要你拿去修改,開發還是要對本地的 Swoft 項目開發。
  • 我們應該做的是將本地的 Swoft 框架 掛載到鏡像的工作目錄 /var/www/swoft 從而替換掉鏡像自帶的,這樣啓動 Swoft服務 就會啓動映射到本地的 Swoft 項目了
  • 鏡像的容器啓動時默認會啓動 Swoft 服務 作爲前置進程,這就要求我們在掛載了本地 Swoft 項目時需要保證已完全安裝了各項依賴(github 拉取下來的 Swoft 源碼 並沒有安裝庫依賴,需要使用 Composer install 一下)

好像咬到尾巴了,爲了開發需要掛載本地 Swoft 項目到鏡像工作目錄,因爲容器啓動時還會一併啓動 Swoft 服務,所以要求掛載的本地 Swoft項目 必須使用 Composer 安裝好依賴,嗯?這不還是得在本地裝 PHP + Composer 嘛,鏡像不是都提供了嘛,重複勞動了。

  • 修改 Swoft 鏡像的 entrypoint 使得 Swoft 容器啓動時不同時啓動 Swoft 服務,這就不需要要求我們掛載的本地 Swoft 項目必須完全安裝好依賴了。
  • 容器創建好後,登入容器 sh,使用鏡像內置的 Composer 安裝依賴
  • 啓動 Swoft 服務

這樣就能充分利用鏡像內置的環境和工具,快樂的開始 Swoft 的開發了工作了,下面給出具體的實例。

Swoft 鏡像的使用

前面誇讚了那麼多鏡像的便利之處,下面如果不完全把鏡像用到極致那就不太好了 O(∩_∩)O哈哈~

1、首先我們從 github 上拉取最新的 Swoft 源碼到本地

cd ~ && git clone [email protected]:swoft-cloud/swoft.git && cd swoft

2、查看 swoft 鏡像的 Dockerfile

# 在文件尾設定了 entrypoint 命令爲 啓動 swoft服務
ENTRYPOINT ["php", "/var/www/swoft/bin/swoft", "start"]

entrypoint 就是我們後面需要改掉的參數

3、直接使用鏡像創建容器

docker run \
-p 8081:80 \ #映射宿主機808
-v $(pwd):/var/www/swoft \#掛載本地 Swoft 項目到鏡像工作目錄
-it -d \ #重要 開啓 stdin tty 並以daemon模式運行
--entrypoint="" \#重要 覆蓋掉鏡像內設定的 entrypoint 參數
--name my_swoft \#容器命令
--privileges=true \#賦予權限
swoft/swoft bash

4、使用 docker-compose 更爲簡潔

#編輯 docker-compose 編排文件
vim docker-compose.yml
#內容修改如下
version: '3'

services:
    swoft:
       image: swoft/swoft:latest
       container_name: my_swoft # 給容器自定義個名稱便於管理
       #build: ./
       ports:
         - "8081:80" #端口映射
       volumes:
         - ./:/var/www/swoft # 掛載本地swoft項目到鏡像工作目錄
       stdin_open: true #打開標準輸出 -i
       tty: true # 打開 tty 會話 -t
       privileged: true # 給與權限 比如創建文件夾之類的
       #entrypoint: ["php", "/var/www/swoft/bin/swoft", "start"] # 入口啓動命令 即啓動 swoft 服務
       entrypoint: ["bash"] 

創建容器

docker-compose up -d swoft ./

5、登入容器,安裝依賴,開啓 Swoft 服務
使用3或4創建的Swoft容器,便以 bash 作爲啓動的前置進程,而非啓動 Swoft 服務,我們登入容器使用內置的 Composer 安裝依賴後,啓動Swoft服務即可。

docker exec -it my_swoft bash
# 安裝框架依賴
composer install
# 啓動/停止/重啓 Swoft 服務
php bin/swoft start|stop|restar

6、開啓熱重載,關閉 daemon,讓框架調試信息輸出到 stderr 方便開發調試
編輯本地的 Swoft 項目 .env 文件

# Application
APP_DEBUG=true
# Server
...
AUTO_RELOAD=true
...
# Swoole Settings
...
DAEMONIZE=0
...

保存並重新啓動 Swoft服務

clipboard.png

小提示:可以使用 PHPStorm IDE 配置 FTP/SFTP 文件改動自動上傳的方式,開發起飛~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章