by Devin Yang

建立於: 1年前 ( 更新: 1年前 )

雖然phpenv主要用於運行PHP Laravel的環境,但不代表他不能跑其他語言或其他容器。
本文介紹,我如何讓phpenv跑python的fastapi環境,當然這只是一個概念,
目前為止,我已經讓PHP api跑HAProxy了,並且自動申請及更新免費憑證,現在就讓他來跑Python的fastapi吧。
phpenv沒有什麼限制,限制的是您的想像力😆


一、首先我先在envs的目錄touch一個環境檔。

devin@ai:~/phpenv/envs$ touch fastapi_cv2

二、新增fastapi_cv2內容如下:

DEFAULT=fastapi
PROJECT=cv2
WORKSPACE=fastapi
FOLDER=/home/devin/sd/rembg
FASTAPI_PORT=8001

這裡定義了,預設我使用fastapi.yml檔,我把Project名稱取名為cv2。
fastapi.yml檔已內建在目前最新版本的phpenv中囉,他的服務名稱是fastapi。
透過WORKSPACE的指定,我們之後可以透過簡易的bash,./console直接進入fastapi的容器中。

三、完成第二步的環境檔建立後,我們可以執行./link進行環境擋的選定,來來直接貼給畫面可能大家看,應該較有感我是怎麼操作的。


四、標準流程,當我們設定好環境檔,並執行./link選取後,就是要執行./console build啦,這個用來建立此Project專用的image。
如果需要請依自己的專案需求調整您的Python版本。(dockerfiles/Dockerfile-fastapi)
您也可以拷貝一個新的fastapi.yml檔,一切都操之在你,php僅提供了一個基本的運作方式提供參考,當然DEFATUL=fastapi要指向您新建的yml檔。

./console build

結果如下:

五、成功build完後,就來啟動看看,透過./start啟動,再透過./console ps查看。

./start
./console ps

實際畫面如下:

 

六、還記得第二步中,我早已指定了Project的folder了嗎? FOLDER=/home/devin/sd/rembg,讓我們用./console直接進入容器。
這便是phpenv方便的地方囉,發覺了嗎? :)
 

./console

實際畫面:

您應該發覺到了,自動幫您執行source /opt/python/bin/activat了,並且切換到了/app目錄。
七、標準套件安裝流程,讓我們用pip安裝套件吧。
我們可以選擇新安裝或是由已建立的requirments.txt安裝。

pip install -r requirments.txt

安裝好就像這樣囉,實際操作畫面:

八、我們可透過ctrl+d離開容器,找出此執 行的容器,因為我的project叫cv2因此可以像下方這樣

九、由於在第七步中,我們完成了requirments的安裝,我們需要把Docker的容器commit起來到image中,這樣下次重啟後才不用重裝。
簡單copy畫面中的hash及名稱,就能commit囉。

結果如下:

十、直接來一次重啟,來測看看這個Project會不會跑吧:)

./restart

操作結果如下:

因為只有一個容器,所以我們可以不指定服務名稱,查看執行畫面結果是否有誤

./console logs -f

結果如下,嗯,看起來非常正常so far so good:)
成功用phpenv執行Python的fastapi啦。


這個圖案中他Listen的port 8000是容器內的連接埠,還記得嗎,我在.env的環境設定是8001,所以我們可以透過主機端的8001進行存取的

來測測API吧,圖檔去背

加入HAProxy的設定,我們可以讓不同的語言共用同一個域名哦,不過這就另話了。
例如,我的部落格是跑Laravel的PHP環境,但API是執行Python的fastapi。
 

測試網址如下:

https://www.ccc.tc/api/rembg/docs

 

Tags: fastapi phpenv docker

Devin Yang

文章內容無法一一說明,如果您有什麼不了解處,歡迎提問哦:)

No Comment

Post your comment

需要登入才可留言!

類似的文章


laravel docker

關於D-Laravel的專案模式

如果您是新使用者,建議您改用我的最新環境phpenv。https://github.com/DevinY/phpenv

docker

關於GCE上FPM image如何變更owner

CCC網站升級php 7.2.0囉,有Docker的環境,輕鬆搞定php升級, 在Linux上Image的變更還是有些注意事項您應該了解。 如果您跟我一樣透過docker將D-Laravel安裝於Linux的系統上,當您變更不同的image時, 或許您可能會碰到,疑!怎麼composer沒有權限寫入資料夾的錯誤。 directory is not writable

docker,phpenv

用光了Docker IPv4 address pool問題解法

可能在舊版的docker環境,使用Docker compose啟動容器時,會碰過下方的錯誤:

 Error response from daemon: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network這其實這是default-address-pools用光的症狀,有些環境,docker-compose預設會使用Class B的私有網路。172段的私有IP是有範圍的,從172.16.0.0到172.31.255.255。也就是說,當我們起動一個docker-compose的Project,就會吃掉一個Class B的私有段,非常豪邁,