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 등이 하나씩 누락되는 오류가 연속적으로 발생합니다. 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 수동 설치
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 30 -
PowerShell을 닫았다가 다시 열고,
node --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는 값을 같은 필드에 공백으로 구분하여 입력
세션 손상 시 재설정 절차 #
컨텍스트 오버플로를 반복하면, 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가 예약 작업으로 등록되어 로그인 시 자동 시작됨
- 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 이상)으로 이전할 수 있다면 훨씬 더 쉽습니다.