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

需要登入才可留言!

類似的文章


docker

聞聊我的網路的演變史

聞聊我的網路的演變史。 我的GCP,每月要$46.35美元,目前免費試用餘額還剩$111.05美元, $300元差不多快被我花光了,差不多要搬回自管理的主機了。

docker

D-Laravel上.env及docker-compsoe小教室

本文介紹,當我們使用D-Laravel的.env載入多個yml檔時,為何docker-compose ps官方指令無法列出所有使用中的服務。 但在D-Laravel上的./console ps確能正常顯示,那官方的docker-compose指令因如何使用才能有相同的效果呢?

docker,laravel

如何使用多個YAML檔,執行多個docker的container服務

這個影片介紹如何用docker-compose命令,指定多個YAML結構語言設定檔,來建立容器的執行,並且介紹在D-Laravel的使用環境中,我們如何透過使用.env的方式,簡化docker-compose的啟動命令。