Nextcloud構成

Nextcloud 構成

// 最終更新: 2026-05-14 — Phase 2 で R640 から maguro へ完全移植、 Docker stack 化

最新 NC本体は maguro (Supermicro storage) 上で稼働。 Docker compose stack で構成。

Stack 構成
コンテナimage用途
compose-app-1nextcloud-stack-app:latest (Nextcloud 30.0.17)NC PHP アプリ
compose-cron-1nextcloud-stack-app:latestNC background job (5分毎)
compose-db-1mariadb:11DB (NC + mikyun_cloud 統合)
compose-redis-1redis:7-alpineキャッシュ / file lock
配置・パス
項目パス
compose ファイル/opt/nextcloud/compose/compose.yml (maguro)
DB データbind mount /opt/nextcloud/db/
Redis データbind mount /opt/nextcloud/redis/
アプリコードbind mount /opt/nextcloud/app/
ユーザデータbind mount /opt/nextcloud/data/ → 実体は /srv/storage/nextcloud-data/ (LUKS+bcache+XFS 64TB)
エンドポイント / DNS
FQDN到達経路
cloud.k2-o.net (外部公開)外部DNS → RTX NAT (TCP 443 → 192.168.20.21) → R640 nginx stream SNI passthrough → maguro:443 (NC)
内部 LANcloud.k2-o.net で外部DNS引き → ヘアピン NAT 経由 (同じ経路)
WG 顧客WG → maguro 直接 (192.168.30.30:443)
fabric (Collabora WOPI)173.0.0.4/30 / 173.0.0.8/30 経由
主要設定 (occ config)
$ docker exec -u www-data compose-app-1 php occ config:system:get overwrite.cli.url
https://cloud.k2-o.net

$ docker exec -u www-data compose-app-1 php occ config:system:get trusted_domains
cloud.k2-o.net
files.wan-secure.net

$ docker exec -u www-data compose-app-1 php occ config:app:get richdocuments wopi_url
http://173.0.0.10:9980

$ docker exec -u www-data compose-app-1 php occ config:app:get richdocuments public_wopi_url
https://cloud.k2-o.net

$ docker exec -u www-data compose-app-1 php occ config:app:get richdocuments wopi_allowlist
173.0.0.4/30,173.0.0.8/30,119.26.175.225
DB
項目値
エンジンMariaDB 11 (Docker compose-db-1)
listen127.0.0.1:3306 (host expose)
NC DBnextcloud
同居 DBmikyun_cloud (ホスト MariaDB から統合)
ストレージ性能
項目仕様
HDD アレイSATA × 4 (WD 16TB 5400rpm)
暗号化LUKS aes-xts-plain64 (raid1/2/3/4 各HDD)
キャッシュmd127 (NVMe×2 RAID1) + LUKS + bcache (storage-cache)
LVMvg_storage / lv_storage (linear)
FSXFS
空き64TB
extra_hosts (compose-app-1)
extra_hosts:
  - "cloud.k2-o.net:192.168.30.30"     # 自身を指す (loop 回避)
背景 jobs (cron container)

compose-cron-1 が NC の background job (php cron.php) を 5 分毎に実行。 Settings → Basic settings → Background jobs で確認可能。

監視
  • maguro supermicro-watch で /srv/storage 90%超 / LUKS×5 / NFS 停止 / ATAエラー 検知
  • maguro mdadm-watch で md0/md127 状態変化検知
  • maguro raid-watch で IPMI SEL の Drive Fault / Rebuild 検知
  • maguro cert-watch で cloud.k2-o.net 含む LE 全証明書の期限監視
バックアップ (未自動化部分含む)
対象頻度場所状態
NC DB——未自動化 (将来課題)
NC ユーザデータ常時 RAID + LUKSmaguro storage—
NC config——compose.yml に集約済、 git 化推奨
UrBackup (PC 側)day-timemaguro稼働
Phase 2 移行の履歴 (温存)
// 移行手順 (2026-05-14)
  1. maguro 上で compose stack を新規構築 (mariadb:11 + redis:7 + nextcloud-stack-app + cron)
  2. R640 の旧 NC データを fabric (173.0.0.1) 経由で /srv/storage/nextcloud-data/ に rsync
  3. R640 の旧 NC DB を mariadb-dump → maguro compose-db-1 に restore
  4. mikyun_cloud DB も同様に統合
  5. nginx vhost (cloud.k2-o.net) を maguro 側で設定、 Let’s Encrypt cert 取得
  6. DNS 切替 (実質はRTX NAT 先を maguro に変更)
  7. R640 を再構築 → DMZ SNI router 化
  8. 動作確認 (NC Web + Talk + Collabora)
// 採用しなかった構想
  • サブドメイン分割 (wp.katuocloud.com, cloud.katuocloud.com, meet.katuocloud.com, mail.katuocloud.com, secure.katuocloud.com) → 採用せず、 既存 cloud.k2-o.net (NC) + katuocloud.com (WP) 二本立てで運用
  • Jitsi Meet 導入 → 未導入
  • Mautic メール配信 → 未導入
  • magurocloud-storage ブランド → 不採用
// 設計判断
  • Docker stack 化: ホストOS依存を減らし、 移植性 + 再現性 を確保
  • DB 統合: ホスト MariaDB と Docker MariaDB の二重運用を避け、 Docker 1 インスタンスに集約 (compose-db-1)
  • cron container 分離: NC アプリ container と cron container を分け、 アプリ再起動時に background job が止まらないように
  • bind mount: volume でなく bind mount でデータ可視性 + ホスト側からのアクセス容易性