潮流特區

焦點文章

CyberCom3合1充電數據線 — 一條線搞掂晒,充電超方便!

科技新知
Lifemagtechie・2025-06-12

而家大家手上嘅電子產品多到數唔清,手機、平板、藍牙耳機、遊戲機……每部機都有自己嘅充電線,仲有啲好舊款用USB,iPhone用Lightning,最新又係Type-C,搞到充電時成日手忙腳亂,尤其去旅行,帶幾多條線都唔夠! 呢條 CyberCom3合1充電數據線,就係為咗解決呢個煩惱而生。佢集合多種接口於一身,無論你係用緊iPhone定Android,甚至其他電子裝置,都可以用一條線搞掂晒,方便又慳位,真係你嘅生活充電好幫手! 一條線,多種接口,無懼設備多 CyberCom3合1充電數據線支援 Micro USB、USB A、Type C 同 Lightning 四大接口,無論你係iPhone、Samsung定係其他品牌,甚至係藍牙耳機、遊戲機,都可以用呢條線充電同傳輸數據。旅行唔使再帶一大堆線,行李又有位可以擺多啲戰利品啦! 快充快傳,效率up up! • 支援QC快充技術,最高60W輸出,手機、平板、智能手錶都可以超快充滿,唔使等成日。 • 傳輸速度高達480Mbps,無論係工作文件定係娛樂影片,一link就傳,節省你寶貴時間。
 耐用又防纏繞,攜帶超方便 • 採用彈性TPE物料,線身唔易打結,收納方便,唔怕亂晒。 • 線材耐用又有彈性,日常用或者出街旅行都好啱用。
 產品小百科 • 1米長度,無論係屋企、公司定旅行都啱用。 • 建議零售價 $99,依家優惠價$79就可以帶走。
 由此開始,充電更快更簡單! 設計貼心,性能強勁,係你工作同生活嘅好拍擋。無論係手機、平板、遊戲機定藍牙耳機,呢條線都幫你搞掂晒充電同數據傳輸,令你嘅數碼生活更輕鬆自在。了解CyberCom3合1充電數據線嘅詳情同優惠,幫你打造更智能、更方便嘅充電新體驗!購買網站: www.cyberportcom.com查詢電郵: info@cyberportcom.com

最新文章

生活AI 應用筆記

科技新知
MacauYeah・2025-07-22

上週六(7月19日),筆者參加了聖公會的一門講座「AI時代,父母的教養實戰新教程」,學習如何利用AI輔助小朋友的教育。雖然課題如此,但課堂還是以感受AI的使用方式為主,之後大家就好好利用AI這個知識庫去激發新思維。課堂上,文字、語音、動畫都有示範,但筆者感受到文字AI的部分最為深刻。 在過去一兩年,筆者曾略微使用AI,但即使在DeepSeek出現後,筆者仍覺得幫助有限。這主要是因為筆者身處科技行業,AI給出的答案不夠精準,難以協助開發,還可能導致一堆無法延續的結果,因此筆者甚少使用。然而,上課的主題並非針對本業使用AI,而是探討如何利用AI為生活注入更多新感受。 AI或許無法取代專業,但可以幫助你引入跨界元素,讓思考模式或你的作品更加多樣化。課堂中,學員將自己創作的家書放入AI,請它協助轉換成不同年齡層的人用詞、改編為劇本或變成辯論議題等。當然,並非每個方向都能產生合理的結果,例如家書轉為辯論,明顯會顯得不合適。但由於轉換的成本低,你可以透過少量提詞,得到多樣不同的呈現效果,激發新的思維。這就像在創作前,你可能會參考大量同類型的作品,去取得靈感。 筆者也簡單分享一些使用文字AI創作的方向,希望大家能有所收穫。 首先,準備好自己的原稿,這個原稿必須是由自己親自起草的,而非AI生成的主題方向。起草時,不必過於拘泥於前後文法,只需有一個大概方向即可。 將原稿交給AI,請它幫忙修改。AI會協助你修正一些口語或錯字問題。 嘗試請AI給你一些建議,或者請它幫你補充段落。筆者認為,請AI給建議會更好一些,因為有時補充段落可能會顯得過於機械。 除此之外,文字AI在日常生活中還做得不錯的實例 整理文章重點,重新以不同的方式演繹 整埋文章重點,筆者在大學的教育中,就經常看到以條列重點去取得原本書的教學方式。所以針對中小學教育,或新知識的學習,都可以試試用AI來整理大意,提升學習效率。 更強的是,如果你還是看不懂,可以叫AI以更多例子,深一點或淺一點去解釋一次。 禮物準備 有時物輕情義重,如果你身邊的親友很重儀式感,那麼使用AI的搜集及變化能力來幫你多樣化禮物的準備,相信可能為你加入更多新元素。 計劃旅行 計劃旅行,過去一般都參考他人的行程分享。過去就一篇一篇地逐篇閱讀,個人歸納。現在你可以先問AI,再去覆核。過去自行搜尋的方式,可能會被一些旅遊網站的文章所佔據,而現在改用AI,配合不同的提詞(prompt),你還可以多一些不同的參考角度。 註:本文僅使用AI修正用字,並未生成任何插畫或議題。

Docker 101 - 為何要做成Docker (Container - 容器化)

科技新知
MacauYeah・2025-07-21

筆者更新了之前的Docker入門筆記(https://github.com/macauyeah/VMDockerNotes/blob/main/DockerConcept101CN.md),順便補充了一些內容。如果各位讀者還在糾結要不要進行容器化,可以看看這些特性有沒有讓你心動。 Container - 容器化的便利 1. 做到隔離效果 傳統上,同一機器安裝不同的 lib / dependency ,可能出現衝突。在 docker 的環境下,不同 container 之間可以隔離開,除了是網路之間出現引用關係的衝突外,動態庫的衝突就沒有見過。一般處理好 Persistent Volume 的考量,單機下是沒有什麼問題的。 2. 遷移的過程比較簡單 傳統上,要把程式從一台機器搬到另一台機器,要預先安裝好相關的 lib / dependency 。但使用 docker / container 後,只要 docker 版本相容就好。docker image 本身,就已包括所有的 lib / dependency 。另一個常見的傳統問題,就是 Linux 檔案的擁有權問題,特殊情況下,新機同一個 user 的 ID 編號也不一樣,可能要手動恢復權限。如果是 container 的 bind mount 檔案,只要使用 tar command (`tar --same-owner -xvf file.tar`)保留權限解壓就好。 3. 垂直水平擴容 因為有隔離及遷移方便的優勢,原本的機器達到上限,可以隨時換到其他機器上,修改對應的用戶入口就可以了(或更改DNS,可以更無縫連接)。一台機器不夠,亦可以多台機器一起來。即使不使用 docker swarm / k8s 方案,有傳統的 proxy gateway 再加單機的 docker ,就可以做到分流的效果。 當然使用 docker swarm / k8s 才是正解,可以更簡化 proxy gateway 的設定。而傳統的分佈式問題,例如 Share Storage 等,其實就沒有簡化到,但也沒有增加難度。所以大家若考慮擴容的問題,更適合考慮使用 Container 的方案。 筆者總結這兩三年來的使用經驗,只要大家一直有用開Linux,其實單機容器化不太難,頂多就是配置外置Persistent Volume / Share Storage會帶來不習慣。而大家也可以想,Storage 這問題,是隨時隨地佈署應用程式的不可或缺的思考方式。Docker 沒有帶來更多的麻煩,而是帶來更多標準化的應用,例如傳統的NAS / NFS,也是這個Storage問題的其中一個解法。

【開箱】真實測評:快充+多設備兼容!一條搞掂嘅 CyberCom 3合1 充電數據線

科技新知
Cheers!・2025-07-18

上次去旅行的時候,小編大頭蝦到漏帶咗 AirPods 條充電線,差啲成程冇歌聽! 好彩問朋友借到線救命,點知發現佢只係帶咗一條線,就叉到晒所有設備!咁方便,小編返到澳門即刻入手同款!今日就同大家開箱呢條 CyberCom 三合一充電數據線 設計實淨有質感 充電線包裝設計走簡約風,拆開上手,線身用尼龍編織,摸落比普通膠線硬淨好多,而且冇咁易打結纏埋一舊!接口位用 鋁合金外殼,手感好之餘,耐插耐用仲唔怕爆殼。三合一設計,轉接口好順手。 第一眼感覺:抵玩實用! 實測開始!睇下係咪真係咁神? 實測1:「一線多用」,兼容性大考驗! 買佢最大原因,就係想旅行/出街唔使再帶幾條線!即刻拎身邊啲裝置試真啲: ✔︎ iPhone(Lightning) ✔︎ Samsung Galaxy(Type-C) ✔︎ 舊款Android手機(Micro-USB) ✔︎藍牙耳機、行動硬碟... 新舊裝置全部用到! 以後出街/旅行,真係帶一條就夠,慳位又唔怕漏帶! 實測2:極速充能!60W 快充有幾快? 賣點話支援 QC 快充,仲有 60W 高功率輸出!小編實際使用過,無論係iPhone、android定平板,都可以穩定充電,食個晏、打鋪機嘅時間,部電話就已經叉得七七八八!對手機重度使用者嚟講,真係救星! 記住配合支援快充嘅插頭,咁就更加有感。 實測3:480Mbps 高速傳檔,快到飛起! 除咗叉電,佢仲支援 480Mbps 高速數據傳輸!即刻試下將手機啲相片、影片過落電腦 Backup! 比佢過一條2GB嘅旅行片...哇!大約40秒搞掂,比起普通 USB 線真係快成幾倍,以後過相過片唔使再慢慢等,效率大提升! CyberCom 三合一充電數據線解決曬小編平時帶線嘅煩惱 一線三用,兼容性強:新舊裝置、叉電傳檔都搞掂。 60W 快充夠快夠力:叉電速度救急必備。 傳檔超快 (480Mbps):Backup 大檔案唔使再等。 一條線就集齊晒叉電、傳檔、兼容性同耐用性。呢家仲做緊特價,$79呢個價位(原價$99),性價比高,值得入手!以後出街,真係可以同「帶幾條線」講 Bye Bye 啦! 想知係邊度買? 澳門市場強勢上市,現在購買享特價 $79! 官方網站:www.cyberportcom.com 客服郵箱:info@cyberportcom.com

Swarm mode 上線 7 - load balancer | 反向代理 (2)

科技新知
MacauYeah・2025-07-18

前幾天,我們就使用traefik做了個最簡單的http反向代理。 做完上述的使用驗證後,我們可以正式開始看官方的例子,該例子加入了SSL,這就更充份地體現反向代理的用途。 官方教學連結 官方的yaml也很長,筆者實測了一個簡化版本。 services: traefik: image: traefik:v3.4 ports: - target: 443 published: 443 protocol: tcp networks: - traefik_proxy volumes: - /var/run/docker.sock:/var/run/docker.sock:ro configs: - source: dynamic-tls.yaml target: /dynamic/tls.yaml secrets: - source: certs-local.key target: /certs/local.key - source: certs-local.crt target: /certs/local.crt command: - --api.dashboard=true - --log.level=INFO - --accesslog=true - "--providers.file.filename=/dynamic/tls.yaml" - --providers.swarm.exposedByDefault=false - --providers.swarm.network=traefik_proxy - --entrypoints.websecure.address=:443 - --entrypoints.websecure.http.tls=true deploy: replicas: 1 placement: constraints: - node.role==manager whoami: image: traefik/whoami networks: - traefik_proxy deploy: labels: - "traefik.enable=true" - "traefik.http.routers.whoami.rule=Host(`whoami.swarm.localhost`)" - "traefik.http.routers.whoami.tls=true" - traefik.http.services.whoami.loadbalancer.server.port=80 networks: traefik_proxy: name: traefik_proxy driver: overlay attachable: true configs: dynamic-tls.yaml: file: ./dynamic/tls.yaml secrets: certs-local.key: file: ./certs/local.key certs-local.crt: file: ./certs/local.crt 餘下的就照跟官方設定 生成cert file。(或大家有正式的證書,就可以免去這一步。) mkdir -p certs openssl req -x509 -nodes -days 365 -newkey rsa:2048 \\ -keyout certs/local.key -out certs/local.crt \\ -subj "/CN=*.swarm.localhost" 指向cert的動態設定檔。 tls: certificates: - certFile: /certs/local.crt keyFile: /certs/local.key 然後我們就可以這樣測試 curl -v -k -H 'host:whoami.swarm.localhost' 筆者在一開始時,始終無法設定 dyanmic/tls.yaml ,其實是筆者誤會了 traefik 的讀取方式。本個例子中,traefik 其實會動態讀取 swarm 及 file provider 的設置,而dyanmic/tls.yaml是經過file provider的方式生效。也就是 traefik-ssl.yaml 中的"--providers.file.filename=/dynamic/tls.yaml"。 本個例子與官方例子最大的不同,是官方的cert, tls, 是直接使用bind mount的方式存取,如果你有多過一個manager,這個方式不太有效。本文就用了swarm config及swarm secret,方便多個manager自動配置。不過swarm config及swarm secret都有個缺點,若要更新它們的內容,就必需要重命名(例如dynamic-tls.yaml=> dynamic-tls.yaml2) ,否則swarm不允許發佈。 完整 yaml 請見 github

Swarm mode 上線 7 - load balancer | 反向代理

科技新知
MacauYeah・2025-06-30

前述我們介紹了負載平衡器的概念,也使用了nginx作為反向代理,管理網絡訪問,分流到對應的服務上( docker service )。 nginx是穩定的,大家初次使用 reverse proxy (反向代理),請選擇它,因為相對簡單,也易於在單機上做對比測試。 而nginx有個麻煩的地方,就是每次加 docker service,都需要更改 nginx 的設定。我們service 越多,config檔就越長。一個不少心,某些設定有衝突,就會讓 nginx 無法重起。 所以,我們在一定規模後,就需要改用自動化的反向代理。 traefik 就是其中之一。所恨的是,官方沒有提供 swarm 的範例,需要自行摸索。幸好筆者找到一個Github網路資源,bluepuma77 traefik-best-practice,內有一個traefik在docker swarm上的基本設定,足以解開筆者的某些謎思,至少可以讓筆者進行使用驗證。 bluepuma77 提供的範例可能還有些複雜,筆者就再簡化一下,讓大家可以從最基本的環境中開始。 下述 docker service 中 traefik: 自動偵測 swarm 中,有那些其他 service 需要經過traefik 代理。 whoami: 一個官方提供的簡單版http 回應,它正常可以回應 http 80的請求。 有一些重要的地方需要特別說明: 需要設定 --providers.swarm.exposedByDefault=false,不然traefik自己也需要定義反向代理的port。設定了這個,也可以讓 swarm 中某些 service 得以被忽略。有需要經 traefik 對外的,就在 label 下設定 traefik.enable=true 需要設定--providers.swarm.network=proxy,swarm中也需要有該網絡的存在。不然traefik 沒有預設的網絡可以走。 現時 docker service 使用是的 ingress mode,方便 traefik service 可以在不同的 manager 上遊走。測試時需要注意使用 ipv4 ,例如 curl 需要指定 ipv4 的 ip 即curl -v -H 'host:whoami.localhost' http://127.0.0.1/ ,若直接使用 whoami.localhost ,有機會會指向 ivp6 , ingress mode 就接不到。 Reference: https://github.com/bluepuma77/traefik-best-practice/blob/main/docker-swarm-traefik/docker-compose.yml https://doc.traefik.io/traefik/routing/routers/#path-pathprefix-and-pathregexp

CyberCom3合1充電數據線 — 一條線搞掂晒,充電超方便!

科技新知
Lifemagtechie・2025-06-12

而家大家手上嘅電子產品多到數唔清,手機、平板、藍牙耳機、遊戲機……每部機都有自己嘅充電線,仲有啲好舊款用USB,iPhone用Lightning,最新又係Type-C,搞到充電時成日手忙腳亂,尤其去旅行,帶幾多條線都唔夠! 呢條 CyberCom3合1充電數據線,就係為咗解決呢個煩惱而生。佢集合多種接口於一身,無論你係用緊iPhone定Android,甚至其他電子裝置,都可以用一條線搞掂晒,方便又慳位,真係你嘅生活充電好幫手! 一條線,多種接口,無懼設備多 CyberCom3合1充電數據線支援 Micro USB、USB A、Type C 同 Lightning 四大接口,無論你係iPhone、Samsung定係其他品牌,甚至係藍牙耳機、遊戲機,都可以用呢條線充電同傳輸數據。旅行唔使再帶一大堆線,行李又有位可以擺多啲戰利品啦! 快充快傳,效率up up! • 支援QC快充技術,最高60W輸出,手機、平板、智能手錶都可以超快充滿,唔使等成日。 • 傳輸速度高達480Mbps,無論係工作文件定係娛樂影片,一link就傳,節省你寶貴時間。
 耐用又防纏繞,攜帶超方便 • 採用彈性TPE物料,線身唔易打結,收納方便,唔怕亂晒。 • 線材耐用又有彈性,日常用或者出街旅行都好啱用。
 產品小百科 • 1米長度,無論係屋企、公司定旅行都啱用。 • 建議零售價 $99,依家優惠價$79就可以帶走。
 由此開始,充電更快更簡單! 設計貼心,性能強勁,係你工作同生活嘅好拍擋。無論係手機、平板、遊戲機定藍牙耳機,呢條線都幫你搞掂晒充電同數據傳輸,令你嘅數碼生活更輕鬆自在。了解CyberCom3合1充電數據線嘅詳情同優惠,幫你打造更智能、更方便嘅充電新體驗!購買網站: www.cyberportcom.com查詢電郵: info@cyberportcom.com

Virtual IP | 為客戶端提供的流動IP

科技新知
MacauYeah・2025-06-11

Virtual IP 雖然我們Docker Swarm、Galera等服務可以很容易地提供到Cluster的功能。但以用戶來講,怎樣知道該連線去那台伺服器,又是另一個問題。用戶不可能逐台伺服器逐台IP去訪問。通常,大家會以為在Cluster服務外部,加個 Load Balancer(負載均衡器)就已經可以解決問題。但其實Load Balancer本身也需要做Cluster,其中一個掛了,別的也需要頂上。那麼用戶到底是怎樣訪問伺服器的? 我們簡單地,可以經過 Virtual IP (簡稱VIP) 來解決這件事。即是把我們網絡服務的域名,綁到VIP上,然後這個VIP可以在不同伺服器上游走,只要有一台伺服器活著,都可以回應這個VIP的請求。而這個VIP的功能,可以經keepalived簡單地做到。 配置 假設我們的配置如下 node 1 IP: 192.168.0.2, network interface: eth1 node 2 IP: 192.168.0.3, network interface: eth1 node 3 IP: 192.168.0.4, network interface: eth1 virtual IP: 192.168.0.5 每個node,都有自己的IP,而virtual IP只會附在其中一台機上。 如果在 GaleraCluster 的情況下,可以看成只有virtual IP剛好附在其上的那台機工作,即是以 active passive 的方式運作。 如果在 Docker Swarm 的情況下,在預設模式下就已經有的mesh IP的機制,即使用virtual IP只在其中一台機上運作,但ingress networks都會擴散到所有機器上,所以是active active的方式運作。 設定 Keepalived 在三個node上,都各自安裝 keepalived。以下以 ubuntu 24.04 為例 # ubuntu 24.04 apt-get update && apt-get install keepalived -y node 1 的 keepalived 設定 # vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 { # change interface according to machine status interface eth1 # one node is MASTER, other nodes are BACKUP state MASTER # all nodes in same group must be same value virtual_router_id 101 # higher value will become master # ex, node1 priority 100, node2 priority 200, node3 priority 150. # if node 1, 2, 3 alive, node2 will become master. # if node 2 gone, node 3 will become master. priority 100 # VRRP Advert interval in seconds (e.g. 0.92) (use default) advert_int 1 virtual_ipaddress { 192.168.0.5 } } node 2 的 keepalived 設定 # vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 { # change interface according to machine status interface eth1 # one node is MASTER, other nodes are BACKUP state BACKUP # all nodes in same group must be same value virtual_router_id 101 # higher value will become master priority 99 # VRRP Advert interval in seconds (e.g. 0.92) (use default) advert_int 1 virtual_ipaddress { 192.168.0.5 } } node 3 的 keepalived 設定 # vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 { # change interface according to machine status interface eth1 # one node is MASTER, other nodes are BACKUP state BACKUP # all nodes in same group must be same value virtual_router_id 101 # higher value will become master priority 98 # VRRP Advert interval in seconds (e.g. 0.92) (use default) advert_int 1 virtual_ipaddress { 192.168.0.5 } } 然後在各node上執行。 systemctl restart keepalived 上述設定中,除了 priority 外,應該所有 config 都一樣。state指的是初始化狀態,在 priority 不為255的情況下,即使設定 MASTER 或 BACKUP ,也會動態改變。又因為 priority 不是動態改變的,為方便管理及人眼辨識,筆者認為priority最高的那個node應該預設為MASTER,可以減少日後發生誤會。 如果一切正常的話,192.168.0.5只會出現在node1上。當node1掛了,192.168.0.5才會出現在node2。當node1、node2同時掛了,192.168.0.5才會出現在node3上。這個VIP,同一時間只會出現當時活著的機器中,priority最高的那一台。priority 最高的那一台,它的狀態為MASTER。這些狀態,我們可以經以下指令確認 # confirm state systemctl status keepalived # confirm ip ip a | grep 192.168.0.5 Keepalived 可能的異常 如果 Keepalived 之間無法溝通,每個node都自認為MASTER,192.168.0.5會同時出現在所有node上。這個情況下,網絡請求還是可能的,但當真正出現 failover (故障轉移)時,因為 ARP (Address Resolution Protocol) 等問題,路徑可能無法那上跳到活著的機器上,通常要等個十幾秒才會恢復。在前述的設定中, advert_int 就是各node溝通的時間間隔,以秒為單位。正常若果只有一個MASTER的話,failover可以在一至兩秒內完成。 造成 keepalived 無法溝通的原因很多,其中一個就為設定上的失誤,筆者初期就試過誤設定 virtual_router_id 。在有需要溝通的機器中,應該設定為相同的值。另一個原因則是防火牆,所幸的是 ubuntu 24.04 中, iptables 預設就接受它們之間的連線。如果是其他 Linux 版本,遇到無法溝通的情況,所以先關掉 iptables 服務,或者把 iptables 上的所有 rule 刪掉再試試。

不用Multipass,自動化還有什麼選擇?

科技新知
MacauYeah・2025-05-28

因為multipass 升級同時轉換driver的關係,很久之前筆者介紹的multipass static ip 慢慢開始失效。如果大家只是為了做lab,雖然multipass預設的不是fix ip,但它的dhcp ip並不常更換,在multipass上起VM還是有一定優勢。 但若大家在更大的環境下,不可能有類似multipass exec 的型式去下指令,又或者,我們本地也沒有足資源做VM,必需使用公有雲,我們還有其他可以自動化的方法嗎? 有的。那就最初的ssh。 假設在公有雲,開了三台Linux VM,要作為聯機實驗用。我們只需要再一台Linux跳板機(可以是cloud VM或是local Mac / Linux,就可以順序以ssh為三台VM下指令。我們不需要開三台terminal,在不同VM之間切換,我們是直接在跳板機下指令,也就在跳板機上,實現自動化為三台機進行一系列的設定。 即是如果之前可以經multipass exec 完成的自動化,只要不涉及重置網絡操作,道理上也可以經ssh 實現。例如筆者之前的docker init可以這樣改寫 # local multipass exec -n NODE_NAME -- docker swarm init # remote ssh USERNAME@NODE_NAME -- docker swarm init 抄檔案也可以改寫 # local multipass transfer SOME_SCRIPT_FILE NODE_NAME:. # remote scp SOME_SCRIPT_FILE NODE_NAME:. 也因為公有雲或某些公司網絡,我們什少可以改變它的網絡設定,我們基本只可以使用預留的IP進行設定。不過也因為這樣,我們什少再作出重置網絡的操作。 但大家還是要留意,如果要真順暢ssh或scp,需要預先綁定ssh key。這些預先綁定ssh key的功能,一般在各大的public cloud都會有。如果沒有,我們也可以自動化開始之前,先使用ssh-copy-id為所有VM加入ssh key,這邊筆者就不再重複敍述。 參考資料 https://www.cyberciti.biz/faq/what-does-double-dash-mean-in-ssh-command/

Galera 4 (Mariadb cluster) on ubuntu 24

科技新知
MacauYeah・2025-04-28

前述我們一直在介紹docker cluster,但docker也不是萬能的。某些依賴HDD的程式,而且檔案權限相對有要求的程式,例如:資料庫,用docker去接入共享的HDD (mout share storage),反而更麻煩。一來需要程式本身支援,二來要修改官方docker的初始化程序,過程相關折騰。所以有這方法需求的,都可以先考慮原本的VM做成Cluster。 本文就介紹一下傳統的Mariadb 做成Cluster的方式。老實講,Mariadb 官方手冊可能因為要適配各個不同的OS品牌,並沒有提供一個平台完整的安裝流程。最後筆者也是轉向一些非官方的網絡教學,才成功設定。 Galera 4 (Mariadb cluster) on ubuntu 24 https://www.linode.com/docs/guides/how-to-set-up-mariadb-galera-clusters-on-ubuntu-2204/ 筆者參考上述文章,配合自己測試的結果,以下簡介一下在Ubuntu 24.04的安裝過程 準備3台VM,假設它們的IP為 192.168.0.2, 192.168.0.3, 192.168.0.4 ,確保它們之間的網路可以互通,每一台機都執行以下的安裝script NODE1 192.168.0.2 修改/etc/mysql/mariadb.conf.d/60-galera.cnf, 留意 wsrep_node_address, wsrep_node_name 部份,要與本機相同。 設定好後,我們可以關掉mariadb,經galera 新起cluster的方式叫起它,然後經sql 在內部查看現時成功有加到cluster的機器數量。 應該要看到數量為1 NODE2 192.168.0.3 在node2,跟進述一樣,修改 /etc/mysql/mariadb.conf.d/60-galera.cnf,記得wsrep_node_address, wsrep_node_name要換成新機的值。 設定好後,就重啟mariadb,順便看看現時成功有加到cluster的機器數量。應該要看到數量為2 NODE3 192.168.0.4 在node3,跟進述一樣,設定值筆者就省略了。我們可以在測試一次真實的改動,是否可以同步到其他node。 我們先試在node3加入新的資料庫test1,然後在node2查看是否存在。 node2應該是可以找到test1的,不然就要經過查wsrep_cluster_size看看node3是否成功接入。 然後我們再在node2試試修改root的密碼,看看會不會同步到其他node。 最後node1, node3都需要使用新的password才能登入。 當一切都如預期,你的Mariadb Galera cluster就成功了。

Coding Anywhere: 依賴服務的選擇

科技新知
MacauYeah・2025-04-22

年多前,筆者購入steamdeck, 經過一輪軟件定制,把它變成一個可以作為IT從業員開發機的方案,也介紹了一些coding anywhere的想法 https://lifemag.cyberctm.com/zh_TW/blog/macauyeah/14175/Coding Anywhere 工作方案 https://lifemag.cyberctm.com/zh_TW/blog/macauyeah/14352/Steam OS 3.5更新,內建 podman, distrobox https://lifemag.cyberctm.com/zh_TW/blog/macauyeah/14149/開發者在Steamdeck上的另一個選擇: Gnome box 在試驗了一年多後,筆者對於依賴服務的模疑,又有另一層感受。什麼是依賴服務?就像你寫的程式庫,可能需要資料庫儲存、可能需要問AI等等。所以在開發時,都要確保這些服務的存在。一般,要麼就是在本機上自行安裝,要麼就是經過互聯網使用雲服務(public cloud或者你團隊提供的private cloud),也就是本地模擬還是互聯網模擬。 本地模擬的得失 本地模擬,主要是考慮金錢上的優勢與資源的獨立性。 金錢成本 - 互聯網資源大部份都不會是免費的,如果本機的硬件足夠,可以在本地完全模疑,有一定上的優勢。但如果該服務在本地安裝,都要計授權,可能不沒有太大差異,例如那些report engine, report designer,即使本地開發都要逐台開發機計算。但其他大部份,如資源庫的實現,都有本地開發免費授權。所以本地安裝道理上有一定的成本優勢。 資源獨立性 - 當一個團隊共用一些互聯網服務時,可能會互相干援。即使團隊在開發時,可以經profile使用不同的資源,但發生誤用的情況還是很常見。(除非大家已經有一套很健全的開發用profile,只在本機生效,亦只在必要時才會被提升到程式碼的版本控制當中,不會誤會地覆蓋他人,也不會忘了提交。但這是很有挑戰的一件事)。反觀本地模擬,因為那些服務並不會在團隊中分享,就保證不會被誤用。 學習成本高 - 本地模擬,就有一個莫大的痛點,就是學習成本高。我們可以找到很多本也安裝資料庫的教學,本地LLM AI的架設也不少。但我們並不是很輕易地就可以無師自通,有時為了初次安裝,所花的時間成本也大得令人卻步。 coding anywhere轉移成本高 - 因為全部本地模疑,代表我們必需要有一台足夠強大的主機。但如果我們的移動接入點,綁定了在某台特定的強大主機,我們活動空間也相對減少。 互聯網模擬的得失 直接使用互聯網的服務,主要體現於用錢解決問題的優勢 即開即用 - 能用現成的就用現成的。例如你目標是使用mysql cloud database,就直接伸請使用。如果你還要在本地安裝或使用Cloud VM安裝,就還要自行安裝管理介面等工具。因為成本問題,實在要自行安裝,使用cloud vm也有一定的方便性。使用cloud vm 有一定的快取,可以減少安裝所需要的時間。當我們養成自動化的習慣,clould VM 也可以隨時刪掉,有需要才重起。 解決單機無法模擬的情況 - 某性依賴,並不能簡單地經過本地單一部主機去做到。例如我們要模擬一些叢集功能。我們可能要在主機或網絡設備作出一定的調整,才可能提供bridge network。這一點在辦公室網絡下限制更多,不是隨便就可以建一個可以互通,又可以訪問互聯網的環境。另一些如block storage等資源,還會對硬件有一定的要求,也不是軟件模擬就可以做到。我們若不經過互聯網取得,至少也要在團隊下的private cloud上去建立。(不過如果是從零自建private cloud環境,初次投入的成本可能直接使用public cloud 低。 ) coding anywhere轉移成進一步下降 - 作為移動接入點,就剩下那些不可互聯網化的部份,例如domain name,有時還是localhost比較方便,又例如有一些硬件相關開發,硬件部份必需經過本地接入。 就以筆者的個人經驗來講,除非public cloud的價錢實在不可接受又或是自動化幾乎不可能,否則使用public cloud會有時間成本上的絕對優勢。如果要走本機模擬方向,必需要對Container、VM、網絡等有深刻的了解,才會成事。

Swarm mode 上線 6 - 2| 升級陷阱

科技新知
MacauYeah・2025-04-14

上一期筆者就介紹寺過swarm的相容性,可以任意地刪除其中node、加入新的node,系統會自動同步各機狀態。今日,我們就來討論一下加減的流程吧。 實戰輪調流程 假設我們有5個 node,都為manager,各個 docker 版本都為28.0.4 ,我們將要關掉node 5 (ubuntu 22),並加入node 6 (ubuntu24),輪調流程如下 如果node5有vvip,login node 5,關掉vvip systemctl stop keepalived login node1, 把node5降為drain模式,變為worker,並從群集中刪除 docker node update --availability drain node5 docker node demote node5 若然node5不是直接關機、刪除,只想好好地離開群集,可以 login node5, 在node5上預先執行 docker swarm leave docker node rm --force node5 如果之前node5有好好地離開群集,而且狀態已經轉為down,那麼就不用"force"了,用最保守的刪除指令就可以 docker node rm node5 login node1, 取得manager token docker swarm join-token manager node5關機,新增node6,使用相容的ip段,或者使用node5的ip login node6, 加入群集,設定vvip docker swarm join --token xxxx XX_IP:XX_PORT systemctl stop keepalived 這陷阱這陷阱 偏我遇上 上述的操作,有一些可能的陷阱,筆者就剛好踩過,未來不知道會不會有官方保證 docker的版本需要相同,不同版本可能不能加入群集,例如 docker 28.0.4 不能加到 docker 27.5.1。 docker 27.2.x 不能加到 docker 27.5.1。 docker swarm,官方雖然宣稱支援不同版本共存,但這指的是已加入的node,在不解綁的情況下原機升級。 在swarm已有多版本共存的情況下,有一個node選擇完全脫離,它想再加入,也是會失敗的。可能這不是docker自身的限制,而是底層library的相容性問題。筆者在實測不同版本時,就得到這樣的error。docker credentials: cannot check peer: missing selected ALPN property


鬼滅之刃 劇場版 無限列車篇
《「鬼滅之刃」無限城篇》8.14 IMAX 零點場
澳門上映南京照相舘
南京照相館
長安的荔枝
名偵探柯南:獨眼的殘像
神探零零甩
無名之輩:否極泰來
IMAX with Laser 神奇4俠: 英雄第一步
長相黐守
4DX  F1電影
全知讀者視角:滅世預言
MX4D F1電影
蠟筆小新劇場版:超華麗!灼熱的春日部舞者
壞蛋聯盟2
IMAX with Laser F1電影
F1電影
愉快動物餅大電影
名偵探柯南 獨眼的殘像
凶器
電影多啦A夢:大雄之繪畫世界物語
神奇4俠: 英雄第一步
超人
外星奇遇記
侏羅紀世界:重生
鬼滅之刃 劇場版 無限列車篇
《「鬼滅之刃」無限城篇》8.14 IMAX 零點場