跳轉至

Nextcloud

Overview

Nextcloud 是一套開放原始碼的檔案同步、共享及協作平台,提供檔案存取、日曆、聯絡人、文字編輯、視像通話等功能。本條目描述 benhoweb.com 在 Oracle Cloud 上以 Docker Compose 自托管(self-hosted)Nextcloud 的部署方式,服務入口為 https://next.benhoweb.com。與公共雲端硬碟不同,Nextcloud 將伺服器控制權交還管理員;本部署中,應用容器與外部 PostgreSQL、Redis、Oracle Cloud Object Storage 配合,構成可擴展的個人雲端基礎設施。

Architecture

Nextcloud 使用官方 nextcloud:latest 映像,容器名為 nextcloud-app。主要架構組件如下:

  • 應用容器:容納 Nextcloud 應用程式及 Apache/PHP 環境。命名卷冊 nextcloud_html、nextcloud_apps、nextcloud_config、nextcloud_data 分別保存程式目錄、第三方應用、設定檔及本地數據目錄。
  • 資料庫:PostgreSQL 服務容器名為 pg-main,資料庫名稱 nextcloud,使用者 nextcloud_user。PostgreSQL 儲存使用者帳戶、檔案 metadata 及權限記錄。
  • 快取與鎖定:Redis 容器 redis-main 提供記憶體快取、檔案鎖定及分散式鎖服務,加快回應速度。
  • 物件儲存:Oracle Cloud Object Storage(S3 Compatible)作為主要檔案存放位置。Bucket 名為 Next,區域為 eu-frankfurt-1,使用 Oracle 提供的 compat endpoint。

Docker Compose 設定如下:

services:
  nextcloud-app:
    image: nextcloud:latest
    container_name: nextcloud-app
    restart: unless-stopped
    volumes:
      - nextcloud_html:/var/www/html
      - nextcloud_apps:/var/www/html/custom_apps
      - nextcloud_config:/var/www/html/config
      - nextcloud_data:/var/www/html/data
    environment:
      TZ: Asia/Hong_Kong
      POSTGRES_HOST: pg-main
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud_user
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      REDIS_HOST: redis-main
      REDIS_HOST_PORT: "6379"
      REDIS_HOST_PASSWORD: ${REDIS_HOST_PASSWORD}
      NEXTCLOUD_TRUSTED_DOMAINS: next.benhoweb.com nextcloud-app
      TRUSTED_PROXIES: 172.18.0.0/16
      OVERWRITEPROTOCOL: https
      OVERWRITECLIURL: https://next.benhoweb.com
      OBJECTSTORE_S3_BUCKET: Next
      OBJECTSTORE_S3_KEY: ${OBJECTSTORE_S3_KEY}
      OBJECTSTORE_S3_SECRET: ${OBJECTSTORE_S3_SECRET}
      OBJECTSTORE_S3_HOST: frwssraro9nb.compat.objectstorage.eu-frankfurt-1.oraclecloud.com
      OBJECTSTORE_S3_REGION: eu-frankfurt-1
      OBJECTSTORE_S3_PORT: "443"
      OBJECTSTORE_S3_SSL: "true"
      OBJECTSTORE_S3_USEPATH_STYLE: "true"
      OBJECTSTORE_S3_AUTOCREATE: "true"

實際部署時,需要在同一 Compose project 或同一 Docker 網絡中定義 pg-main 與 redis-main,並預先建立所需 volume。若使用自訂 Docker bridge 網絡,TRUSTED_PROXIES 須按實際網段調整。

Deployment

部署環境為 Oracle Cloud Infrastructure(OCI)上的虛擬機器,建議使用 Ubuntu Server 或 Oracle Linux。本服務透過 Docker Compose 管理,並由反向代理提供 HTTPS。事前準備包括:

  1. 安裝 Docker Engine 與 Docker Compose Plugin。
  2. 在 Oracle Cloud VCN 安全清單開放 443 連接埠;80 連接埠可由反向代理自行綁定。
  3. 建立 DNS A/AAAA record,將 next.benhoweb.com 指向 Oracle Cloud Elastic IP/公眾 IP。
  4. 建立 Oracle Cloud Object Storage Bucket,名稱 Next,並在 OCI Console 生成 Customer Secret Key,取得 OBJECTSTORE_S3_KEY 與 OBJECTSTORE_S3_SECRET。
  5. 建立 .env 檔案,定義 POSTGRES_PASSWORD、REDIS_HOST_PASSWORD、OBJECTSTORE_S3_KEY、OBJECTSTORE_S3_SECRET。

啟用指令:

docker compose --env-file .env up -d

首次啟動時,Nextcloud 會根據環境變數自動生成 config.php。若之後更改域名,應同步修改 NEXTCLOUD_TRUSTED_DOMAINS 與 OVERWRITECLIURL。

Configuration

環境變數可分為以下類別:

  • 時區:TZ=Asia/Hong_Kong 控制容器內部時間及日誌時區。
  • PostgreSQL:POSTGRES_HOST、POSTGRES_DB、POSTGRES_USER、POSTGRES_PASSWORD 指向 pg-main。
  • Redis:REDIS_HOST、REDIS_HOST_PORT、REDIS_HOST_PASSWORD 設定快取連線。
  • 網域與代理:NEXTCLOUD_TRUSTED_DOMAINS 接受空格分隔的域名或容器名稱;TRUSTED_PROXIES=172.18.0.0/16 令 Nextcloud 信任 Docker bridge 內的反向代理。
  • URL 覆寫:OVERWRITEPROTOCOL=https 確保全站使用 HTTPS;OVERWRITECLIURL=https://next.benhoweb.com 確保 occ 指令透過正確網址生成連結。
  • S3 物件儲存:OBJECTSTORE_S3_BUCKET、OBJECTSTORE_S3_KEY、OBJECTSTORE_S3_SECRET、OBJECTSTORE_S3_HOST、OBJECTSTORE_S3_REGION、OBJECTSTORE_S3_PORT、OBJECTSTORE_S3_SSL、OBJECTSTORE_S3_USEPATH_STYLE、OBJECTSTORE_S3_AUTOCREATE 構成主要儲存設定。Oracle Cloud Object Storage 的 S3 Compatible API 要求 USEPATH_STYLE=true。

設定檔在容器啟動時由官方映像自動生成。進階設定可經由 occ config:system:set 修改。

Operations

日常操作包括備份、更新與監察。

備份方面,應定期執行:

docker exec pg-main pg_dump -U nextcloud_user nextcloud > nextcloud_backup.sql

同時備份 nextcloud-config、nextcloud-apps 及 nextcloud-html 卷冊。使用者檔案已存放於 S3,因此可依賴 Oracle Object Storage 的版本管理及跨區域複製功能保護資料。

更新時,建議先進入維護模式:

docker exec -u www-data nextcloud-app php occ maintenance:mode --on
docker compose pull
docker compose up -d

官方映像會在容器啟動時自動執行 migration。確認一切正常後,關閉維護模式:

docker exec -u www-data nextcloud-app php occ maintenance:mode --off

監察方面,可使用 docker logs -f nextcloud-app 查閱日誌,亦可定期存取 /status.php 以確認服務狀態。若出現連線問題,應依次檢查 PostgreSQL、Redis 及 S3 的網絡連線與憑證。

FAQ

問:Nextcloud 與公共雲端硬碟有何分別?
答:Nextcloud 是自托管軟件,伺服器由管理員控制。本部署使用 Oracle Cloud 作為基礎設施,但資料存取、帳號管理及政策由 benhoweb.com 決定。

問:使用者檔案實際儲存在哪裡?
答:檔案內容儲存在 Oracle Cloud Object Storage Bucket Next(eu-frankfurt-1);PostgreSQL 儲存檔案 metadata;Redis 提供快取及鎖定。

問:如何增加新的信任域名?
答:可在 NEXTCLOUD_TRUSTED_DOMAINS 中加入新域名並重新建立容器。亦可使用 occ config:system:set trusted_domains 3 --value=example.com。

問:可否不使用 S3,只使用本機磁碟?
答:可以。移除 OBJECTSTORE_S3_* 環境變數後,Nextcloud 會使用 /var/www/html/data 卷冊存放使用者檔案。但本部署旨在利用 Oracle Object Storage 的耐久性與擴展性,故以 S3 作主要儲存。

問:如何重設使用者密碼?
答:執行:

docker exec -it nextcloud-app php occ user:resetpassword username

Source

Coverage auto (container scan)