びぃえるくぅと。

ガラケーは打楽器。

CentOS8 + Rootless Podman + NextcloudでVJ素材管理環境作りたい

QNAP か Synology の NAS 買えよって話なんですけど、最近フットレストと化している足下にある富士通のサーバーがキラキラした瞳で見上げてくるので・・・。

注意

全然詳しくない領域において試行錯誤した作業の備忘録となので、問題解決の方法が雑であるなど、あまり綺麗ではありません。あと今回VJはそこまで関係ないです。

前提

  • 家庭の閉じたネットワーク内での運用
  • CentOS が Docker 捨てたならその流れに乗る (Docker わざわざ導入するのが面倒)
  • podman-compose は使わない
  • Podman は Rootless で動かす

作業環境

  • サーバー機 Fujitsu PRIMERGY TX1310 M3
  • OS CentOS 8 (8.1.1911) Minimum Install
  • ストレージ
    • 内蔵SSD (Plextor M6S) → OS のインストール先
    • 内蔵HDD (WD Red 4TB) → Nextcloud のストレージとして
  • ソフトウェア
    • Podman 1.6.4

下ごしらえ

必要なソフトウェアをインストールします。

sudo yum install -y podman

Nextcloud を9000番ポートで公開するために、ファイアウォールの設定をします。

sudo firewall-cmd --add-port=9000/tcp --zone=public
sudo firewall-cmd --permanent --add-port=9000/tcp --zone=public
sudo firewall-cmd --reload
sudo systemctl restart firewalld

/etc/fstab を編集し、OS起動時に内蔵HDDが /mnt/storage にマウントされるようにします。
エディタは何でも良いですが、emacs の場合 /sudo::/etc/fstab とすることで良い感じに開けます。

ls -l /dev/disk/by-uuid
# 下記のような結果が出力されるので、/dev/sd?? と UUID との対応を見て fstab に書き込む UUID を探します
# lrwxrwxrwx. 1 root root 10 Mar 22 10:48 ********-****-****-****-************ -> ../../sda2
# lrwxrwxrwx. 1 root root 10 Mar 22 10:48 ****-**** -> ../../sda1
# lrwxrwxrwx. 1 root root 10 Mar 22 10:48 ********-****-****-****-************ -> ../../sdb1

emacs /sudo::/etc/fstab

一旦再起動してマウントされているか確認します。

そして Nextcloud の保存先となる /mnt/storage/nextclouddata の用意をします。

sudo mkdir /mnt/storage/nextclouddata
chown 1000:1000 /mnt/storage/nextclouddata
chcon -R -t svirt_sandbox_file_t /mnt/storage/nextclouddata

chron のところは https://github.com/containers/libpod/issues/3683#issuecomment-517237050 を参考にしました。

Nextcloud を起動する

podman-compose 使わない縛りをするのと、podman play kube が調子悪いので、コマンド手入力でポチポチ進めます。
なお Redis は必須ではないので、適宜 Redis に関する記述やオプションなどは消しても動きます。

まずは pod を用意します。pod 内で稼働する rootless コンテナ同士は localhost を介して相互に通信できます。

www.redhat.com

podman pod create --name nextcloud --publish 9000:80

次にコンテナを起動していきます。データベースのパスワードなど、必要に応じて適宜変更してください。

MariaDB 起動時のオプションについては https://hub.docker.com/_/nextcloud/ に記載されていたものをそのまま書いています。

podman run -d --name db --pod nextcloud \
       -v mariadb-data:/var/lib/mysql \
       -e MYSQL_RANDOM_ROOT_PASSWORD=yes \
       -e MYSQL_DATABASE=nextcloud \
       -e MYSQL_USER=nextcloud \
       -e MYSQL_PASSWORD=nextcloud \
       mariadb --transaction-isolation=READ-COMMITTED --binlog-format=ROW
podman run -d --name redis --pod nextcloud -v redis-data:/data redis       

Nextcloud の保存先が /mnt/storage に作成したディレクトリに向くようオプションを設定します。

podman run -d --name app --pod nextcloud \
       -e MYSQL_HOST=127.0.0.1 \
       -e MYSQL_DATABASE=nextcloud \
       -e MYSQL_USER=nextcloud \
       -e MYSQL_PASSWORD=nextcloud \
       -e REDIS_HOST=127.0.0.1 \
       -v nextcloud-html:/var/www/html \
       -v /mnt/storage/nextclouddata:/var/www/html/data \
       nextcloud

今回できなかったこと

  • 最新の podman (1.8.x) を試すこと
  • podman play kube を使うこと
    • Kubernetes に詳しくないので・・・
    • ボリューム周りの機能がまだ貧弱そうに見えた
  • MariaDB のソケットをボリューム経由で Nextcloud に渡すこと
    • ソケット自体は見えているのになぜかうまくいかなかった
  • systemd と連携させること

終わりに

RedHat 先生が意気揚々と Docker を置き換えた割には Podman の使い勝手が微妙じゃない?と思うものの、Rootless で動かせたりと面白さもあります。

参考文献

Copyright © 2015 Yadex205