外部のツールを使用してPterodactylPanelを構築する方法。(インストール編)

今回は久しぶりのQuitta投稿ということで、VPSにPterodactyl Panelを立てて、自宅サーバーにWingsを構築していきます。

# Pterodactyl Panelとは
Agames様という会社も使っている管理パネル。非常にUIが分かりやすい。綺麗で神秘的。ほかにも管理パネルはあるが、これはその中でもとても使いやすいぞ。アドオンを入れたりテーマが配布されていたりとカスタマイズ自在。
ただし、導入がくそムズイ。


## 必要なスペック
- Wings
4コア4GHz以上、メモリ16GB以上。OSはUbuntu。
- Panel
Installerが対応しているOS。2コア以上。4GB以上。Webサーバーが立てられるスペックで。
# 今回使用するツール
**Pterodactyl Panel installer**：Pterodactyl Installerという方が作成したPterodactylをインストールするスクリプト。Githubに公開してある。
<https://github.com/pterodactyl-installer/pterodactyl-installer>

## 用語解説
:::note alert
警告
この用語解説を読まないで次に進まないでください。トラブルの原因になります。
:::
- Wings
Minecraftサーバーを立てるLinux系で動作するパッケージ。翻訳は「翼」今回は自宅鯖に構築します。
- Pterodactyl
WingsでMinecraftサーバーを立てるように指令するWebパネルを作成する。今回はVPSに構築します。
- Nginx 
高性能Webサーバー。ほかにもApache2やLiteSpeedなどがある。静的サイトや動的サイト、リバースプロキシにも使える優れもの。
- UFW
Ubuntu上でネットワークファイヤーウォールを設定する。ほかにも多数存在する。
- Ubuntu
Linuxディストリビューションの一つ。ほかにもArchLinuxやAmazon Linuxもある。
- SSL(TLS)
Transport Layer Securityの略。これが設定されているとウェブサイトにアクセス時に警告が表示されない。ほかにもFreeWiFiで接続してるときにパスワードがばれなくなる。（暗号化）優れもの。SSL証明書を取得する必要がある。（無料で取得できものもありし、有料で取得できるものもある。それぞれ特徴があります。）
- ドメイン
ドメイン名とも言う。IPアドレスを好きな名前に設定できる。（例：255.255.255.6 -> exanple.com）
- Pterodactyl Installer
今回使うツール公式では使用しないことを推奨してあるが、使うと結構楽です。
- グローバルIP
ネット内の住所。これはプライベートIPアドレスというものもあるが、それは各端末に割り当てられている。（スマホ、Switch、パソコン）、グローバルIPはプライベートIPとは違い、一つの回線に一つついているＩＰ。
:::note warn
警告
OSバージョンに注意してください。
:::

# 今回の材料

- VPS：１個
- 自宅サーバー：何個でも
- ポート開放できる回線・プロパイダ：１個
- ドメイン：１個
- CloudFlareのアカウント
:::note info
推奨
回線のグローバルIPは固定のほうが良い。（動的でもよい）
:::

# 構築を始める前に
- CloudFlareにはPanel用とWings用の二つのAレコードが追加されていること。
- 自宅サーバーはSSHでアクセスできるように。VPSも同様。
- 自信がないならサーバーエンジニアにお願いする手もあることを知っておいてください。

## ドメインのレコード関係
今回のサブドメインをこの記事はこうします。
- Panel：panel.Example.com
- Wings：node1.Example.com

では構築しましょう。
# 構築開始
OSの管理者権限を取得する。
```
sudo su
```
OSを最新の状態にする。
```
apt update
apt upgrade
```
外部のツールのbashを取得してそのファイルを実行する。
```
bash <(curl -s https://pterodactyl-installer.se)
```
### インストーラーのウィザードに沿ってインストール作業を進めていく。
今回使用するOS：Ubuntu Server 20.04

# Wings(自宅サーバー)
``bash <(curl -s https://pterodactyl-installer.se)``を実行後。
Wingsをインストールする場合は``1``と送信。
```
* What would you like to do?
* [0] Install the panel
* [1] Install Wings
* [2] Install both [0] and [1] on the same machine (wings script runs after panel)
* [3] Install panel with canary version of the script (the versions that lives in master, may be broken!)
* [4] Install Wings with canary version of the script (the versions that lives in master, may be broken!)
* [5] Install both [3] and [4] on the same machine (wings script runs after panel)
* [6] Uninstall panel or wings with canary version of the script (the versions that lives in master, may be broken!)
```
次にUFWを自動で設定しますかと出るので、``y``を送信。
```
Do you want to automatically configure UFW (firewall)? (y/N): 
```
何も考えずに``y``を送信。
```
* Do you want to automatically configure a user for database hosts? (y/N): 
```
こちらも何も考えずに``y``を送信。
```
* Do you want to configure MySQL to be accessed externally? (y/N): 
```
パネルのURLを入力します。

:::note warn
注意
URLの最初にhttpやhttpsは含めなくていいです。例：``https://panel.Example.com/``にしたい場合は
panel.Example.comだけでよろしい。
:::
```
Enter the panel address (blank for any address): 
```

これも``y``
```
* Would you like to allow incoming traffic to port 3306? (y/N): 
```
何も入力せずエンター
```
* Database host username (pterodactyluser): 
```
データベースに使用するパスワードを設定します。
```
* Database host password:
```
SSLを有効にするための質問。今回はSSlを適用します。``y``を送信。
```
Do you want to automatically configure HTTPS using Let's Encrypt? (y/N): 
```
Nodeのドメインを決めます。好きなNodeのドメインにしてください。

:::note warn
注意
``http://``,``https://``はつけない。
:::
```
* Set the FQDN to use for Let's Encrypt (node.example.com): 
```
``yを送信``
```
* This script will perform a HTTPS request to the endpoint https://checkip.pterodactyl-installer.se
* The official check-IP service for this script, https://checkip.pterodactyl-installer.se
* - will not log or share any IP-information with any third-party.
* If you would like to use another service, feel free to modify the script.
* I agree that this HTTPS request is performed (y/N): 
```
SSL認証を取得するためのメールアドレス。自分のメールアドレスを入力し送信。
```
* Enter email address for Let's Encrypt: 
```
インストールを開始するため``y``を送信。
```
* Proceed with installation? (y/N): 
```
少し文字が流れる。

プライバシーポリシーや規約に同意するか。同意する場合は``A``
```
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.pdf. You must agree in
order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: 
```


インストールが終わるまで待ちます。これが結構時間かかる。

:::note alert
警告
- 途中で止まる可能性がありますが、Ctrl+Cや電源を切らないでください。
:::

これが表示されたらWingsがインストールされました。
```
######################################################################
* Wings installation completed
*
* To continue, you need to configure Wings to run with your panel
* Please refer to the official guide, https://pterodactyl.io/wings/1.0/installing.html#configure
* 
* You can either copy the configuration file from the panel manually to /etc/pterodactyl/config.yml
* or, you can use the "auto deploy" button from the panel and simply paste the command in this terminal
* 
* You can then start Wings manually to verify that it's working
*
* sudo wings
*
* Once you have verified that it is working, use CTRL+C and then start Wings as a service (runs in the background)
*
* systemctl start wings
*
* Note: It is recommended to enable swap (for Docker, read more about it in official documentation).
######################################################################
```
パネル側でノードをパネルにつなげるためのトークンを取得したらWingsの入っているマシンで実行する。

# Pterodactyl Panel(WebServer-VPS)
OSの管理者権限を取得する。
```
sudo su
```
OSを最新の状態にする。
```
apt update
apt upgrade
```
外部のツールのbashを取得してそのファイルを実行する。
```
bash <(curl -s https://pterodactyl-installer.se)
```
今回使用するOS：Ubuntu Server 20.04

``bash <(curl -s https://pterodactyl-installer.se)``を実行後。
Panelをインストールする場合は``0``と送信。
```
* What would you like to do?
* [0] Install the panel
* [1] Install Wings
* [2] Install both [0] and [1] on the same machine (wings script runs after panel)
* [3] Install panel with canary version of the script (the versions that lives in master, may be broken!)
* [4] Install Wings with canary version of the script (the versions that lives in master, may be broken!)
* [5] Install both [3] and [4] on the same machine (wings script runs after panel)
* [6] Uninstall panel or wings with canary version of the script (the versions that lives in master, may be broken!)
```
panelのデータベースの名前です。トラブル回避のため、何も入力せずにエンターを押して送信。``デフォルトの名前が使用されます。``
```
* Database name (panel): 
```
panelのデータベースのユーザー名です。トラブル回避のため、何も入力せずにエンターを押して送信。``デフォルトの名前が使用されます。``
```
* Database username (pterodactyl): 
```
データベースのパスワードを設定します。こちらも何も入力せずランダムに生成されるパスワードを設定します。何も入力せずにエンター
```
* Password (press enter to use randomly generated password): 
```
タイムゾーンを設定します。
<https://www.php.net/manual/en/timezones.php>に各世界のコードが張られています。
自分の住んでいる地域を設定しましょう。ちなみに日本は``Asia/Tokyo``
タイムゾーンを入力して送信。
```
* List of valid timezones here https://www.php.net/manual/en/timezones.php
* Select timezone [Europe/Stockholm]: 
```
SSl認証を取得するためのメールアドレス。自分のメールアドレスを入力し送信。
```
Provide the email address that will be used to configure Let's Encrypt and Pterodactyl: 
```
パネルに最初に登録するAdminアカウントのメールアドレスを設定。自分のメールアドレスを入力し送信。
```
* Email address for the initial admin account: 
```
アドミンのユーザーネームを入力後送信。
```
* Username for the initial admin account: 
```
FirstNameを決めてください。
```
* First name for the initial admin account: 
```
LastNameを決めてください。
```
* Last name for the initial admin account: 
```
アカウントのパスワードを設定してください。
```
* Password for the initial admin account: 
```
PanelのURlを入力し送信。※``http://``などはつけないでください。
```
* Set the FQDN of this panel (panel.example.com): 
```
``y``を入力し送信。
```
* Do you want to automatically configure UFW (firewall)? (y/N): 
```
SSlをつけるため``y``を入力し送信。
```
* Do you want to automatically configure HTTPS using Let's Encrypt? (y/N): 
```
``y``を入力。
```
* I agree that this HTTPS request is performed (y/N): 
```
設定が正しければ``yes``を入力し送信。
```
* Initial configuration completed. Continue with installation? (y/N): 
```
少し時間かかるのでしばらく待つ。

こうなるので``y``を入力し送信。
```
   INFO  Application key set successfully.  


 // Provide the email address that eggs exported by this Panel should be from. This should be a valid email address.    

 // The application URL MUST begin with https:// or http:// depending on if you are using SSL or not. If you do not     
 // include the scheme your emails and other content will link to the wrong location.                                   

 // The timezone should match one of PHP's supported timezones. If you are unsure, please reference https://php.net/manual/en/timezones.php.

 // Please reference https://pterodactyl.io/panel/1.0/additional_configuration.html#telemetry for more detailed information regarding telemetry data and collection.

 Enable sending anonymous telemetry data? (yes/no) [yes]:
 > 
 ```
 またしばらくまつ。

 こうなったらパネルは完成よ。
 ```
 * SUCCESS: The process of obtaining a Let's Encrypt certificate succeeded!

##############################################################
* Panel installation completed
* 
* Your panel should be accessible from https://aaaaa.com
* 
* Installation is using nginx on ubuntu
* Thank you for using this script.
###################################
```