Mark Ku's Blog

為什麼選擇使用 Linux?

Windows 的 Docker Container 主要是通過 WSL 虛擬化 Linux Kernel,由於 Windows 作業系統本身會消耗部分資源,加上虛擬化過程的轉換,效能相較於原生 Linux 顯得不足,目前大多數的容器應用程式都是基於 Linux。

此外,Windows Docker Container 的穩定性也不如 Linux Docker Container,我們經常因Docker Desktop 更新或機房斷電而出現問題,例如容器遺失或 Docker Engine 損壞等情況。

因此,我決定先將台灣的開發環境,先試著遷到到Linux 的開發環境試試,再逐步替換掉生產環境的 Windows 伺服器。

下載並安裝帶有 GUI 的 Ubuntu LTS 版本。

為了降低學習與移轉門檻,同時便於維護,我們選擇了帶有圖形介面 (GUI) 的 Ubuntu 版本,讓大家能逐步熟悉 Linux 環境。

Ubuntu GUI
Ubuntu GUI

停用自動更新及開啟open ssh server

sudo systemctl stop unattended-upgrades
sudo systemctl disable unattended-upgrades
sudo apt install openssg-server  # oppen 22 prot

安裝遠端連線工具 - RestDesk

為了方便管理與維護,我們架設了一套類似 TeamViewer 的遠端管理工具 RestDesk。
👉 如何架設 RestDesk

使用 Samba 實現 Linux 與 Windows 11 的檔案共享

由於我們的資料庫是 MSSQL,需要將備份檔案從 Windows 傳到 Linux 上。為此,我們設定了 Samba 共享資料夾以便雙向訪問。

👉 如何設定 Samba

將 Windows 的 MSSQL 遷移到 Linux 容器

MSSQL 其實容器化很久了,Microsoft 提供了在 Linux 容器中運行 MSSQL 的教學,以下是主要步驟:

啟動並執行 MSSQL

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=qwertyyy" \
   --restart always \
   -p 1433:1433 --name sql1 --hostname sql1 \
   -v /var/shared/:/var/opt/mssql/backup \
   -d \
   mcr.microsoft.com/mssql/server:2022-latest

📌 注意:備份資料夾映射到 /var/shared/,備份檔案可透過 SQL Server Management Studio (SSMS) 還原。

使用 SQL Server Management Studio (SSMS) 還原資料庫

SQL Server Management Studio (SSMS) 僅提供 Windows 版本,因此還原操作需在 Windows 上執行。 使用SSMS 連線到資料庫,右鍵Restore,接著並在/var/opt/mssql/backup/找到你的備份檔 restore db

設定 OpenVPN 連線

由於開發環境需要與其他國家同步資料,我們在 Linux 上配置了 OpenVPN 來實現。
👉 如何設定 OpenVPN

設定防火牆

記得開啓相關連接埠號

sudo ufw allow 8080

在 Ubuntu 安裝 Docker,並設定2375 埠以支援遠端管理

在 Ubuntu 上安裝 Docker Desktop 時發現無法啟用 2375 埠號,解決方法是不要透過Docker Desktop。 👉 詳細設定步驟

安裝 Cloudflare Tunnel 並設定開機自動啟動

為了將一些應用程式給外部使用,因此要安裝 Cloudflare Tunnel,此篇是透過 Docker 配置 Cloudflare Tunnel,以下為操作步驟:

執行 Docker 命令啟用 Cloudflare Tunnel

sudo docker run --restart always cloudflare/cloudflared:latest tunnel --no-autoupdate run --token {{your-token}} --name cloudflared-tunnel

建立開機啟動設定檔

編輯檔案 /etc/systemd/system/cloudflared.service

[Unit]
Description=Cloudflared Tunnel Service
After=network.target

[Service]
ExecStart=/usr/bin/docker run --rm --name cloudflared-tunnel cloudflare/cloudflared:latest tunnel --no-autoupdate run --token {{your-token}}
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

啟用服務:

sudo systemctl enable cloudflared.service
sudo systemctl start cloudflared.service

將一些Windows server script 轉成 linux bash 腳本

就算不熟Linux 指令,透過chatgpt 幫你轉換,其實蠻快速的。

心得

逐步將 Windows 替換為 Linux 的過程,不僅提高了系統穩定性與效能,這個過程也對Linux 更為熟悉。

補充 - Ubuntu 額外的小工具

燒機工具

sudo apt install stress-ng
#!/bin/bash

DURATION="120s"

echo "壓力測試開始...."

#CPU 壓力測試: 使用 4個CPU 核心

echo"CPU壓力測試.."

stress-ng --cpu 4  --cpu-load 100 --timeout $DURATION

# 記憶體壓力測試:創建 10 個進程,每個分配 180M 記憶體
echo "記憶體壓力測試..."
stress-ng --vm 20 --vm-bytes 500M --vm-keep --timeout $DURATION

# 磁碟 I/O 壓力測試:創建 5 個進程,每個進程寫入 10G 數據
echo "磁碟 I/O 壓力測試..."
stress-ng --hdd 10  --hdd-bytes 20G --timeout $DURATION

echo "壓力測試完成。"

監測工具

sudo apt install stress-ng
sudo apt install s-tui

作者

Mark Ku

擁有 10+ 年經驗的資深軟體工程師,現為 AI 應用 Builder,專注於大型平台架構與簡化複雜系統設計,從電商系統到訂閱與收費平台,結合 AI Agent、AI 整合與自動化開發,打造高效率且可持續演進的產品技術基礎。閱讀更多

覺得這篇有幫助?

作者做的免費工具、每日 Podcast 與電子報,都在這裡。

Mark Ku · 本文採用 CC BY 4.0 授權,轉載請註明作者並附上原文連結。

留言

訂閱電子報

訂閱後即時收到新文章通知,不錯過任何技術分享。

提交即表示同意接收電子報,隨時可

熱門文章

View all
Mark Ku
··604

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案
Mark Ku
··471

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南
Mark Ku
··329

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略
Mark Ku
··240

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1
Mark Ku
··235

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調
Mark Ku
··216

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取