前言
本篇將分享如下:
- 利用
gcloud
開立一台 GCPinstance
- 如何利用
gcloud
在instance
上匯入ssh key
- 利用
Daemon
使服務常駐 - 利用
gitlab pusher
部署專案到GCP virtual machine
上
環境建立
開啟一台 GCP
虛擬機
以下是個人做法,不需要照做
- Ray 使用
Mac
所以我在本地端安裝了 Google Cloud SDK, 安裝方式可以參考官方文件 - 建立一台 VM
- 建立一台機器, 叫做 example-instance-1
- 開機碟的空間為 10GB
- 從
ubuntu-os-cloud
, 來 pull 我們需要的image
- 我們使用
ubuntu-1804-lts
的image
版本, 這會自動使用這個版本的最新版 - 硬碟類型為
pd-stand
, 不知道類型可以跑gcloud compute disk-types list
來看看 - 機器型號為
f1-micro
, 不知道類型可以跑gcloud compute machine-types list
來看看 tags
用來當作該 instance 的一個識別,等等開防火牆的時候會用到zone
指定該 instance 的地區, 有些資源只有相同zone
或者region
可以取用,要注意
如下:
gcloud compute instances create example-instance-1 \ |
開啟後,我們先來產 key
ssh-keygen -t rsa -b 4096 -C "root@example" |
假設 key 的名稱為 example
cat example.pub > instanceSSHConfig && vim instanceSSHList |
在最前面加上 root
, 格式如下:
[USERNAME]:ssh-rsa [KEY] [USERNAME] |
我們只有一把 key
獲得 instance
名稱
gcloud compute instances list |
新增 public key
到 instance
(這邊請注意,這個指令會替換掉這個 instance 在 GCP 的 SSH key, 換言之,這個檔案裡面沒有的 key 都會消失)
gcloud compute instances add-metadata instanceName --metadata-from-file ssh-keys=instanceSSHList |
安裝
以下主要是安裝 nvm
, node
版本v12.1.0, 以及 npm
, 細節可以參考官方文件
apt-get update -y && apt-get install curl -y && curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash && export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" && nvm install v12.1.0 && apt-get install npm -y |
Daemon
接下來,
以下為 Daemon
設定, 我們將使用 Daemon
來幫我們跑我們的服務,並且讓我們的服務在斷開的時候可以自動重啟
sudo vim /etc/init.d/serviceName |
#!/bin/sh |
若發現找不到 service 的話,那需要重新載入
daemon
sudo systemctl daemon-reload
記得更改權限,讓 deamon 可以執行
sudo chmod 755 serviceName
開啟自動重啟,當 VM 重啟時,服務會跟著重啟
sudo systemctl enable serviceName
Daemon 的名稱在此範例中,會設置的跟專案名稱一樣
CI/CD
Gitlab variables setting
- 我們將使用 Gitlab 的 pusher 來做
CI/CD
的部分,所以這邊先建立一組ssh key
, 並且在gitlab
中設定為$SSH_PRIVATE_KEY
ssh-keygen -t rsa -b 4096 -C "root@deploy" |
Gitlab yaml config file
下面我們會開始設定 Gitlab 的 pusher config yaml 檔案
在我們的專案中:
vim .gitlab-ci.yml |
# This file is a template, and might need editing before it works on your project. |
結論
到這邊,當我們 git push
到指定的 branch
時,就會觸發 gitlab
的 pusher
來達成自動部署。
留言