鯖ドリル

※本記事にはアフィリエイト広告(PR)が含まれています

Valheim

【月0円】Valheim専用サーバーをOracle Cloud無料枠に立てる|ARM+box64で完全無料の24時間サーバー

Oracle CloudのAlways Free対象枠(Ampere A1)にValheim専用サーバーを立てる手順。ARM上でx86ゲームを動かすbox64の実戦ノウハウと、SteamCMDを使わないDepotDownloader方式を、実際にハマった失敗とともに解説します。

#Oracle Cloud#無料#ARM#box64#Ubuntu#マルチプレイ#専用サーバー
目次

「Valheimの専用サーバーが欲しい。でも毎月お金を払い続けるのはちょっと……」

前回の記事ではKAGOYA CLOUD VPSに日額28円で立てる方法を紹介しました。今回はさらにその上、Always Free対象内なら月0円のValheimサーバーです。

使うのはOracle CloudのAlways Free枠(Ampere A1)。実際に私がゼロから構築して、フレンドと接続確認するところまでの全手順を書きます。

結論を先に言うと——

  • 完全無料で常設サーバーが欲しいOracle Cloud A1 + box64 ←本記事(ただし癖が強い)
  • 素直に安定・簡単がいいKAGOYA CLOUD VPS(日額28円〜)
  • コマンド一切書きたくないConoHa for GAME(テンプレあり)など

この記事で得られること

  • ARMサーバーでx86ゲームを動かす box64 の実戦ノウハウ
  • SteamCMDを使わずにValheimサーバーを取得するDepotDownloader方式
  • 完成後の運用方法(systemd常駐化・自動復活・ログ確認)

前提: Oracleのサーバーが手元にあること

本記事は、Oracle A1インスタンスにSSH接続できる状態から始めます。スペックは2 OCPU / 12GB、OSはUbuntu 24.04です。

まだの人は、先にこちらをどうぞ → Oracle Cloud無料枠でゲームサーバー用インスタンスを作る全手順 アカウント登録・インスタンス作成・SSH接続・ポート開放の基本まで、この1本で整います。

なお、Oracle無料枠は2026年6月に半減されました。ただしValheimは縮小後の2 OCPU / 12GBでも問題なく動きます(実測: メモリ使用4GB前後)。

PAYG時の課金実測は、観測期間が揃ってから別記事で公開します。

全体の流れ

  1. box64をソースビルド(←apt版は使わない)
  2. DepotDownloaderでValheimサーバー取得(←SteamCMDは使わない)
  3. 起動スクリプト作成(Steam専用構成)
  4. ファイアウォール開放(UDP 2456-2457)
  5. systemd常駐化

Step 1. box64のインストール — apt版は使わない

Valheimのサーバーバイナリはx86_64用で、ARMのA1ではそのまま動きません。x86→ARM変換を担うのがbox64です。SSHでインスタンスに接続して作業します。

ssh -i ~/.ssh/{{key}} ubuntu@{{ip}}

入力値は外部へ送信されません。「この端末に保存」を押した場合だけ、この2項目をブラウザに保存します。

キーを違うフォルダに作成している方は、キーファイルがある場所を指定して繋いでください。

Ubuntu標準のbox64はValheim起動時に停止した

Ubuntu 24.04は apt install box64 でbox64が入ります。しかしこれでは、ValheimのUnityエンジン読み込みでSegmentation faultになりました

apt版box64(v0.2.6)でのSegfault。UnityPlayer.so読み込み失敗

最初からソースビルドを行います:

sudo apt update && sudo apt upgrade -y
sudo apt install -y git build-essential cmake python3 unzip wget dotnet-runtime-8.0
cd ~ && mkdir -p tools && cd tools
git clone https://github.com/ptitSeb/box64
cd box64 && mkdir build && cd build
cmake .. -DARM_DYNAREC=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo
make -j$(nproc)     # 2 OCPUで10〜15分
sudo make install
box64 --version     # 0.3.x になっていればOK

Step 2. Valheimサーバーの取得 — SteamCMDも使わない

SteamCMDは32bit x86バイナリです。ARMで動かすにはbox86環境まで必要になり、泥沼です。

代わりにDepotDownloaderを使います。.NET〈Microsoft製〉で作られており、ARM64でそのまま動きます:

cd ~/tools
wget https://github.com/SteamRE/DepotDownloader/releases/latest/download/DepotDownloader-linux-arm64.zip
unzip DepotDownloader-linux-arm64.zip -d depotdownloader
chmod +x depotdownloader/DepotDownloader
./depotdownloader/DepotDownloader -app 896660 -dir ~/valheim-server

App ID 896660はValheim Dedicated Server。匿名ダウンロード可能なので、Steamアカウント情報は不要です。

ダウンロードしたファイルに実行権限がない

DepotDownloaderは実行ビットを付けません。忘れると is not an executable file で怒られます:

chmod +x ~/valheim-server/valheim_server.x86_64

Step 3. 起動スクリプト

サーバー設定を入力すると、下の起動スクリプトへ即時反映されます。

パスワードだけはここに入れません。 端末に貼るとシェル履歴に残るためです。スクリプトを作ったあと、nano で直接書き込みます(理由は下で説明します)。

cat > ~/valheim-server/start.sh << 'EOF'
#!/bin/bash
cd "$(dirname "$0")"
export LD_LIBRARY_PATH="./linux64:$LD_LIBRARY_PATH"
export SteamAppId=892970
exec box64 ./valheim_server.x86_64 \
  -name "{{name}}" \
  -port {{port}} \
  -world "{{world}}" \
  -password "CHANGE_ME" \
  -public {{public}}
EOF
chmod 700 ~/valheim-server/start.sh

パスワードは nano で入れる

上のコマンドでは -passwordCHANGE_ME のままにしてあります。ここに本物のパスワードを打ち込まないでください。

注意 — パスワードを端末に貼らない理由。

  • 貼り付けたコマンドは シェル履歴(~/.bash_history)に平文で残ります
  • 履歴はSSHを切っても消えません。あとから入った人にも読めます
  • 同じ理由で、sed でパスワードを流し込むのも避けてください

エディタで直接書き換えます。

nano ~/valheim-server/start.sh

-password "CHANGE_ME" の行を探し、CHANGE_ME5文字以上のパスワードへ差し替えます。Ctrl+OEnter で保存、Ctrl+X で終了です。

保存したら、パーミッションを確認します。上のコマンドの chmod 700 で、すでに自分だけが読める状態になっているはずです。

ls -l ~/valheim-server/start.sh

-rwx------ と出ればOKです。実行権は残したまま、自分以外は中身を読めません。

なぜValheimだけ起動引数なのか — Palworldでは設定ファイル(PalWorldSettings.ini)にパスワードを書き、起動引数を使いません(運用編参照)。ps から見えてしまうからです。

ですがValheimは、公式の専用サーバーガイドを読むと -password 起動引数しか用意されていません。設定ファイルも環境変数もありません。つまり ps に出るのは仕様上どうにもなりません

できるのは「履歴に残さない」「ファイルを他人に読ませない」の2つだけです。上の nanochmod 700 がそれにあたります。

-public とサーバー一覧表示

指定お気に入り・サーバー一覧接続方法
-public 1公開され、正常ならバージョンと人数が表示される一覧またはIP指定
-public 0非公開。一覧に出ない、または赤×になるIPを直接指定
省略既定値は 1-public 1と同じ

注意ポイント: -crossplay 0 は「無効」の指定にならない

Steam版の参加者だけで遊ぶ場合、起動オプションに -crossplay は書きません。Valheim公式の専用サーバーガイドによると、-crossplay を付けるとPlayFabを使うクロスプレイ用バックエンドが有効になります。後ろに 0 を付けて無効化する書式は案内されていません。

XboxやMicrosoft Store版の参加者を招く場合は -crossplay が必要です。ただし、Oracle A1 + box64環境でのクロスプレイは本記事では未検証です。Steam専用構成をまず確実に動かし、クロスプレイは別途検証できた時点で追記します。

Step 4. ポート開放(UDP 2456-2457)

Valheimに必要なのは UDP 24562457 です。Oracle環境ではクラウド側とOS側の2層で開けます(詳しい考え方はハブ記事のStep 5参照):

  1. OCIセキュリティリスト: 「Default Security List」にイングレスルール追加 — ソース 0.0.0.0/0 / UDP / 宛先ポート 2456-2457
  2. サーバー内 iptables:
sudo iptables -I INPUT 1 -p udp --dport {{port}}:{{port+1}} -j ACCEPT
sudo netfilter-persistent save

Step 5. 起動と接続確認

~/valheim-server/start.sh
  • 初回はワールド生成込みで10分前後かかります(box64のJIT翻訳が起動時に集中するため)
  • 成功サイン: Game server connectedRegistering lobbyOpened Steam server
  • 確認: sudo ss -ulnp24562457 の両方がLISTENしていること

クライアント(Steam版Valheim)→ ゲーム参加 → サーバーを追加 → <パブリックIP>:2456 → 接続 → パスワード入力。

接続成功時のサーバーログ。New peer connectedが出ればOK

環境によってはログ上部にbox64のライブラリ警告が出ます。本記事の実機でも表示されましたが、その後にNew peer connectedまで進み、Steam版クライアントから接続できています。判定は警告の有無ではなく、後続の接続ログで行ってください。

お気に入り一覧で赤×になる場合

起動スクリプトが -public 1 になっているか確認してください。-public 0(非公開)だと、お気に入りでは赤×表示になります(IPを直接指定すれば接続はできます)。緑+人数表示にしたいなら -public 1 にして再起動しましょう。

Step 6. systemd常駐化(SSHを切っても動き続ける)

sudo tee /etc/systemd/system/valheim.service << 'EOF'
[Unit]
Description=Valheim Dedicated Server (box64)
After=network.target

[Service]
Type=simple
User=ubuntu
ExecStart=/home/ubuntu/valheim-server/start.sh
Restart=on-failure
RestartSec=15
KillSignal=SIGINT
TimeoutStopSec=120

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now valheim

これで:

  • OS起動と同時にサーバーが自動で立つ
  • クラッシュしても15秒後に自動復活(box64は稀に落ちるのでこの保険が効く)
  • 停止・再起動は sudo systemctl stop/restart valheim(停止時は毎回セーブしてから終了)

運用コマンド:

sudo systemctl status valheim         # 状態確認
sudo systemctl stop valheim           # 停止
sudo systemctl restart valheim        # 設定変更後の再起動
journalctl -u valheim -f              # ログをリアルタイム監視(Ctrl+Cで戻る)
journalctl -u valheim --since today | grep -E "Got handshake|Closing socket"   # 今日の入退室

Valheimサーバーをアップデートする

クライアントとサーバーのバージョンが違うと接続できません。アップデート後に入れなくなったら、サーバーを止めてDepotDownloaderを再実行します。

sudo systemctl stop valheim
cd ~/tools
./depotdownloader/DepotDownloader -app 896660 -dir ~/valheim-server
chmod +x ~/valheim-server/valheim_server.x86_64
sudo systemctl start valheim
sudo systemctl status valheim

DepotDownloaderで更新すると実行ビットが外れるため、更新のたびにchmod +xを再実行します。ワールドデータは~/.config/unity3d/IronGate/Valheim/にあるため、この更新では消えません。


既存のワールドを持ち込む・バックアップする

Oracleでもワールドの保存先はKAGOYAと同じです。

Step 1の「キーファイル名」「パブリックIP」と、Step 3の「ワールド名」を入力すると、以下の転送コマンドへ自動反映されます。保存ボタンを押さなくても、同じページ内なら反映されます。再読み込み後も残したい場合だけ保存してください。

PCからサーバーへ持ち込む

まずサーバーへSSH接続したターミナルでValheimを止め、保存先を確認します。起動したままファイルを上書きすると、終了時の自動保存で戻ることがあります。

sudo systemctl stop valheim
mkdir -p ~/.config/unity3d/IronGate/Valheim/worlds_local
ls -lah ~/.config/unity3d/IronGate/Valheim/worlds_local

次に、自分のPC側のターミナルで転送します。

Windows(PowerShell):

cd ~\AppData\LocalLow\IronGate\Valheim\worlds_local
scp -i ~/.ssh/{{key}} ".\{{world}}.db" ".\{{world}}.fwl" ubuntu@{{ip}}:/home/ubuntu/.config/unity3d/IronGate/Valheim/worlds_local/

Mac:

cd ~/Library/Application\ Support/IronGate/Valheim/worlds_local
scp -i ~/.ssh/{{key}} "{{world}}.db" "{{world}}.fwl" ubuntu@{{ip}}:/home/ubuntu/.config/unity3d/IronGate/Valheim/worlds_local/

サーバー側で.db.fwlの2ファイルが届いたか確認します。あわせてstart.sh-worldが同じワールド名かも確認してから起動します。名前が違うと、新規ワールドが生成されます。

ls -lah ~/.config/unity3d/IronGate/Valheim/worlds_local
sudo systemctl start valheim
sudo systemctl status valheim

ローカルPCへバックアップする

バックアップ時も、まずサーバー側で停止します。

sudo systemctl stop valheim

次に、自分のPC側のターミナルで実行します。

Windows(PowerShell):

$backupDir = "$HOME\Downloads\valheim-backup-$(Get-Date -Format yyyyMMdd-HHmmss)"
New-Item -ItemType Directory -Force $backupDir
scp -i ~/.ssh/{{key}} "ubuntu@{{ip}}:/home/ubuntu/.config/unity3d/IronGate/Valheim/worlds_local/{{world}}.db" "ubuntu@{{ip}}:/home/ubuntu/.config/unity3d/IronGate/Valheim/worlds_local/{{world}}.fwl" $backupDir
Get-ChildItem $backupDir

Mac:

backup_dir="$HOME/Downloads/valheim-backup-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$backup_dir"
scp -i ~/.ssh/{{key}} "ubuntu@{{ip}}:/home/ubuntu/.config/unity3d/IronGate/Valheim/worlds_local/{{world}}.db" "ubuntu@{{ip}}:/home/ubuntu/.config/unity3d/IronGate/Valheim/worlds_local/{{world}}.fwl" "$backup_dir/"
ls -lah "$backup_dir"

作成されたバックアップフォルダ内に、同じワールド名の.db.fwlがあることを確認したら、サーバーを再開します。

sudo systemctl start valheim

まとめ

Oracle A1無料枠(本記事)KAGOYA CLOUD VPS
料金Always Free対象内なら月0円日額28円〜
構築難度(box64を利用)低(x86ネイティブ)
起動時間初回10分前後(2回目からは短縮)1〜2分
安定性常用レベル(自動復活可能)
向いてる人常設無料サーバーが欲しい・トラブルを楽しめる手堅く早く立てたい

正直、KAGOYAでの構築より3倍くらい大変でした。でもAlways Free対象内に収まれば、24時間動き続けるValheimサーバーが月0円です。

本記事とハブ記事(Oracle側の罠をまとめてあります)を併せて読めば、楽に構築できるはずです。

構築の手間より安定を取りたいなら、サーバー本体はKAGOYAのVPSから。x86ネイティブなので、本記事のbox64まわりの作業がまるごと不要になります

「やっぱり素直な方がいい」と思った方はKAGOYA編へどうぞ。

関連記事

同じOracle無料枠ではMinecraft統合版サーバー(BDS)も立てられます(BDSもbox64で動きます)。Core Keeperはポート開放すら不要です。PAYGの課金実測はOracle無料枠の落とし穴と実測にまとめました。


質問・つまずきポイントがあればお問い合わせフォームからどうぞ。実際にハマった範囲なら大体答えられます。