目次
- この記事で得られること
- 前提: Oracleのサーバーが手元にあること
- 全体の流れ
- Step 1. box64のインストール — apt版は使わない
- Ubuntu標準のbox64はValheim起動時に停止した
- Step 2. Valheimサーバーの取得 — SteamCMDも使わない
- ダウンロードしたファイルに実行権限がない
- Step 3. 起動スクリプト
- パスワードは nano で入れる
- -public とサーバー一覧表示
- 注意ポイント: -crossplay 0 は「無効」の指定にならない
- Step 4. ポート開放(UDP 2456-2457)
- Step 5. 起動と接続確認
- お気に入り一覧で赤×になる場合
- Step 6. systemd常駐化(SSHを切っても動き続ける)
- Valheimサーバーをアップデートする
- 既存のワールドを持ち込む・バックアップする
- PCからサーバーへ持ち込む
- ローカルPCへバックアップする
- まとめ
- 関連記事
「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時の課金実測は、観測期間が揃ってから別記事で公開します。
全体の流れ
- box64をソースビルド(←apt版は使わない)
- DepotDownloaderでValheimサーバー取得(←SteamCMDは使わない)
- 起動スクリプト作成(Steam専用構成)
- ファイアウォール開放(UDP 2456-2457)
- 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になりました。

最初からソースビルドを行います:
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 で入れる
上のコマンドでは -password を CHANGE_ME のままにしてあります。ここに本物のパスワードを打ち込まないでください。
注意 — パスワードを端末に貼らない理由。
- 貼り付けたコマンドは シェル履歴(
~/.bash_history)に平文で残ります- 履歴はSSHを切っても消えません。あとから入った人にも読めます
- 同じ理由で、
sedでパスワードを流し込むのも避けてください
エディタで直接書き換えます。
nano ~/valheim-server/start.sh
-password "CHANGE_ME" の行を探し、CHANGE_ME を5文字以上のパスワードへ差し替えます。Ctrl+O → Enter で保存、Ctrl+X で終了です。
保存したら、パーミッションを確認します。上のコマンドの chmod 700 で、すでに自分だけが読める状態になっているはずです。
ls -l ~/valheim-server/start.sh
-rwx------ と出ればOKです。実行権は残したまま、自分以外は中身を読めません。
なぜValheimだけ起動引数なのか — Palworldでは設定ファイル(
PalWorldSettings.ini)にパスワードを書き、起動引数を使いません(運用編参照)。psから見えてしまうからです。ですがValheimは、公式の専用サーバーガイドを読むと
-password起動引数しか用意されていません。設定ファイルも環境変数もありません。つまりpsに出るのは仕様上どうにもなりません。できるのは「履歴に残さない」「ファイルを他人に読ませない」の2つだけです。上の
nanoとchmod 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 2456〜2457 です。Oracle環境ではクラウド側とOS側の2層で開けます(詳しい考え方はハブ記事のStep 5参照):
- OCIセキュリティリスト: 「Default Security List」にイングレスルール追加 — ソース
0.0.0.0/0/ UDP / 宛先ポート2456-2457 - サーバー内 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 connected→Registering lobby→Opened Steam server - 確認:
sudo ss -ulnpで2456と2457の両方がLISTENしていること
クライアント(Steam版Valheim)→ ゲーム参加 → サーバーを追加 → <パブリックIP>:2456 → 接続 → パスワード入力。

環境によってはログ上部に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/にあるため、この更新では消えません。
注意: 1.0(2026-09-09)より前に作ったワールドは、1.0で最初にセーブした時点でフォルダ形式に変わります。
- 旧ファイルは
<ワールド名>_backup_<日時>.db/.fwlに改名されて、同じ場所に残りました- 1.0で初めて読み込むときは、新しいロケーションの生成が入ります。本記事のA1では約11MBのワールドで、読み込み開始から約2分かかりました。ログに
Generating locationsが流れている間は待ってください- 念のため、更新前にバックアップを取っておいてください
既存のワールドを持ち込む・バックアップする
Oracleでもワールドの保存先はKAGOYAと同じで、~/.config/unity3d/IronGate/Valheim/worlds_local/です。
注意: Valheim 1.0(2026-09-09)で、ワールドの保存形式が変わりました。
.dbと.fwlの2ファイルだったものが、ワールド名のフォルダ1個になりました- 中身は
.chunkファイル群と_main.<番号>.db2などです。フォルダごと運ばないと読み込めません-worldの名前のフォルダが見つからないと、エラーを出さずに同じ名前の新規ワールドを作ります

ファイルの受け渡しは、フォルダをドラッグするだけで済むWinSCPで行います。接続と鍵の設定はWinSCPでゲームサーバーのファイルを扱うにまとめました。
つまずきポイント — Windows標準の
scpでフォルダを送ったところ、2か所で詰まりました。
- 手元のPC側のパスに書いた
~が展開されず、No such file or directoryで止まる- 届いたフォルダが書き込み不可(
dr-x------)になる。1.0はセーブのたびにこのフォルダへ書き込みます。WinSCPで送るとrwxrwxr-xで届きました
PCからサーバーへ持ち込む
まずサーバーへSSH接続したターミナルでValheimを止め、保存先を作ります。起動したまま上書きすると、終了時の自動保存で戻ることがあります。
sudo systemctl stop valheim
mkdir -p ~/.config/unity3d/IronGate/Valheim/worlds_local
次に、手元のPCでワールドを探します。場所はここです。
%USERPROFILE%\AppData\LocalLow\IronGate\Valheim\worlds_local\
ワールド名と同じ名前のフォルダが、持っていく対象です。1.0でまだ一度も開いていないワールドは、<ワールド名>.dbと.fwlの2ファイルのままです。その場合は2ファイルを運べば、サーバーが最初のセーブでフォルダ形式に変換します。
注意: 同じ場所に
<ワールド名>_backup_20260912-231428.dbのようなファイルがあっても、運ばないでください。1.0で最初にセーブしたとき、旧形式のファイルが改名されて残ったものです。その時点で止まった古いデータなので、以降の進行は入っていません。

WinSCPでサーバー側の/home/ubuntu/.config/unity3d/IronGate/Valheim/worlds_local/を開き、左(PC)から右(サーバー)へフォルダをドラッグします。.configが一覧に見えないときは、アドレス欄にこのパスを直接入力してください。
つまずきポイント — SSHで作ったフォルダがWinSCPに出てこないときは、Ctrl+Rで表示を更新します。WinSCPは開いたフォルダの一覧を覚えていて、SSH側の変更を自動では反映しません。
再びサーバーのターミナルで、フォルダが届いたか確認します。
ls -la ~/.config/unity3d/IronGate/Valheim/worlds_local/
ワールド名のフォルダが表示されたら、start.shの-worldをフォルダ名に一致させてから起動します。名前が違うと、持ち込んだワールドではなく新規ワールドが生成されます。
sudo systemctl start valheim
sudo systemctl status valheim
持ち込んだワールドを読めたかは、起動ログで確認できます。
journalctl -u valheim --since "10 min ago" --no-pager | grep -E "ZNet.LoadWorld|LoadOldWorld|Generating locations"
ZNet.LoadWorld: <ワールド名> ... save numberと出れば、フォルダ形式のワールドを読めていますLoadOldWorldと出れば、旧形式の2ファイルを読んでいます。最初のセーブでフォルダ形式に変わります
ローカルPCへバックアップする
バックアップ時も、まずサーバーのターミナルで停止します。停止時にセーブされるので、最新の状態を持ち出せます。
sudo systemctl stop valheim
WinSCPでworlds_local/を開き、ワールド名のフォルダを右(サーバー)から左(PC)へドラッグします。
持ち出したフォルダに_main.<番号>.okがあることを確認したら、サーバーを再開します。セーブの最後に書かれるファイルです。
sudo systemctl start valheim
自動バックアップもフォルダです — Valheimは
worlds_local/に<ワールド名>_backup_auto-20260912-212542のようなフォルダを自動で作ります。
- 名前の時刻はサーバーの時計です。本記事のA1はUTCだったので、日本時間では9時間後になります(例の
212542は、日本時間の翌朝6時25分)- 戻す世代を選ぶときは、WinSCPの更新日時の列で見るほうが確実です

まとめ
| 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 Java版サーバー(box64不要)
同じOracle無料枠ではMinecraft統合版サーバー(BDS)も立てられます(BDSもbox64で動きます)。Core Keeperはポート開放すら不要です。PAYGの課金実測はOracle無料枠の落とし穴と実測にまとめました。
質問・つまずきポイントがあればお問い合わせフォームからどうぞ。実際にハマった範囲なら大体答えられます。