1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【自宅サーバ構築記②】Proxmox上のLXCでNextcloud AIO構築

1
Last updated at Posted at 2026-05-27

概要

以前、Windows 11上の「WSL2 + Docker」で自宅Nextcloudを構築・運用していました。
本記事では、Proxmox VE 上の LXC に Nextcloud AIO(All-in-One) を構築し、旧環境からデータを移行する手順を記します。

本環境のポイント

  • 設計方針:
    インターネットには公開せず、自宅LAN内限定でNextcloud AIOを利用する。
    セキュリティを考慮し、自宅ルータのポート開放は一切行わない。
  • 技術的課題:
    Nextcloud AIOは、正規ドメインとHTTPS通信(SSL証明書)を強く求めてきますが、通常、SSL証明書(Let's Encryptなど)を取得・更新するには、自宅ルータのポート開放が必要になります。
    また、自宅ルータにDNS設定機能がないため、ドメイン名をローカルIPアドレスに解決させる手段も必要です。
  • 解決策:
    「ポートは開けたくないが、HTTPS は使いたい」という矛盾を解決するため、以下の手法を採用しました。
    1. CloudflareのAPI(DNS-01チャレンジ) を利用し、LAN内に閉じたままSSL証明書を自動取得・更新する。
    2. CloudflareのDNS で、ドメイン名を自宅のローカルIPアドレスへ名前解決させる。

イメージ図

20260521_NextcloudAIO_構成図 (1).jpg

関連記事

旧Nextcloud構築時の記事:
Windows11にwsl2+Dockerで自宅Nextcloud構築

自宅サーバ構築記シリーズ:
【自宅サーバ構築記①】自作PCの組み立てとProxmox VE導入

システム環境

物理構成(ホスト)

CPU: AMD Ryzen 7 7700 (8C/16T)
GPU: RTX 5060 Ti 16GB × 2枚
メモリ: ADATA DDR5-6000 64GB (32GB × 2)
マザーボード: MSI MAG B850 TOMAHAWK MAX WIFI
ストレージ: Samsung 870 EVO 500GB (SSD) / SANDISK WD_Black SN7100 1TB (NVMeSSD) / WD Red Plus 4TB (HDD)
電源: Corsair RM850e ATX 3.0 (850W)
ケース: Fractal Design Meshify 2 RGB Black TG Light Tint
CPUクーラー: Scythe Mugen 6 Black Edition

仮想環境(ゲスト:LXC)

本サービス用に Proxmox VE 上で割り当てたリソース構成です。

  • Nginx Proxy Manager
    CPU: 1 Cores
    メモリ: 1GB
    ディスク: 20GB (SSD領域)
    OS: Debian 12 (standard)
     
  • Nextcloud AIO
    CPU: 8 Cores
    メモリ: 4GB
    ディスク: 50GB (SSD領域)
    マウントポイント: /mnt/ncdata (HDD 2TBをマウント)
    OS: Debian 13 (standard)

目次

  1. ドメインの取得とCloudflareへの登録
  2. Nginx Proxy Manager の構築
  3. Nextcloud AIO の構築
  4. クライアント(Windows PC および Android)とデータ同期

1. ドメインの取得とCloudflareへの登録

今回の構成の最大のポイントは、「インターネットに公開せず、自宅LAN内だけで使うのに、わざわざ独自ドメインを取得する」 という点です。
その背景には、以下の理由があります。

  1. Nextcloud AIOの仕様
    Nextcloud AIOはセキュリティ上、正規ドメインとHTTPS通信(SSL証明書) を強く求めてきます。基本的に、IPアドレス(http://192.168.xxx.xxx)のままでは初期セットアップの時点でエラーが出てうまくいきません。
  2. ポート開放のリスク回避
    通常、正規のSSL証明書(Let's Encrypt)を無料で取得するには、自宅ルータのポートを開けてインターネット側からアクセスさせる必要がありますが、セキュリティ上やりたくありません。

そこで「Cloudflare」を利用します。
CloudflareのDNS機能とAPIを使えば、自宅ルータのポートを開けることなく、正規のSSL証明書を自動取得・更新することができる「DNS-01チャレンジ」が利用可能になります。

1.1. Cloudflareでドメインを取得

Cloudflareでドメインを取得します。
ドメイン取得にはお金がかかります。
ここではドメイン名を hogehoge.com(仮) とします。

1.2. トークンの作成

画面右上の ユーザーアイコン > プロフィール > APIトークン > 「トークンを作成する」をクリック
→[APIトークンテンプレート(API token templates)]の下の ゾーンDNSを編集する(Edit zone DNS) の右の「テンプレートを使用する(Use template)」をクリック
→権限(Permissions)セクションで、ゾーン,DNS,編集が選択されていることを確認
→ゾーンリソースセクションで、「含む」「特定のゾーン」「hogehoge.com」を選択
→最終確認をして「トークンを作成する」をクリック。
※ここで表示されたトークンを控えておきます。

2. Nginx Proxy Manager の構築

次に、Nginx Proxy Manager(NPM)を構築します。NPMは、Cloudflare API による 「SSL証明書の自動取得・終端」と、ドメイン名による「Nextcloud AIO へのルーティング(リバースプロキシ)」を担います。

2.1. LXCコンテナの作成

ProxmoxのGUIから、Debian 12テンプレートを用いてLXCコンテナを作成します。

  • CPU: 1 Cores
  • メモリ: 1024 MiB
  • ネットワーク: Static IP (例: 192.168.0.102/24)
  • ディスク: 20GB (local-lvm / SSD領域)
  • オプション: 作成後、コンテナの[Options]タブを開き、「keyctl」にチェックを入れます。

2.2. Docker環境のセットアップ

LXCのコンソールに入り、パッケージリストを更新後、Dockerをインストールします。

apt update
apt upgrade -y
apt install -y curl gnupg2 software-properties-common ca-certificates apt-transport-https
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

2.3. NPM のデプロイ

Docker Compose を使って NPM を立ち上げる。

  • ディレクトリ作成
mkdir -p /opt/npm
cd /opt/npm
  • 設定ファイルの作成
    nano docker-compose.yml を実行し、以下の内容を貼り付けて保存(Ctrl+O, Enter, Ctrl+X)します。
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'   # HTTP用
      - '81:81'   # 管理画面用
      - '443:443' # HTTPS用
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
  • 起動
docker compose up -d

2.4. NPM 初期ログインと管理画面の確認

ブラウザから NPM の管理画面にアクセスします。

NPM の画面上部にある Certificates > Add Certificate > 「Let's Encrypt via DNS」 を選択

  • Domain Names欄: 「例: hogehoge.com」と「例: *.hogehoge.com」を入力。
  • Key Type欄: ECDSA 256(デフォルトのまま)
  • DNS Provider欄: 「Cloudflare」を選択。
  • Credentials File Content欄: ※Cloudflareで取得したトークンに書き換える。
  • Propagation Seconds: 120
    →Saveをクリックします。
    →2分ほど待つとCertificates画面に遷移。追加されたことを確認します。

2.5. ドメイン(hogehoge.com)と Nextcloud AIO を紐付ける作業

ステップ1:Cloudflare で DNS 設定(Aレコード)の追加
家の中の端末が cloud.hogehoge.com にアクセスした時に、NPM(192.168.0.102)へ辿り着けるようにします。

  • Cloudflare のダッシュボードで 「DNS」>「レコード」 を開く。
  • 「レコードの追加」 をクリック。
    タイプ: A
    名前: cloud (これで cloud.hogehoge.com になる)
    IPv4アドレス: 192.168.0.102 (NPM のローカルIP)
    プロキシステータス: 「DNSのみ」

ステップ2:NPM で「Proxy Host」の設定
ドメインへのアクセスを、Nextcloud AIO コンテナへ受け流す設定を作ります。

  • NPM 管理画面の 「Hosts」>「Proxy Hosts」 を開き、「Add Proxy Host」 をクリックします。
    [Details]タブ
    Domain Names: cloud.hogehoge.com
    Scheme: http
    Forward Hostname / IP: 192.168.0.101 (Nextcloud AIO LXCのIP)
    Forward Port: 11000 (AIO の Apache コンテナが標準で待ち受けるポート)
    Websockets Support: ON
    [SSL]タブ
    SSL Certificate: 先ほど作成した *「hogehoge.com, .hogehoge.com」 を選択します。
    Force SSL: ON
    HTTP/2 Support: ON
    HSTS Enabled: ON
    →「Save」 をクリック。STATUS が「Online」に変わったことを確認します。

3. Nextcloud AIO の構築

今回、ストレージは、パフォーマンスと容量単価を考慮し、「システム領域はSSD、データ保存先はHDD」 に分離する設計をとります。

3.1. LXCコンテナの作成

ProxmoxのGUIから、Debian 13テンプレートを用いてLXCコンテナを作成します。

  • CPU: 8 Cores
  • メモリ: 4096 MiB
  • ネットワーク: Static IP (例: 192.168.0.101/24)
  • ディスク: 50GB (local-lvm / SSD領域)
  • オプション: 作成後、コンテナの[Options]タブを開き、「keyctl」にチェックを入れます。

※最初はCPUを2コアに設定していたのですが、HEVC(H.265)で撮影した動画を再生すると、音声だけが流れたり、そもそも再生が進まなかったりしました。原因は、Nextcloud(Memories)上でHEVC動画を再生するには、「サーバのCPUやGPUを使って、再生する瞬間にリアルタイムでH.264に変換しながらブラウザに送る」という処理が発生するため、2コアでは足りていなかったようです。本環境では、CPUを2コアから8コアに変更することで解消しました。

3.2. データ用HDD(ZFSプール)をコンテナにマウントする

ユーザがアップロードするファイルを物理HDDに保存するため、Proxmoxホスト上のZFSプール(data-hdd)の領域を、LXC内にマウントします。

  • 左メニューから作成したコンテナ(例: 100 (nextcloud))を選択
  • Resources > Add > Mount Point を開き、以下を設定
    Storage: data-hdd
    Disk size(GiB): 2000
    Path: /mnt/ncdata

3.3. Docker環境のセットアップ

LXCのコンソールに入り、パッケージリストを更新後、Dockerをインストールします。

apt update
apt upgrade -y
apt install -y curl
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

3.4. Nextcloud AIOのデプロイ

今回は前段にNginx Proxy Manager(NPM)を配置するため、Nextcloud AIOをリバースプロキシ対応オプション付きで起動します。ここで「データ保存先を先ほどマウントした物理HDD(/mnt/ncdata)に向ける」環境変数を指定します。

docker run \
  --init \
  --sig-proxy=false \
  --name nextcloud-aio-mastercontainer \
  --restart always \
  --publish 8080:8080 \
  --env APACHE_PORT=11000 \
  --env APACHE_IP_BINDING=0.0.0.0 \
  --env SKIP_DOMAIN_VALIDATION=true \
  --env NEXTCLOUD_DATADIR="/mnt/ncdata" \
  --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
  --volume /var/run/docker.sock:/var/run/docker.sock:ro \
  -d \
  nextcloud/all-in-one:latest

ポイント1: 「APACHE_PORT=11000」を指定することで、AIO内部のWebサーバ(Apache)が443番ポート(HTTPS)を強制しなくなり、NPMからのHTTP(11000番) 通信を受け入れるようになります。
ポイント2: 「SKIP_DOMAIN_VALIDATION=true」を指定することで、ドメイン検証(AIOの自己診断)をスキップさせます。今回の構成はNPMがリバースプロキシとして前段に存在するため、ドメイン検証(AIOの自己診断)が失敗するのでスキップさせます。
ポイント3: 「NEXTCLOUD_DATADIR="/mnt/ncdata"」を指定することで、NextcloudのデータがHDDに保存されます。

3.5. 管理画面での初期設定

  1. ブラウザで https://192.168.0.101:8080(AIO 管理画面) を開き、画面に表示されるパスフレーズを控えてログインします。
  2. 「New AIO instance」の画面で、リバースプロキシ(NPM)側で設定したドメイン(cloud.hogehoge.com)を入力して「Submit domain」をクリックします。
  3. Additional Optional Containersは、「Imaginary」のみチェックを入れ、Community Containersは、「Computing container for facerecognition」と「Memories Transcoder」のみチェックを入れます。その他の重い機能(TalkやOfficeなど)はリソース節約のためにチェックを外します。
  4. 「Install Nextcloud Hub 26 Winter (if unchecked, Nextcloud Hub 25 Autumn will get installed)」にチェックを入れて、「Download and start containers」 をクリック。
    →10分ほど待つと起動が完了した。

4. クライアント(Windows PC および Android)とデータ同期

今回はシンプルかつクリーンにデータ移行を済ませるため、「旧Nextcloudと同期を取っていたWindows PCから、新Nextcloudへ同期をかける」アプローチを採用します。
※ネットワーク経由で大量の同期処理が発生するため時間がかかります。今回は230GB程度だったのでこのアプローチを採用しました。

4.1. PC側の旧同期データベースの掃除

古い同期情報が残っていると、新サーバとの同期開始時に不要な競合エラーや警告の原因になる可能性があるため、念のため、事前に掃除を行います。

  1. Windows PCの同期対象フォルダ(例: F:\Nextcloud_sync)を開きます。
  2. エクスプローラの「表示」>「隠しファイル」にチェックを入れます。
  3. フォルダ直下にある、以下の古いメタデータ・ログファイルを削除します。
  • .nextcloudsync.log
  • .sync_xxxxxxxxxxxx.db
  • .sync_xxxxxxxxxxxx.db-shm
  • .sync_xxxxxxxxxxxx.db-wal

4.2. 新Nextcloud側でのユーザ受け入れ準備

NextcloudのWeb画面に管理者(admin)でログインし、旧Nextcloudと同様のユーザとグループを用意します。

4.3. Windows PC(クライアント)からの同期実行

  1. PCのNextcloudデスクトップアプリを開き、旧アカウントを「削除」します。
  2. 新NextcloudのURL(https://cloud.hogehoge.com)にログインし、同期先として既存のフォルダ群(例: F:\Nextcloud_sync)を指定します。
  3. 「サーバーからすべてのファイルを同期する」「ローカルデータを保持」を選択して同期を開始します。これにより、PC内のフォルダ群(例: F:\Nextcloud_sync)が新Nextcloudへアップロードされます。

4.4. スマホ(Android)からの同期実行

  1. 設定 > アプリ > Nextcloud > 「ストレージとキャッシュ」 > 「ストレージを消去(またはデータを消去)」 と 「キャッシュを削除」 の両方を実行する。(※これにより、旧Nextcloudの情報が消えて、アプリがインストール直後のまっさらな状態に戻る。)
  2. Nextcloudアプリを開き、新Nextcloudに新アカウントでログインする。(サーバーアドレスの欄に https://cloud.hogehoge.com と入力する。)
  3. 自動アップロードの設定は、「既存のファイルもアップロード」のチェックを外し、最終同期時点から現時点までの分は手動でアップロードする。

おわりに

旧Nextcloud環境はお試しのつもりでミニPCに構築していましたが、しばらく運用して便利だったので、今後も長期的に利用したいと考えるようになりました。
そこで、今回、自宅サーバへ移行すると同時に、通常のNextcloudからNextcloud AIOへの刷新を行いました。これにより、今後のアップデートや管理が、よりシンプルに運用できるようになりました。

次回は、ローカルLLM環境を構築していきます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?