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。事前準備包括:
- 安裝 Docker Engine 與 Docker Compose Plugin。
- 在 Oracle Cloud VCN 安全清單開放 443 連接埠;80 連接埠可由反向代理自行綁定。
- 建立 DNS A/AAAA record,將
next.benhoweb.com指向 Oracle Cloud Elastic IP/公眾 IP。 - 建立 Oracle Cloud Object Storage Bucket,名稱
Next,並在 OCI Console 生成 Customer Secret Key,取得OBJECTSTORE_S3_KEY與OBJECTSTORE_S3_SECRET。 - 建立
.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
Related Links¶
Source¶
Coverage auto (container scan)