Infrastructure / Self-hosted AI Agent
非推奨環境で動かしてみた:Windows Server 2019 に OpenClaw をインストールする(完全版) #
OpenClaw の公式推奨は WSL2 ですが、Windows Server 2019 は WSL2 非対応です。 それでも諦めずにネイティブ Windows ルートで動かしてみたところ、 WSL の壁・npm の既知バグ・モジュール不足・GPUStack との接続問題・セッション破損など 二桁に及ぶ障害を乗り越えてダッシュボード起動・会話まで到達できました。 同じ環境で試みる方向けに、ハマりどころを含めた全手順と、作成した運用支援ツールを公開します。
Windows Server 2019 は OpenClaw の公式サポート対象外です。 本記事は動作を保証するものではなく、検証目的の記録として公開しています。 本番環境への適用は推奨しません。
なぜ Server 2019 で試したのか #
社内に稼働中の Windows Server 2019 環境があり、OpenClaw でその Server を直接操作させたいというモチベーションがありました。 WSL2 経由だと Linux 環境に閉じてしまい、Windows のファイルシステム・プロセス・レジストリへのアクセスが WSL の壁越しになります。 ネイティブ Windows インストールなら OpenClaw が直接 Windows API を叩けるため、Server 操作用途には理にかなっています。
OpenClaw は WSL2 と ネイティブ Windows の両方に公式対応しています。 WSL2 の方が安定しており推奨ルートですが、Server 2019 では WSL2 が使えないため、必然的にネイティブルートを選ぶことになります。
環境構成 #
OpenClaw ホスト
- Windows Server 2019 Datacenter
- OpenClaw v2026.4.5(pnpm インストール)
- Node.js v22.14.0
- Gateway ポート:18789
モデル・検索バックエンド
- GPUStack + vLLM 0.17.1
- Qwen2.5-14B-Instruct(Tesla V100 ×2)
- SearXNG(オンプレ)
- Custom Provider(OpenAI 互換)
WSL2 が使えないことを確認するまでの道のり #
最初は公式ドキュメント通りに wsl --install を試しました。しかしここから早速ハマります。
エラー① wsl が認識されない #
wsl --install を実行したところ「用語 ‘wsl’ は認識されません」というエラー。
dism.exe で WSL 機能を有効化し、PC を再起動することで解決しました。
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
エラー② --install オプションが無効 #
wsl.exe は存在するのに --install や --set-default-version が使えない。
これは wsl.exe 本体のバージョンが古すぎるためです。
GitHub から最新の MSI を取得しても解決しませんでした。
調査の結果、根本原因が判明しました。Windows Server 2019 は WSL2 に非対応であり、Microsoft はバックポートしないと決定しています。 WSL2 は Windows Server 2022 以降でのみ利用できます。
WSL2 が使える最低ラインは Windows 10 Build 19041(2020年5月更新)以上、またはサーバー系なら Windows Server 2022 以上です。 Windows Server 2019(Build 17763)では WSL2 は利用できません。
ハマりどころ一覧 #
① Node.js が入っていない #
install.ps1 が Node.js のインストールに失敗し、node・npm・openclaw いずれも認識されない状態になった。MSI で手動インストールが必要。
② openclaw コマンドが認識されない #
npm のグローバルインストール先が PATH に含まれておらず、新しい PowerShell ウィンドウを開くたびに消える。Machine レベルでの永続化が必要。
③ npm 版で MODULE_NOT_FOUND 連発 #
@larksuiteoapi/node-sdk・@slack/web-api・@buape/carbon・grammy などが1つずつ欠けるエラーが連続。npm 2026.4.x の既知バグ(issue #61787)で pnpm に切り替えると解消。
④ Git が入っていない #
npm の依存解決に git が必要だが未インストール。Git for Windows をインストールしてから再実行が必要。
⑤ pnpm approve-builds が必要 #
pnpm でインストール後、openclaw・sharp・koffi などのビルドスクリプトが保留状態になる。pnpm approve-builds -g で全承認してから再インストールが必要。
⑥ NODE_OPTIONS が残ってコマンド不能に #
NODE_OPTIONS=--stack-size=65536 を設定したセッションを流用すると、以降の全 openclaw コマンドが「is not allowed in NODE_OPTIONS」で失敗する。$env:NODE_OPTIONS="" でクリアが必要。
⑦ GPUStack への tool use が 400 エラー #
vLLM が --enable-auto-tool-choice なしで起動していると 400 "auto" tool choice requires ... エラー。GPUStack のバックエンドパラメータに追加が必要。
⑧ contextWindow が 16k に誤検出 #
モデル側が 32768 でも OpenClaw が 16000 と検出してコンテキストオーバーフローが頻発。設定ファイルに手動で contextWindow: 32768 を書き込む必要あり。
⑨ ダッシュボードが Internal Server Error #
npm 版では dist/control-ui/ が tarball に含まれておらず UI が表示されない。pnpm 版では解消。
⑩ セッションが heartbeat に固定される #
コンテキストオーバーフローを繰り返した結果、main セッションが heartbeat として認識され通常会話ができなくなった。sessions ディレクトリを削除してリセットが必要。
⑪ プラグインの RangeError で起動が遅い #
amazon-bedrock・google・minimax プラグインが起動時に Maximum call stack size exceeded を出し続けて数分の遅延が発生。NODE_OPTIONS をクリアすることで解消。
⑫ store フィールドの警告 #
GPUStack 側のログに fields were present in the request but ignored: {'store'} が出続ける。動作には影響しないが OpenClaw 側の送信フィールドに関する警告。
完全インストール手順 #
-
Git for Windows をインストール
PowerShell を閉じて開き直します。
curl.exe -L -o git.exe "https://github.com/git-for-windows/git/releases/download/v2.47.1.windows.1/Git-2.47.1-64-bit.exe" .\git.exe /VERYSILENT /NORESTART Start-Sleep -Seconds 30 -
Node.js 22 LTS を手動インストール
PowerShell を閉じて開き直し、
curl.exe -L -o nodejs.msi "https://nodejs.org/dist/v22.14.0/node-v22.14.0-x64.msi" msiexec /i nodejs.msi /quiet /norestart Start-Sleep -Seconds 30node --versionで確認します。 -
スクリプト実行を許可して pnpm をセットアップ
PowerShell を閉じて開き直します。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force npm install -g pnpm pnpm setup -
pnpm で OpenClaw をインストール
pnpm add -g openclaw@2026.4.5 -
ビルドスクリプトを承認して再インストール
pnpm approve-builds -g # すべて選択(スペースキーで全選択)→ Enter → y pnpm add -g openclaw@2026.4.5openclawのビルドに約2分かかります。 -
PATH を Machine レベルで永続化
$paths = @( 'C:\Program Files\nodejs', "$env:APPDATA\npm", "$env:LOCALAPPDATA\pnpm" ) $current = [System.Environment]::GetEnvironmentVariable('PATH','Machine') $entries = ($current -split ';') + $paths | Select-Object -Unique [System.Environment]::SetEnvironmentVariable('PATH', ($entries -join ';'), 'Machine') $env:PATH = ($entries -join ';') -
オンボーディング
モデルプロバイダーは Custom Provider、Base URL は GPUStack の
$env:NODE_OPTIONS="" openclaw onboard/v1エンドポイント、互換性はOpenAI-compatibleを選択します。 -
contextWindow を手動修正
プロバイダー名は環境に合わせて変更してください。
$config = Get-Content "$env:USERPROFILE\.openclaw\openclaw.json" | ConvertFrom-Json $config.models.providers.'custom-10-255-253-205'.models[0].contextWindow = 32768 $config.models.providers.'custom-10-255-253-205'.models[0].maxTokens = 8192 $config | ConvertTo-Json -Depth 20 | Set-Content "$env:USERPROFILE\.openclaw\openclaw.json" -Encoding UTF8 -
Gateway 起動・動作確認
$env:NODE_OPTIONS="" openclaw gateway run[gateway] readyが表示されたら別ウィンドウでopenclaw dashboardを実行します。
GPUStack 側の設定(vLLM バックエンドパラメータ) #
tool use(関数呼び出し)を有効にするには、GPUStack の管理画面でモデルのバックエンドパラメータに以下を追加します。
バックエンドパラメータ(必須) #
--max-model-len 32768
--generation-config vllm
--enable-auto-tool-choice
--tool-call-parser hermes
注意事項 #
- 「変更はインスタンスを削除して再作成した後にのみ適用されます」と表示されるため、保存後にモデルを再起動が必要
- Tesla V100(compute capability 7.0)では FlashAttention2 が使えず TRITON バックエンドにフォールバックするが動作は正常
--tool-call-parser hermesは値を同じフィールドに space 区切りで入力する
セッション破損時のリセット手順 #
コンテキストオーバーフローを繰り返すと、main セッションが heartbeat として認識されて通常会話ができなくなることがあります。その場合は sessions ディレクトリを削除してリセットします。
openclaw gateway stop
Remove-Item "$env:USERPROFILE\.openclaw\agents\main\sessions" -Recurse -Force
New-Item "$env:USERPROFILE\.openclaw\agents\main\sessions" -ItemType Directory
openclaw gateway run
sessions ディレクトリを削除すると会話履歴が失われます。重要な履歴がある場合はバックアップしてから実行してください。
作成した運用支援ツール:OpenClaw PATH Manager #
毎回 PATH を手動で設定する手間を解消するため、PowerShell スクリプトとブラウザ上で動作する診断 UI ツールを作成しました。
PATH 診断 UI(ブラウザ) #
3タブ構成のインタラクティブツールです。「状態確認」タブのコマンドを PowerShell で実行して出力を貼り付けると、Node.js・pnpm・npm・openclaw の PATH が通っているかを自動診断します。NG があれば「PATH 修正」タブに自動遷移して修正コマンドを表示します。
ocstart.ps1(PowerShell) #
デスクトップに保存してダブルクリックするだけで PATH 設定・Gateway 起動・停止・ダッシュボード・TUI をメニューから選択できるスクリプトです。毎回 PATH を手動設定する手間がなくなります。
ocstart.ps1 の内容 #
param([switch]$Stop)
$env:NODE_OPTIONS=""
$paths = @(
'C:\Program Files\nodejs',
"$env:APPDATA\npm",
"$env:LOCALAPPDATA\pnpm"
)
foreach ($p in $paths) {
if (($env:PATH -split ';') -notcontains $p) { $env:PATH += ";$p" }
}
if ($Stop) {
Write-Host "Gatewayを停止します..."
& openclaw gateway stop
exit
}
Write-Host "OpenClaw PATH設定済み"
Write-Host "openclaw: $((Get-Command openclaw -EA SilentlyContinue).Source)"
$action = Read-Host "[1] Gateway起動 [2] Gateway停止 [3] ダッシュボード [4] TUI [5] ステータス`n> "
switch ($action) {
'1' { openclaw gateway run }
'2' { openclaw gateway stop }
'3' { openclaw dashboard }
'4' { openclaw tui }
'5' { openclaw gateway status; openclaw doctor }
default { Write-Host "キャンセル" }
}
デスクトップへの保存とショートカット作成 #
# スクリプトをデスクトップに保存
$script | Out-File "$env:USERPROFILE\Desktop\ocstart.ps1" -Encoding UTF8
# ショートカットを作成
$ws = New-Object -ComObject WScript.Shell
$sc = $ws.CreateShortcut("$env:USERPROFILE\Desktop\OpenClaw起動.lnk")
$sc.TargetPath = "powershell.exe"
$sc.Arguments = '-ExecutionPolicy Bypass -File "C:\Users\Administrator\Desktop\ocstart.ps1"'
$sc.WorkingDirectory = "$env:USERPROFILE\Desktop"
$sc.IconLocation = "powershell.exe,0"
$sc.Save()
動作確認チェックリスト #
- ダッシュボードがブラウザで表示される(
http://127.0.0.1:18789) - モデルプロバイダーへの接続が
Verification successfulになっている mainセッションでチャットに返答が返ってくる- GPUStack ログに
POST /v1/chat/completions HTTP/1.1" 200 OKが出ている - Gateway が Scheduled Task として登録されており、ログイン時に自動起動する
- SearXNG 検索が設定されている
- セッション画面の TOKENS 表示が
xxxxx / 32768になっている(16000 でなく)
まとめ #
Windows Server 2019 という非推奨環境への OpenClaw 導入は、 複数の既知バグと環境固有の制約が重なるため一筋縄ではいきませんでした。 今回の作業で最も重要だった知見をまとめると以下の3点です。
- npm ではなく pnpm を使う:2026.4.x では npm 経由だと依存関係が壊れる重大バグがある
- PATH と NODE_OPTIONS を毎回確認する:新しいウィンドウを開くたびに設定が消えるため
ocstart.ps1で自動化する - GPUStack の vLLM パラメータに
--enable-auto-tool-choice --tool-call-parser hermesを追加する:これがないと tool use が 400 エラーになる
Windows Server 2019 への OpenClaw インストールは可能です。 ただし pnpm を使うこと・PATH を永続化すること・GPUStack のバックエンドパラメータを正しく設定することの3点が必須です。 WSL2 が使える環境(Server 2022 以上)に移行できるなら、そちらの方が圧倒的に楽です。