この記事は Voicy Advent Calendar 2020 の 19日目の記事です。
前日は @somen440 さんの[golang] オーケストレーションベースのサーガパターンに優しく入門する。でした。明日は, @moonum さんの 〜 です。
#はじめに
この記事は11日目のこちらの記事の続きです。RaspberryPI4をサーバーにして遊び倒す。その1
RaspberryPi4をサーバーにして運用してみようという内容ですが、前回は、RaspberryPi4にOpenmediavaultを導入して、NASの設定をするところと、サーバーの構築のためにDockerのインストールをするところまですすめました。
今回は、インストールしたDockerを使って、クラウドストレージとストリーミングサーバーを構築するところまで書きます。
#クラウドストレージ
今回はクラウドストレージには、NextCloudを使います。
NextCloudはOSSなので利用料金はかかりませんし、外部ストレージ連携機能もあるので、既存のストレージも有効活用できることが大きなメリットです。
###導入準備
dockerのセッティングでPGIDとPUIDが必要になるので、SSHでRaspberryPiにログインして、PGIDとPUIDを調べます。
デフォルトのアカウントとホスト名であれば
ssh pi@raspberrypi.local
で接続できます。
接続したら、idコマンドで確認します。uidをPUID、gidをPGIDで使用します。
id
uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),105(input),109(netdev),111(ssh),997(gpio),998(i2c),999(spi)
###インストール
NextCloudのインストールには、まずNextCloudでつかうDBをセットアップする必要があります。
DBにはMariaDBをつかっていきます。
DockerHubから、MariaDBとNextCloudのDocker-composeを入手します。
https://hub.docker.com/_/mariadb
https://hub.docker.com/_/nextcloud/
上記URLのDocker-composeを参考に書いていきます。
ポイントは下記4点です。
・Portainerは、__version2__のdocker-composeまでしかサポートしないので、__version2__を使用。
・前回でx64のOSをインストールしたので、Imageは、arm64v8 を使用。
・NextCloudとMariaDBは__ブリッジモード__で__同じネットワーク__を使用。
・__PUID__と__PGID__を正しく設定する。
・データベース名と、そのデータベースを参照するユーザーを作成。
基本的には上記が満たされていれば大丈夫です。
細かいConfigの設定などは、DockerHubのページを参考に個人のお好みで設定してください。
volumesでBindするフォルダは好きに設定してかまいませんが、今回はOpenmediavaultで設定した共有フォルダ下記にBindしています。
RaspberryPiの本体の容量の問題もあるので、十分容量があるストレージのディレクトリを指定してください。
docker-comose__で__データベース、__データベースを参照するユーザー__を設定している場合は必要ありませんが、設定してない場合は、DockerのMariadbにログインしてデータベース作成とそのデータベースを参照するユーザーを作成してください。
version: '2'
services:
nextclouddb:
image: linuxserver/mariadb:arm64v8-latest #arm64v8を使用
container_name: nextclouddb
restart: always
networks:
- my-net #nextcloudと同じネットワークを使用
volumes:
- /srv/dev-disk-by-label-App/AppData/nextclouddb:/config #Configを共通フォルダ(外部ストレージ)にバインド
ports:
- "3306:3306/tcp"
environment:
PUID: 1000 #idコマンドからUIDを使用
PGID: 1000 #idコマンドからGIDを使用
TZ: Asia/Tokyo #自身の環境に合わせて設定
MYSQL_DATABASE: nextclouddb #データベース名
MYSQL_USER: raspberrypi #MYSQL_DATABASEを参照するユーザー名
MYSQL_PASSWORD: password #MYSQL_USERのパスワード
MYSQL_ROOT_PASSWORD: openmediavault #管理者のパスワード
nextcloud:
image: linuxserver/nextcloud:arm64v8-latest #arm64v8を使用
restart: always
container_name: nextcloud
networks:
- my-net #nextclouddbと同じネットワークを使用
volumes:
- /srv/dev-disk-by-label-App/AppData/nextcloud:/config #Configを共通フォルダ(外部ストレージ)にバインド
- /srv/dev-disk-by-label-Media/nextcloud:/data #クラウドストレージのデータ用のディレクトリを共通フォルダ(外部ストレージ)にバインド
ports:
- "8080:80/tcp" #80ポートはOpenmediavualtが使用しているので、別のポートを指定
- "444:443/tcp" #443ポートも他が使う可能性があるので、別のポートを指定
environment:
PUID: 1000 #idコマンドからUIDを使用
PGID: 1000 #idコマンドからGIDを使用
TZ: Asia/Tokyo #自身の環境に合わせて設定
depends_on:
- nextclouddb #nextclouddbが起動してからnextcloudを起動
networks:
my-net:
driver: bridge #ブリッジモードでネットワークを作成
インストール
前回インストールしたPortainerにログインし、左ペインのStacksからセットアップしていきます。
Add Stackを開きます。
Nameを設定して
Web editorに先ほどのdocker-composeを張り付けます。
Deploy the stackを押してデプロイします。
Contaierの一覧は左ペインのContainersから確認できます。
初期設定
ブラウザからNextCloudにアクセスします。httpsで接続してください。
docker-composeでhttpsのポートを444でセッティングしたので、ポートを指定する際には444でつないでください。
https://{IPアドレス or Host名}:444
SSL証明書のセッティングをしていないので、アクセスの際に注意が出ますが、気にせず進んでください。
NextCloudに接続できたら、初期設定画面から、下記3点を設定してください。
・管理者アカウントとパスワード
自分の好きなものを入力してください。
・データフォルダ
__/data__を指定してください。
/data__のディレクトリを変更したければ、Docker-composeのvolumesから/data__を任意のディレクトリにバインドしてください。
・データベース
__MySQL/MariaDB__を選択してください。
上から、アカウント名、パスワード名、データベース名、データベースのホスト名を指定してください。
アカウント名、パスワード名、データベース名はdocker-composeで設定したものを使用してください。
データベースのホスト名には、RaspberryPi本体のIPアドレスをしていしてください。
すべて設定し終わったら、__セットアップを完了します__を押します。
アカウントが既に存在するとエラーがでる場合には、初期設定が終わった後にまたアカウント設定ができるので、とりあえず別のアカウント名を指定してみてください。
NextCloudが初期化を完了するまでしばらく待ってください。
5~15分くらい時間がかかります。
途中で504 Gateway Time-outになることがありますが、内部で処理は進んでいるので大丈夫です。
適度にリロードしてください。完了すれば、下記のような画面がでます。
ログイン画面がでたら、初期設定で設定したアカウント名とパスワードを使ってログインします。
ログインしたら、ダッシュボードが表示されるので、左上のタブからフォルダを選択してください。
### 外部ストレージの連携設定
Openmediavaultで構築したNASの共有フォルダをNextCloudで使えるように設定します。
管理者アカウントでログインしてください。
一覧から__External storage support__を検索し、有効にします。
プラグインを有効にすると、設定画面の管理者項目に__外部ストレージ__の項目が追加されます。
ストレージを追加から、SMB/CIFSを選択します。
詳細設定が現れるので、フォルダ名を設定します。
詳細設定では、OpenmediavaultでのNASの構築で設定した共有フォルダを設定します。
認証は、ユーザー名とパスワードを指定し、Openmediavaultで設定した共有フォルダのアクセス権限があるアカウントを指定します。
すべて設定し終わったら、一番右のチェックボタンをクリックします。
接続に成功したら、左に緑のチェックマークが現れます。
最後に__ユーザーに外部ストレージの接続を許可する__をチェックします。
フォルダ一覧に、さきほど外部ストレージが表示されれば成功です。
アイコンがショートカット風になっているので、それを参考にしてください。
以上で、NASで共有したデータフォルダを、クラウドストレージからも利用することができるようになりました。
クラウドストレージの設定は以上で終了です。
#ストリーミングサーバー
NextCloudにも簡易的なストリーミング機能はあるのですが、せっかくなのできちんとし1たストリーミングサーバーを導入してみます。
今回は、ストリーミングサーバーにはPlexを使用します。
###インストール
DockerHubから、PlexのDocker-composeを入手します。
https://hub.docker.com/r/linuxserver/plex
上記URLのDocker-composeを参考に書いていきます。
ポイントは下記3点です。
・Portainerは、__version2__のdocker-composeまでしかサポートしないので、__version2__を使用。
・前回でx64のOSをインストールしたので、Imageは、arm64v8 を使用。
・ストリーミングしたいファイルがあるストレージをVolumesでバインドする
基本的には上記が満たされていれば大丈夫です。
細かいConfigの設定などは、DockerHubのページを参考に個人のお好みで設定してください。
ストリーミングしたいファイルが複数のストレージにある場合には、それぞれ任意のディレクトリ名でBindしてください。
version: '2'
services:
plex:
image: linuxserver/plex:arm64v8-latest
container_name: plex
restart: always
network_mode: host
volumes:
- /srv/dev-disk-by-label-App/AppData/plex:/config
- /srv/dev-disk-by-label-Movie1/TV:/tv
- /srv/dev-disk-by-label-Movie1:/movies
- /srv/dev-disk-by-label-Movie2:/movies2
ports:
- "32400/tcp"
environment:
PUID: 1000
PGID: 1000
VERSION: latest
上記の、docker-composeをPortainerのStackに追加してContainerをデプロイします。(NextCloudの導入を参考)
###初期設定
ブラウザからPlexにアクセスします。Web-UIのURLは下記のとおりです。
http://{HostName}:32400/web/index.html
アクセスするとログイン画面が現れるのでログインしてください。
アカウントの登録をしていない人は登録してください。
###ライブラリーの追加
右上のアカウントアイコンからアカウントメニューを選択。
左ペインから管理→ライブラリを選択し、設定画面から、ライブラリーを追加のボタンを選択します。
次に、ライブラリーの種類を選択します。
次に、フォルダを追加します。メディアフォルダーを見るのボタンを選択し、Docker-compseのVolumesでバインドしたフォルダ以下からストリーミングしたいファイルの入っているフォルダを指定します。
すべて設定し終わったら、ライブラリーに追加を選択します。
###リモートアクセスの設定
アカウント→設定→リモートアクセスの画面で、リモートアクセスを有効にすることで、外部からPlexにアクセスできるようになります。
設定はリモートアクセスを有効にするを押すだけです。
独自ドメインの設定をする場合は、リモートアクセスは無効にした状態で、
アカウント→設定→ネットワークから、カスタムドメインを設定します。
以上で、Plexの設定は終了です。
#さいごに
クラウドストレージの方は、ドメインの設定をしてサーバーを外部公開すれば、NASを外出先からでも利用できるようになるので、大変便利です。
Dockerを使って、他にもいろいろなサーバーを構築して遊べるので、RaspberryPiの使い道で迷った際には、参考にしてください。