OpenMediaVaultはTrueNASよりも軽量で、古い非力なパソコンでもサクサク動作します。
そして豊富なプラグインで機能拡張できる仕組みもあり、このプラグインを活用することでdockerを使ったアプリサーバーとして利用することもできます。
OpenMediaVaultをdockerと組み合わせて使うことで、ただのファイルサーバーとしてだけでなく市販のNASに負けないくらいの多機能NASにすることができます。
本記事ではOpenMediaVaultで構築したNAS上にdocker-composeを使ったdocker環境を構築していきます。
OpenMediaVaultでdockerを使う
OpenMediaVaultはLinux(Debian)環境をベースとしたフリー(OSS)のNASシステムです。
だれでも自由に自己責任で使えるNASサーバーとして人気があります。
同様の人気サーバーとしてTrueNASがありますが、TrueNASが高機能・高性能として実績がある反面求められるハードウェアスペックが非常に高いのに対し、OpenMediaVaultは小型・軽量のNASシステムでありちょっと古いスペックの低いパソコンでもサクサク動くことで人気となっています。
OpenMediaVaultをdockerで高機能アプリサーバーに!
そして、OpenMediaVaultにdockerの動作環境を構築することで、本来のファイルサーバーとしての機能に加えてストレージ関連を中心としたさまざまなアプリケーションをdockerで実現できるようになり、QNAPやSynologyなどの商用高機能NASに負けない機能を持つプライベートクラウドサーバーに仕立て上げることができます。
本記事はOpenMediaVaultの環境でdockerアプリを動作させるための環境構築手順を説明していきます。
docker compose?portainer?
dockerの動作環境を構築したりdockerを動作させる場合の基本はコマンド操作ですが、やはりWebGUIからサクサクやりたくなります。
dockerを管理できるWebUIの選択肢として「docker compose」と「portainer」があります。
どちらもブラウザを使ったWeb画面からdockerアプリのインストールや動作制御などの管理が可能です。
OpenMediaVaultではプラグインとしてdocker-composeを活用できる機能を提供しています。
本記事ではまずOpenMediaVaultでdocker-cmopose環境を構築しdockerアプリを動作させていきます。
※また、portainerの環境構築についても言及していきます。
本記事の前提条件
本記事は「OpenMediaVaultの環境にdocker-compose/Portainer環境を追加構築する」という内容になります。
そのため、本記事の前提として「すでにOpenMediaVault環境は構築されている」とします。
OpenMediaVaultでdocker-compose環境を構築する
OpenMediaVaultにはさまざまな拡張機能がプラグインとして実装・提供されています。
OpenMediaVaultをインストールすると初期状態で利用可能となる標準のプラグインに加え、有志が開発してる拡張プラグイン(OMV Extras)も利用可能です。
OpenMediaVaultでは拡張プラグイン「OMV Extras」を導入することでdockerを利用可能となります。
STEP① プラグイン集「OMV Extras」のインストール
OpenMediaVaultでdocker環境を構築する一番簡単な方法は、拡張プラグイン集「OMV Extra」が提供する「docker-compose」プラグインを利用する方法です。
このため、まずは拡張プラグイン集「OMV Extras」をインストール(リポジトリ登録)する必要があります。
OMV-Extras | OMV Plugin-Developersプロジェクト
本記事で使うSnapRAIDやMergerFSのプラグインもこのOMV Extrasに含まれています。
OMV-ExtrasはWebUIからのインストールではなくコンソールからインストールします。
OpenMediaVaultへSSHログインし、以下の手順にてOMV Extrasをインストールします。
wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash
OMV Extrasがインストールされると、WebUIには「omv-extras」のメニューが追加表示されます。
以上でプラグイン集「OMV-Extras」のインストールは完了です。
STEP② docker-composeプラグインのインストール
プラグイン集「OMV-Extras」のインストール(リポジトリ登録)が完了したら、プラグイン「docker-compose」をインストールしdocker環境を構築していきます。
OpenMediaVaultでのdocker環境は以下の手順で構築します。
- dockerリポジトリの有効化
- docker-composeのインストール
dockerリポジトリの有効化
まず最初にdockerリポジトリを有効化します。
メニュー「システム > omv-extras」画面を開きます。
「Docker repo」をチェックし「保存」ボタンで設定を確定します。
以上でdockerリポジトリの有効化は完了です。
docker-composeプラグインのインストール
次にdockerの動作環境としてのdocker-composeをインストールします。
OpenMediaVault(OMV-Extras)ではdocker-compopseはプラグインとして提供されているので、プラグインをインストールするだけでdocker-composeの環境ができてしまいます。
メニュー「システム > プラグイン」画面を開きます。
利用可能なプラグインが一覧表示されるので、検索欄から「docker-compose」と入力し、docker-composeプラグインを絞り込みます。
docker-composeプラグインを選択(黄色表示)し、インストールボタン(↓)でインストールします。
docker-composeのインストールが完了すると、メニュー「サービス > compose」が追加されています。
以上でdocker-composeのインストールは完了です。
STEP③ docker-composeの環境設定
docker-composeのインストールが完了したら、次は環境設定を行います。
docker-composeの環境設定とは今後構築していくdockerアプリが利用するディスク領域を指定する、という内容です。
本記事では、OpenMediaVaultのシステム領域(システムディスク)をdockerで使いたくないため、本環境設定ではすべて共有フォルダ(データディスク)を指定していきます。
docker-composeの設定内容
docker-composeの設定はメニュー「サービス > compose > 設定」より行います。
設定すべきディスク領域は以下の通りです。
Compose Files | docker-compose本体が利用するディスク領域 |
---|---|
Data | dockerアプリが利用するディスク領域 |
Backup | dockerアプリのバックアップ領域 |
Docker | dockerのシステム領域 ※初期値は「var/lib/docker(システムディスク内) ※共有フォルダへ再定義 |
共有フォルダの作成
本記事ではdocker-composeのディスク領域設定として、以下の共有フォルダを指定します。
Compose Files | /docker/docker-files |
---|---|
Data | /docker/data |
Backup | /docker/backup |
Docker | /docker/lib/docker |
よって、まずは上記の共有フォルダを作成します。
最初に上記共有フォルダを作成し、その次にDocker-Compose環境設定でその共有フォルダを指定します。
メニュー「ストレージ > 共有フォルダ」画面を開きます。
上記のように、共有フォルダを作成します。
docker-composeへ共有フォルダを登録
次に、メニュー「サービス > Compose > 設定」画面を開きます。
上記のように、docker-composeの各共有フォルダに作成した共有フォルダを指定していきます。
以上でdocker-composeの環境設定は完了です。
STEP④ portainer-ceをインストールしてみる
では構築されたdocker-compose環境を使ってみましょう。
まずは「portainer-ce」をインストールしてみます。
portainer-ceは複数のdockerアプリをウェブベースで管理できる仕組みを提供してくれるアプリケーションであい、docker形式で配布されています。
前提:docker-composeの使い方
docker-composeの環境でdockerアプリをインストールし運用するためには「docker-compose.yml」という形式の定義ファイルを理解する必要があります。
docker-composeはこの「yml形式」の定義ファイルに従ってdocker環境を構築していきます。
たとえば、これからインストールする「portainer-ce」のdocker-compose.ymlファイルは、GithubのPortainer公式ページで以下の定義ファイルがサンプル提供されています。
portainer docker-compose.yml | Github
このような定義ファイルを自分のサーバー環境に合わせてカスタマイズし、docker-composeとしてインストールします。
OMV-composeプラグインなら!?
OMV-composeプラグインを導入した環境においても、これらdockerアプリの「docker-compose.yml」ファイルを使ってdockerアプリをインストールしていきます。
一方で、OpenMediaVault-composeプラグインをインストールすると、多くのメジャーなdockerアプリの「docker-compose.yml」ファイルがサンプルとして提供されています。
つまり、自分でdocker-compose.yml定義ファイルを書いたり、ネット上で検索して探してくる必要もなく、サンプルから選んでdockerをインストールできる仕組みて提供されています。
portainer-ceのdocker-compose.ymlを定義
ではportainer-ceをインストールしてみます。
まずはportainer-ceの「docker-compose.yml」定義ファイルを定義します。
メニュー「サービス > Compose > Files」画面を開きます。
画面上部の「追加」アイコン(+マーク)から「Add from Example」を選びます。
このように、非常にたくさんのdockerアプリ(のdocker-compose.yml定義ファイル)がサンプル提供されています。
では、画面上部の絞り込み欄に「portainer」と入力し絞り込んでみましょう。
「portainer」を選択(黄色反転)し、画面上部の「追加」ボタン(+マーク)を押下します。
追加画面が表示されるので、「説明欄」に適用な説明文を入力し、「追加」ボタンを押下します。
下図のように、portainer-ceのdocker-compose.yml定義ファイルが登録されます。
docker-compose.ymlの定義修正(必要があれば)
docker-compose.yml定義ファイルに修正を行う必要があれば、「編集アイコン(鉛筆マーク)」より編集を行います。
「編集」を開くと、サンプルより登録されたportainer-ceのdocker-compose.yml定義ファイルが編集可能となります。
サンプルを使ったインストールに対し、定義の変更が必要である場合はこの画面よりdocker-compose.ymlファイルを編集していきます。
※今回のportainer-ceインストールでは編集は不要です。
docker-compose.ymlの構文チェック
ここまでで定義された「docker-compose.yml」定義ファイルが構文的に正しいのか?をチェックすることができます。
画面上部のチェックアイコンからdocker-compose.yml定義ファイルをチェックします。
構文的にエラーがあればその旨エラー表示されるので、定義ファイルを修正します。
docker-compose.ymdの実行(docker起動)
では、docker-compose.yml定義ファイルを使って、portainer-ceのdockerを起動します。
dockerアプリの起動はスタートアイコン(↑マーク)から行います。
しばらくするとdockerアプリ(portainer-ce)が起動され、ステータス「UP」とポート番号が表示されます。
portainer-ceがインストールできたので、ウェブブラウザーから「http://OpenMediaVaultのIPアドレス:9000」と入力してみましょう。
portainer-ceのログイン画面が表示されました。
以上で(たったこれだけで)portainer-ceのインストールは完了です。
docker-composeを使ってNextCloudインストール
では、docker-composeを使ってNextCloudをインストールしてみます。
NextCloudはGoogleドライブのようなアプリで、サーバー(OpenMediaVault)とクライアント(スマホ/PCなど)にアプリを入れることでクライアントのファイル(写真など)をサーバーへ同期して保存してくれます。
OpenMediaVaultの大容量ディスク領域を保存領域として利用できるので、クラウドサービスで容量が気になる方などへおすすめです。
STEP① NextCloudのdocker-compose.yml定義ファイル
では、NextCloudアプリをdockerを使ってインストールしていきます。
OpenMediaVault-composeではNextCloudのdocker-compose.yml定義ファイルもサンプルとして提供されているので、ほぼそのまま使えます。
メニュー「サービス > Compose > Files」画面から「nextcloud」で絞込、一覧からNextCloudを選択(黄色反転)し「追加(+マーク)」ボタンを押下します。
一覧画面にNextCloudが表示されるので選択(黄色反転)し「編集(鉛筆マーク)」ボタンを押下します。
サンプルとしてインストールされたNextCloudのdocker-compose.yml定義ファイルが表示されるので、若干修正します。
説明 | ご自由に | |
---|---|---|
Files | environment | タイムゾーンを日本(TZ=Asia/Tokyo)へ修正 |
以上を設定したら「Save」ボタンで保存します。
一覧から「UP」ボタンを押下し、NextCloudアプリを起動します。
ステータスが「UP」となれば起動完了です。
STEP② NextCloudアプリの初期設定
NextCloudは初回ログイン時にNextCloudアプリの環境設定が必要です。
NextCloudへの接続はブラウザから「https://OpenMediaVaultのIPアドレス:443」で接続されます。
初回の接続時には以下のように環境設定のための情報入力が必要です。
環境設定に必要な各種情報の入力を行います。
本記事では以下のように設定しました。
新しい管理者アカウント名 | ご自由に ※本記事では”admin” |
---|---|
新しい管理者パスワード | 管理者アカウントのパスワード |
データフォルダ | 初期値”/data”のまま |
データベース | ご自由に ※本記事では”SQLite”を選択 |
データベースアカウント | ご自由に ※本記事では”root” |
データベースパスワード | ご自由に |
データベース名 | ご自由に ※本記事では”nextcloud_db” |
データベースのホスト名 | “localhost”のまま |
環境設定が完了するとアプリの追加画面が表示されます。
アプリは後からでも追加できますが、本記事ではそのまま「推奨アプリをインストール」で先へ進めます。
以上でNextCloudのインストールは完了です。
STEP③ クライアント(スマホ)での使い方
docker-composeを使ってOpenMediaVault上にNextCloudサーバーアプリを導入しました。
あとはパソコンやスマホなどのクライアントにアプリを入れて、サーバーの機能を使っていきます。
NextCloudのクライアントアプリは公式サイトで案内されています。
Download NextCloud | NextCloud
NextCloudの機能
NextCloudの主たる機能はGoogleクラウドのようなストレージサービスす。
パソコンやスマホのデータ(書類/写真/動画など)をNextCloudサーバー上に保管する、などの使い方です。
加えて、NextCloudはさまざまな機能も追加されており、LINEのようなコミュニケーションやOfficeのような文書管理も可能、それぞれ必要なアプリをクライアントにインストールして使っていきます。
以下のようなサービス(アプリ)があります。
Nextcloud Files | 各種ファイルのアップロード/同期/ダウンロードなどの管理 |
---|---|
Nextcloud Talk | NextCloudサーバーを使って音声通話/ビデオ通話ができます また、Web会議やチャットサービスなど |
本記事ではファイル管理に関する「NextCloud Files」アプリを使ってスマホのデータをNextCloudサーバー(OpenMediaVault上)に保管する仕組みを確認してみます。
docker-composeを使ってtailscaleインストール
外出先からもOpenMediaVaultのサービスを利用したくなります。
この場合、tailscaleをインストールすると簡単に外出先から自宅ネットワーク(OpenMediaVault含む)へVPN接続できるようになります。
そして、OMV-composeにはこのtailscaleのdockerアプリ導入もサンプルとして提供されています。
ここからは、OMV-composeプラグインを前提に、OpenMediaVaultへtailscaleをインストールしていきます。
STEP① 準備:tailscale利用者登録と認証キーの取得
Tailscaleは最新のVPNプロトコルであるWireGuardプロトコルを使った軽量・高速なVPNを簡単に構築・運用できるクラウドサービスです。
通常のVPN環境構築ではVPN接続する各デバイスのIPアドレスや認証鍵などの細かな情報管理が結構面倒なのですが、Tailscaleのサービスを使えばそんなの気にすることもなくサクッとVPN環境を構築してくれます。
クラウドサービスなので、まずはTailscaleサービスへの利用者登録が必要です。
無料/有料のさまざまなプランが提供されていますが、個人で利用する範囲においては(多くの場合)無料プランで十分です。
tailscaleへの利用者登録
tailscaleの仕組み、利用者認証とタグ認証
tailscaleでのVPNを構築する場合には登録するデバイスごとに(当然ながら)認証(認証鍵)が必要です。
この認証(鍵)には「利用者認証」と「タグ認証」があります。
利用者認証とは利用者登録した利用者IDを使ってデバイス認証します。
タグ認証とは利用者(管理者)が許可したタグを使ってデバイスを登録します。
dockerアプリを利用する場合には「タグ認証」によりデバイス認証を行います。
タグの有効化
dockerアプリでtailscaleを利用するためには認証鍵(タグ認証)が必要です。
このため、まずは「タグ」を有効化してあげる必要があります。
メニュー「Access Control」画面を開きます。
「Access Controls」定義が表示されるので、タグ定義部分を以下のように修正します。
// Define the tags which can be applied to devices and by which users.
"tagOwners": {
"tag:example": ["autogroup:admin"],
},
- 行頭のコメント”//”を外す(4行分)
- “example”(タグ名)はお好きな名前に!
タグを有効化したら「Save」ボタンで保存します。
認証鍵の取得
タグを有効化したら認証鍵を生成します。
メニュー「Settings > Keys」画面から「Generate auth key…」ボタンを押下します。
認証鍵生成画面が表示されるので、以下のように入力します。
Description | ご自由に(認証鍵一覧の見出しみたいなもの) |
---|---|
Reusable | オン(右へスライド) |
Tags | オン(右へスライド)し、”Add tags”の一覧からタグを選択 |
以上を入力・設定し、「Generate key」ボタンを押下します。
認証鍵が生成されました。
認証鍵はこの画面でしか確認できません(後から確認はできません)。
ここで表示される認証鍵は控えておきます。
以上で認証鍵の生成は完了です。
STEP② tailscale on dockerのインストール
では、OpenMediaVaultへTailscaleをDockerアプリでインストールしていきます。
docker-compose.yml定義ファイル
Tailscaleのdocker-compose.yml定義ファイルはTailscalenの公式サイトで公開されているので、本記事では公式サイトのdocker-compose.yml定義ファイルを利用します。
Using Tailscale with Docker #Code Sample | Tailscale
メニュー「Compose > Files」画面から「追加(+マーク)」を選びます。
名前 | ご自由に ※”tailscale”が良いです |
|
---|---|---|
説明 | ご自由に | |
File | TS_AUTHKEY | 先に取得したtailscale認証キー(AuthKey)を定義 |
TS_EXTRA_ARGS | –advertise-tags=tag:example ※ご自身で設定したタグ名を定義(本記事ではexample) |
|
TS_ROUTES | 自宅ネットワークのサブネットを登録 ※本記事では”192.168.11.0/24″ |
以上を設定したら「保存」ボタン押下して保存します。
dockerコンテナの起動
docker-compose.yml定義ファイルの登録が終わったらdockerコンテナを起動します。
メニュー「サービス > Compose > Files」画面からtailscaleを選択(黄色反転)し、起動(UP)アイコン(↑マーク)でdockerコンテナを起動します。
ステータスが「UP」になったらdockerコンテナの起動完了です。
Tailscale管理コンソールでサブネット登録
Tailscaleが起動したので最後にTailscale管理画面(Admin Console)からサブネット登録を行います。
Tailscale管理画面(Admin Console)へログインします。
tailscaleが起動したことで管理画面には「tailscale-nginx」というデバイス名でサービス登録されています。
このデバイスのShareメニュー「…」から「Edit route settings…」を選択します。
docker-compose.yml定義ファイルに定義した自宅サブネット(TS_ROUTES)が表示されるので、チェックして承認し「Save」ボタンで保存します。
以上でOpenMediaVault上のtailscale(dockerアプリ)の登録、および自宅ネットワーク(サブネット)の登録が完了です。
まとめ、OpenMediaVaultでcomposeプラグインを使う
このように、OpenMediaVaultでOMV-Composeプラグインを導入することで通常のdocker-compose環境よりも簡単にインストールでき、また簡単にdockerアプリの構築・運用ができてしまいます。
OpenMediaVaultとOMV-composeプラグインにより、非常に多くのdockerアプリの「docker-compose.yml」がサンプルとして提供されており、一般的なdocker環境よりも導入も運用も簡単になります。
たくさんのdockerアプリがサンプル提供されている
OMV-composeプラグインを導入すると約170以上のメジャーなdockerアプリの「docker-compose.ymd」定義ファイルがサンプル提供されています。
メジャーなdockerアプリはほぼ網羅されており、自分でdocker-compose.ymlファイルを作成・検索してくるよりも簡単にサンプルより一発導入が可能です。
サーバー環境に合わせてくれる
自分で「docker-compose.yml」定義ファイルを作成する場合、自分のサーバー環境に合わせて定義の作成・修正が必要です。
このため、ある程度のdocker-compose.ymlの書式の知識に加えて、dockerの動作環境の仕組みも理解しておく必要があります。
OMV-composeプラグインを使いサンプルよりインストールする場合には、これらサーバー環境の要素がすでに(自動的に)「docker-compose.yml」ファイルに反映されます。
OMV-Composeで最強dockerアプリサーバー
このように、OMV-Composeプラグインを使えば簡単にOpenMediaVaultのストレージ環境・ネットワーク環境に合わせたdockerアプリが簡単に導入できます。
NextCloudのようなストレージサービスアプリケーションであっても、ストレージ領域を自動的にOpenMediaVaultのデータ領域に設定してくれるのでデータのバックアップ運用なども簡単になります。
OMV-ComposeプラグインによりOpenMediaVaultは単なるストレージサーバーというだけでなく、dockerアプリサーバーとしても非常に有効なプラットフォームになります。
OpenMediaVaultをお使いならOMV-composeプラグインは必須プラグインだと思います。
単なるストレージサーバーをdockerアプリによって高機能なアプリサーバーに変身させてくれます。