---
title: 1209對話機器人(5/5)
tags: GCP, 筆記
---
# 1209 對話機器人(5/5)
一 開發環境本地集成 (pipenv+docker)
二 雲端虛擬機租用
三 heroku試行
電腦 套件統一 ->pipenv使用
## 套件管理的必要
python 套件管理工具
` pip install pipenv`

## 打開pycharm->新增專案->選pipenv->編譯器內有選到東西即可

## 用pipenv創建的專案裡,都會有pipfile(用來記錄安裝過的套件)

## 創python檔:demo_project->new->python file

### 命名檔案

### 在main.py輸入以下程式碼 會出現紅字 查看external libraries發現沒有安裝

### 至pipfile的『packages』輸入,再點擊右下方pipenv update
```
“line-bot-sdk" = "版本號(這邊先暫時打星號)"
```

### 若右下方沒出現,也可自行從從左下方叫出terminal也可,打上
```
pipenv update
```

### 安裝成功後,external libraries以可以查看到下載的linebot資料夾,這樣的方法就是在一個專業下安裝他要的套件

### 為了驗證,我們先關掉這個專案,重新創一個demo_project2來看看

### ㄧ樣創個main.py檔,打下程式碼,會發現剛剛安裝的套件部會這專案中,所以使用pipenv可以在專案中安裝要用的套件方便管理


:::danger
但是若作業系統不一樣 可能還是會遇到這邊能跑 另一編不能跑的問題 這也是為什麼在瀏覽器中使用的colab會興起 每個人都可以使用。
>colab較像數據專案在使用
>pycharm VS Code cloud shell 系統性開發
--------
“docker”以後可以去研究
pipenv+docker 一起搭配
:::
----
## GCP 操作加入VM instance
## 點選computer Engine

## create:VM instances(gcp把gce(Google Compute Engine)此服務加進專案內了只有最高管理員才能把各項服務加到專案內)

## create an instance
1. name:(不能更改不要亂取,因為機器可以用名字互相溝通->取公司未來會用代號)
2. region:區域選台灣(速度快/公司要求/選其他區域要額外收費,特別是跨區域連線)
3. labels:以後寄帳單有關
4. machine configuration:
* gereral-propse:
series:依照規格計價,越好越貴,這邊先選E2(E系列通常夠用)
* compute-optimized跟memory-optimized(記憶體優化)比較貴,先不碰,未來有需要可再研究

5. Book disk: 點選change 進入到下個頁面

### public images:
* operating system:這邊可以依照需求選擇:如deep learning. debian....
不要選windows 有版權很貴->這邊先選debian
* size(gb):先選15gb,磁碟選越大 越貴 雲服務如果服務不夠可以再加 不用一次買很多

### identity and API access:
* service account:選擇 no service account
* Firewall:勾選Alow HTTP traffic
往下點開 manage,security,disks...繼續設定

### management:
- Automation->Startup script(要安裝的東西:這邊名稱取為:cxcxc)
```
#!bin/bash
touch/tmp/cxcxc
```


## 開好機器->連到機器裡:這邊的external ip還沒設定所以回無法顯示

## 按下SSH連結

## 顯示剛剛創的cxcxc
## 輸入指令:
```
ls/tmp
```

## 這邊示範輸入指令安裝apache2:安裝完後 外人就可以連進網址
```
sudo apt-get install -y apache2
```

## 完成後 剛剛的外部網址就能連進apache網址了(未來可依照個人需求替換要連的東西)

## 輸入指令:訪問桶子 發現無法進入
我要訪問cloud storage,沒有辦法讀取 因為這邊還沒創bucket
```
gsutil ls
```

---
:::success
# 這邊重新示範 當成複習->
重新來創一個新的instances 並開啟 跟service account
:::
## 1. create instance

## 2. name 命名/region 選台灣/series:E2

## 3.若要更改容量 點change

要改作業系統也行 在自己選擇:選擇windows系列會貴 因為有版權

## 4. service account:這邊選之前創的專案(ai-demo-gcp)可以操作桶子如果沒有的話,則選compute engine default service account

## 創建完成後,按下SSH

## 輸入語法:
```
gsutil ls
```

## 跟一開始創建的案例比較,由於最新創建的vm中,有設定service account,所以是看的到桶子內的東西的

## 示範完後 先刪除

未來想了解更多 關鍵字:
* IAP
* GCE防火牆設定
------
# 啟用GAE
## 1. 點App Engine

## 2.啟動cloud shell

## 3. 輸入以下程式碼(下載官方教材)google把程式碼都放在github上)
```
git clone https://github.com/GoogleCloudPlatform/python-docs-samples/
```
* [GoogleCloudPlatform/python-docs-samples: Code samples used on cloud.google.com](https://github.com/GoogleCloudPlatform/python-docs-samples/)

# 下載完程式碼後,要切換到教材的資料夾
## 輸入ls

## 輸入cd python-docs-samples/
```
cd python-docs-samples/
```

## 輸入cd appengine/
```
cd appengine/
```
## 輸入cd standard_python3/
```
cd standard_python3/
```
## 輸入cd custom-server/
```
cd custom-server/
```
## 都輸入完後 按開啟編輯器

## 找到customer-server檔案

## 按下 open as workspace

## 這邊可以查看原始碼,找到.theia資料夾

## 按下 open as workspace

## 打開終端機->輸入gcloud app deploy --appyaml app.yaml:gcloud 部署一個app從yaml檔
```
gcloud app deploy --appyaml app.yaml
```

## Yes!

## 跑完後 將圖中網址複製到網頁上

## 就能跑出一個網頁了(gcloud幫你部署成功了!)

## 與機器人連結:要更改
* main. py/
* requirements.txt/
## 開啟編輯器:開啟後往上拉

## ->在requirement.txt檔中輸入line-bot-sdk

## file選擇自動儲存:auto-save

## main.py 圖中橘框保留,紅框刪除,並在紅框中貼上以下程式碼

```
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
app = Flask(__name__)
line_bot_api = LineBotApi('這邊要改YOUR_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('這邊要改YOUR_CHANNEL_SECRET')
@app.route("/callback", methods=['POST'])
def callback():
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature']
# get request body as text
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
print("Invalid signature. Please check your channel access token/channel secret.")
abort(400)
return 'OK'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text))
```
* [line/line-bot-sdk-python: LINE Messaging API SDK for Python](https://github.com/line/line-bot-sdk-python)
## 更改自己的channel_access_token&channel_secret

## 開啟終端機(確認已完成main.py更新程式碼/requirement.txt輸入line-bot sdk)

## 再次部署,輸入以下程式碼
```
gcloud app deploy --appyaml app.yaml
```

## 完成後,找到產生的網址,並加上"/callback"貼回line的webhook url


-----
補充
雲原生 cloud native
* 專案預設是不能執行任何服務
所以每次都要enable加入東西
member service_account (gmail邀請進入專案)
操作資源只有管理者role的概念
* service_account可以生成key
或是直接配gce_service _account 操作cloud storage就不用key
* cloud storage有bucket
調整權限 精細跟統一
預設是不公開
* gce虛擬機 :可以放上程式碼
變成application 如果沒有做額外處理是http 後面學長會教
* gae把程式碼給他去生成https連結 用戶可以直接用
----
相關資訊:
* [MySQL · Google Cloud Platform(GCP) 學習筆記](https://kejyuntw.gitbooks.io/google-cloud-platform-learning-notes/content/google-cloud-sql/mysql/google-cloud-sql-mysql-README.html)
# END