Proxmox VE上にNextCloudを環境構築する

N100のミニPCでサーバーを立てたのだが、ついでに簡易な環境構築のために適当なファイルサーバー的なものを作ろうとした。

ところが、AI(Claude)に聞いて作業したところ何度も失敗し最悪な目に遭ったので、方法についてメモする。

AIの回答をもとに、誤っている箇所やその通り作業しなかった箇所を追記する形で書く。

Proxmoxのインストール自体は終わっているところからはじめる。

ありがちだが、素人が素人に解説するタイプの記事である。

なお筆者がサーバーを立てようと思ったのは以下の記事の影響である。

Proxmoxのインストールについてはこちらの記事を参照するとよい。

いまさら VoIP 網
https://zenn.dev/kusaremkn/articles/abd760f9f2f450

なにを使うか

最初にAIから提案されたのは、Proxmox上のDebian 12上でOpenMediaVaultを用いることだった。

しかし、インストールまでは行えたものの、ブラウザの管理画面から設定を行うとしたところ、ProxmoxのLXCコンテナで動かす場合、ストレージを用意できないため、コンテナではなくVMでインストールしなおさなくてはならないことが判明した。

また、そもそもHDDでの使用が前提で、ストレージを高い効率で使用する設計のためSSDには不向きらしい(最近のものは対応していると書かれていたが、それでも不安)。

そのため、OpenMediaVaultは諦め、他の案をAIに立案させたところ、より使用が容易で、スマホからの利用にも向いているNextCloudを選ぶことにした。

Proxmox上にLXCコンテナを作成

この項目はほぼ間違いない

Proxmoxダッシュボードにログインし、「Create CT」をクリック

基本設定:
ホスト名: nextcloud(任意)
パスワード: 強力なパスワードを設定
SSHキー: 必要に応じて設定

テンプレート選択:
Debian 11 または Ubuntu 22.04 を推奨
→Ubuntu 22.04 LTSを選択した

ディスク設定:
最低20GB、理想的には50GB以上
ストレージ位置: SSD上が理想的
→あくまで仮の置場かつ、ストレージが256GBしかないので64GBのみ指定した
(スマホからPCにファイルを送るなどの簡易的な用途を想定)

CPU設定:
コア数: 2-4コア(N100は4コア)
→2コア設定

メモリ設定:
メモリ: 2-4GB
スワップ: 512MB-1GB
→ケチってそれぞれ2GB

ネットワーク設定:
DHCP または静的IP(推奨)
IPv4: 192.168.x.x(ローカルネットワークに合わせる)
→IPv4のみ固定では設定を進めることができないので、一旦DHCPで作成を完了する。

作成完了後、コンテナを起動

2. IPアドレスを固定

コンテナが停止した状態で、

pct set <コンテナID> -net0 name=eth0,bridge=vmbr0,ip=[IPアドレス]/24,gw=[デフォルトゲートウェイ]

その後コンテナを起動しIPアドレスを確認。

AIはLXCコンテナ内ではNetplanなどから設定が行えないにもかかわらず嘘をつき、そのような設定を薦めてくるので注意する必要がある。

DockerでNextCloudをインストール

AIはsnapパッケージでのインストールを推奨してきたのだが、ProxmoxのLXCコンテナではそのままではsnapパッケージが使用できない。

続いてaptでのインストールを試みたが、途中で、それよりもDockerのほうが簡単なのではということに思い至り、Dockerでインストールすることにした。

(しかし、中途半端なところまでaptでのインストールを行おうとしたあとだったので、ポート80がapacheに使われていたため競合してDocker Composeに失敗したりした。apacheは消し、Docker Composeの際はポートを8080と8443に一応変更した)

AIが提示したDockerでの構築手順

# Dockerのインストール
sudo apt update
sudo apt install docker.io docker-compose -y

# docker-compose.ymlファイルの作成
mkdir -p /opt/nextcloud
cd /opt/nextcloud

cat > docker-compose.yml << EOF version: '3' services: db: image: mariadb restart: always command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW volumes: - db:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=rootpassword - MYSQL_PASSWORD=password - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud app: image: nextcloud restart: always ports: - 80:80 volumes: - nextcloud:/var/www/html environment: - MYSQL_HOST=db - MYSQL_PASSWORD=password - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud volumes: db: nextcloud: EOF # 起動 sudo docker-compose up -d

おおむね上記で間違っていなかった。

ただしdocker-compose.ymlの内容は最終的に以下のようになった。

version: '3'

services:
db:
image: mariadb
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_PASSWORD=password
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud

app:
image: nextcloud:latest
restart: always
ports:
- 8080:80
- 8443:443
volumes:
- nextcloud:/var/www/html
environment:
- MYSQL_HOST=db
- MYSQL_PASSWORD=password
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
depends_on:
- db

volumes:
db:
nextcloud:

※パスワードはあとで変更

インストールできたが

これでインストールは完了し、[IPアドレス]:8080にアクセスすると問題なく使用できた。

なおこのあと、httpsに対応させるためにさらにひと仕事あった。

AIというのは、全体を把握せずに指示を出すと、あとから余計な作業をさせられる羽目になる。

(具体的には、ローカル環境でしか使用しない場合は自己証明書を用いる、という内容を後出しされ、Let's Encryptを用いる前提の内容から手戻りが生じるなど)

AIは最悪である。

しかし全体的に、オープンソースとはいうもののビジネスビジネスした感じで、なんかセンスに合わない。

技術がないということはセンスがないサービスを使うことを強制させられるということなのだ。

悲しいことである。

しかし、今回自分でこのようなことをしようと思ったのは、「いまさら VoIP 網」のMikoPBX(Asteriskのラッパー)の環境構築が思った以上にスムーズに行えたからだったのだが、やはり、人間が理解して書いた文章はAIごときの解説と比べて的確であるということを実感したのだった。

それにしても、この、すでに5年も運営しているWordPressのblogもいい加減どうにかしないといけない。
さすがにWordPressは脱却したい。