Linux初心者でもほぼコピペでできるSolanaプロジェクト「Media Network」メディアサーバの構築

この記事は、Solanaチェーン上のプロジェクト「Media Network」のテストネットメディアサーバー構築を、初心者でもほぼコピペするだけで構築できるように、自身の備忘録も兼ねてまとめたものです。
私自身Linuxはほとんど触ったことのないド素人なので、間違いや非効率な部分が大いにあると思います。
その場合、ご指摘をいただけたら幸いです。


##前提条件
・solletウォレットを所有している。
https://www.sollet.io/

・テストネット用SOLを保有している。※1SOLあれば十分

・運営にテストネット参加を表明する。
hello@media.foundationにSOLのアドレスをメールで送信するとテスト用トークンを100もらえます。
現時点でこのトークンはまだ使わないと思います。

・VPSを契約するための出費を許容できる。
おすすめは以下の「Time4VPS」！！
かなりリーズナブルなのでおすすめです。

https://www.time4vps.com/?affid=5750

契約方法は[こちらのサイト](https://saikyouse.com/how-to-contract-time4vps/)で詳しく説明されているのでご参照ください。
OSはubuntu20.04かDebian10にしましょう。おすすめはubuntuです。

以下Time4VPSで作業をする前提で説明させていただきます。


#サーバ構築前の準備
契約したVPSは、rootでssh接続をすることになると思います。
それでは**セキュリティ的に脆弱**なので、一手間加えましょう。

構築前の準備は別にやらなくてもメディアサーバーは建てられますが、
犯罪に巻き込まれないためにもやっておいたほうがいいと思います。


使用するターミナルはWindowsなら↓がおすすめです。Macはもともと入ってるやつでいいと思います。

https://www.microsoft.com/ja-jp/p/windows-terminal/9n0dx20hk701#activetab=pivot:overviewtab
***
**最初に、本来ならばコードの前に＄や＃をつけるところですが、「コピペでできる」というコンセプトなので省略いたします。**

**以下ターミナル上で黒枠内のコードをコピペしてください。※[　]内は自身で入力するものです[]は外して入力してください。**
***

契約したVPSにssh接続する。

```
ssh root@[IP Address]
```

####一般ユーザの追加
好きなユーザ名を設定しましょう。

```
useradd -m -s /usr/bin/bash [ユーザ名]
```
```
passwd [ユーザ名]  
```
新しいパスワードを設定する。

``New password: [好きなパスワード]          　 #新しいパスワードの設定 ※表示されません``
``Retype new password: [好きなパスワード]    　#再入力``
```
####sudoグループに[ユーザ名]を追加
```
adduser [ユーザ名] sudo
```
追加されているか確認する

```
cat /etc/group | grep sudo
```
以下が表示されていればOK
　
``sudo:x:27:[ユーザ名]``
***

####ポートの開放

```
ufw enable
```
```
ufw allow 80
```
```
ufw allow [49152 〜 65535の内、好きなポート１つ]
```
``例） ufw allow 50022``

```
ufw reload
```
```
ufw status
```
↓以下が表示されることを確認　**※これはコピペ不要**

```
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
80                         ALLOW       Anywhere
80 (v6)                    ALLOW       Anywhere (v6)
50022                      ALLOW       Anywhere　　　　　　#ここは開放した好きなポートが出ます
50022(v6)                  ALLOW       Anywhere (v6)　　　#ここは開放した好きなポートが出ます
```


####SSH接続の設定ファイルのバックアップ


```
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org
```
####SSH接続の設定変更
```
vi /etc/ssh/sshd_config
```

``35行目の``
 
``PermitRootLogin yes``

 ``yes を no　に変更する。``
↓
。
viの使い方は以下のサイトが詳しいです。

https://eng-entrance.com/linux-command-vi

きちんと編集されたか確認する

```
diff /etc/ssh/sshd_config /etc/ssh/sshd_config.org
```
以下の表示が出るか確認する。

``< PermitRootLogin no``
``---``
``> PermitRootLogin yes``

```
sshd -t
```
これでエラーを吐かなければOK。次に進んでください。

```
systemctl restart sshd.service
```
```
exit
```

```
exit
```

再度rootでSSH接続を試みてください。

```
ssh root@[IP Address]
```

``Permission denied, please try again.``の表示が出てログインできなければ成功です。

***

####ssh接続ポートの変更

一般ユーザでログインする。

```
ssh [ユーザ名]@[IP Address]
```
```
sudo su
```
最初に設定したパスワードを入力

```
sudo sed -i -e "s/^#Port 22$/Port [先ほど開放した好きなポート]/" /etc/ssh/sshd_config
```
``例） sudo sed -i -e "s/^#Port 22$/Port 50022/" /etc/ssh/sshd_config``

```
sudo systemctl restart sshd
```
```
exit
```
```
exit
```
***

変更したポートで一般ユーザにログインできることを確認する。

```
ssh -p [開放した好きなポート] [ユーザ名]@[IP Address]
```
``例）ssh -p 50022 ubuntu@192.168.1.11``

これで構築前の準備は完了です！

##メディアサーバーを構築する

rootに入る

```　
sudo su
```


nanoとNode.jsのインストール

```
apt update; \
apt install -y git htop curl nano xz-utils tmux; \
curl -sL https://deb.nodesource.com/setup_15.x | bash -; \
apt install -y nodejs
```

FFmpegのインストール

```
cd /tmp; \
rm -rf /tmp/ffmpeg-git*; \
wget https://media.network/static/ffmpeg-release-amd64-static.tar.xz; \
tar xvf ffmpeg-release-amd64-static.tar.xz; \
cd /tmp/ffmpeg-*/; \
mv ffmpeg ffprobe /usr/bin/; \
cd /root;
```

メディアサーバーのGitリポジトリのクローンを作成

```
git clone https://github.com/mediafoundation/mediaserver.git; \
cd mediaserver; \
npm i
```

npmのアップデート

```
npm install -g npm
```

***
パスフレーズとapiパスワードの変更

```
nano config.js
```
nanoの使い方は以下のサイトが詳しく説明しています。

http://dotnsf.blog.jp/archives/1066662653.html

以下の部分を編集する。

```ruby:mediaserver/config.js
const config = {
  passphrase: "ここに任意のパスフレーズを入力する", #ここを編集する
    api : true,
    api_user: 'admin',
    api_pass: 'ここに任意のパスワードを入力する',  #ここを編集する
  },
  rtmp: {
//...
```
**apiユーザーとapiパスワードは後で管理パネルに入る際に使うので覚えておく！**

***
サーバーを起動する。

```
node app &
```

いったんここを参照しMedia Networkアプリ設定を行う。

https://docs.media.network/app-setup/

Step 3のIPアドレスはメディアサーバーを構築したVPSのIPv4アドレスに:80を加えたものを入力してください。
``例）192.168.1.11:80``

ResourceIDを控えておく。
ｘｘｘｘｘｘｘ.medianet.work
ｘｘｘｘｘｘｘの部分です。

***
チャンネルのウェブサイトを編集する

```
nano views/channel.html
```

下のほうにすすんでResourceIDがあるところを探す。

```ruby:mediaserver/views/channel.html
 <div class="column-2">
    <form id="videoUrlForm">
      <div class="form-group">
        <label for="url">Video URL<span id="https-only" class="hide"> (HTTPS only)</span>:</label>
          <input type="text" class="form-control" id="url" name="url" placeholder="Please enter video url" required
            value="https://ｘｘｘｘｘｘｘ.medianet.work/live/<%= name %>/index.m3u8" />   #←先ほど控えたResourceIDに置き換える。
</div>
```

管理パネルにアクセス
https://ｘｘｘｘｘｘｘ.medianet.work/admin/
apiユーザとapiパスワードを使用してログイン

サーバーが動いていることを確認する。
***

以上でメディアサーバの構築は終了です。

動画配信はまだうまくできてないので、うまくできたらまとめるつもりです。


##参考、引用サイト

https://docs.media.network/ms-setup

https://saikyouse.com/how-to-contract-time4vps/

https://webkaru.net/linux/ssh-prohibit-root-login/

https://eng-entrance.com/linux-command-vi

http://dotnsf.blog.jp/archives/1066662653.html

https://nemlog.nem.social/blog/52819