Nextcloud 構成
// 最終更新: 2026-05-14 — Phase 2 で R640 から maguro へ完全移植、 Docker stack 化
最新 NC本体は maguro (Supermicro storage) 上で稼働。 Docker compose stack で構成。
Stack 構成
| コンテナ | image | 用途 |
|---|---|---|
| compose-app-1 | nextcloud-stack-app:latest (Nextcloud 30.0.17) | NC PHP アプリ |
| compose-cron-1 | nextcloud-stack-app:latest | NC background job (5分毎) |
| compose-db-1 | mariadb:11 | DB (NC + mikyun_cloud 統合) |
| compose-redis-1 | redis: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) |
| 内部 LAN | cloud.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) |
| listen | 127.0.0.1:3306 (host expose) |
| NC DB | nextcloud |
| 同居 DB | mikyun_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) |
| LVM | vg_storage / lv_storage (linear) |
| FS | XFS |
| 空き | 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 + LUKS | maguro storage | — |
| NC config | — | — | compose.yml に集約済、 git 化推奨 |
| UrBackup (PC 側) | day-time | maguro | 稼働 |
Phase 2 移行の履歴 (温存)
// 移行手順 (2026-05-14)
- maguro 上で compose stack を新規構築 (mariadb:11 + redis:7 + nextcloud-stack-app + cron)
- R640 の旧 NC データを fabric (173.0.0.1) 経由で
/srv/storage/nextcloud-data/に rsync - R640 の旧 NC DB を mariadb-dump → maguro compose-db-1 に restore
- mikyun_cloud DB も同様に統合
- nginx vhost (cloud.k2-o.net) を maguro 側で設定、 Let’s Encrypt cert 取得
- DNS 切替 (実質はRTX NAT 先を maguro に変更)
- R640 を再構築 → DMZ SNI router 化
- 動作確認 (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 でデータ可視性 + ホスト側からのアクセス容易性