淨係講下要注意的事情,如果要想要正常運行的話,就一定要用 root 來行 -u root
,如果唔係會權限不足出問題。
另外要用要用 docker 做 agent 的話 (Jenkinsfile),就首先要去 Jenkins 度裝返好個 plugin 先,有兩個要裝 (Docker, Docker pipeline) 。裝好左之後就要連返個 volumne 等 Jenkins container 都可以拎到 host 個 docker 來用 -v $(which docker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock
。裝好左呢度應該都有體上無問題,可以試試 build。
& docker run \ -u root \ -d \ -p 8080:8080 \ -v $(which docker):/usr/bin/docker \ -v jenkins-data:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v "$HOME":/home \ jenkins/jenkins:lts-jdk11
如果 Jenkins 要由 Github clone project 的話,就可能要加返個 credential 先可以連到,可以去呢度 (下圖) 加返一個,就可以用到。
### 在 Docker 上使用 Jenkins 淨係講下要注意的事情,如果要想要正常運行的話,就一定要用 root 來行 `-u root`,如果唔係會權限不足出問題。 另外要用要用 docker 做 agent 的話 (Jenkinsfile),就首先要去 Jenkins 度裝返好個 plugin 先,有兩個要裝 (Docker, Docker pipeline) 。裝好左之後就要連返個 volumne 等 Jenkins container 都可以拎到 host 個 docker 來用 `-v $(which docker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock`。裝好左呢度應該都有體上無問題,可以試試 build。 ```sh & docker run \ -u root \ -d \ -p 8080:8080 \ -v $(which docker):/usr/bin/docker \ -v jenkins-data:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v "$HOME":/home \ jenkins/jenkins:lts-jdk11 ``` ### 加返個 GitHub Credential 入度 Jenkins 如果 Jenkins 要由 Github clone project 的話,就可能要加返個 credential 先可以連到,可以去呢度 (下圖) 加返一個,就可以用到。
用一個簡單的 ? 在 object reference 後面,就可以防止在取得 child property 時因為 undefined object reference 而出現 error。
先睇 code :
// create person object let person = { name: 'Peter', age: 10 }; // person age person.age; // 10 // set person to undefined person = undefined; // person age person.age; // error : cannot read properties of undefined // person age person?.age; // undefined (no error)
### 長話短說 用一個簡單的 ? 在 object reference 後面,就可以防止在取得 child property 時因為 undefined object reference 而出現 error。 先睇 code : ```js // create person object let person = { name: 'Peter', age: 10 }; // person age person.age; // 10 // set person to undefined person = undefined; // person age person.age; // error : cannot read properties of undefined // person age person?.age; // undefined (no error) ```
首先去 terminal 度輸入以下 command 來 generate 條 SSH Key 先。
這個功能有時可能需要在處理 submodule 時使用。
$ ssh-keygen -t ed25519 -C "your_email@example.com"
新 generate 出來的 key 會放係 ~/.ssh/ 下面,之後我地只要將條 key 既 fingerprint set 入去 Github account 入面就可以。
在右上角的 profile 下找到了 settings :
之後去呢度,就可以新增一個 SSH Key :
這個用途是當 SSH 連線到 Github 時,就會使用這個 SSH Key 來做認證。
### 長話短說 首先去 terminal 度輸入以下 command 來 generate 條 SSH Key 先。 這個功能有時可能需要在處理 submodule 時使用。 ```sh $ ssh-keygen -t ed25519 -C "your_email@example.com" ``` 新 generate 出來的 key 會放係 ~/.ssh/ 下面,之後我地只要將條 key 既 fingerprint set 入去 Github account 入面就可以。 在右上角的 profile 下找到了 settings :  之後去呢度,就可以新增一個 SSH Key :  這個用途是當 SSH 連線到 Github 時,就會使用這個 SSH Key 來做認證。
三句 command 可以搞定
$ openssl genrsa -out key.pem 2048 $ openssl req -new -sha256 -key key.pem -out csr.pem $ openssl x509 -req -in csr.pem -signkey key.pem -out cert.pem
搞掂,可以用來起住個 development environment 先。
### 長話短說 三句 command 可以搞定 ```sh $ openssl genrsa -out key.pem 2048 $ openssl req -new -sha256 -key key.pem -out csr.pem $ openssl x509 -req -in csr.pem -signkey key.pem -out cert.pem ``` 搞掂,可以用來起住個 development environment 先。
在開發時,有時可能會需要到驗證主機 https 及 DNS 的服務,例如 OAuth 或是 Payment Gateway 等等,
我們可以在自己的主機用以下的 Command 來把自己主機的某一個 Port Tunnel 度 Remote 主機的某一個 Port。
$ ssh -f -N -T -R 9000:localhost:3000 root@<your-vps-ip>
把服務在背景運行。
是指把 localhost 上,Port 3000 的資料 Tunnel 到 Remote 主機上的 Port 9000 上。
目標主機的使用者及地址。
可以在 Remote 主機上裝上 Nginx 來進行 reverse proxy。
$ apt-get update $ apt-get install nginx
然後在 nginx 的 config 設定好 reverse proxy 設定。
開一個新的檔案 /etc/nginx/site-available/tunnel
,設定以下內容。
server { listen 80; location / { proxy_pass http://127.0.0.1:9000; } }
* 如果要使用 https 的話,就要裝返張 CERT 同埋 proxy_pass
要改返去 https。
在 /etc/nginx/site-enable
加入
然後就可以檢查 nginx 設定及重新啟動服務。
$ nginx -t $ nginx -s reload
### 在自己的主機上預備 在開發時,有時可能會需要到驗證主機 https 及 DNS 的服務,例如 OAuth 或是 Payment Gateway 等等, 我們可以在自己的主機用以下的 Command 來把自己主機的某一個 Port Tunnel 度 Remote 主機的某一個 Port。 ```sh $ ssh -f -N -T -R 9000:localhost:3000 root@<your-vps-ip> ``` ##### -f 把服務在背景運行。 ##### -R 是指把 localhost 上,Port 3000 的資料 Tunnel 到 Remote 主機上的 Port 9000 上。 ##### root@<your-vps-ip> 目標主機的使用者及地址。 ### 在 Remote 主機上預備 可以在 Remote 主機上裝上 Nginx 來進行 reverse proxy。 ```sh $ apt-get update $ apt-get install nginx ``` 然後在 nginx 的 config 設定好 reverse proxy 設定。 開一個新的檔案 `/etc/nginx/site-available/tunnel`,設定以下內容。 ```sh server { listen 80; location / { proxy_pass http://127.0.0.1:9000; } } ``` *** 如果要使用 https 的話,就要裝返張 CERT 同埋 `proxy_pass` 要改返去 https。 在 `/etc/nginx/site-enable` 加入 然後就可以檢查 nginx 設定及重新啟動服務。 ```sh $ nginx -t $ nginx -s reload ```
S3 (Simple Storage Service) 是 AWS 其中一個服務,主要用來儲存一些東西,可以是檔案,可以是文字,可以是什麼都可以。
當然雖然佢個名話自己係 simple... 但佢其實真係一 D 都唔 simple。又或者 simple 只係解作佢個功能好單純只係儲存東西。而東西可以被什麼人存取,怎樣寫入,權限等等... 就可以玩到好複雜。
Cloudfront 是一個由 AWS 提供的 CDN 服務,可以將你的資源 cache 去佢地既 edge location 度,等每個地區的人都可以用最少既時間去取得佢想要既資源。
每一個放到 S3 的 Object 也是會有自己的 ACL (Access control list) 來控制權限,可以做得到一些很細緻的調整。不過在新版的 S3 內,就加入了 Bucket Policy 這個東西,這個可以說是整個 Bucket 內的權限描述。
不過上面要用到 Bucket Policy 的是有個前設,就是只可以套用到 Object owner 是 Bucket owner 的 Object 上。
我們可以通過 Cloudfront 設立新的 Distribution,在 origin 選取現有的 S3 Bucket。然後設定一個 OAI (Origin access identity),而這個 identity 就可以加入到 S3 的 Bucket Policy 內的 Principal 來限制 Cloudfront 存取 :
"Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }
這樣就可以無痛把 S3 的內容經 Cloudfront public 出街了。
### S3 S3 (Simple Storage Service) 是 AWS 其中一個服務,主要用來儲存一些東西,可以是檔案,可以是文字,可以是什麼都可以。 當然雖然佢個名話自己係 simple... 但佢其實真係一 D 都唔 simple。又或者 simple 只係解作佢個功能好單純只係儲存東西。而東西可以被什麼人存取,怎樣寫入,權限等等... 就可以玩到好複雜。 ### Cloudfront Cloudfront 是一個由 AWS 提供的 CDN 服務,可以將你的資源 cache 去佢地既 edge location 度,等每個地區的人都可以用最少既時間去取得佢想要既資源。 ### S3 檔案可以在 Public access 每一個放到 S3 的 Object 也是會有自己的 ACL (Access control list) 來控制權限,可以做得到一些很細緻的調整。不過在新版的 S3 內,就加入了 Bucket Policy 這個東西,這個可以說是整個 Bucket 內的權限描述。 不過上面要用到 Bucket Policy 的是有個前設,就是只可以套用到 Object owner 是 Bucket owner 的 Object 上。 我們可以通過 Cloudfront 設立新的 Distribution,在 origin 選取現有的 S3 Bucket。然後設定一個 OAI (Origin access identity),而這個 identity 就可以加入到 S3 的 Bucket Policy 內的 Principal 來限制 Cloudfront 存取 : ```js "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" } ``` 這樣就可以無痛把 S3 的內容經 Cloudfront public 出街了。