2018年10月5日 星期五

GCP 刪除用不到的VM

筆者在之前測試LINE messaging API是採用GCP架設server, 架設時是參考GCP Always Free方案內容架設, 但要是用不到的話還是趕緊關閉掉避免浪費資源吧

GCP Always Free


GCP Always Free在以下的限制下免費(詳情請看參考資料)

  • 每月 1 個 f1-micro 執行個體 (僅限美國地區,不含北維吉尼亞)
  • 每月平均 30 GB 硬碟空間、每月平均 5 GB 快照
  • 每月 1 GB 網路輸出量 (從北美輸出至中國和澳洲以外的所有區域目的地)

取消靜態IP


之前架設服務時為綁定domain, 筆者將外部IP設定為靜態IP, 但等等刪除VM後靜態IP就不會綁定在VM上, GCP會針對未使用的IP進行收費避免浪費IP的情況
參考:  Google Compute Engine 定價 中的「未使用的 IP 位址價格」
  1. 開啟「VM執行個體」頁面
  2. 進入準備刪除的VM
  3. 點擊右上角的編輯按鈕
  4. 點擊網路介面
  5. 將外部IP改為「無」或是「臨時」, 此時會看到下方警告說未使用的靜態IP會收費, 接著點擊最下方的「儲存」
  6. 開啟「VPC網路」下的「外部IP位址」
  7. 勾選原來的靜態IP後點擊「釋放靜態位址」, 接著按下「確定」後即可釋放

刪除VM


  1. 回到VM執行個體
  2. 勾選要刪除的VM, 接著按下右上角的刪除
  3. 點擊「刪除」按鍵
  4. 等待一段時間後VM就會被完全刪除

參考資料

2018年10月4日 星期四

LINE BOT 匯率提醒機器人(3/3) - 實作匯率提醒機器人

前情提要


前一篇文章 LINE BOT 匯率提醒機器人(2/3) - 使用GCP架設HTTPS server 完成後現在可以用HTTPS和domain name連接上server, 接著就來串接LINE messaging API完成自動推播功能吧

開發重點

  1. 使用GCP服務中的GCE(Google Compute Engine)建立一台Linux server
  2. 使用GCE服務架設網站server, 網站server使用Apache架設
  3. 加入HTTPS支援 - 使用Let’s Encrypt免費SSL憑證
  4. 註冊LINE developers, 並申請LINE messaging API
  5. 使用PHP + SQLite實作LINE Bot傳送匯率到LINE群組的頻道上

實作匯率提醒機器人 - 申請LINE messaging API


實作LINE定期推播訊息給群組前, 先讓我們要先完成LINE messaging API申請與相關設定
  1. 登入LINE developers網站
  2. 完成第一次申請的步驟, 此步驟請照LINE developers網站提示完成, 完成後即可進入以下的console頁面
  3. 點擊右上方的Create New Provider進入建立provider頁面
  4. 根據需求寫上provider後點選confirm和create

  5. 接下來點擊右下的Create Channel
  6. 填入App name, App description, Plan選取Developer Trial, Category和Subcategory照需求自己選, 最後再寫上email後即可送出confirm

  7. 接著將最下方的LINE@ Terms of Use和Messaging Terms of Use打勾後再按下Create完成
  8. 建立完成後可以看到剛剛輸入的chanel出現在畫面上
  9. 點擊剛建立好的channel
  10. 找到Allow bot to join group chats並按下edit, 改為enable後按下update

  11. 找到QR code, 使用手機上的LINE掃描QR code將機器人加入好友

  12. 加入好友後會跳出歡迎訊息
  13. 接下來找到Channel access token並點擊issue取得access token

    注意: access token是LINE用來認證的資料, 請勿外流出去
  14. 將 LINE BOT 匯率提醒機器人(2/3) - 使用GCP架設HTTPS server 中使用到的domain name後端加上/recv.php輸入到webhooks上, 例如 https://linebottest.alenshiun.tw/recv.php
    LINE會在機器人被加入好友、加入群組、封鎖等等時傳送個訊息到webhooks上

實作匯率提醒機器人 - 架站目標!


申請完LINE messaging API後即可開始架設網站, 架設目標如下

  1. 當LINE機器人被加入群組時, 網站會收到由LINE官方送來的通知
  2. 收到LINE官方的通知後將辨識群組用的唯一識別碼存進資料庫
  3. Linux server向政府開放的open data取得匯率資訊
  4. 將匯率資訊推播給資料庫中紀錄的全部群組
  5. 每天上午10:00重複步驟3~4
為達到以上目標, 筆者採用PHP + SQLite開發匯率機器人

 實作匯率提醒機器人 - 安裝PHP與SQLite


首先來安裝PHP和SQLite
  1. 更新apt套件資訊
    shiun@instance-1:$ sudo apt-get update
  2. 安裝PHP
    shiun@instance-1:$ sudo apt-get install php
  3. 安裝PHP apache模組
    shiun@instance-1:$ sudo apt-get install libapache2-mod-php
  4. 安裝SQLite指令程式
    shiun@instance-1:$ sudo apt-get install sqlite
  5. 重新啟動apache
    shiun@instance-1:$ sudo service apache2 restart
  6. 檢查php是否能正常運作
    shiun@instance-1:$ sudo vi /var/www/linebottest/web/info.php # 加入以下內容 <?php phpinfo(); ?>
    使用瀏覽器開網頁確定是不是出現PHP資訊頁面, 有看到下圖頁面就是PHP啟動成功
  7. 確認能正常運作後刪除info.php避免PHP資訊外洩
    shiun@instance-1:$ sudo rm /var/www/linebottest/web/info.php

實作匯率提醒機器人 - 安裝相依套件


匯率機器人會使用到許多現成網路上的套件, 請先安裝好這些套件
  1. composer: PHP相依套件管理程式
    shiun@instance-1:$ sudo apt-get install composer
  2. libfreetype6-dev, php-image-text: 繪圖套件, 畫折線圖會用到
    shiun@instance-1:$ sudo apt-get install libfreetype6-dev shiun@instance-1:$ sudo apt-get install php-image-text
  3. php-sqlite3: PHP專用的SQLite套件
    shiun@instance-1:$ sudo apt-get install php-sqlite3
  4. php-xml: PHP的xml parser套件
    shiun@instance-1:$ sudo apt-get install php-xml
  5. php-mbstring: PHP多國語言字串處理套件
    shiun@instance-1:$ sudo apt-get install php-mbstring
  6. php-curl: PHP進行HTTP/HTTPS連線用套件
    shiun@instance-1:$ sudo apt-get install php-curl

實作匯率提醒機器人 - 匯率機器人專案程式建置

  1. 從GitHub上clone一份LINE BOT專案, 專案名稱為foreignEX
    shiun@instance-1:$ https://github.com/AlenShiun/ForeignEX
  2. 將原先的linebottest資料夾整個刪除, 接著把專案檔改名並複製到linebottest原先的位置
    shiun@instance-1:$ sudo rm -rf /var/www/linebottest shiun@instance-1:$ sudo mv ForeignEX /var/www/linebottest
  3. 安裝專案相依套件
    shiun@instance-1:$ cd /var/www/linebottest/ shiun@instance-1:$ composer install
  4. 設定LINE access token, access token為「申請LINE messaging API」步驟中取得的access token
    shiun@instance-1:$ cd /var/www/linebottest/ shiun@instance-1:/var/www/linebottest$ sudo vi config.php #找到access token並修改 // LINE message API access token define("LINE_MESSAGE_API_ACCESS_TOKEN", 'Sm6xxxxxxx ...... xxxxxxxxxxxxxxlFU=');
  5. 回到LINE messaging API channel, 點擊verify驗證LINE是不是可連線上此webhooks

    驗證成功會顯示上圖中的 Success 訊息
  6. 設定折線圖存取用的URL
    shiun@instance-1:$ cd /var/www/linebottest/ shiun@instance-1:/var/www/linebottest$ sudo vi config.php #找到IMAGE_HTTP_PATH_BASE_RATE並修改 // HTTP URL for image files of chart define('IMAGE_HTTP_PATH_BASE_RATE', "https://linebottest.alenshiun.tw/pic");
  7. 修改資料夾權限, 讓匯率機器人可以存取資料庫和log資料夾
    shiun@instance-1:$ cd /var/www/linebottest/ shiun@instance-1:/var/www/linebottest$ sudo chown -R www-data:www-data db shiun@instance-1:/var/www/linebottest$ sudo chmod -R 755 db shiun@instance-1:/var/www/linebottest$ sudo chown -R www-data:www-data log shiun@instance-1:/var/www/linebottest$ sudo chmod -R 755 log
    修改後結果如下 shiun@instance-1:/var/www/linebottest$ ls -l total 56 -rw-r--r-- 1 shiun shiun 2381 Oct 4 07:57 chartGenerator.php -rw-r--r-- 1 shiun shiun 71 Oct 4 07:57 composer.json -rw-r--r-- 1 shiun shiun 3986 Oct 4 07:57 composer.lock -rw-r--r-- 1 shiun shiun 765 Oct 4 07:59 config.php -rw-r--r-- 1 shiun shiun 2862 Oct 4 07:57 dao.php drwxr-xr-x 2 www-data www-data 4096 Oct 4 08:00 db drwxr-xr-x 3 shiun shiun 4096 Oct 4 07:58 libs drwxr-xr-x 2 www-data www-data 4096 Oct 4 08:00 log -rw-r--r-- 1 shiun shiun 1024 Oct 4 07:57 parser.php -rw-r--r-- 1 shiun shiun 1120 Oct 4 07:57 README.md -rw-r--r-- 1 shiun shiun 1495 Oct 4 07:57 sender.php drwxrwxr-x 4 shiun shiun 4096 Oct 4 07:59 vendor drwxr-xr-x 3 shiun shiun 4096 Oct 4 08:00 web -rw-r--r-- 1 shiun shiun 1754 Oct 4 07:57 worker.php
  8. 在LINE上建立群組, 將匯率機器人加入群組
  9. 檢查資料庫是否有記錄到群組的唯一識別碼
    shiun@instance-1:$ cd /var/www/linebottest/ shiun@instance-1:/var/www/linebottest$ sqlite3 db/db.sqlite SQLite version 3.11.0 2016-02-15 17:29:24 Enter ".help" for usage hints. #輸入.tables, 出現的target代表資料表table有存在 sqlite> .tables target #輸入SELECT * FROM target; sqlite> SELECT * FROM target; #sqlite指令會列出資料表target下所有的資訊 #以下列為例, 在2018-10-04的8:17分機器人偵測到被加入群組, 群組ID為C0xxxxxxe2b 2|C0xxxxxxe2b|FOREIGN_EX_DB_TYPE_GROUP|2018-10-04 08:17:14| #按下ctrl+d離開sqlite指令功能 sqlite>
  10. 執行worker.php, 執行成功後群組會收到匯率資訊
    shiun@instance-1:$ cd /var/www/linebottest/ shiun@instance-1:/var/www/linebottest$ php worker.php LINE message API response: {}
  11. 設定crontab讓Linux定期執行worker.php
    shiun@instance-1:$ sudo vi /etc/crontab #在最後一行加入以下內容 00 2 * * * root   php /var/www/linebottest/worker.php
    每到UTC時間2:00(台灣時間10:00)Linux會自動啟動worker.php去寄送匯率資料給群組
  12. 等待到crontab指定的時間看是否能正常收到匯率資訊
  13. 收工~

後記

  1. GitHub上的專案是採用政府open data的匯率資訊所以並不會有當天資料, 讀者可以自行準備爬蟲去爬銀行網站抓到最新的資料
    簡單的爬蟲可以用php-html-parser處理DOM物件來做到
  2. GCE的VM預設會採用UTC+0的時間, 若使用台灣時間請自行+8小時, 或是自行研究怎麼修改GCE的時區

參考資料


2018年10月3日 星期三

LINE BOT 匯率提醒機器人(2/3) - 使用GCP架設HTTPS server

前情提要


前一篇文章 LINE BOT 匯率提醒機器人(1/3) - 使用GCP架設Linux server 說明如何使用GCP架設一台Linux server, 但是LINE BOT是需要透過HTTPS協定進行資料傳輸的, 本篇將說明怎麼架設HTTPS server

開發重點

  1. 使用GCP服務中的GCE(Google Compute Engine)建立一台Linux server
  2. 使用GCE服務架設網站server, 網站server使用Apache架設
  3. 加入HTTPS支援 - 使用Let’s Encrypt免費SSL憑證
  4. 註冊LINE developers, 並申請LINE messaging API
  5. 使用PHP + SQLite實作LINE Bot傳送匯率到LINE群組的頻道上

使用GCP架設HTTPS server - GCP & GCE固定IP設定


由於LINE BOT需要透過IP與Linux server連線, 但GCP建立出來的GCE預設是採用浮動IP設計會造成些麻煩, 因此我們先將浮動IP改為固定IP
  1. 開啟「VPC網路」中的「外部IP位置」
  2. 將instance-1使用到的IP由臨時改為靜態

  3. 設定完成, 收工~

使用GCP架設HTTPS server - 準備domain name


此處筆者使用過去在GoDaddy購買的DNS服務設定對應的domain name, 請讀者自行根據自己的DNS廠商提供的方式設定DNS type A對應到固定IP
  1. 將DNS type A對應到固定IP

  2. Ping domain name看看, 看是否能正常ping到
  3. 收工~ 之後不需要再用IP進行連線, 只要用domain name連線即可
注意: DNS設定完後不一定馬上生效, 適情況可能會需要等待30min以上

使用GCP架設HTTPS server - HTTP服務架設


固定IP與domain name準備好後即可開始架設HTTP伺服器, 此處以apache為範例進行架設
  1. 連線到Linux server
    #使用ssh連線到Linux server shiun@Shiun:~$ ssh shiun@linebottest.alenshiun.tw The authenticity of host 'linebottest.alenshiun.tw (35.237.204.103)' can't be established. ECDSA key fingerprint is SHA256:gUSzeVS5z+RYQeJKtFQDX45EF5sGmIek7jMP6SXTNaM. # 回答yes Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'linebottest.alenshiun.tw' (ECDSA) to the list of known hosts. Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.15.0-1021-gcp x86_64) ... ... Last login: Wed Oct 3 14:23:39 2018 from 118.167.72.55 shiun@instance-1:~$
  2. 更新apt-get的套件資訊, 確保等等下載的套件為最新套件
    #更新apt-get資訊 shiun@instance-1:~$ sudo apt-get update
  3. 使用apt-get進行Ubuntu套件更新
    #進行upgrade shiun@instance-1:~$ sudo apt-get upgrade #upgrade結束後執行dist-upgrade shiun@instance-1:~$ sudo apt-get dist-upgrade
  4. 重開機, 確保重開機後機器不會掛掉............... (筆者過去中招太多次.........
    shiun@instance-1:~$ sudo reboot
  5. 下載apache套件
    shiun@instance-1:~$ sudo apt-get install apache2 Reading package lists... Done Building dependency tree ... ... ... #請輸入y Do you want to continue? [Y/n] y ... ... ...
  6. 使用瀏覽器檢查 http://linebottest.alenshiun.tw (請換成讀者的網址)是否能連線成功

使用GCP架設HTTPS server - 設定HTTP server


HTTP服務架設完後我們會看到上圖的Apache2 Ubuntu Default Page代表架設成功, 但是實務上我們會讓domain name連結到專案的網頁, 因此我們需要改變一下apache的設定
當使用者在網址上輸入 http://linebottest.alenshiun.tw 時會被導向一個顯示以下訊息的頁面

LINE BOT TEST Work!
  1. 建立專案的網頁目錄/var/www/linebottest/web
    shiun@instance-1:~$ sudo mkdir -p /var/www/linebottest/web
  2. 移動到專案的網頁目錄/var/www/linebottest/web
    shiun@instance-1:~$ cd /var/www/linebottest/web
  3. 建立預設頁面index.html
    shiun@instance-1:/var/www/linebottest/web$ sudo vi index.html #輸入LINE BOT TEST Work!並存檔離開 LINE BOT TEST Work!
  4. 移動到apache設定目錄/etc/apache2/sites-available
    shiun@instance-1:~$ cd /etc/apache2/sites-available/
  5. 新增linebottest.conf, 檔案內容如下
    shiun@instance-1:/etc/apache2/sites-available$ sudo vi linebottest.conf <VirtualHost *:80> ServerName linebottest.alenshiun.tw ServerAdmin webmaster@localhost DocumentRoot /var/www/linebottest/web <Directory /var/www/linebottest/web> Options FollowSymLinks Order allow,deny Allow from all AllowOverride all </Directory> </VirtualHost>
  6. 建立/etc/apache2/sites-available/linebottest.conf到/etc/apache2/sites-enabled的連結(捷徑)
    shiun@instance-1:$ sudo ln -s /etc/apache2/sites-available/linebottest.conf \ /etc/apache2/sites-enabled/linebottest.conf
  7. 檢查連結(捷徑)是否建立成功
    shiun@instance-1:/etc/apache2/sites-available$ ls -l /etc/apache2/sites-enabled/ total 0 lrwxrwxrwx 1 root root 35 Oct 3 04:44 000-default.conf -&gt ../sites-available/000-default.conf lrwxrwxrwx 1 root root 45 Oct 3 14:58 linebottest.conf -&gt /etc/apache2/sites-available/linebottest.conf # 建立連結成功的話就會顯示此行: linebottest.conf -&gt /etc/apache2/sites-available/linebottest.conf
  8. 重新啟動apache
    shiun@instance-1:$ sudo service apache2 restart
  9. 使用瀏覽器檢查 http://linebottest.alenshiun.tw , 顯示結果應如下圖所示

使用GCP架設HTTPS server - 設定HTTPS


為什麼會需要開啟HTTPS?

  • 傳輸有加密保證
  • 確認傳輸的目的地是合法而不是被偽造的
  • 由於LINE BOT使用到的LINE message API限制連線一定要是HTTPS

因此我們需要開啟HTTPS功能, Apache上提供SSL憑證設定功能, 我們只需要取得SSL憑證並設定上去即可

但是, 過去SSL憑證是必需要花錢買, 且價格不斐, 但近年來有個組職名為Let’s Encrypt提供免費的SSL憑證, 我們透過安裝Let’s Encrypt的憑證啟動HTTPS服務

注意: Let’s Encrypt會檢查domain name對應到的HTTP必須在80 port, HTTPS必須在443 port, 如果讀者是自訂port的請先改回80和443完成驗證後再進行port自訂

  1. 安裝Let’s Encrypt Apache SSL憑證安裝程式相依套件
    shiun@instance-1:$ sudo apt-get install software-properties-common shiun@instance-1:$ sudo add-apt-repository ppa:certbot/certbot This is the PPA for packages prepared by Debian Let's Encrypt Team and backported for Ubuntu(s). More info: https://launchpad.net/~certbot/+archive/ubuntu/certbot #直接點擊鍵盤上的enter Press [ENTER] to continue or ctrl-c to cancel adding it gpg: keyring `/tmp/tmpqf0n3wow/secring.gpg' created gpg: keyring `/tmp/tmpqf0n3wow/pubring.gpg' created gpg: requesting key 75BCA694 from hkp server keyserver.ubuntu.com gpg: /tmp/tmpqf0n3wow/trustdb.gpg: trustdb created gpg: key 75BCA694: public key "Launchpad PPA for certbot" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) OK shiun@instance-1:$ sudo apt-get update
  2. 安裝Let’s Encrypt Apache SSL憑證安裝程式
    shiun@instance-1:$ sudo apt-get install python-certbot-apache
  3. 執行Let’s Encrypt Apache SSL憑證安裝程式
    shiun@instance-1:$ sudo certbot --apache Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache # 請輸入你的email Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): your_email@your_email.com Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # 輸入A (A)gree/(C)ancel: A - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # 輸入N (Y)es/(N)o: Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: linebottest.alenshiun.tw - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input # 選擇你的domain name, 正常情況下certbot會自動抓到正確的domain name blank to select all options shown (Enter 'c' to cancel): 1 Obtaining a new certificate Performing the following challenges: http-01 challenge for linebottest.alenshiun.tw Enabled Apache rewrite module Waiting for verification... Cleaning up challenges Created an SSL vhost at /etc/apache2/sites-available/linebottest-le-ssl.conf Enabled Apache socache_shmcb module Enabled Apache ssl module Deploying Certificate to VirtualHost /etc/apache2/sites-available/linebottest-le-ssl.conf Enabling available site: /etc/apache2/sites-available/linebottest-le-ssl.conf Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # 輸入2, 我們要強制把HTTP自動導向到HTTPS Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 Enabled Apache rewrite module Redirecting vhost in /etc/apache2/sites-enabled/linebottest.conf to ssl vhost in /etc/apache2/sites-available/linebottest-le-ssl.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://linebottest.alenshiun.tw You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=linebottest.alenshiun.tw - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/linebottest.alenshiun.tw/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/linebottest.alenshiun.tw/privkey.pem Your cert will expire on 2019-01-01. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
  4. 使用瀏覽器檢查 http://linebottest.alenshiun.tw , 設定成功的話瀏覽器會自動導向https://linebottest.alenshiun.tw
以上步驟都結束後HTTPS server架設完成

參考資料

  1. LINE BOT 匯率提醒機器人(1/3) - 使用GCP架設Linux server

LINE BOT 匯率提醒機器人(1/3) - 使用GCP架設Linux server

最近開始準備去日本的滑雪計畫, 考慮到滑雪行程會用到不少日幣, 但是又很懶的每天開銀行網站看, 那就乾脆來寫個機器人每天早上自動推播今日匯率吧

事前準備

  • 網站server一台
    必須要有固定IP且可由Internet連結進來, 若讀者自有server, 可直接跳到LINE BOT 匯率提醒機器人(2/3)
    筆者這邊由於預算有限, 這次用GCP(Google Cloud Platform) Always Free方案架站(限定狀況下免費!)
  • Domain name
    可以找各大DNS廠商購買, 筆者是用過去在GoDaddy買的domain name處理。沒有domain name的人可以Google找找免費的DNS來用
  • SSH連線軟體
    筆者使用macOS內建的ssh指令連線到GCP上, Windows上的話首推應該就Putty
注意: Always Free方案有區域、硬碟空間、網路流量和其他..., 等限制, 目前(2018/10/3)使用是有機會免費, 但使用前請一定要自行確認是否符合Always Free, 若被收費筆者一概不負任何責任......。 詳細請參考 一律免費用量限制


開發重點

  1. 使用GCP服務中的GCE(Google Compute Engine)建立一台Linux server
  2. 使用GCE服務架設網站server
  3. 加入HTTPS支援 - 使用Let’s Encrypt免費SSL憑證
  4. 註冊LINE developers, 並申請LINE messaging API
  5. 實作LINE Bot傳送匯率到LINE群組的頻道上

GCP架設Linux server - 在GCP上建立新專案

  1. 使用Google帳號開通GCP服務, 此步驟請跟著GCP網頁的提示申請, 最後綁定完信用卡後即可進入GCP的控制頁面(如下圖)
  2. 點擊畫面上的「選取專案」後接著點選右上角的「新增專案」

  3. 填寫專案名稱, 接著會看到右上角的通知(下圖中紅框有數字的地方)提示正在建立專案

  4. 中場休息, GCP建立專案會需要一點時間

GCP架設Linux server - 在GCE上建立VM

  1. 再次點擊「選取專案」, 並選擇剛剛建立的專案
  2. 建立VM執行個體, 這邊建立的VM就如同用VirtualBox, VirtualPC或VMWare建立出來的VM一樣, 可以當作一台電腦主機來看待
  3. 中場休息, GCP啟動Google Computer Engine(GCE)需要些時間, 可去喝杯茶小憩片刻
  4. 點選下圖的「建立」並在各個欄位中填上與下圖相同的設定



    注意: 根據目前的Always Free方案限制, 區域請一定要是us-east1, us-west1, and us-central1其中一個, 硬碟請在30GB內
  5. 中場休息......, 建立一台新的VM需要一點時間, 出門買個咖啡喝休息一下
  6. VM建立完成後請點擊剛建立完成的instance-1
  7. 點擊畫面上SSH選單的在「瀏覽器視窗中開啟」
  8. 建立成功~ 恭喜你已連上server, 現在可以下一些Linux指令來玩玩看

GCP架設Linux server - 透過自己電腦上的ssh連上Linux server


身為一個開發者有自己習慣的ssh軟體是很正常的, 因此以下將說明怎麼使用自己的ssh軟體連上GCE上的VM

  1. 建立ssh的公鑰檔id_rsa.pub與私鑰檔id_rsa, 若已經有此兩個檔案的讀者可略過此步驟
    指令如下
    #建立id_rsa與id_rsa.pub #已有此兩個檔案的使用者請千萬不要執行以下指令, 避免覆蓋掉舊的檔案 shiun@Shiun:~$ ssh-keygen -t rsa #中間出現的選項若沒有特殊目的則可以全部按enter使用預設值即可 shiun@Shiun:~$ cat .ssh/id_rsa.pub ssh-rsa AAXXXXnX shiun@Shiun
  2. 開啟GCE的「中繼資料」頁面並進入「SSH金鑰頁面」
  3. 並將SSH金鑰也就是id_rsa.pub中ssh-rsa開頭到user@xxxx結尾的全部文字複製貼到SSH金鑰頁面上
  4. 回到GCE頁面找到Linux server的IP位置
  5. 使用終端機介面輸入ssh指令連線到GCE上的Linux server
  6. 收工~

參考資料