Ansible + Multipass:快速佈建K8s多節點環境
前言在學習或測試 Kubernetes(K8s)相關技術時,快速建立一個乾淨、可控又一致的環境是一項不小的挑戰。 Minikube 和 Kind 可以快速模擬 Kubernetes cluster環境,但前置的安裝、kubeadm 初始化 control-plane 、worker加入與設置網路插件(如 Flannel、Calico)等就無法實際練習 而Multipass 可以建立完整的 Ubuntu VM,模擬實際部署中的獨立主機。每個節點都有自己的 IP 與網路介面,能模擬真實內部網路通訊。 Ansible 可以管理多台 VM 並自動化配置各個角色下VM的設置 章節重點 Ansible 介紹 Multipass 介紹 Ansible + Multipass:快速佈建K8s環境 Multipass 介紹 Multipass 是輕量級的虛擬機管理工具,支援 Linux、Windows 和 macOS。能用一條指令就快速啟動一個全新的 Ubuntu 環境 在不同系統上,它使用不同的虛擬化技術:Linux 上使用 KVM、Windows 上使用 Hyper-V、macOS 上使用 QE ...
Traefik+mkcert:Local端 簡易TLS Domain模擬環境
前言在開發 Web 應用或 API 服務時,可能會遇到需要模擬「正式環境」的需求,例如: 測試前端在 HTTPS 下的行為(例如 Cookie 的 Secure 屬性、Service Worker 的註冊、瀏覽器安全性限制等) 使用 OAuth 或第三方登入服務時,要求 callback URL 必須為 HTTPS 網域 模擬實際部署情境中的多個子網域 章節重點 環境準備 Docker安裝 Kind安裝 helm安裝 Traefik 介紹 mkcert 介紹 Docker Compose 路由轉發設置 Kubernetes Ingress 路由轉發設置 環境準備Docker安裝Docker安裝指令如下: 1234567891011121314151617181920212223# 移除舊版本的dockersudo apt-get remove docker docker-engine docker.io containerd runcsudo apt-get updatesudo apt-get install \ apt-transport-https \ c ...
Cloudflare:Domain 託管便捷應用 - Email Routing
前言擁有一組自己的域名(Domain)可以實現很多應用,最簡易的應用是將指定的域名路由到架設的服務,讓使用者可以透過域名訪問到服務。Cloudflare 提供域名託管,並提供各種整合性質服務,本次要分享信件服務的應用。 章節重點 環境準備 Domain Email Routing 無限Email 收信測試系統 Cloudflare Tunnels 分享Local臨時測試/Demo服務 環境準備 擁有一組域名 Domain Email Routing 無限Email 收信測試系統當開發一個產品或服務時,可能會設計註冊驗證信、邀請信等機制。並且產品可能有很多不同的角色與權限設置。為方便測試,需要很多Email帳號,而Cloudflare提供的Email Routing機制可以為自己的網域建立自訂電子郵件地址,並將收到的郵件轉送到指定的信箱。 設置DNS MX(Mail Exchange)記錄設置DNS MX(Mail Exchange)記錄,用來指定該網域名稱的電子郵件伺服器 這邊Cloudflare已經帶出設定內容,讓我們可以很便利的直接將DNS紀錄指到Cloudflare的電子 ...
Networking Solution:虛擬區網(VLAN) Zerotier 架設與佈建
前言在現代網路環境中,伺服器通常具有公開 IP,允許來自全球的裝置進行存取。然而,家用電腦或小型辦公室的設備通常沒有固定 IP,且基於安全考量,不會直接對外開放。這使得遠端存取變得困難,尤其是當我們希望在不同地點的設備之間建立安全且穩定的連線時。 區域網路(LAN)提供了一個封閉、安全的內部網路環境,讓同一網段的設備能夠直接互通,但它的範圍僅限於物理位置。一旦設備處於不同的網路(如家用網路與公司網路),就需要透過 VPN、NAT 穿透或其他技術來建立連接。 虛擬區域網路(VLAN)和軟體定義網路(SDN)技術應運而生,讓我們能夠在不同的網路環境中模擬 LAN。ZeroTier 作為一種軟體定義網路解決方案,允許使用者輕鬆建立自己的虛擬網路,無需傳統 VPN 的複雜設定,並提供類似 LAN 的體驗。 過去架設Minecraft伺服器邀請與朋友遊玩時,也是運用了虛擬區域網路的方式,讓朋友可以透過虛擬IP訪問到Server。 章節重點 環境準備 2台設備 + 虛擬機VM (私人中繼器方案) Docker安裝 Zerotier安裝 Zerotier概念介紹 Zerotier雲服務建構虛擬區 ...
面向導向程式設計(AOP)概念 與 AspectJ 實作
前言在物件導向程式設計(OOP)中,系統的功能被分散到多個類別或物件中,例如日誌記錄、權限驗證、安全性等方面的程式碼會散佈在不同的類和方法中,導致程式碼的重複性和難以維護性增加。 AOP的目標是通過提取這些橫切關注點,並將它們模組化,從而提高程式碼的可讀性、可維護性和可重用性。 AOP介紹AOP概念簡單來說,面向導向程式設計(Aspect-oriented programming, AOP)是根據專案程式中想要介入的地方進行行為操作。 如下圖範例,想對Method A B C執行前都先進行權限驗證行為,執行後都進行日誌紀錄行為。而原本寫法上要到每個函式宣告的地方插入撰寫的內容。AOP則改為在單個面向程式碼中寫這幾個Method是切入點,要在執行前加入這項功能行為。來達成統一管理以及模組化的效用 換個情境思考,若原先的寫法上因為驗證相關的類別與方法有更新,而導致每個引用的部分皆須微調修正,那是不是會頭痛呢 AOP術語在AOP中有以下常用的術語: 面向連結點 (joinpoint) 連結點為在面向中需要關注的點,如以下: 呼叫方法或建構子 (A method or construct ...
運用Docker建置GitLab Server與GitLab CI Runner
前言GitLab提供self-managed GitLab伺服器架設方式,讓企業或團隊可以在自己的基礎設施(infrastructure)中運行GitLab Server。私人的GitLab Server使得專案機密資料不會因第三方因素而暴露,導致企業研發之專利技術內容公開而失去價值。 GitLab CI Runner為提供GitLab 運行CI/CD作業的應用程式 實作重點 環境準備 安裝Docker 建置GitLab Server 撰寫Docker Compose.yml設置運行容器服務 申請Gmail應用程式密碼 撰寫.env環境變數 運行GitLab Server容器 寄送測試信件確認SMTP功能 使用者註冊設置 建置GitLab CI Runner 於GitLab專案Repo上新增CI/CD Runner 撰寫Docker Compose.yml設置運行容器服務 運行GitLab CI Runner容器 註冊GitLab CI Runner 查看該Project的Runner是否成功註冊 測試GitLab CI Runner 於Repo中建立.gitlab-ci. ...
運用Borg 與 Crontab建立自動化本地與異地備份Backup
前言當架設後端服務時,伺服器通常會隨著時間儲存了許多使用者的資料(圖片、影片等等)。然而若沒有本地備份與異地備份,當發生意外刪除或者磁碟損壞時,使用者的重要資料也就無法恢復了。因此定時備份為一種災難恢復(disaster recovery)的方式。 Borg是一種備份工具,他提供增量備份、去除重複壓縮與加密等功能。 Crontab是一個在Unix操作系統上用於定期執行任務的工具,透過設置任務方式,使其在預定時間或間隔自動執行指令或腳本 實作重點 環境準備 安裝Borg 本地端 - 備份方法 初始化備份資料的存放區 建立備份歸檔 列出歸檔清單 修剪備份存檔 異地端 - 備份方法 初始化備份資料的存放區 建立備份歸檔 透過金鑰授權,避免每次輸入異地機器的密碼方式 自動化備份 建立備份腳本Shell script 設定Crontab定時任務 其他備份指令介紹 比較歸檔差異性 恢復資料 環境準備安裝Borg這邊使用的是borg1.2.2版本 123456789101112131415161718wget -q --show-progress https://github. ...
Jenkins Plugin插件開發入門
前言DevOps是一種軟體開發方法論,旨在加速軟體生命週期,從設計到交付,並透過持續集成、持續交付、持續監控來提高軟體質量。透過持續集成和持續交付實現快速、可靠地將軟體部署到生產環境。 而Jenkins 是一種用於自動化構建和測試的軟件工具。它通常用於持續集成和持續交付流程中,可以自動執行程序構建、測試和部署任務。使用 Jenkins 可以減少人為干預,提高應用程序的品質和可用性。它還可以通過監控項目的構建狀態,提供即時反饋和報告。 Jenkins提供Jenkins Plugin的方式使開發者可以開發需要的程式以擴充至建置流程中,滿足團隊專案在持續整合期間的需求。 由於當初在找Jenkins Plugin教學時,發現官方資料非常稀少,後來得知官方教學的網域有改,之前的文章都無法Acess了像遇到此種情況,當時很機靈的拿去網站時光機試試看,沒想到還真有資料。不過網站時光機訪問時有些緩慢就是了,這是一個小缺點 實作重點 環境準備 安裝Java JDK 8 安裝Maven 設定環境變數 使用插件範本建立專案、測試運行與發佈打包 使用樣本插件原型建立專案結構 確認可以建構專案 運行插 ...
使用 Docker Compose 一次建立 Nginx 伺服器 與 Cerbot(SSL自動憑證)
網路發展迅速,人們使用網際網路於網頁上獲取新知,網站之間傳輸需經由安全加密以避免有心人士從中做壞,因此SSL(Secure Sockets Layer)憑證是一種用於網站的安全證書,它可以保證在傳送數據時保持安全性。通常SSL憑證來源可以由SSL憑證供應商取得,不過可能需要付出一定非用。當然也有免費的來源,而免費的憑證服務有效期限為90天,一段時間就得重複同樣操作其實浪費時間與心力,若有自動化的方式何不為樂呢。因此這次帶來容器化方式一次將所有服務設置完成。
GitLab + Jenkins 建置CICD流程
前言在軟體工程中,頻繁的交付新的軟體版本是常見的現象。而 在軟體版本持續更新的同時,如何保證程式保持一定的品質呢? 若每一次的小部分更動都交由人力來監管品質,則消耗大量人力成本,且耗費時間也將提升。因此在應用程式的提交、建置、測試和部署中實施自動化,透過每次自動化的流程達成持續整合、持續交付與持續佈署。 什麼是CI(Continuous Integration, 持續整合)?持續整合(CI)是開發人員將軟體系統每個變動實行自動化驗證,其中驗證包含:專案建置(build)、測試(test)、程式碼安全分析(analysis)等等,若驗證通過代表此次提交的更動版本對過去設置的標準,可以確定新版程式碼和原有的能否正確地整合在一起。這一系列的驗證會交由自動化工具執行,DevOps人員只需要將工具的觸發、執行等設定完成即可自動化運作。常見的CI工具如下: Jenkins Drone Circle CI GitLab CI 什麼是CD(Continuous delivery / Continuous deployment, 持續交付/持續佈署)?持續交付(CD)是在持續整合的基礎上,將整合的 ...