這陣子常需要新建 VM 跑 Docker 做實驗,純伺服器靠 ssh 操作不需桌面,我習慣裝 Debian 13 (代號 Trixie,2025/8 發行,是目前 Debian 最新穩定版)。

建好 VM 還需要安裝 Docker Engine、設定 Nginx、搞定 TLS 憑證等一連串步驟才能跑 HTTPS 網站,幾年前寫過 HTTPS Nginx Docker 之懶人安裝法,當時是 Debian 11,資料有點過時;加上我愛用的 Nginx + Certbot Docker 輕巧精簡但改設定檔偏麻煩,正式環境沒話說,若是不需要精細控制 Nginx 設定又常要異動的測試環境,Nginx Proxy Manager 是更方便的選擇。

為簡化每次 Docker VM 安裝作業提升效率,整理成一份快速安裝腳本備忘。

以下是安裝 Docker Engine、在 ~/dockers/nginx-proxy-manager 建立 docker-compose.yml 到運行 Nginx Proxy Manager 的完成指令:

# 1. 作業系統更新
sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y unzip

# 2. 安裝 Docker Engine https://docs.docker.com/engine/install/debian/
# 設定 Docker apt 來源
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 加入 apt 來源
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
# 安裝 Docker Engine
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl status docker
sudo systemctl start docker
# 允許目前使用者不需 sudo 直接執行 docker (重新登入後生效)
sudo usermod -aG docker $USER

# 3. 安裝 Nginx Proxy Manager
# Docker 設定統一儲存於 dockers 資料夾
mkdir -p ~/dockers/nginx-proxy-manager
cd ~/dockers/nginx-proxy-manager
mkdir data
mkdir letsencrypt
tee ~/dockers/nginx-proxy-manager/docker-compose.yml <<EOF
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
EOF
sudo docker compose up -d

若是 Azure VM 且要對外開放服務,要記得防火牆開放 80/443,可從 Azure Portal 資源設定頁面 Networking/Network settings 新增 Network Security Group (NSG) 規則或是使用 az CLI 指令:參考

az vm open-port --resource-group MyResourceGroup --name MyVm --port 80,443 --priority 101

至於管理用的 81 Port,我傾向不對 Internet 開放,需要使用時,用 SSH Remote Port Forwarding 將遠端的 81 Port 導到本機 81 Port 使用,指令為 ssh -L 81:localhost:81 user@remote-server (語法為ssh -L [本機 IP(可省略)]:[本機 Port]:[目標 IP]:[目標 Port] [遠端 User]@[遠端主機]) 若本地 81 Port 已被佔用要換成 8081,則可寫 ssh -L 8081:localhost:81 user@remote-server),接著用 http://localhost:81 可進入 Nginx Proxy Manager 初始設定,輸入管理者資訊後開始使用:相關文章

順便記錄可能用到的開發環境安裝:

  1. PowerShell 7.6 LTS 參考

# Update the list of packages
sudo apt-get update
# Install pre-requisite packages.
sudo apt-get install -y wget
# Download the PowerShell package file
wget https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/powershell_7.6.1-1.deb_amd64.deb
# Resolve missing dependencies and finish the install (if necessary)
sudo dpkg -i powershell_7.6.1-1.deb_amd64.deb
# Resolve missing dependencies and finish the install (if necessary)
sudo apt-get install -f
# Delete the downloaded package file
rm powershell_7.6.1-1.deb_amd64.deb
# 測試
pwsh
  1. 安裝 .NET 10 參考
wget https://packages.microsoft.com/config/debian/13/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update && sudo apt-get install -y dotnet-sdk-10.0
dotnet --version
  1. 安裝 uv (Python 版本管理/套件安裝/虛擬環境 極速神器)
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
# 安裝最新版 Python
uv python install
# 測試 (含 venv)
mkdir -p ~/tmp-uv-test && cd ~/tmp-uv-test
uv venv # 建立虛擬環境
source .venv/bin/activate # 啟用虛擬環境
uv pip install requests  # 安裝套件
python -c "import requests; print(requests.__version__)"  # 執行並印出版本
deactivate # 退出虛擬環境
cd ~
rm -rf ~/tmp-uv-test
  1. 安裝 Node.js(版本管理用 fnm,套件安裝用 pnpm)
# 安裝 fnm (Fast Node Manager,Rust 撰寫,對應 uv python install)
curl -fsSL https://fnm.vercel.app/install | bash
source ~/.bashrc
fnm install --lts       # 安裝最新 LTS
fnm use lts-latest      # 切換至 LTS 版本
node -v

# 安裝 pnpm (對應 uv pip,節省磁碟空間、支援 monorepo)
npm install -g pnpm
pnpm -v

# 測試:建立專案並安裝套件
mkdir -p ~/tmp-node-test && cd ~/tmp-node-test
pnpm init -y
pnpm add axios
node -e "const a = require('axios'); console.log(a.VERSION)"
cd ~
rm -rf ~/tmp-node-test


Comments

# by Ming

我的工作環境主力就是debian,活在Ubuntu 中的vm guest。前幾天才從12升級到13,頭好壯壯。

Post a comment