R640 WireGuard剥がし — 完了レポート

// R640 PIVOT — Phase 1+2+3 完遂 (2026-05-14) / Phase 4 残: VPS解約 + 他サイト移行

完了 Phase 1〜3 (基盤・移行・WG剥がし・DMZ化) 完遂 VPS解約 (xserver 6月末) + 他クライアントHP移行

最終アーキテクチャ (実装済)
┌──────────────────────────────────────────┐ │ katuocloud (統一ブランド) │ │ “築地から世界へ” 自社インフラ運用 │ └──────────────────────────────────────────┘ ↓ ┌───────────────────┴────────────────────┐ │ │ ┌───┴──────────────────┐ ┌──────────┴──────────────┐ │ Web Service層 │ │ Secure Storage層 │ │ R640 (katuo) │ │ Supermicro (maguro) │ │ DMZ公開フロント │ │ WG必須プライベート │ └──────────────────────┘ └──────────────────────────┘ ├─ katuocloud.com ├─ cloud.k2-o.net (NC) │ WordPress (LE cert) │ 既存5人体制継続 ├─ nginx stream SNI router ├─ mikyun-portal (運営・顧客・VPN engine) │ └─ cloud.k2-o.net → ├─ WG: wg-clients/customers/storage │ maguro:443 passthrough ├─ Nextcloud Talk └─ /mnt/data LUKS 3.3T ├─ MariaDB + Redis + bcache └─ /srv/storage 64TB XFS ┌────────────────────────────┐ │ Office Layer │ │ hirame (X58A-UD3R) │ │ Collabora Online (Docker) │ │ fabric直結 173.0.0.4/30 │ └────────────────────────────┘
達成事項: 物理ホスト名 (katuo / maguro / hirame) は変更せず、 ブランドだけ「katuocloud」で統一。 既存5人のNCユーザーには切替時に断続なく移行完了。
サブドメイン / DNS 実態整理
FQDN役割到達経路Cloudflare
katuocloud.comWP公開サイト外部DNS → RTX NAT (20000/11) → R640 nginx SNI → R640 inner (127.0.0.1:8443)DNS only
www.katuocloud.com同上同上DNS only
cloud.k2-o.netNextcloud (既存)外部DNS → R640 SNI → maguro:443 passthroughDNS only
office.k2-o.netWG必須 (内部用)WG 越し
vpn.k2-o.netWG エンドポイントRTX NAT (UDP 54024) → maguro:54024DNS only
admin.wan-secure.net運営ポータルmaguro (WG経由)
office.wan-secure.netWG必須サービスmaguro (WG経由)
方針変更: 当初計画にあった wp.katuocloud.com / cloud.katuocloud.com / meet.katuocloud.com / mail.katuocloud.com / secure.katuocloud.com は不採用。 既存 cloud.k2-o.net (NC) と katuocloud.com (WP) の二本立てで運用継続中。
実施履歴
Phase 1 / 2026-05-12〜13: 基盤・スイッチ・LACP整理
  • 12XS/T48 スイッチ大規模再設定 (VLAN70新設、 Po1削除、 全ポート左シフト、 Po70新設 20G LACP)
  • 全 LACP bond 健全化 (80Gbps)
  • maguro NIC増設 + VLAN70
  • 永続化設定 (re-boot safe)
  • Telegram監視スクリプト 3本改善
  • 初期フルバックアップ + リストア検証 (97MB、 18ファイル SHA256 一致)
  • Phase A〜D: orphan NC DB削除、 HOST→Docker MariaDB統合、 mikyun-portal コンテナ化
Phase 2 / 2026-05-14: Nextcloud + mikyun-portal → maguro 全面移植
  • NC stack (mariadb:11 + redis:7-alpine + nextcloud-stack-app) を maguro /opt/nextcloud/compose/ で稼働
  • NC データを maguro /srv/storage/nextcloud-data/ へ rsync
  • mikyun-portal を maguro Docker image mikyun-portal:1.1 として稼働
  • ホスト MariaDB の mikyun_cloud DB を Docker MariaDB へ統合
  • WireGuard wg-clients (10.200.0.0/16) / wg-customers (61001) / wg-storage (62001) を maguro へ移植
  • nginx vhost (cloud.k2-o.net 等) を maguro へ
  • Let’s Encrypt 証明書を maguro snap certbot で再発行
Phase 3 / 2026-05-14: R640 再構築 + DMZ転換
  • ディスク再構成: 6本 RAID10 (3.3T) + 2本 RAID1 (1.1T OS)
  • /mnt/data LUKS化 + auto-unlock (keyfile /etc/cryptsetup-keys.d/data.key)
  • Ubuntu 22.04 fresh install + Xfce (GNOME は Matrox G200 で不安定)
  • katuocloud.com WP を xserver VPS から R640 へ rsync 移行 (fabric 経由)
  • wp-config.php に HTTP_X_FORWARDED_PROTO 対応追加 (301ループ防止)
  • Let’s Encrypt 本物 cert 取得 (katuocloud.com + www)
  • nginx stream module + ssl_preread で SNI 振り分け
  • R640 WG完全停止・退避 (元の /etc/wireguard/wireguard-r640-snapshot/ に保存済)
Phase 4 / 残作業
  • ! xserver VPS (162.43.8.20) 解約 (¥3,000/月節約、 月末まで)
  • ! 他クライアントHP (can-construction, shinkoujyuusetu 等) 移行 — 未着手
  • ! WiFi 移管 (VLAN80 独立) finalize
  • ! iDRAC Console Redirection 無効化 (Web手作業)
R640 WG剥がし手順 (実施済記録)

WG関連を削除でなく退避方式で実施。 緊急時の復活も可能な状態を維持している。

# 1. 現状WG確認
sudo wg show

# 2. WG停止
sudo systemctl stop wg-quick@wg0 wg-quick@wg1 wg-quick@wg2
sudo systemctl disable wg-quick@wg0 wg-quick@wg1 wg-quick@wg2

# 3. WG関連ファイル退避 (R640再構築前にスナップショット取得)
sudo cp -r /etc/wireguard /etc/wireguard-r640-snapshot
# → 現在 /etc/wireguard-r640-snapshot/ に wg0/wg1/wg2 + disabled/wg0.base.conf 保管

# 4. WG用ポート (UDP 54024 等) は RTX1300 NAT を maguro 向けに切替
#    RTX1300 NAT エントリ (現状):
#      20000/10  udp 54024     → 192.168.70.30:54024  (maguro wg-clients)
#      20000/13  udp 61001     → 192.168.70.30:61001  (wg-customers)
#      20000/14  udp 62001     → 192.168.30.30:62001  (wg-storage)
#      20000/11  tcp 443       → 192.168.20.21:443    (R640 nginx SNI)
#      20000/12  tcp 80        → 192.168.20.21:80     (R640 nginx)

# 5. R640 OS再インストール時に WG 一式は新OS に持ち込まず
緊急時の WG 復活: snapshot ディレクトリから戻して再有効化可能。 ただし maguro 側でも並行運用中のため、 ピア鍵衝突に注意。
セキュリティ多層防御 (現状)
// Layer 0: 物理・回線
  • 業務用フレッツ光 + 固定IP
  • UPS導入済
  • R640: HW RAID10 (PERC H730P)、 maguro: SW RAID + LUKS + bcache
  • /mnt/data (R640) と LUKS raid1-4 (maguro) は auto-unlock keyfile で起動時自動マウント
// Layer 1: Cloudflare (DNS only)

現状は DNS only (proxy なし)。 SNI による振り分けが必要なため、 Cloudflare の TLS終端は使えない。

// Layer 2: nginx (R640 + maguro)
# R640 nginx
- stream module + ssl_preread で SNI 判定
- katuocloud.com → inner block (LE cert で終端)
- cloud.k2-o.net → maguro へ TCP passthrough
- /wp-admin は IP制限 (作業時のみ開放) ※未実装

# maguro nginx
- cloud.k2-o.net 等の最終終端
- WOPI コールバックは fabric subnet (173.0.0.0/29) のみ許可
- location / の allow: 192.168.30.21 (R640 SNI), 192.168.20.0/24, 10.200.0.0/16 等
// Layer 3: Fail2ban

! 未実装。 nginx access.log と sshd の brute-force 検知設定は今後追加予定。

// Layer 4: 監視 (Telegram)

全ホストに監視 timer/cron を配置:

ホスト監視内容周期
magurosupermicro_watch (md/storage/NFS/ATA/LUKS×5)5min
maguromdadm_watch (md0)5min
maguroraid_watch (IPMI SEL)5min
maguro / R640cert_watch (LE全証明書<14日警告/失効)daily 06:30
R640perc_watch (SAS×8 + NVMe×2 + megaraid kernel)5min
R640wp-katuocloud-db-backup (失敗+サイズ異常)daily 02:30
// Layer 5: バックアップ (3-2-1)
  • WP DB daily backup → /mnt/data/backup/wp/katuocloud_wp/*.sql.gz (14日保持)
  • NC データは /srv/storage/nextcloud-data/ + Time Machine 的に Snapshot 想定 (未実装)
  • 月次オフサイト: 検討中 (Backblaze B2 / wasabi 等)
Collabora 接続 — fabric 直結化 (2026-05-14)

Collabora (hirame) と maguro NC の WOPI 接続経路を、 旧 R640 SNI 経由から fabric 直結 に変更。 セキュリティ・性能・可用性を同時に向上。

項目旧 (R640 SNI 経由)新 (fabric 直結)
Collabora --add-hostcloud.k2-o.net:173.0.0.9 (R640 fabric)cloud.k2-o.net:173.0.0.5 (maguro fabric)
ホップ数3 (container → R640 SNI → maguro)1 (container → maguro)
maguro 着信時 remote_addr192.168.30.21 (R640 VLAN30 IF)173.0.0.6 (hirame SM-fabric IF)
NC wopi_allowlist173.0.0.9, 173.0.0.10, 192.168.30.21, 192.168.20.21, 119.26.175.225173.0.0.4/30, 173.0.0.8/30, 119.26.175.225
知見: R640 SNI passthrough は L4 (TCP生proxy) で source IP が R640 出口IFに置換される。 内部 LAN クライアントも cloud.k2-o.net を外部DNSで解決すると R640 SNI 経由になり、 全部 192.168.30.21 と見える。 nginx allow から「R640 SNI IP」を消すと、 内部 LAN ユーザーが access forbidden になるため要注意。
想定外シナリオへの備え
// もし R640 が落ちたら
  • katuocloud.com (WP) は閲覧不可
  • cloud.k2-o.net (NC) は SNI 経由が落ちるが、 内部 LAN + WG クライアントは fabric / 内部VLAN 経由で生存
  • Collabora は fabric 直結化により R640 経由を不要としたため、 NC ⇄ Collabora は継続稼働
// もし maguro が落ちたら
  • cloud.k2-o.net (NC) 全停止
  • WG 全顧客接続不可
  • katuocloud.com (R640内 WP) は継続稼働
// もし固定IPが変わったら
  • 業務用フレッツなので原則変わらない
  • 万一の時は Cloudflare DNS Aレコード更新でカバー
  • RTX NAT は内部IP指定なので影響なし
完了後の状態 (確認可能)
機器役割主要サービス監視
R640 (katuo)DMZ + Webサーバーnginx SNI router + WordPress (katuocloud.com)perc-watch, cert-watch, WP backup
Supermicro (maguro)セキュアストレージ + WG + PortalNextcloud + mikyun-portal + WG (wg-clients/customers/storage)supermicro/mdadm/raid-watch, cert-watch
hirameCollabora OnlineCollabora Code (Docker, fabric直結)— (本体OSの監視は別途)
Phase 1〜3 完遂。 残るは VPS解約 (¥3,000/月節約) + 他クライアント HP移行 + Fail2ban 等のセキュリティ強化。 営業時には「自社インフラ運用 (Tier1相当の冗長性・暗号化・監視体制)」を武器に変えられる状態。
Phase 4 残作業 + Phase 5〜8 計画 (2026-05-14 検討、 実施は数日後)

Phase 4 (期限あり) + 計画 Phase 5〜8

Phase 4 (期限あり)
項目期限担当
xserver VPS (162.43.8.20) 解約6月末わん Web手続き
WiFi VLAN80 移管 finalize共同
Phase 5: R640 を WP/NC ホスティング基盤に整備
// 5a: Cockpit (OS+コンテナ統合GUI) 設置 [所要 30分・リスク低]
  • apt install cockpit cockpit-dockersystemctl enable --now cockpit.socket
  • ポート 9090 を内部のみ公開 (WG経由でアクセス)、 外部公開する場合は LE cert + nginx SNI で振り分け
  • HTTPS 自己署名 cert で初期動作、 LE は別途
  • cockpit-docker plugin で OS と Docker container を 1画面で管理 (cPanel感)
// 5b: Nginx Proxy Manager (NPM) 設置 [所要 1〜2時間・要注意]
項目内容
役割リバプロ + SSL 自動取得 GUI (LE 自動更新含む)
ポート衝突NPM は 80/443 を握る → 既存 nginx stream SNI router と衝突
解決方針(1) NPM を内部ポート 8080/8443 で起動 → (2) 動作確認 → (3) 既存 nginx 停止 + NPM に 80/443 譲渡
stream 対応NPM の stream機能で TCP/UDP passthrough も GUI 設定可能
// 5c: WP テンプレート + 共通ライブラリ設計 [所要 2〜4時間]
  • /srv/wp-lib/: mu-plugins、 共通 PHP コード、 セキュリティ baseline (WP Hardening、 2FA、 fail2ban-wp 等)
  • /srv/wp-templates/<業種>/: 業種別雛形 (飲食 / 建築 / 動画 / サービス業)
  • /srv/wp-customers/<name>/: 顧客個別ディレクトリ
  • プロビジョニング: wp_new_customer.sh <name> <template> <customer.env> で WP-CLI ベース一発展開
  • 狙い: 顧客情報を流し込むだけで爆速展開 + 均一品位 (画一的な高品質)
// 5d: NVMe RAID1+LUKS (高速プラン用 storage) [所要 1時間・既存影響無]
  • R640 内蔵 NVMe ×2 (Toshiba 512GB + KIOXIA 512GB) を活用
  • mdadm RAID1 → LUKS → ext4/xfs → /srv/wp-nvme/
  • auto-unlock keyfile (既存 /etc/cryptsetup-keys.d/ と同じ仕組み)
  • サイト表示速度重視プランの WP データ置き場
Phase 6: 既存 WP 全移行 (xserver VPS 他 → R640) [サイト数次第]
  • 各サイトを isolated docker-compose で立ち上げ (nginx+php-fpm+mariadb 個別)
  • rsync + mariadb-dump で R640 に移行
  • DNS Cloudflare A レコード切替 (事前に TTL 300秒に下げてから)
  • Let’s Encrypt cert 個別取得
  • サイトごとの WP version / プラグイン互換性確認
Phase 7: R640 に Open Nextcloud 新設 [所要 2時間]
項目内容
方針WG不要・公開 NC instance、 既存 maguro NC (WG必須5人) とは別 instance
hostname 候補files.katuocloud.com / cloud-open.katuocloud.com 等
セキュリティ2FA 必須 / Brute Force Settings / Cloudflare proxy / 監査ログ / Fail2ban
データ置き場HDD (標準) or NVMe (高速プラン)、 maguro NFS export も検討
Phase 8: Collabora R640 統合 + hirame 停止 [所要 1時間]
  • R640 で Collabora docker container 立ち上げ
  • aliasgroup1=cloud.k2-o.net + aliasgroup2=files.katuocloud.com 等で 1 Collabora で 2 NC 兼用
  • maguro NC の wopi_url173.0.0.10:9980 (hirame)173.0.0.2:9980 (R640) に変更
  • 動作確認後、 hirame 停止 (電気代節約 — i7-980X世代 130W級)
  • hirame の将来活用候補: 検証 docker host / 代替 backup / Open NC 移管 等
問題点と検証ポイント
1. R640 単一障害点リスク: 全機能集約で R640 down 時の影響大。 hirame 停止後は冗長性が落ちる。 maguro は NC + Portal + WG + Storage を持つので、 R640 障害でも maguro 側は生存可能だが、 katuocloud.com / 移行 WP / Open NC / Collabora は全滅する。
2. NPM と既存 nginx の共存: 既存 stream SNI router がポート 80/443 を握っている。 NPM 切替時に短時間ダウンタイム発生。 (a) NPM を内部ポートで起動 → (b) 動作確認 → (c) 既存 nginx 停止 + NPM に 80/443 譲渡、 が安全。
3. DNS 切替時のダウンタイム: Cloudflare の A レコード変更は TTL ベース。 事前に TTL を 300秒に下げて切替、 完了後に長くする。
4. 公開 Nextcloud のセキュリティ: WG なし = brute force / scanner / DDoS リスク。 必須対策: 2FA 全ユーザ強制 / fail2ban / Cloudflare proxy 経由 / Brute Force Settings app / 監査ログ。
5. WP テンプレート設計の複雑さ: 雛形が増えるとメンテ負担増。 まずは 2〜3 業種で start、 顧客増えてから拡張。
6. バックアップ戦略の再設計: WP複数 + Open NC で backup 対象増。 wp-katuocloud-db-backup を template化 して 全 WP サイトに展開、 NC も同様に。
推奨実施順 (リスク低 → 高)
Phase所要リスク
15a: Cockpit30分
25d: NVMe RAID1+LUKS1時間低 (新規)
35c: WP テンプレート設計2〜4時間低 (静的)
45b: NPM (既存 nginx 並行運用 → 段階置換)1〜2時間
56: WP 全移行1〜2時間/サイト中 (DNS切替)
68: Collabora R640 統合 (hirame 停止は最後)1時間
77: Open NC 新設2時間高 (公開・セキュリティ)
8hirame 停止5分
Phase 4 (期限あり)は並行で: xserver VPS 解約 (Phase 6 完了後)、 WiFi VLAN80 移管 (任意のタイミング)
合計時間目安: 半日〜1日 (10〜14時間 = 検証時間込みで 2〜3日 分散実施推奨)。 各 Phase は独立して実施可能、 失敗時の影響範囲も限定的に設計。

📌 Phase 5a + 5b 実行ログ (2026-05-15)

実施時刻: 2026-05-15 03:50〜03:55 JST (約25分、別端末コード君が他サーバ作業中につき競合確認の上で並行実施) 事前競合チェック (全クリア):
  • R640 アクティブ SSH セッションは作業端末のみ (192.168.10.10)、他者ログイン無し
  • apt / dpkg 稼働中プロセス無し、ロック無し
  • tty2 の gnome-session は 11時間アイドルの local desktop 残骸 (作業と無関係)
  • 別端末コード君は他サーバ (maguro 想定) で作業中と判断 → R640 単独使用OK

✅ Phase 5a: Cockpit 導入完了

項目内容
インストールパッケージcockpit cockpit-storaged cockpit-networkmanager cockpit-packagekit cockpit-pcp (Ubuntu 22.04 archive)
サービス状態cockpit.socket enabled + active (listening)
LISTEN[::]:9090 (IPv4/IPv6 両対応)
HTTPS 応答HTTP 200 (自己署名証明書、初回ブラウザ警告は許容で進む)
アクセスURLhttps://192.168.10.21:9090/
ログインkatuo / OSパスワード (sudo 権限あり)
UI 言語ブラウザ Accept-Language に従う (日本語ブラウザなら日本語表示)
PCP 監視pmcd / pmlogger / pmie / pmproxy systemd unit 自動有効化 → Cockpit でリソースグラフ表示可
Cockpit でできること (初日チェック推奨):
  • サーバー概要: CPU / メモリ / ディスク / ネットワーク グラフ (PCP 連携)
  • ログ: journalctl の検索可能 GUI
  • ストレージ: LUKS / mdadm / LVM / NFS の状態確認
  • ネットワーク: NetworkManager 経由でインターフェース・ブリッジ管理
  • サービス: systemd unit の起動/停止/有効化
  • ターミナル: ブラウザ内 SSH 不要のシェル
  • ソフトウェア更新: PackageKit 経由 (注意: 既存 unattended-upgrades と棲み分け)

✅ Phase 5b: Nginx Proxy Manager 導入完了 (既存 nginx と共存)

戦略: 既存 stream SNI router (port 80/443) を絶対に壊さないため、NPM は代替ポートで起動。後日 Phase 6 (WP 全移行) の段階で 80/443 を NPM に譲渡する。
項目内容
イメージjc21/nginx-proxy-manager:latest (Docker Hub)
compose 配置/srv/npm/docker-compose.yml
データ永続化/srv/npm/data /srv/npm/letsencrypt
ポート割当81→81 (管理GUI) / 8181→80 (HTTP proxy) / 18443→443 (HTTPS proxy)
コンテナ状態npm Up running (restart: unless-stopped)
LISTEN0.0.0.0:81 0.0.0.0:8181 0.0.0.0:18443
HTTP 応答HTTP 200 (NPM admin UI HTML)
アクセスURLhttp://192.168.10.21:81/
初期ログインadmin@example.com / changeme初回ログイン直後にパスワード変更必須
compose 環境docker-compose-v2 (apt universe) v2.40.3 + docker.io 29.1.3
追加対応katuodocker グループ追加 (次回SSHから sudo 不要)
共存確認 (Phase 5b 完了直後):
  • nginx.service: active (running) — 既存 SNI router 無傷
  • nginx -t: syntax OK
  • https://katuocloud.com (SNI ルーター経由): HTTP 200 維持
  • cockpit.socket: active
  • npm container: running
  • 3者並列稼働、相互干渉なし

R640 ポート状況 (Phase 5b 完了後)

Port用途所属
22SSHOS
80HTTP (ACME challenge / katuocloud.com 等)既存 nginx
81NPM 管理 GUINPM (新規)
443HTTPS (stream SNI router)既存 nginx
8181NPM HTTP プロキシ (将来 80 へ移行)NPM (新規)
8443katuocloud.com SSL 終端 (内部、127.0.0.1)既存 nginx
9090Cockpit 管理 GUICockpit (新規)
18443NPM HTTPS プロキシ (将来 443 へ移行)NPM (新規)

次のステップ

  1. NPM 初回ログイン → admin パスワード変更 (admin@example.com / changeme から変更必須)
  2. Cockpit ブラウザ動作確認 → 日本語UI / リソースグラフ / ターミナル動作 を実機確認
  3. Phase 5c (WP テンプレートライブラリ設計) または Phase 5d (NVMe RAID1+LUKS) へ進む
  4. Phase 5b の 80/443 譲渡は Phase 6 (WP 全移行) と同じタイミングで実施 (DNS切替前にダウンタイム最小化策を準備)
所要時間実績: Phase 5a (約10分) + Phase 5b (約15分) = 計25分。事前見積もり (30分 + 1〜2時間) を大幅短縮 (既存 docker.io + Ubuntu archive で docker-compose-v2 即入手できたため)。 記録者: コード君 (Claude Opus 4.7、別セッション)、別端末コード君と分担作業中。

📌 Phase 8 完了報告 (2026-05-15 06:00 JST) — Collabora R640 統合

結果: Collabora を hirame → R640 へ完全移植、 ブラウザでの .docx/.odt 編集動作確認済。 hirame は systemctl poweroff で停止。 所要時間実績: 04:30 開始 → 06:00 完了 = 約1.5時間 (見積1時間からトラブル分 +30分)。 切り分け工程多数。

最終構成 (確定)

項目
Collabora hostR640 (katuo)
fabric Listen173.0.0.2:9980
imagecollabora/code:latest (25.04.9.4)
compose 配置/srv/collabora/docker-compose.yml
aliasgroup modegroups (extra_params 明示)
aliasgroup1 hosthttps://cloud\.k2-o\.net:443
extra_hostscloud.k2-o.net:173.0.0.1 (maguro fabric)
net.post_allow.host127.0.0.1, ::1, 173.0.0.1
NC wopi_urlhttp://173.0.0.2:9980
NC DocumentServerInternalUrlhttp://173.0.0.2:9980/
NC wopi_allowlist173.0.0.0/30, 173.0.0.4/30, 173.0.0.8/30, 119.26.175.225
maguro nginx 3ファイル (cloud/office/office-secure)173.0.0.2:9980 へ proxy_pass
maguro nginx wopi location allow173.0.0.0/30 追加
hiramepoweroff (Collabora container 削除済)

つまづきポイント 7 つ (詳細は nc-collabora ページ)

  1. DocumentServerInternalUrlwopi_url とは別の設定、両方更新必要
  2. NC wopi_allowlist と nginx allow は別物、両方更新必要
  3. maguro sites-enabled/cloud.k2-o.net は実ファイル (シンボリックリンクでない)
  4. nginx backup ファイルを sites-enabled に置くと conflicting server_name で旧設定が勝つ場合あり
  5. Collabora aliasgroup1 env var は coolwsd.xml に反映されない → extra_params で明示
  6. extra_hosts の IP は移植先の fabric 接続先に合わせ変更必須
  7. Collabora convert-tonet.post_allow.host という別 allow リスト

動作確認の正規ルート

  1. R640 self: curl http://173.0.0.2:9980/hosting/capabilities → JSON
  2. maguro→R640: 同上 (maguro から実行)
  3. Collabora 内DNS: docker exec collabora getent hosts cloud.k2-o.net → 173.0.0.1
  4. Collabora→NC: docker exec collabora curl -sk https://cloud.k2-o.net/status.php → 200
  5. 外部 UI: curl https://cloud.k2-o.net/browser/dist/cool.html → 200
  6. 外部 discovery: curl https://cloud.k2-o.net/hosting/discovery → 200 + XML
  7. NC 再キャプ: occ richdocuments:activate-config → 全 ✓
  8. ブラウザで .docx 編集 → ✅

ロールバック手順 (もし問題が再発したら)

hirame は poweroff したので即時 rollback はできない。 hirame を起動 → Collabora container を立ち上げ直して NC config を 173.0.0.10:9980 に戻す。 約30分。 ただし 7 つの罠が同様に出るので、 むしろ R640 上で trouble shoot する方が早い場合多し。

記録者: コード君 (Claude Opus 4.7、別セッション)。

🕐 2026-05-15 実行タイムライン (コマンド・結果すべて)

担当: コード君 (Claude Opus 4.7、別セッション) / 03:50〜06:10 JST 計約2時間20分 別端末コード君: 同時刻 xserver→R640 WP移行プラン起草 (実行は別) 競合: 別コード君は他サーバ作業中、R640 は単独使用 OK 確認済

03:50〜03:55 — Phase 5a (Cockpit)

時刻コマンド結果
03:50SSH 接続テスト + 競合確認 (w, ss, fuser /var/lib/dpkg/lock*, .bash_history)他SSHセッション無し、apt/dpkg ロック無し
03:51sudo apt-get install cockpit cockpit-storaged cockpit-networkmanager cockpit-packagekit cockpit-pcpパッケージ全部 OK インストール
03:52systemctl enable --now cockpit.socket[::]:9090 LISTEN、curl HTTPS 200

03:55〜04:00 — Phase 5b (NPM)

時刻コマンド結果
03:55apt install docker-compose-v2 (Ubuntu universe v2.40.3)インストール OK
03:56usermod -aG docker katuo + mkdir -p /srv/npm/{data,letsencrypt}OK
03:57/srv/npm/docker-compose.yml 作成 (jc21/nginx-proxy-manager:latest、ポート 81→81 / 8181→80 / 18443→443)OK
03:58docker compose up -dcontainer npm Started、81/8181/18443 LISTEN、HTTP 200
03:59既存 nginx 共存確認 (systemctl is-active nginx + curl https://katuocloud.com)active / HTTP 200 維持

04:00〜04:30 — wanchance.com Phase 5a+5b ログ追記の試行錯誤

時刻事象解決
04:00WP REST API auth 401 失敗 (username=”コード君” 試行)username は実 email neo.wan.chance@gmail.com
04:01POST content で raw 更新 → 200 OK だが public ページに反映されず原因: ページが Elementor 製、_elementor_data 側のウィジェットを更新する必要
04:02maguro 上 /tmp/wp/update_page.py で widget id=3dbf7c3 を更新 → 200 OK正規ルート確立
04:03〜10公開ページが依然古いまま (バイト完全一致 158,368B)xserver Xアクセラレータ Ver.2 キャッシュ。 サーバーパネルから手動 flush 必要 (memory reference_wanchance_cache.md に記録)

04:30〜04:35 — Phase 5d (NVMe RAID1 + LUKS2)

時刻コマンド結果
04:30NVMe 状態調査 (smartctl, lsblk, /proc/mdstat)既に RAID1 (md0) 構築済、plain ext4、/mnt/nvme-cache、中身 lost+found のみ
04:31重要データ事前チェック (find, lsof, fuser, grep -r nvme-cache /etc/ /opt/ /srv/ /root/, docker volume ls)NPM のみ /srv 使用、NVMe 未参照、データ無し
04:32umount /mnt/nvme-cache + fstab 該当行削除 (バックアップ /etc/fstab.bak.20260515-phase5d) + rmdir /mnt/nvme-cacheOK
04:32install -m 0400 /dev/null /etc/cryptsetup-keys.d/nvme.key + dd if=/dev/urandom bs=1 count=4096keyfile 4096B 生成
04:33cryptsetup luksFormat /dev/md0 --type luks2 --batch-mode --key-file /etc/cryptsetup-keys.d/nvme.keyLUKS2 format 完了
04:33cryptsetup open /dev/md0 nvme --key-file /etc/cryptsetup-keys.d/nvme.key + mkfs.ext4 -L wp-nvme /dev/mapper/nvme + mkdir -p /srv/wp-nvme && mount /dev/mapper/nvme /srv/wp-nvme469GB available
04:34/etc/crypttab + /etc/fstab 追記 (LUKS_UUID=30483e91-3f68-4361-9d30-71c071fde6fd / FS_UUID=5370ffcd-24ff-4d0e-ac02-563e5846eea9)OK
04:35auto-unlock 検証: umount → cryptsetup close nvme → systemctl daemon-reload → systemctl start systemd-cryptsetup@nvme.service → mount /srv/wp-nvmeactive (exited) / 再mount OK、再起動レスでブート再現成功

04:35〜04:50 — Phase 8 (Collabora R640 統合) 初動

時刻コマンド結果
04:35hirame 上 Collabora docker inspect (image, env, ports, server_name, aliasgroup1)image=collabora/code、aliasgroup1=https://cloud\.k2-o\.net:443
04:36R640 fabric 疎通 (ip -4 addrping 173.0.0.1) + maguro NC occ richdocuments 設定確認R640: 173.0.0.2 (→maguro)、wopi_url=http://173.0.0.10:9980 (hirame)
04:37/srv/collabora/docker-compose.yml v1 作成 + docker compose up -dcontainer started、173.0.0.2:9980 LISTEN、capabilities 応答 OK
04:38maguro NC occ config:app:set richdocuments wopi_url --value=http://173.0.0.2:9980 + occ richdocuments:activate-configcapabilities 全 ✓、Detected WOPI server 25.04.9.4
04:48hirame Collabora 停止 (docker stop && docker rm collabora) + R640/maguro Collabora 確認hirame Collabora 完全停止、R640 単独稼働
04:50hirame systemctl poweroffSSH 接続不能で停止確認

04:50〜06:00 — Phase 8 トラブルシュート (7 つの罠突破)

時刻症状 / 修正結果
05:00症状: 「ドキュメントの読み込みに失敗 / Nextcloud Office が読み込めませんでした」NC エラーログ: Failed to fetch capabilities: 173.0.0.10:9980 → DocumentServerInternalUrl が hirame のまま
05:01修正: occ config:app:set richdocuments DocumentServerInternalUrl --value=http://173.0.0.2:9980/ + wopi_allowlist に 173.0.0.0/30 追加 + activate-configcapabilities 全 ✓ 再確認
05:03wanchance.com の Collabora 関連ページ (r640wgdatu / collabora-online / nc-collabora) を WebFetch で熟読「maguro nginx で /browser /cool /hosting/* を hirame に proxy_pass」「extra_hosts で Collabora 内部DNS 設定」など重大な見落とし発見
05:04maguro nginx 3 設定 (cloud.k2-o.net / office.k2-o.net / office.wan-secure.net) で sed -i s|http://173.0.0.10:9980|http://173.0.0.2:9980|g → reloadsites-available 編集、reload OK だが…
05:05外部から /browser/dist/cool.html が 502 Bad Gateway原因判明: sites-enabled/cloud.k2-o.net は実ファイル (シンボリックリンクでない)。 sites-available 側の sed は反映されない
05:06sed -isites-enabled/cloud.k2-o.net 実ファイル側に再実行 + reloadnginx: conflicting server_name 警告。 私が作成した .bak.20260515-052X-collabora-r640 も sites-enabled に置いてしまっていた
05:07backup を mv ... /etc/nginx/sites-available/ へ移動 + reload外部 /browser/dist/cool.html, /hosting/discovery, /hosting/capabilities すべて 200 OK
05:30R640 Collabora compose v2 (extra_hosts: cloud.k2-o.net:173.0.0.1 追加) → down && upcontainer 内 DNS で cloud.k2-o.net→173.0.0.1 解決、Collabora→NC /status.php 200
05:45症状: 「認証されていないWOPIホストです」coolwsd.xml が alias_groups mode="first" のまま、env aliasgroup1 反映されてない
05:50compose v3 (extra_params に --o:storage.wopi.alias_groups.mode=groups --o:storage.wopi.alias_groups.group[0].host=https://cloud\.k2-o\.net:443 --o:storage.wopi.alias_groups.group[0].host[@allow]=true) → down && upprocess args 反映確認、ready to accept
05:58症状: 「認証されていないWOPIホスト」依然Collabora ログ: WOPI::CheckFileInfo returned 403 (Forbidden) for https://cloud.k2-o.net/...
05:59maguro nginx /index.php/apps/richdocuments/wopi/ location の allow リストに allow 173.0.0.0/30; 追加 + reloadcontainer 内から curl で /wopi/files/test → 500 (NC アプリ層エラー、nginx 通過)
06:00わんさん ブラウザで .docx 開く → ✅ 動作Phase 8 完全完了

06:00〜06:10 — ドキュメント記載

  • wanchance.com page 658 (nc-collabora): 7 つの罠 + 切り分けチート + 動作確認 8 段階 を新セクション追加
  • wanchance.com page 1191 (本ページ): Phase 8 完了報告 + 最終構成 + 罠サマリ 追記
  • ローカル worklog 3 本作成:
    • worklog/20260515_phase5ab_r640.md
    • worklog/20260515_phase5d_phase8.md
    • worklog/20260515_phase8_collabora_traps.md
  • わんくんが見るところ: phase7_open_nc_checklist.html (Phase 7 仕様検討書、HTML+CSS スタイリング)
  • 別コード君引き継ぎ: R640_STACK_READY_for_WP_migration.md

📊 全実行コマンド集計

カテゴリ件数
SSH コマンド (R640 / maguro / hirame)約 80 件
apt インストールcockpit×5 / docker-compose-v2 / cryptsetup (既存) など
docker compose up/downNPM 1回、Collabora 3回 (v1/v2/v3 イテレーション)
sed -i によるファイル編集maguro nginx 4ファイル (cloud×2, office, office-wan-secure)、fstab
NC occ 設定変更wopi_url / DocumentServerInternalUrl / wopi_allowlist / activate-config × 複数回
WP REST API POSTpage 1191 × 2回、page 658 × 1回 (Elementor + Gutenberg 両方)
ローカルファイル作成HTML 1本、Markdown 3本

🎯 完了サマリ

Phase内容状態
5aCockpit (https://192.168.10.21:9090/)
5bNPM (http://192.168.10.21:81/)、既存nginx並走
5dNVMe RAID1+LUKS2 → /srv/wp-nvme (469GB)
8Collabora R640 統合 (罠 7 つ突破)
hiramepoweroff
7Open NC 検討書 (最終仕上げ)📋 仕様策定のみ
5cWP テンプレート設計📤 別コード君に委譲
6WP 移行📤 別コード君が起草中
記録者: コード君 (Claude Opus 4.7、別セッション)。 2026-05-15 06:10 JST 記載。