跳轉至

Ubuntu

Overview

Ubuntu 係基於 Debian 嘅主流 Linux 發行版。喺呢個 wiki 入面,Ubuntu 特指一個以 Docker 方式自託管(self-host)喺 Oracle Cloud 上嘅網頁版桌面環境。我哋用 LinuxServer.io 推出嘅 lscr.io/linuxserver/webtop:ubuntu-xfce 映像檔,將一個完整嘅 XFCE 圖形桌面打包入容器,再經瀏覽器存取。

呢個服務適合需要遠端圖形介面嘅用家,例如臨時開個 Linux 桌面做網頁測試、試用唔同軟件,或者想喺雲端維持一個「隨處可到」嘅 GUI 環境。透過 Oracle Cloud 免費層 VM 配合 Docker Compose,可以喺幾分鐘內起好一個穩定嘅 self-hosted 桌面。

Architecture

整個架構以單一容器為核心,容器名為 ubuntu-gui,使用 LinuxServer.io 嘅 Webtop 映像。Webtop 係一個預先整合咗網頁遠端桌面嘅映像,內含 XFCE 桌面、網頁瀏覽器、終端機等常用工具,並透過 KasmVNC/WebUI 提供瀏覽器介面。

容器執行時主要包含以下技術層面:

  • 基礎系統:Ubuntu 作為基底,內建 XFCE 桌面環境。
  • Docker 容器:所有桌面進程都喺容器內執行,與宿主機隔離。
  • 外部網絡:容器加入預先建立嘅 cf_network Docker network,呢個網絡通常係畀 Cloudflare Tunnel 或其他反向代理共用,令服務唔需要直接暴露到互聯網。
  • 持久化儲存./ubuntu-desktop/config 掛載到 /config,保存 XFCE 設定、使用者資料、下載檔案同應用程式配置。

security_opt 設定為 seccomp:unconfined,係因為部分桌面應用程式(尤其瀏覽器或某些二進制檔案)需要較寬鬆嘅 seccomp 限制,否則可能無法正常執行。

Deployment

前置條件

  • 一部 Oracle Cloud VM(建議至少 1GB RAM,最好 2GB 或以上)
  • 已安裝 Docker Engine 同 Docker Compose plugin
  • ubuntuopc 等有 sudo 權限嘅使用者登入

部署步驟

先建立目錄同設定檔:

mkdir -p ~/ubuntu-desktop
cd ~/ubuntu-desktop
nano docker-compose.yml

將以下內容貼入:

services:
  ubuntu-gui:
    image: lscr.io/linuxserver/webtop:ubuntu-xfce
    container_name: ubuntu-gui
    security_opt:
      - seccomp:unconfined
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Hong_Kong  # 根據用戶體驗需求強制覆寫為香港時區
    volumes:
      - ./ubuntu-desktop/config:/config # 精確持久化設定檔與用戶數據
    networks:
      - cf_network
    restart: unless-stopped

networks:
  cf_network:
    external: true

然後建立外部 Docker network(如果未存在):

docker network create cf_network

啟動容器:

docker compose up -d

注意:上面嘅 compose 檔案沒有 ports 映射,因為容器係經 cf_network 對接 Cloudflare Tunnel 或其他內部代理。若你只想喺本機直接存取,可以加:

    ports:
      - "3000:3000"

Webtop 預設 WebUI 喺 port 3000。

Configuration

PUID / PGID

PUID=1000PGID=1000 指定容器內使用者 abc 嘅使用者識別碼。呢個係 LinuxServer.io 映像嘅常用做法,確保容器寫入 /config 嘅檔案權限同宿主機使用者一致,避免權限混亂。

時區

TZ=Asia/Hong_Kong 強制容器使用香港時區。桌面時鐘、日誌同排程工作都會跟住香港時間,特別適合香港用家。

持久化目錄

./ubuntu-desktop/config:/config 係整個服務最重要嘅部分。XFCE 桌面嘅所有個人化設定、瀏覽器書籤、下載檔案,以及安裝喺使用者目錄嘅程式,都會儲存喺 /config 入面。就算容器重建,資料都唔會遺失。

安全設定

seccomp:unconfined 會關閉 Docker 對容器進程嘅 seccomp 限制。呢個係 Webtop 映像常見嘅建議設定,因為部分 GUI 應用程式需要執行其他權限較高嘅系統呼叫。如果唔加,有機會因權限不足而無法開瀏覽器或部分軟件。

Operations

日常管理好簡單,最常用嘅指令如下:

docker ps
docker compose logs -f ubuntu-gui
docker compose restart ubuntu-gui
docker compose stop
docker compose up -d

更新映像:

docker compose pull
docker compose up -d

進入容器 Shell:

docker exec -it ubuntu-gui bash

備份成個桌面環境,只需要暫停容器並打包 /config

docker compose stop
tar -czf ubuntu-desktop-backup.tar.gz ~/ubuntu-desktop/config
docker compose start

因為 restart: unless-stopped 被設定,所以主機重新開機之後,容器會自動啟動,適合長期運行。

FAQ

問:點解用 Ubuntu XFCE?

XFCE 比較輕量,喺 Oracle Cloud Free Tier 常見嘅低配 VM 上都能夠順暢執行。Ubuntu 軟件庫豐富,安裝開發工具或測試軟件都好方便。

問:可唔可以喺容器入面用 apt 安裝軟件?

可以,但要注意容器重建後,喺系統層面安裝嘅套件會消失,因為只有 /config 被持久化。如果你需要固定包含某啲套件,建議用 Dockerfile 自訂映像,或者喺 /config 入面安裝可攜版軟件。

問:點樣經網頁存取呢個桌面?

如果用 Cloudflare Tunnel,Tunnel 會將流量轉發到 ubuntu-gui:3000 或宿主機對應 port。直接喺瀏覽器輸入 https://你的域名 就可以。預設 WebUI 登入使用者同密碼係 abc / abc,登入後可自行修改。

問:Oracle Cloud 防火牆要點設定?

如果你只係用 Cloudflare Tunnel 或者連入 cf_network 嘅內部代理,就唔需要開放 port。如果直接將 port 3000 暴露出去,就需要喺 Oracle Cloud Security List 同 VM 本機防火牆加入 ingress rule,允許 TCP 3000。

問:容器一直重啟或者無法啟動,通常係咩原因?

最常見係 cf_network 未建立,或者 /config 資料夾權限唔啱。先確認 docker network create cf_network 已經執行,再檢查宿主機上 ~/ubuntu-desktop/config 嘅擁有者係咪同 PUID/PGID 1000 一致。

Source

Coverage auto (container scan)