Hero Image
[K8s] 安裝

Prerequest 已安裝 Debian 11,並且 ssh 可連線 disable swap sed -i '/\/swap/s/^/#/' /etc/fstab swapoff -a Container Runtime (CRI-O) Forwarding IPv4 and letting iptables cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF modprobe overlay modprobe br_netfilter # sysctl params required by setup, params persist across reboots cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF # Apply sysctl params without reboot sysctl --system #!/bin/bash OS=Debian_11 VERSION=1.27 echo 'deb http://deb.debian.org/debian buster-backports main' > /etc/apt/sources.list.d/backports.list apt update apt install -y -t buster-backports libseccomp2 || apt update -y -t buster-backports libseccomp2 apt install -y gnupg gnupg2 curl echo "deb [signed-by=/usr/share/keyrings/libcontainers-archive-keyring.gpg] https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list echo "deb [signed-by=/usr/share/keyrings/libcontainers-crio-archive-keyring.gpg] https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list mkdir -p /usr/share/keyrings curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | gpg --dearmor -o /usr/share/keyrings/libcontainers-archive-keyring.gpg curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/Release.key | gpg --dearmor -o /usr/share/keyrings/libcontainers-crio-archive-keyring.gpg apt-get update apt-get install -y cri-o cri-o-runc systemctl daemon-reload systemctl enable crio systemctl start crio Install kubeadm apt-get update apt-get install -y apt-transport-https ca-certificates curl mkdir -p /etc/apt/keyrings curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list apt-get update apt-get install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl Creating a cluster with kubeadm # 設定 k8s server上網路 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system kubeadm init --pod-network-cidr=10.85.0.0/16 --cri-socket=unix:///var/run/crio/crio.sock ## kubectl 設定 ### root ```bash export KUBECONFIG=/etc/kubernetes/admin.conf non-root user make user sudor

Hero Image
[DIY] 利用 orphan branch 和 worktree 在同一 Git 儲存庫控管原始碼與靜態資源分支

目前使用 docker 疊前端的編譯環境比較複雜,不比本機端方便,本篇的把 SSG 發布流程移植到前端專案。 一鍵產生前端靜態資源到特定分支,可設定該分支進入 CI/CD 流程。 在同一 Git Repo 管理部屬的靜態資源與原始碼。 P.S.這裡是以 quasar CLI 為例,專案放在 gitlab,腳本可在 git bash 環境執行,build 指令是 quasar build,輸出的 路徑是 dist/spa,不同專案架構需要作相對應調整。 Git 設定 建立一個 spa orphan branch P.S. 不需在 gitlab 上事先新增相對應的 branch git checkout --orphan spa git reset --hard git commit --allow-empty -m "Initializing gh-pages branch" git push origin spa git checkout master 新增部屬腳本 deploy.sh 新增到專案跟目錄 #!/bin/bash # 如果要檢查是否有 commit才進行部屬,就取消註解 # if [ "`git status -s`" ] # then # echo "The working directory is dirty. Please commit any pending changes." # exit 1; # fi echo "Deleting old publication" rm -rf dist mkdir dist # 清空 worktree git worktree prune rm -rf .git/worktrees/dist/ # 新增 worktree echo "Checking out spa branch into /dist" git worktree add -B spa dist origin/spa echo "Generating site" quasar build && cp -r deploy/. dist/ echo "Updating spa branch" cd dist && git add --all && git commit -m "Publishing to spa " #echo "Pushing to github" git push --all 修改 package.json 新增一項 script:deploy "deploy": "bash deploy.sh", 把 branch 設置為 Protected 先執行一次 npm run deploy,讓 git 上產生 spa 這個 orphan branch 再到這裡把 spa 設定為 Protected Branche:Settings->Repository->Protected Branches

Hero Image
[Security] 利用免費開源資安檢測軟體 SonarQube 檢測 .NET Core 程式碼

弱點掃描時常使用 owasp top 10 作為報告, 然而 owasp 軟體一年要價不菲,委外掃一次也是非常貴, 使用免費的 SonarQube 將弱點掃描整合到 CI/CD 階段, 要交付前再花錢委外掃一次似乎是個折衷的作法,避免一次檢測出來的弱點過多改動過大。 SonarQube 分為兩個部分 SonarQube Server、Scanner (Client 端程式)。 Scanner 負責進行掃描並將結果上傳 Server, 而 Server 作為負責處理和儲存分析報告的 compute engine 會分析上傳的結果, 並提供 Web 使用者介面、搜尋功能,因此分析完成後就可以直接在 Web 上查看報告, Scanner 除了能夠在 locale 端使用,還能直接整合到 CI/CD Server 上進行程式碼品質掃描。 雖說可以拿 localhost 直接作為 Server 使用, 這裡還是紀錄如何在虛擬機器上實際安裝 SonarQube, 以後在實際機器上安裝就可以作為參考, 準備 Linux Server 硬體 個人使用或小規模的團隊在一台機器上安裝就足夠使用了, 如果需要架設提供大量服務的伺服器,官網也提供 Cluster 的安裝方式方便做 Loading Balance。 這裡紀錄在一台 Ubuntu 20.04 上架設。 關於 Linux 安裝過程在這裡不加贅述, 官方提到硬體有幾個注意事項,對現代的硬體來說其實都還好,比較要注意的是硬碟空間: RAM 至少要 2G;free RAM 至少要 1G (所以用 Windows server 就要準備大很多喔)。 上傳報告需要一定的空間,因次對硬碟的空間與效能有一定的要求,不夠的話容易太慢。 server side 不支援 32-bit 作業系統;但 Scanner 可以支援 32-bit systems。 安裝 OpenJDK 11 sudo apt update sudo apt upgrade sudo apt install openjdk-11-jdk # 確認 java 版本 java --version 然後在 .bashrc 裡面把 Java 添加到 PATH 變數上。