※22.10.26追記:
より新しくてシンプルな方法が御座います。
新しい記事は、Windowsでpodman.exeを直接動かす方法です。
以下の古い記事は、WindowsにUbuntuを入れて、その中でpodmanを動かす内容になります。
Windows 10のPCでNextcloudサーバを構築してみました。
以前、Hyper-V+Dockerを使用しましたが。
今は次の3通りの方法が存在するようです。
- Hyper-V+Docker
- WSL2+Docker
- WSL2+Podman
今回はデーモンが不要でDockerよりも軽量なPodmanを使用してみました。
構築手順を記録しておこうと思います。
目次
Windows 10 + WSL2 + Podman動作環境
Podmanのインストール手順はこちらの記事を御覧ください。
Windows 10 Proのx64版で動作しました。
Windows 10 Homeの場合、新しいバージョン(1903や1909以降)でしたらWSL2が動くという話もあるようですが、試していませんのでここでは保証致しません。
Nextcloud起動用Kubernetes pod.yaml
データベースはmariadbを使用しました。
NextcloudはApache版とfpm版がありますが、Apache版を使用しています。
どちらもDocker Hubの公式イメージになります。
※21.1.31追記:
Podmanのバージョンアップの影響で、下記のYAMLファイルではポッドが正常に起動できない場合があります。
その場合、ポッドを手動で作成後、YAMLファイルを出力する必要が御座います。
手順は下記の記事を御覧ください。
起動用のnextcloud-pod.yamlファイルを作成しました。
mkdir nextcloud
cd nextcloud
mkdir html mysql
vi nextcloud-pod.yaml
htmlとmysqlディレクトリは永続化ボリュームとしてコンテナからマウントされ、データが格納されます。
yamlファイルは以下の内容になります。使用するTCPポート番号は8080にしました。何となく。
# Generation of Kubernetes YAML is still under development!
#
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-2.1.0
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2020-09-26T08:49:25Z"
labels:
app: nextcloud-pod
name: nextcloud-pod
spec:
containers:
- name: nc-db
env:
- name: MYSQL_DATABASE
value: nextcloud
- name: MYSQL_ROOT_PASSWORD
value: myrootpass
- name: MYSQL_USER
value: nextcloud
- name: MYSQL_PASSWORD
value: n3xtcl0ud
image: docker.io/library/mariadb:latest
ports:
- containerPort: 80
hostPort: 8080
protocol: TCP
resources: {}
securityContext:
allowPrivilegeEscalation: true
capabilities: {}
privileged: false
readOnlyRootFilesystem: false
seLinuxOptions: {}
volumeMounts:
- mountPath: /var/lib/mysql
name: home-hide-nextcloud-mysql
workingDir: /
- name: nc-app
env:
- name: MYSQL_DATABASE
value: nextcloud
- name: MYSQL_USER
value: nextcloud
- name: MYSQL_PASSWORD
value: n3xtcl0ud
- name: MYSQL_HOST
value: 127.0.0.1
image: docker.io/library/nextcloud:latest
resources: {}
securityContext:
allowPrivilegeEscalation: true
capabilities: {}
privileged: false
readOnlyRootFilesystem: false
seLinuxOptions: {}
volumeMounts:
- mountPath: /var/www/html
name: home-hide-nextcloud-html
workingDir: /var/www/html
restartPolicy: Always
volumes:
- hostPath:
path: /home/hide/nextcloud/mysql
type: Directory
name: home-hide-nextcloud-mysql
- hostPath:
path: /home/hide/nextcloud/html
type: Directory
name: home-hide-nextcloud-html
status: {}
/home/hide/nextcloudの部分はご利用になる環境に合わせて変更してください。それとTCPポート番号もWindowsを含めて重複しないように選択して下さい。
ポッドの起動
yamlファイルを使ってポッドを起動します。
sudo podman play kube ./nextcloud-pod.yaml
# コピペ用
sudo podman pod ls
sudo podman ps
sudo podman pod stop nextcloud-pod
sudo podman pod rm nextcloud-pod
sudo podman exec -it nc-db bash
sudo podman exec -it nc-web bash
しばらく?結構?Nextcloudの設定ページが表示されるまで待ちます。
http://localhost:8080
セットアップ画面が表示されましたでしょうか?
オペレーティングシステム欄を見ると、Linux 4.19.128-microsoft-standard x86_64という文字が見えます。純粋なLinuxではなく、Windowsで動いている感じが読み取れて面白いですね。
WSL2のバックアップについて
バックアップにつきましてはこちらの記事を御覧ください。
まあバックアップ以前に、データを格納するボリュームがどうかという問題があるのですが。
WSL2のパーティション拡張は様子見(2020年9月現在)
WSL2のルートパーティション(/)は既定で251Gの容量かと思います。
この容量はストレージサーバとしては不足する感じがします。よってルートパーティションにNextcloud運用ディレクトリを作成するのではなく、他のストレージをマウントして作成するほうが運用管理しやすいと思います。
しかし、2020年9月現在、WSL2で他のパーティションをマウントする機能はプレビューの状態で、正式リリースされていません。
そのようなわけで、正式リリースまでは、256GBの容量の中で使用するかたちになりますのでご注意下さい。
んー。記事にするのが早すぎた感じもしますが。
Hyper-V+DockerでNextcloudを運用したとき、やはりデータの置き場所が問題になりました。
WSL2+Dockerの場合と、WSL2+Podmanの場合は、同じWSL2ということで、パーティションの状況は同じかと思います。
それならば、Dockerよりもより軽量なPodmanに目を付けておいたほうが良いかなという感じです。
パーティションの問題が解決するタイミングで、そのあたりの記事を書き足させて頂こうと思います。