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

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

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

Swoft 簡介

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

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

Swoft 鏡像的主要用途

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

此外docker

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 嘛,鏡像不是都提供了嘛,重複勞動了。vim

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

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

Swoft 鏡像的使用

前面誇讚了那麼多鏡像的便利之處,下面若是不徹底把鏡像用到極致那就不太好了 O(∩_∩)O哈哈~bash

一、首先咱們從 github 上拉取最新的 Swoft 源碼到本地服務器

cd ~ && git clone git@github.com:swoft-cloud/swoft.git && cd swoft

二、查看 swoft 鏡像的 Dockerfile網絡

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

entrypoint 就是咱們後面須要改掉的參數

三、直接使用鏡像建立容器

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

四、使用 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 ./

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

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

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

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

保存並從新啓動 Swoft服務

clipboard.png

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

相關文章
相關標籤/搜索