🌐

マイクラ+HTTPサーバーを建ててみた on Docker on Cloudflare(マイクラサーバー編)

に公開

はじめに

PCをサーバー用に購入したので、Ubuntuを乗せてその上にマイクラ鯖とHTTP鯖を作りました。
構築した内容は以下の通り。

  • オンプレのUbuntuサーバー
  • Cloudflare Tunnelを使用した安全な外部アクセス(SSHを使用)
  • Dockerによる各環境の分離
  • Minecraftサーバー&HTTPサーバーの同時運用
  • 今回はマイクラサーバー起動まで。

前提条件

物理PC
適当に予算12万で購入。GPUがない分これでも高性能。
インターネット接続環境
無論必須。
Cloudflareアカウント(無料)
無料アカウントでも色々と機能が使えるみたいなので、この機会に作りました。
HTTP鯖もちゃんとしたURLで公開したかったのでドメインもついでに購入(こっちは有料-10$;;)。
基本的なLinuxコマンドの知識
cdとかパッケージマネージャーとか使えれば、だいたい分かる…はず。

1.Ubuntuのインストール

実は筆者はここはやってないので、簡単な流れだけ紹介。(鯖置き場が友人宅なので、OSインストールだけはやってもらいました。)

  1. PCとUSBメモリを用意。
  2. UbuntuのISOファイルをダウンロード。
  3. USBメモリにUbuntuを書き込み。
  4. USBメモリをPCに差し込んで、BIOSでbootを設定。
  5. Ubuntuのインストールを実行。
    ここの記事などが参考になると思います。 https://qiita.com/live_in_2107/items/59cc91c6d29d5fc00149

2.Cloudflare Tunnelの設定

2.1サーバー側へのCloudeflaredのインストール+Tunnelの設定

CloudflareにログインしてTunnelのページまで移動します。
>Zero Trust>ネットワーク>Tunnels
そしたら、次はトンネルを作成します。
>トンネルを作成する>選択するCloudflared>適当な名前をつけてトンネルを保存
そしたら、Debian(Ubuntu)を選択して、表示された案内どおりにコマンドを打ってCloudflaredをインストールします。

# cloudflaredインストール用
# Add cloudflare gpg key
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null

# Add this repo to your apt repositories
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main' | sudo tee /etc/apt/sources.list.d/cloudflared.list

# install cloudflared
sudo apt-get update && sudo apt-get install cloudflared
# サービス登録用
# hogehoge...の部分は自身の機密トークンに合わせてください
sudo cloudflared service install hogehoge...
# 現在のターミナルセッションでのみトンネルを実行するとき用
# 主に接続テスト目的
cloudflared tunnel run --token hogehoge...

あとは、作成したトンネルの三点リーダーを選択して、トンネル設定画面を開き、パブリックホスト名を追加しておしまいです。
>Tunnels>作成したトンネル三点リーダー>設定>パブリックホスト名>パブリックホスト名を追加する>自分のドメインと、任意でサブドメイン、通信タイプを選択>保存

2.2クライアント側のcloudflaredインストール

今回のクライアント側はwindowsを使用しているので
https://github.com/cloudflare/cloudflared/releases
から最新版のcloudflared-windows-amd64.msiをダウンロードしてインストール
インストールしたら,cmdでcloudflared -vを実行してインストールが完了しているか確認します。

3.セキュリティ設定

3.1SSH設定の強化

やった内容は以下の2点です。他にも設定したほうが良い項目もあるかもですが、とりあえず、これくらいにしておきました。(面倒でなければportは変えたほうがいいかも)

  • ssh経由でのrootログインを禁止
  • パスワードでの認証を禁止
    コマンドはこれです。
sudo vim /etc/ssh/sshd_config
# sshd_configの中身
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
# SSH設定の反映
sudo systemctl restart ssh

3.2ファイアウォール設定

UFWで基本的なルールだけ抑えます。

# UFWの有効化
sudo ufw enable

# 基本的なルール設定
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 必要なポートのみ開放(Cloudflare経由なので最小限)
sudo ufw allow ssh    # SSH
sudo ufw allow 25565  # minecraft
sudo ufw allow http   # http
sudo ufw allow https  # https

# 設定の確認
sudo ufw status

3.3fail2banの導入

あんまりfail2banのことは理解してませんが、どうやら不正アクセスを防止する用のツールらしいです。(雑)
とりあえず、デフォルト設定で使用していますが、こちらもユースケースに合わせて設定してください。

# インストール
sudo apt install fail2ban -y

# サービスが動作しているか確認
systemctl status fail2ban.service
# enableやstartになっていなかった場合、有効に
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

4.Dockerのインストールと設定参考

以下のコマンドを走らせました。Docker公式はapt-get使ってましたが、aptでもいけそうなのでこちらを採用。

# パッケージインストール
sudo apt update
sudo apt install ca-certificates curl gnupg

# aptリポジトリ追加
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

 # Add the repository to Apt sources:
echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
    $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

# Docker Engineインストール
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# インストール確認
docker --version
sudo docker run hello-world

minecraftサーバーの構築

全体の流れとしては

  1. コンテナ置き場を作成
  2. docker-compopse.ymlを作成(参考
  3. コンテナを取ってきてminecraftサーバーを起動
    の流れになります。
# コンテナ置き場作成
mkdir -p ~/minecraft-server
cd ~/minecraft-server

docker-compose.ymlを作成

version: '3.8'

services:
  minecraft:
    image: itzg/minecraft-server:latest
    container_name: minecraft-server
    environment:
      EULA: "TRUE"
      TYPE: "PAPER"
      VERSION: "1.20.1"
      MEMORY: "2G"
      DIFFICULTY: "easy"
      MAX_PLAYERS: "10"
      MOTD: "My Home Minecraft Server"
      ENABLE_WHITELIST: "true"
    ports:
      - "25565:25565"
    volumes:
      - minecraft-data:/data
    restart: unless-stopped
    stdin_open: true
    tty: true

volumes:
  minecraft-data:

起動とログ確認

# サーバー起動
docker compose up -d

# ログの確認
docker compose logs -f minecraft

おまけ

windowsクライアントから簡単に起動したminecraftサーバーに入る方法。

  1. windowsにcloudflaredをインストール ダウンロードページ(cloudflare WARPの方が良いという意見も目にしたのですが、とりあえずcloudflaredを使いました。)
  2. cloudflaredでマイクラサーバーに接続
cloudflared access tcp --hostname minecraft.yourdomain.com --url localhost:25565
  1. マイクラのサーバーアドレス欄にlocalhost:25565と入力して接続

まとめ

とりあえず、この流れでオンプレubuntuにcloudflareとdockerを入れて、コンテナ上のマイクラにログインできるようになります。HTTPサーバーの同居に関しては次回に続きます。

感想

  • 初記事なのでとりあえずアウトプットになれる目的では十分かなと思います。
  • cloudflaredもdockerも自身だけで使うのは初めてなので、色々もたつきながらで大変でした。
  • 分量が予想より多くてHTTPのと分離しましたが、お許しください。
  • 今後も定期的に記事をかけたら良いなと思います。
  • ご意見ご感想、などなどありましたらコメントお願いします。

Discussion