這時可考慮使用 jq 命令來做 JWT token 的解碼,使用方式如下:
jq -R 'split(".") | .[1] | @base64d | fromjson' <<< "$JWT"
像是筆者這邊拿了一組 JWT token。
將 JWT token 帶入指令,即可看到 JWT token 解碼後的結果。
jq -R 'split(".") | .[1] | @base64d | fromjson' <<< "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
dotnet dev-certs --help
使用方式如下圖所示。
dotnet dev-certs https --help
最簡單的就是不帶任何參數直接使用 dotnet dev-certs 的 https 命令去產生並安裝 HTTPS 開發憑證。
dotnet dev-certs https
產生完可以用 dotnet dev-certs 的 https 命令加帶 –check 參數確認。
dotnet dev-certs https --check
狀態碼為 0 即表示成功。
echo $?
若要移除安裝的 HTTPS 開發憑證,可使用 dotnet dev-certs 的 https 命令並加帶 –clean 參數。
dotnet dev-certs https --clean
再次確認 HTTPS 開發憑證的安裝狀態。
dotnet dev-certs https --check
這時就會拿到狀態碼 6,表示並未安裝 HTTPS 開發憑證。
echo $?
如要匯出 HTTPS 開發憑證,可使用 dotnet dev-certs 的 https 命令,加帶 -ep 參數指定匯出的 HTTPS 開發憑證所要存放的檔案位置,加帶 -p 參數指定匯出的 HTTPS 開發憑證私鑰密碼。
dotnet dev-certs https -ep $file -p $password
匯出後 HTTPS 開發憑證會被放置在指定的位置。
ls $file
git clone https://github.com/gbraadnl/gauth.git
切換到 gauth 程式碼目錄。
cd gauth
安裝 gauth 所需的 npm 套件。
npm install
然後透過 node 將 gauth 服務起起來。
node server
服務起來後用瀏覽器連至 8080 port,即可開始使用 gauth 來做二階段認證。
http://localhost:8080/
1 | <PackageId>AppLogger</PackageId> |
然後可用 dotnet pack 命令將套件打包。
dotnet pack
或是在專案檔內加設定 GeneratePackageOnBuild,讓專案在建置時自動產生。
1 | <GeneratePackageOnBuild>true</GeneratePackageOnBuild> |
然後確定 NuGet 帳號已註冊且取得 API key。
再調用 dotnet nuget push,帶入 NuGet 套件檔的位置及 NuGet API key。
dotnet nuget push $package -k $key -s https://api.nuget.org/v3/index.json
NuGet 套件即會被上傳至 NuGet server 上。
Docker compose 檔如下:
1 | version: '3' |
將容器啟動,MongoDB replica set 沒意外的話會正常運作。
通常從最後的 initiate 訊息即可判斷是否正常,若是擔心也可連進容器再做些確認。
docker exec -it mongo mongo
像是連進去的資訊,看看是否有提示 PRIMARY/SECONDARY。
調用 rs.conf 命令確認設定。
rs.conf()
或是調用 rs.status 命令確認 replica set 的 primary/secondary 的切換、抄寫、狀態、設定都是正常的。
rs.status()
將程式運行起來。
dotnet run
運行起來後可用 dotnet-trace 查詢 Process。
dotnet-trace ps
接著就可透過 dotnet-counters 監控指定 Process 的資源使用狀態。
dotnet-counters monitor --refresh-interval $refreshInterval -p $processId
像是這邊剛剛查閱到了 dotnet run 起了兩個 Process,我們可以帶入 Process Id 監控。
dotnet-counters monitor --refresh-interval 1 -p 35603
dotnet-counters monitor --refresh-interval 1 -p 35608
dotnet-counters 會將指定 Process 的資源使用狀況依照指定的時間更新,直至程式結束。
dotnet tool install --global dotnet-counters
安裝後可調用 dotnet-counters 命令,帶入 –version 參數,確認安裝是否正確無誤。
dotnet-counters --version
dotnet tool install --global dotnet-trace
安裝後可調用 dotnet-trace 命令,帶入 –version 參數,確認安裝是否正確無誤。
dotnet-trace --version
可照著命令列的提示帶入。
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallowgit -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask fetch --unshallow
即可修復該問題。
]]>openssl enc -help
常用的參數有 -aes-256-cbc 指定使用 AES 256 CBC 加密、-base64 參數指定經過 Base64 處理、-p 參數指定印出 salt/key/iv、-k 參數指定要用來加密金鑰、-nosalt 指定加密時不加 salt。
像是要將 “hello” 透過 AES 256 CBC 加密、加密金鑰用 “world”、透過 Base64 處理的話,可像下面這樣調用。
echo "hello" | openssl enc -aes-256-cbc -base64 -p -k world
如果不加 salt,可加帶 -nosalt 參數。
echo "hello" | openssl enc -aes-256-cbc -base64 -p -k world -nosalt
docker network ls
docker network create mongo-cluster
docker network ls
然後起第一個 MongoDB 的 Docker 容器,設定使用 Docker network,並用 –replSet 參數指定 replSet 的名稱。
docker run -p 27017:27017 --name mongo1 --net mongo-cluster mongo mongod --replSet rs0
接著起第二個 MongoDB 的 Docker 容器,一樣設定使> 用 Docker network,且用 –replSet 參數指定 replSet 的名稱。
docker run -p 27027:27017 --name mongo2 --net mongo-cluster mongo mongod --replSet rs0
最後起第三個 MongoDB 的 Docker 容器,一樣設定使用 Docker network,且用 –replSet 參數指定 replSet 的名稱。
docker run -p 27037:27017 --name mongo3 --net mongo-cluster mongo mongod --replSet rs0
然後連進某一個容器內運行 mongo 命令。
docker exec -it mongo1 mongo
調用 rs.initate 命令,將三個 MongoDB instance 資料帶入,初始 MongoDB 的 replica set。
rs.initiate( { _id : “rs0”,members: [{ _id: 0, host: “mongo1” },{ _id: 1, host: “mongo2” },{ _id: 2, host: “mongo3” } ]})
設完後可調用 rs.conf 命令確認設定。
rs.conf()
並調用 rs.status 命令確認 replica set 的 primary/secondary 的切換、抄寫、狀態、設定都是正常的。
rs.status()
使用前先透過 Npm 安裝套件至全域。
npm install -g conventional-changelog-cli
即可開始使用。
像是顯示 Change log 會產出的內容可帶參數 -w。
conventional-changelog -p angular -i CHANGELOG.md -w -r 0
要產生 Change log 可帶參數 -s。
conventional-changelog -p angular -i CHANGELOG.md -s
這邊筆者用簡單的例子稍微示範一下。
首先先初始 Npm 專案設定檔,因為後面產生的 Change log 版號會要看這設定檔。
npm init
接著初始專案的 Git 版控。
git init
將第一版檔案加入版控。
git add .
git commit
確認上版。
git log
嘗試切換專案版本至 1.0.0。
npm version 1.0.0 --allow-same-version
透過 conventional-changelog 命令列工具帶入參數 -w 查閱產出的 Change log 會是怎樣。
conventional-changelog -p angular -i CHANGELOG.md -w -r 0
預期產出的 Change log 應該會含有 feat 與 fix 類型的修改紀錄。
如果確認無誤,改用參數 -s 實際寫入 Change log 檔案。
conventional-changelog -p angular -i CHANGELOG.md -s -r 0
ls
code CHANGELOG.md
把 Change log 加入 Git 版控。
git add .
git commit
git log
加入專案程式。
dotnet new console -o helloworld
把專案程式加入版控。
git add .
git commit
專案版本切至 1.0.1。
npm version 1.0.1
透過 conventional-changelog 命令列工具產生 Change log。
conventional-changelog -p angular -i CHANGELOG.md -s -r 0
查驗產出的 Change log。
code CHANGELOG.md
可看到 Change log 會含有新的修改紀錄。
]]>使用上需先全域安裝 commitlint cli。
npm install -g @commitlint/cli
加入 package.json。
npm init
加入套件 @commitlint/config-conventional。
npm install -save @commitlint/config-conventional
加入 commitlint 設定檔。
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
準備好後可簡易的用 echo 將訊息透過 pipeline 送到 commitlint 做些測試。
echo 'foo: bar' | commitlint
echo 'feat: bar' | commitlint
若要針對 git commit message 也是可以,這邊直接將當前專案加入 git 版控。
git init
設定 .gitignore。
vim .gitignore
將 node_modules 這些不必要版控的部分設定上去。
實際 commit 一個不符合規範的 commit message。
git add .
git commit -m "foo: bar"
git log
調用 commitlint 並帶入 –from=,commitlint 會去驗證 git commit message。
commitlint --from=
使用上先全域安裝 commitizen 命令列工具。
npm install -g commitizen
這邊準備一個 git 版控的專案。
git init
加入 package.json。
npm init
調用命令讓專案符合 commitizen friendly。
commitizen init cz-conventional-changelog --save-dev --save-exact
將修改加入版控實際做個測試。
git add .
commit 時改用 git cz,會改成用互動方式輸入符合規範的 commit message。
git cz
git log
編輯 .git/hooks/commit-msg。
vim .git/hooks/commit-msg
加入驗證程式後存檔離開。這邊筆者使用 如何使用 git commit template 與 git hooks 管理團隊的 git log | AllenHsu的技術手扎 提供的驗證程式做了些微的調整,用以檢查 commit message 符合 Angular commit style。
1 | #!/usr/bin/env python |
修改 commit-msg 的權限。
chmod +x .git/hooks/commit-msg
然後將修改加入實際 commit 做個測試。
git add .
可以看到 commit message 不符合規範的話會被擋下。
git commit -m "foo: bar"
只有符合規範的 commit message 可被 commit 進去。
git commit -m "feat: bar"
要設定 git commit template,我們需先建立範本檔。
vim .gitmessage.txt
設定範本檔的內容。
然後將範本檔設定到設定檔中。
git config commit.template .gitmessage.txt
設定好後 commit 時就會自動帶出設定好的範本了。
git add .
git commit
這邊需特別注意一點,如果使用的是 GUI 而非命令列的話,多半範本是不支援註釋的,也就是說如果範本中有使用到註釋,都需自行刪除註釋後才能 commit,不然都會當成 commit message。
使用方式如下:
pt-variable-advisor [OPTIONS] [DSN]
像是:
pt-variable-advisor h=$host,P=$port,u=$user,p=$password
brew install percona-toolkit
安裝後可調用 Percona Toolkit 命令查驗,,確認安裝無誤。
pt-variable-advisor --version
]]>docker stop $(docker ps -a -q)
docker ps
要一次殺掉可以用 docker ps 命令查閱所有容器,將容器資訊帶給 docker rm,一次殺掉。
docker rm -f $(docker ps -a -q)
docker ps -a
1 | ... |
修改 Startup.ConfigureServices,加入 Jaeger tracer、註冊 GlobalTracer、設定 gRPC 攔截器。
1 | ... |
實際運行程式。
選取 Service 與 Operator 下去查詢。
可看到找到的 Trace,上半部可看到時間與耗時的分佈,下半部就是簡易的列表,可看出 Trace 名稱、識別碼、是什麼時間點觸發的、耗時多久、有多少 Span。
點選感興趣的 Trace,會進入 Trace 細部資訊頁面,會將 Trace 及其組成的 Span 以圖形的方式呈現,便於找到相對耗時的操作。
展開 Span 可看到 Span 的 Tag 這些細部的資訊。
]]>