2024/12/10
この記事はUnreal Engine (UE) Advent Calendar 2024 10日目の記事です。
この記事ではサーバーの実際の処理やLinuxへの書き出し、及びエンジンのソースからのビルドについては最低限しか触れません。ここはできる前提で行きます。
正し、UE5.4及び5.5ではネットワークチェックサムが一致が一致しないエラーによりdedicated serverが機能しないので、今回はUE5.3.2を使用しています。詳しくは記事をご覧ください。
頑張れば修正できるらしいです。
clinet : Windows11
server : Ubuntu Server 24.04 LTS (on Proxmox VE)
UE5.3.2
ThirdPerson Templateを使用
BP_ThirdPersonCharacterでローカル環境にいる場合にUIを出すようにします
最低限のUIだけ作ります。
サーバーのデフォルトマップで任意のレベルを選択しておいてください。
その後Linux serverとWindows clientに向けて書きだします。
先にDocker Desktopをインストールしてください。その後
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y \
build-essential \
git \
python3 \
python3-pip \
curl \
wget \
libssl-dev \
libffi-dev \
libsqlite3-dev \
zlib1g-dev \
xdg-user-dirs \
&& rm -rf /var/lib/apt/lists/*
RUN useradd -m gameuser
WORKDIR /game
COPY Engine/ /game/Engine/
COPY QiitaDemo/ /game/QiitaDemo/
COPY QiitaDemo.sh /game/
RUN mkdir -p /game/QiitaDemo && \
touch /game/QiitaDemo/QiitaDemo.uproject && \
chown -R gameuser:gameuser /game && \
chmod +x /game/QiitaDemo.sh
USER gameuser
EXPOSE 7777/udp
CMD ["./QiitaDemo.sh"]
こんな感じのファイルを作成します。(インターネットの情報を元に、何度もエラーを修正して結果これで動いたので、これが正しいかの保証はできません。)
その後dockerfileがある階層で、
docker build -t ue5-server .
を実行します。
多分10分位かかります。
完了したら
docker run -p 7777:7777/udp ue5-server
で起動します。
Docker Desktopで起動しているのも確認できます。
ローカル環境で接続ができるのを確認しました。
まずイメージファイルを書きだします
docker save ue5-server > ue5-server.tar
次に適当なサーバーにsshします。今回はubuntu24.04のサーバーに載せます。
scpコマンドで送るなりファイルサーバー経由で送るなりでどうにかしてイメージを転送します
mizuame@mizuame:~/unreal$ ls
ue5-server.tar
送れました。
docker load < ue5-server.tar
mizuame@mizuame:~/unreal$ docker load < ue5-server.tar
2573e0d81582: Loading layer 29.54MB/29.54MB
14d452bc0e99: Loading layer 140.5MB/140.5MB
18c399aafd06: Loading layer 4.333kB/4.333kB
35e12b31d72b: Loading layer 94B/94B
5305b85d8c6f: Loading layer 762.4MB/762.4MB
8556ee88e44d: Loading layer 14.02MB/14.02MB
5b26d4c2733c: Loading layer 307B/307B
4e1436c95e0e: Loading layer 776.4MB/776.4MB
ロードします。
できたら
docker run -p 7777:7777/udp ue5-server
起動します。
ゲームサーバーとは基本UDPで通信すると思いますが、これのProxyをしてくれるサービスはなかなかりません。例えばCloudflare TunnelであればTCPの転送はやってくれるのですがUDPはできません。
こうなるとVPSを借りてWireGuard等でVPNを張り、Port Forwardingをするのが有力に思えます。
しかし探したところ、Localtonetというサービスがあり、これならUDPの転送もしてくれるみたいです。今回はこれを使用しました。
ほとんど使用感はCloudflaredと同じでした。
(無課金でも使用でき、毎月1GBの転送まで無料でそれを超えると止まるらしいです。詳しくは公式サイトを見てください。)
UDPを選択し、サーバーをTokyo,Portを7777にします。
wget https://localtonet.com/download/localtonet-linux-x64.zip
sudo apt install unzip
unzip localtonet-linux-x64.zip
chmod 777 localtonet
./localtonet
最初にTokenを聞かれるので、WebのMy Tokensからデフォルトのやつを張り付けます。
接続出来たらConnectedになっていると思います。
もうこれでUDP Reverse Proxyをしてくれている状態なので、接続してみましょう。
先ほどのトンネル作成画面にURL及びPortが出ていると思うので、それをコピーします。
接続を確認できました。
果たして需要があるのか謎ですが、コンテナイメージとクライアントを配布します。Windows10,11+DockerDesktop環境があれば動かせると思います。
今回は実際にインターネット経由でdedicated serverに接続できるのを確認しました。実際の運用時はk8sの上で動かすことになると思いますが、オンプレでサーバーを動かせれば大きなコストカットになるため、有力な選択肢になると思います。