---
# System prepended metadata

title: 1209對話機器人(5/5)
tags: [' 筆記', GCP]

---

---
title: 1209對話機器人(5/5)
tags: GCP, 筆記
---

# 1209 對話機器人(5/5)
一 開發環境本地集成 (pipenv+docker)
二 雲端虛擬機租用
三 heroku試行

電腦 套件統一 ->pipenv使用



## 套件管理的必要
python 套件管理工具

` pip install pipenv`

![](https://i.imgur.com/o7okFBP.png)


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

![](https://i.imgur.com/JLC3oao.png)

## 用pipenv創建的專案裡，都會有pipfile(用來記錄安裝過的套件)
![](https://i.imgur.com/BlTx2vR.png)

## 創python檔：demo_project->new->python file
![](https://i.imgur.com/gTmqH6I.png)

### 命名檔案
![](https://i.imgur.com/WBjtNYo.png)

### 在main.py輸入以下程式碼 會出現紅字 查看external libraries發現沒有安裝
![](https://i.imgur.com/MeEa6jq.png)
### 至pipfile的『packages』輸入，再點擊右下方pipenv update 
```
“line-bot-sdk" = "版本號（這邊先暫時打星號）"
```

![](https://i.imgur.com/XAyrk8t.png)


### 若右下方沒出現，也可自行從從左下方叫出terminal也可，打上
```
pipenv update
```
![](https://i.imgur.com/rvhNvfq.png)

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


![](https://i.imgur.com/E4nZHwI.png)

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

![](https://i.imgur.com/7oBNdU5.png)
### ㄧ樣創個main.py檔，打下程式碼，會發現剛剛安裝的套件部會這專案中，所以使用pipenv可以在專案中安裝要用的套件方便管理
![](https://i.imgur.com/KGMlKaL.png)
![](https://i.imgur.com/DkTsLOJ.png)

:::danger
但是若作業系統不一樣 可能還是會遇到這邊能跑 另一編不能跑的問題 這也是為什麼在瀏覽器中使用的colab會興起 每個人都可以使用。

>colab較像數據專案在使用
>pycharm VS Code cloud shell 系統性開發

--------
“docker”以後可以去研究
pipenv+docker 一起搭配 
:::

----
## GCP 操作加入VM instance
## 點選computer Engine

![](https://i.imgur.com/aCNfgv7.png)

## create：VM instances(gcp把gce(Google Compute Engine)此服務加進專案內了只有最高管理員才能把各項服務加到專案內）
![](https://i.imgur.com/M4ateq7.png)

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

![](https://i.imgur.com/CJHyYpZ.png)

5. Book disk: 點選change 進入到下個頁面
![](https://i.imgur.com/7bJh1oz.png)

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

### identity and API access:
* service account:選擇 no service account
* Firewall:勾選Alow HTTP traffic

往下點開 manage,security,disks...繼續設定
![](https://i.imgur.com/ZmgBxR6.png)

### management:
- Automation->Startup script(要安裝的東西：這邊名稱取為:cxcxc)
```
#!bin/bash
touch/tmp/cxcxc
```
![](https://i.imgur.com/O4AEgL7.png)

![](https://i.imgur.com/34oFfko.png)



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

![](https://i.imgur.com/iqjCuRy.png)

## 按下SSH連結
![](https://i.imgur.com/BGC8IFs.png)

## 顯示剛剛創的cxcxc
## 輸入指令：
```
ls/tmp
```
![](https://i.imgur.com/z0PCgMM.png)


## 這邊示範輸入指令安裝apache2：安裝完後 外人就可以連進網址

```
sudo apt-get install -y apache2
```

![](https://i.imgur.com/ukrv4vx.png)

## 完成後 剛剛的外部網址就能連進apache網址了（未來可依照個人需求替換要連的東西）
![](https://i.imgur.com/aIjhDpZ.png)

 

## 輸入指令:訪問桶子 發現無法進入 
我要訪問cloud storage，沒有辦法讀取 因為這邊還沒創bucket
```
gsutil ls
```
![](https://i.imgur.com/RpNZA9E.png)


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


## 1. create instance 
![](https://i.imgur.com/8HmJDcJ.png)



## 2. name 命名/region 選台灣/series:E2
![](https://i.imgur.com/v8vxJla.png)

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

![](https://i.imgur.com/zyOucso.png)

要改作業系統也行 在自己選擇：選擇windows系列會貴 因為有版權
![](https://i.imgur.com/6c5GVRm.png)

## 4. service account:這邊選之前創的專案(ai-demo-gcp)可以操作桶子如果沒有的話，則選compute engine default service account
![](https://i.imgur.com/mLJRbds.png)

## 創建完成後，按下SSH
![](https://i.imgur.com/zkfGDx6.png)
## 輸入語法：
```
gsutil ls
```
![](https://i.imgur.com/xqXMoXj.png)

## 跟一開始創建的案例比較，由於最新創建的vm中，有設定service account，所以是看的到桶子內的東西的
![](https://i.imgur.com/DpDEJeC.png)

## 示範完後 先刪除
![](https://i.imgur.com/WRS4L5s.png)


未來想了解更多 關鍵字：
* IAP
* GCE防火牆設定

------

# 啟用GAE
## 1. 點App Engine
![](https://i.imgur.com/jwy84ZB.png)

## 2.啟動cloud shell
![](https://i.imgur.com/61lEm2V.png)

## 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/)

![](https://i.imgur.com/MV95d6n.png)

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

![](https://i.imgur.com/WwE8CPp.png)

## 輸入cd python-docs-samples/
```
cd python-docs-samples/
```
![](https://i.imgur.com/a4btWvb.png)

## 輸入cd appengine/
```
cd appengine/
```
## 輸入cd standard_python3/
```
cd standard_python3/
```
## 輸入cd custom-server/
```
cd custom-server/
```
## 都輸入完後 按開啟編輯器
![](https://i.imgur.com/KfJVxBr.png)
## 找到customer-server檔案
![](https://i.imgur.com/kxmyqqw.png)

## 按下 open as workspace
![](https://i.imgur.com/t46XIy1.png)

## 這邊可以查看原始碼，找到.theia資料夾
![](https://i.imgur.com/Io4pZdd.png)
## 按下 open as workspace
![](https://i.imgur.com/Xia6Ezn.png)



## 打開終端機->輸入gcloud app deploy --appyaml app.yaml:gcloud 部署一個app從yaml檔
```
gcloud app deploy --appyaml app.yaml
```
![](https://i.imgur.com/gPGWvZq.png)

## Yes!
![](https://i.imgur.com/2WeJW4M.png)
## 跑完後 將圖中網址複製到網頁上
![](https://i.imgur.com/Qk6Mh6O.png)
## 就能跑出一個網頁了（gcloud幫你部署成功了！）
![](https://i.imgur.com/f0ua8EB.png)


## 與機器人連結:要更改
* main. py/ 
* requirements.txt/ 


## 開啟編輯器：開啟後往上拉

![](https://i.imgur.com/81Vzq3B.png)
## ->在requirement.txt檔中輸入line-bot-sdk

![](https://i.imgur.com/BuGBg5K.png)

## file選擇自動儲存:auto-save
![](https://i.imgur.com/K6KJUzX.png)

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

![](https://i.imgur.com/jC7tQoU.png)


```
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

![](https://i.imgur.com/VQuZkRB.png)
## 開啟終端機（確認已完成main.py更新程式碼/requirement.txt輸入line-bot sdk)
![](https://i.imgur.com/G7lLgSg.png)


## 再次部署，輸入以下程式碼
```
gcloud app deploy --appyaml app.yaml
```
![](https://i.imgur.com/oVEID6N.png)
## 完成後，找到產生的網址，並加上"/callback"貼回line的webhook url
![](https://i.imgur.com/azCfTQ9.png)

![](https://i.imgur.com/asril4Z.png)


-----

補充
雲原生 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