OCIのAlways Free Tierが良すぎてGCPからマイクラ鯖を移行した話

12月7日の[Oracle Cloud Infrastructure Advent Calendar 2021](https://qiita.com/advent-calendar/2021/oci)の内容です。

Oracle Cloud Infrastructure (OCI) のAlways Free TierがすごいというのをたまたまTwitterでみたので、調べてみたところその内容がすごかったので、GCPにて運用していたマイクラ鯖をOCIに移行したことを書いたものです。

ちなみに、OCIに移行しましたがマイクラの動作にストレスを感じることはないです。(1つのサーバー内に複数のワールドをたてても快適に動きます。k8s等は利用してません。そのままマイクラサーバーを実行させています。)

## OCIのAlways Free Tierについて
一応、説明しときます。
Always Free Tierは、Oracle Cloud Infrastructureのいろいろを期間の制限なく使用できるサービスです。

[公式サイト(Oracle Cloud Free Tier)](https://www.oracle.com/jp/cloud/free/)

自分的にOCIのAlways Free Tierがすごいと思うところは、

> 1つのVMまたは最大4つのVMとして使用可能な4つのArmベースのAmpere A1コアと24 GBのメモリ。

が無料であるということ。

```
- 1コアと6 GBメモリのVM4台
- 2コアと12 GBメモリのVM2台
- 2コアと12 GBメモリのVM1台&1コアと6 GBメモリのVM2台
```

という方法も可能。すごい。

GCPのAlways Free VMと比較してもVMの性能はとても良い。あと、OCIはFree Tierの対象であるかどうかが至るところに書いてあるので間違えることがなくわかりやすい。データベースとかは、Free Tier用の設定ボタンがある。また、300ドルのクレジット(30日間のみ有効)が最初に貰えるのですが、期限が切れるとアップグレードしないとこれは出来ないよみたいなのが項目ごとにわかりやすくでてきます。

それでは、新規登録から始めます。
 
## OCIに新規登録する
[ここ](https://signup.cloud.oracle.com/?sourceType=_ref_coc-asset-opcSignIn&language=en_JP)からOCIに新規登録します。登録方法は、たくさん記事がある・困ることはないと思うので省略します。(カード認証まで必須)

~~ホームリージョンは、近い方が良いのでOsakaを選択しました。Tokyoリージョンは、Free Tier用のインスタンスに制限があるかもみたいなことが書いてあったのでやめました。~~

追記(2022/01/14):記事を書いたときには大阪リージョンにAmpere A1(Free Tier用チップ)の余裕があったと思うのですが、今はそこまで余裕がないと思います。(私自身、サーバーを削除してから新たにAmpere A1構成のインスタンスを作成しようとしたところ新規作成ができなかったため)他のリージョンを選択することをおすすめします。どのリージョンだと余裕があるのかと言ったことは検証できないでわかりません…
ホームリージョンの変更は一度選ぶと出来ず、ホームリージョンのみFree Tierの対象となるのでよく考えて選んだ方がよさそうです。

---

登録すると自動的に33,000円のクレジット(多分、制限あり。30日間)が貰えるのとAlways Free Tierの対象者になります。(詳しくは、[こちら](https://www.oracle.com/jp/cloud/free/)を参照)

## インスタンスを作る
ハンバーガーメニューから、Compute→Instancesを選択。Create instanceをクリック。

Nameは、インスタンス名。わかりやすいのにするべきなので変更した方が良いかと。
Placementは、そのまま。
イメージは、Ubuntuを使いました。なんでも良いと思います。(Windowsは、Always Free Tierの対象外なので選択不可)
インスタンスタイプ(shape)は、下記の写真のように設定します。Ampere→VM.Standard.A1.Flex→4コアまでバーを持っていきます。(メモリは、勝手に24GBに設定されると思います。されなければ、メモリは24GBに設定してください)
![instance_shape](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527236/f4d653c7-8bf7-22db-2353-94a786047f67.jpeg)

SSHキーの取り扱いは、好みの方法でお願いします。ダウンロードしても良いしアップロードしても問題ありません。

:::note warn
SSHキーは、紛失しないように大切に保管してください。
:::

ここまでできたらCreateをクリックします。

## aapanelをインストール
今回は、クラウドだったのでaapanelを利用してファイルを移します。

[aapanel 公式サイト](https://www.aapanel.com/index.html)

aapanelは、Linux系インスタンスの管理をGUIでできる超便利システムです。欠点としては、aapanelについての日本語記事が少ないことです…

まず、既に利用しているGCP側のVMに繋いでaapanelをインストールします。
インストール方法は、[ここ](https://forum.aapanel.com/d/9-aapanel-linux-panel-6812-installation-tutorial)から確認できます。

Ubuntuの方は、下記コマンドを入力します。

```
wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && sudo bash install.sh forum
```

aapanelは、ポート8888|888|80|443|20|21を利用するのでGCP側のファイアウォール設定で8888|888|80|443|20|21をポート開放しときます。(開放方法は、省略)

インストールすると最後に下のような表示がでるので、この内容をどこかにコピーしときます。

Congratulations! Installed successfully!

aaPanel Internet Address: http:/XXX.XX.XX.XXX:8888/~~~~~~~~
aaPanel Internal Address: http:/XX.X.X.XXX:8888/~~~~~~~~
username: ~~~~~~~~
password: ~~~~~~~~

Warning: If you cannot access the panel,release the following port(8888|888|80|443|20|21) in the security group

ここまでできたらGCP側のインストールは完了です。
続いてるOCI側のVMにインストールをします。

先程作成したVMステータスがRunningになっていることを確認して生成又はダウンロードしたsshキーを利用して接続します。(Public IP Addressは、VM作成後の画面に表示されています。)

GCP側に入力したのと同様のコマンドをOCIのVMにも実行させます。
実行前に、パッケージの更新もすることをおすすめします。

```
apt update
apt upgrade
```

OCIでもポート(8888|888|80|443|20|21)開放をします。
### OCIポート開放方法
OCIのインスタンス一覧[Compute] → [Instances]から先程作成したVMの名前をクリックします。
Instance detailsの中のVirtual cloud network名をクリックします。VCN名には、作成したVMと似たような名前がついていると思います。
クリックするとサブネットがでてくるのでサブネット名をクリックします。下記画像では、minecraft-subnetになっています。
![vcn](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527236/e958106e-d4ed-8e64-3202-2a333643ef6f.jpeg)
Default Security List for {VCN名}と書かれたセキュリティリストがあると思うのでそれをクリックします。Add Ingress Rulesとあるのでクリックします。
下記画像のように入力します。
Source CIDR: 0.0.0.0/0
IP Protocol: TCP
Destination Port Range: 8888,888,80,443,20,21
![vcn-security](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527236/a2651832-9972-fdee-9a82-fb9a5a11e958.jpeg)
入力できたらAdd Ingress Rulesをクリックします。
これで、OCI側でのポート開放は、完了です。

### VMポート開放方法
続いてVM側からポート開放をします。(OCIは、VM側からもしないといけないっぽい？)
firewall-cmdを利用します。

```
sudo apt install firewalld
```

ポート開放をします。

```
sudo firewall-cmd --zone=public --permanent --add-port=8888/tcp
sudo firewall-cmd --zone=public --permanent --add-port=80/tcp
sudo firewall-cmd --zone=public --permanent --add-port=443/tcp
sudo firewall-cmd --zone=public --permanent --add-port=20/tcp
sudo firewall-cmd --zone=public --permanent --add-port=21/tcp
```

リロードします。

```
sudo firewall-cmd --reload
```

これで、ポート開放は完了です。後程、マイクラ用のポートを開けます。`22`ポートに`LIMIT`を指定しといても良いかもしれません。

## aapanelにアクセスしてワールドデータをzip化する
続いて、元々利用していたGCP側のサーバー内のマイクラのワールドやプラグインデータをzip化します。

GCP側でaapanelをインストールした際に最後に出力された下記表示のうち、

Congratulations! Installed successfully!

aaPanel Internet Address: http:/XXX.XX.XX.XXX:8888/~~~~~~~~
aaPanel Internal Address: http:/XX.X.X.XXX:8888/~~~~~~~~
username: ~~~~~~~~
password: ~~~~~~~~

Warning: If you cannot access the panel,release the following port(8888|888|80|443|20|21) in the security group

`aaPanel Internet Address`とグローバルIPの書いてあるリンクにアクセスします。
アクセスすると下記画面のようになっていると思うので、出力テキストにあるusernameとpasswordを入力します。入力できたらログインしてください。

![aapanel-login](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527236/8c7fbe18-8853-9c0b-2366-93ae622efb85.jpeg)

ログインするとサーバーステータス等色々でてきますが、初期パスワードが嫌だという方は、[Settings]から変更できます。

マイクラのワールドデータをzip化します。
まず、マイクラのワールドを停止させます。screenやtmuxを利用している場合は、アタッチしてstopと入力してください。(それぞれの方法で停止させてください)
横の一覧から[Files]をクリックします。マイクラのワールドテータが入っているディレクトリまで移動します。
マイクラワールドの入っているルートディレクトリを一括でzip化します。まず、データが入っているルートディレクトリの上にマウスを会わせると右側に色々とオプションがでてくるので、[Zip]をクリックします。

:::note warn
Dynmapなどのプラグインを利用していて容量が大きい(4GB)を越える場合、分割してzip化してください。
:::

Zip化する際に保存ディレクトリを選択できると思うのですが、私の試した限りだと元から設定されているパスに保存させると何故かうまく行きませんでした。なので、/hone/ubuntuとかユーザーディレクトリを指定することをおすすめします。
ファイル名は、フォルダ名になっていると思うのでそのままで良いかと思います。

zipファイルが生成されるまで数分待ちます。

zipファイルが生成できたら、保存ディレクトリにいって生成されたファイルにカーソルを会わせると右側に色々表示されると思うので[More] → [Download]をクリックします。

ローカル端末にダウンロードが始まるので終わるまで待ちます。ファイルを分割した場合、全てダウンロードします。(ディレクトリ配置を忘れないように注意してください)

ダウンロードできたらこのステップは終了です。

## OCIのVMにワールドデータをアップロードする
続いて、OCI側のVMに先程のzipファイルをアップロードします。
OCI側のVMでaapanelをインストールした際に最後に表示されたログインリンク・ユーザーネーム・パスワードを利用してGCPと同様にaapanelにログインします。

パスワードの変更を行う場合は、行ってください。

[Files]にアクセスします。配置したい場所に移動して先程のzipファイルをアップロードします。(右上に[Upload]とあると思うのでクリックして、表示されたパネルにドラッグするか[Upload file]からファイルを配置して右下の[Upload]ボタンをクリックしてアップロードします)

UploadステータスがUploadedになったらアップロードパネルを閉じます。アップロードしたzipファイルのうえにカーソルをあわせると[UnZip]という表示がでてくるので実行します。

正常に展開できたら完了です。

## マイクラ用のポート開放をする
先程のポート解放時と同様なので省略します。
25565/tcpポートを開放します。(Geyser等を利用して統合版とのクロスプレイを行っている場合、TCPではなく**UDP**の19132を開放する必要があります)
↓Geyser等でBE版とのクロスプレイプロキシを利用している場合

```
sudo firewall-cmd --zone=public --permanent --add-port=19132/udp
```

上記コマンド入力後は、必ず`firewall-cmd`を**リロード**してください。

## javaをインストールする
java17(openjdk)なら、下記コマンドでインストールできます。(v1.17)

```
apt install openjdk-17-jdk -y
```

せっかくなので、Oracle JDKのインストールを紹介しようと思ったのですが面倒なので割愛

## 起動
前のサーバーと同じように起動させてください。当たり前ですが、Dockerを利用していたらDockerをいれてから動させてください。

エラーがでて困ったらコメントください。可能な限り対応します！

## 最後に
GCPのときは、月々4,000円程度かかっていたサーバー費が0円になって驚いています笑
かなりスペック的にも余裕があるので、wordpressもいれて、GCPのAlways Freeで運用しているVMからブログ用サーバーを移行しようかなとか考えています。
Oracleさん、すごい！(いつまで続くかな…)

---

### 追記内容
- 2022年1月18日
  - 記事がOCIjpにて紹介されるようなので文法的なミスを修正しました。
  - 大坂リージョンにおけるAmpere A1の状況を追記しました。