memochou1993 / gpt-ai-assistant

OpenAI + LINE + Vercel = GPT AI Assistant
https://memochou1993.github.io/gpt-ai-assistant-docs/
MIT License
7.26k stars 9.37k forks source link

如何使用 GCP 進行部署 #202

Closed g07377 closed 1 year ago

g07377 commented 1 year ago

現在新版本,vercel很容易出現504超時的問題

查看常見問題裡寫的解決方法中有一個"使用虛擬專用伺服器進行部署"

於是找了一個免費的VPS

然後照著文件頁的#部署 這個說明做了並且成功運行之後似乎沒有解決504問題,不知道是不是我的操作有問題

不知道能否提供針對解決現在容易出現504超時的問題

如果不想付費訂閱vercel而是用虛擬專用伺服器的話如何操作的稍加詳細一點的說明

kindomLee commented 1 year ago

使用 docker 的話比較方便,可以嘗試將 vercel 的相關 env 參數去除,再將服務 exposing 給 line verify;

服務要對外使用(讓 line 能夠將使用者的訊息接入的端點)的話需要有相對應的域名或其他服務替代

memochou1993 commented 1 year ago

@g07377

如果你有 VPS 的話,可以使用 Docker 去部署,就不會有超時的問題。

修改相關環境變數,把 APP_API_TIMEOUT 設成長一點,然後把應用程式的端點(Webhook URL)設置到 LINE 平台即可。

文件:

https://memochou1993.github.io/gpt-ai-assistant-docs/deployment.html#使用-docker-容器

範例:

image

感謝 @kindomLee 補充。

g07377 commented 1 year ago

研究了很久弄了老半天都沒辦法用,最多只能讓他會出現已讀,不知道為什麼 ~

memochou1993 commented 1 year ago

@g07377

你的路徑有對嗎?預設是 /webhook

g07377 commented 1 year ago

我不是相關領域的人所以不太會用網址,在網路上找到一個用ngrok得到可以連接的網址,但是那個網址後面用/callback的話可以在LINE的網頁驗證成功,然後只會已讀,用/webhook的話是沒辦法驗證會跑出500錯誤,XD

memochou1993 commented 1 year ago

@g07377

也許你要更詳細地解釋你的步驟,我才能幫助你哦。

Ngrok 是用來在本地開發的工具,如果你已經有 VPS 了,只需要暴露端點即可。

g07377 commented 1 year ago

我是用google cloud的compute engine 做完docker的步驟之後 已經做到 image

(借範例圖用一下)

這個有出現 status有顯示up了 然後是要使用google cloud上面給的"外部IP"後面+上設定的port

https://(ip):3000/webhook 這樣直接用到LINE的URL上嗎 還是要從哪邊做"暴露端點"這個動作

主要是這個步驟不會

我直接用那個外部IP去給LINE驗證會顯示

An SSL connection error occurred. Confirm that your webhook URL uses HTTPS and has an SSL/TLS certificate issued by a root certification authority that's widely trusted by most browsers

memochou1993 commented 1 year ago

@g07377

以 Vercel 為範例來說,你可以在你的網址後面打上 /info 來檢查這個端點是否有打通。

https://my-ai-assistant.vercel.app/info

如果沒有,就需要打通來,通常 3000 port 不會任意被打開,可能是 80 port 之類的,這要檢查一下設定。

g07377 commented 1 year ago

我的IP連過去是可以顯示 {“currentVersion”:“4.2.0”,“latestVersion”:“4.3.0”} 這一串字的

但是不知道為什麼LINE那邊會顯示那個

memochou1993 commented 1 year ago

你的網址,有 HTTPS 嗎?

g07377 commented 1 year ago

有的

https://104.199.216.227:3000/ https://104.199.216.227:3000/info

memochou1993 commented 1 year ago

我連不到~沒有打通耶

https://104.199.216.227:3000/info

image
g07377 commented 1 year ago

我剛剛可以欸? 真奇怪 所以我是要更改port嗎 設3000好像是因為範例那邊的APPPORT=3000 從.env檔案改嗎@@

image image

memochou1993 commented 1 year ago

對,從 .env 改:

APP_DEBUG=true
APP_PORT=80

然後重建應用程式映像檔

g07377 commented 1 year ago

不知道為什麼改完之後變成拒絕連線了

kindomLee commented 1 year ago

你現在的 docker 狀態是怎麼樣; app_port 的設定是什麼,有生效嗎(shell 本地測試一下 curl http://localhost:<port>/info) 本地可以的話再來看外部是否生效 curl http://ip:<port>/info 都可以成功的話後面再轉成 https 去使用,是說上面的設定不是利用 ngrok 的測試所以 https 部分你可能要 survey 一下

g07377 commented 1 year ago

image

curl本地IP是返回Connection refused 不知道為什麼 是google cloud的問題嗎 我有設定防火牆規則把Port全開了...

memochou1993 commented 1 year ago

可以說明一下本地 IP 是指什麼嗎?

你不是直接測 GCP 上面的端點嗎?

g07377 commented 1 year ago

GCP上給的有內部IP跟外部IP

我是curl 內部IP 還是端點是指別的東西?

我又研究了一下 然後在VM機器上弄了一個Nginx的設定

現在docker容器port設443,Nginx的Port設80

然後在LINE的驗證那邊以 https://(gcp給的外部IP):80/webhook 做驗證的時後返回的提示是

An SSL connection error occurred. Confirm that your webhook URL uses HTTPS and has an SSL/TLS certificate issued by a root certification authority that's widely trusted by most browsers

似乎不能用Nginx這個方式暴露端點? 請問有建議甚麼方式來暴露端點嗎 直接拿gcp的外部IP連不管怎樣都連不上@@

memochou1993 commented 1 year ago

Docker 的 port 要設 80 喔!但是 443 和 80 都要開放。

然後端點指的是外部 IP 吧!

你可以用 Nginx 實驗 80 port 有沒有打通,但實際在跑專案的時候,不需要再包一層 Nginx 了,因為容器直接就是暴露 80 port。

從錯誤訊息來看,可能有通,但是 HTTPS 憑證有問題。

Terence0816 commented 1 year ago

好不容易 VMware 裝 Ubuntu ,再裝 Docker ,也搞出本地測試 IP:3000 顯示OK了 把3000 port 對應到到分享器也通了...

但因為網址沒有 https 只有 http 而以....... 就不知道怎麼辦了, line Webhook URL 無法添加.........

kindomLee commented 1 year ago

申請個免費域名 + NginxProxyManager, 可以解決

Terence0816 commented 1 year ago

謝謝分享,我再來研究看看~~

memochou1993 commented 1 year ago

我是用 Linode + Caddy 的方式部署,每個月是 5 塊美金。

大家可以參考看看。

tsu299 commented 1 year ago

不好意思, 我嘗試用docker去部署,直接連IP:port 跟用https反向代理都會顯示OK,網址帶info 會回傳{"currentVersion":"4.4.0","latestVersion":"4.4.0"},現在卡在/webhook都會顯示Cannot GET /webhook,請問是我哪邊沒設定正確嗎?

kindomLee commented 1 year ago

不好意思, 我嘗試用docker去部署,直接連IP:port 跟用https反向代理都會顯示OK,網址帶info 會回傳{"currentVersion":"4.4.0","latestVersion":"4.4.0"},現在卡在/webhook都會顯示Cannot GET /webhook,請問是我哪邊沒設定正確嗎?

/webhook 是給 line 打的端點,直接不帶參數去 call 是會出現 Cannot GET /webhook 沒錯

tsu299 commented 1 year ago

感謝回復,原來是我誤會了 但我現在設定URL到Messaging API上的URL上,Verify一直不通過,現在搞不清楚是我變數設定有問題,還是我反向代理有問題。

memochou1993 commented 1 year ago

Verify 按下去,顯示什麼?

tsu299 commented 1 year ago

The webhook returned an HTTP status code other than 200.(500 Internal Server Error)

memochou1993 commented 1 year ago

@tsu299

請查看容器裡的 logs 喔!

docker compose logs

貼一下!我也好奇!

tsu299 commented 1 year ago

docker compose logs

抱歉現在才看到回覆,我查看了log,錯誤內容如下: gpt-ai-assistant | error trying to parse config.timeout to int

memochou1993 commented 1 year ago

@tsu299

你的 .env 裡面,關於 timeout 的環境變數的值,有沒有正確!?

tsu299 commented 1 year ago

@tsu299

你的 .env 裡面,關於 timeout 的環境變數的值,有沒有正確!?

APP_API_TIMEOUT 這調是設置 9000 其他TIMEOUT變數沒有特別設定值

memochou1993 commented 1 year ago

@tsu299

APP_API_TIMEOUT 先設回空值看看?

tsu299 commented 1 year ago

@tsu299

APP_API_TIMEOUT 先設回空值看看?

改回空值跟將其他TIMEOUT補上值之後錯誤訊息都還是一樣。

kindomLee commented 1 year ago

直接不要設定該參數呢

tsu299 commented 1 year ago

我試過整個env 只設定這幾條但狀況一樣 APP_DEBUG=true APP_PORT=3000

VERCEL_PROJECT_NAME=gpt-ai-assistant VERCEL_ACCESS_TOKEN=

OPENAI_API_KEY=

LINE_CHANNEL_ACCESS_TOKEN= LINE_CHANNEL_SECRET=

kindomLee commented 1 year ago

不對阿,你不用 vercel 為什麼還放相關的兩個參數,我之前測試的時候,如果填寫完整就變成有使用到 vercel, 不填寫完整會一直重啟, 後面是將這兩個參數去除後正常,你可以試試看

tsu299 commented 1 year ago

我在設定的時候也很納悶... 但因為文件上用DOCKER部屬的教學上有寫到,所以我才照著填,我刪掉試試

memochou1993 commented 1 year ago

@kindomLee

阿,不過因為 timeout 預設是 9000,所以如果有用 VPS 的話,要調大一點,例如 60000 之類的。

只是我目前不曉得這個錯誤訊息是怎樣子。

memochou1993 commented 1 year ago

這邊上了一個 4.4.1 版,使用新的 model 後,原來是我忘了幫它加上 max_tokens 的參數。

所以它如果回很長的訊息回來時,就很容易超時。

雖然前陣子是真的變慢了,不過補上這個參數後,超時的情況會改善一點。

memochou1993 commented 1 year ago

@tsu299

如果我把 Axios 的 timeout 改成字串,就出現那條錯誤訊息了,所以我懷疑是環境變數有字串混進去了。

image
tsu299 commented 1 year ago

我更新成4.4.1後重新部屬一次就好了,感謝各位的耐心回答

jimmy8399 commented 1 year ago

我更新成4.4.1後重新部屬一次就好了,感謝各位的耐心回答

@tsu299 你好,方便的話手把手指導一下如何本地端開啟嗎? 我這邊環境是ubuntu的本地主機

tsu299 commented 1 year ago

你好,你想要從哪一個步驟開始教起? 或是可以加我的LINE,ID跟我githud帳號一樣

jimmy8399 commented 1 year ago

我照著https://memochou1993.github.io/gpt-ai-assistant-docs/development.html#使用代理伺服器 image 到了這邊他會卡在這邊不動 image

memochou1993 commented 1 year ago

@jimmy8399

卡住是正常的,代表伺服器啟動了!

memochou1993 commented 1 year ago

@g07377

有任何進展嗎?

g07377 commented 1 year ago

不知道是不是GCP的問題,我不管怎麼弄都會拒絕連線之類的,暫時放棄了~~謝謝你的教學QQ

memochou1993 commented 1 year ago

@g07377

有機會先用 GCP 架出一個 Nginx 網頁看看吧,如果 80 port 可以打通,那這個專案應該就沒問題了。

image

此票先關閉,很棒的討論。