Windows 부팅 자동 시작
작성: 2026-07-20
갱신: 2026-07-26
목적: Windows 시작 시 자동으로 올라오는 LivekitDev 스택·관련 항목 인벤토리
이 머신은 Meet/홈페이지가 재부팅 후에도 502 없이 살아 있도록 NSSM 서비스 + 헬스 스케줄 작업으로 상주한다.
한눈에 보기
Section titled “한눈에 보기”| 구분 | 이름 | 트리거 | 포트 / 역할 | 현재 상태 (점검 시점) |
|---|---|---|---|---|
| Windows 서비스 | LivekitDevServer | 부팅 (Automatic) | TCP 7880, 7881 / UDP 50000–60000 — LiveKit SFU | Running |
| Windows 서비스 | LivekitDevMeet | 부팅 (Delayed Automatic) | TCP 3000 — Next.js Meet | Running |
| Windows 서비스 | LivekitDevCaddy | 부팅 (Automatic) | TCP 80, 443, 7443, 8443 — TLS·리버스 프록시·홈 정적 | Running |
| 작업 스케줄러 | LivekitDev-Stack-Ensure | 부팅 +90초, 5분마다 | 중지된 서비스 기동 / 포트 죽으면 재시작 | Ready |
| Windows 서비스 | AudiverisWeb (다른 프로젝트) | 부팅 (Automatic) | TCP 8080 — OMR Web | Running |
| 작업 스케줄러 | AudiverisWeb-Ensure (다른 프로젝트) | 부팅 +1분, 5분마다 | Audiveris 헬스 | Ready |
| 작업 스케줄러 | Start WSL Ubuntu (for Caddy) | 로그온 | WSL Ubuntu 깨우기 (/bin/true) — 레거시 |
Ready |
| 작업 스케줄러 | WSL Caddy Autostart | 로그온 | WSL 안 systemctl start caddy — 레거시 |
Ready |
Startup 폴더 (공용/사용자): LivekitDev 관련 항목 없음.
레지스트리 Run: LivekitDev 관련 항목 없음 (보안 클라이언트 등만 존재).
1. LivekitDev 핵심 서비스 (NSSM)
Section titled “1. LivekitDev 핵심 서비스 (NSSM)”공통:
- 래퍼:
C:\Developments\LivekitDev\tools\nssm\nssm-2.24\win64\nssm.exe - 계정: LocalSystem
- 의존: Tcpip (Meet는 추가로 LivekitDevServer)
- 종료 시: NSSM AppExit → Restart
- SCM 실패 복구: 5s / 15s / 30s 재시작 (
sc failure) - 로그:
C:\Developments\LivekitDev\logs\
| 서비스 이름 | DisplayName | 시작 유형 | 실행 내용 |
|---|---|---|---|
LivekitDevServer |
LivekitDev LiveKit SFU | Automatic | livekit\bin\livekit-server.exe --config config.yaml --bind 0.0.0.0 --node-ip <공인IP> (작업 디렉터리 livekit\) |
LivekitDevMeet |
LivekitDev Meet (Next.js) | Automatic (Delayed) | node.exe …\next\dist\bin\next start -p 3000 -H 0.0.0.0 (작업 디렉터리 meet\) |
LivekitDevCaddy |
LivekitDev Caddy (Homepage + Meet edge) | Automatic | caddy.exe run --config Caddyfile (작업 디렉터리 루트) |
Meet 환경 변수 (서비스)
Section titled “Meet 환경 변수 (서비스)”설치 스크립트가 NSSM AppEnvironmentExtra로 넣음:
NODE_ENV=productionPORT=3000LIVEKIT_API_KEY=devkeyLIVEKIT_API_SECRET=secretLIVEKIT_URL=wss://meet.dev.tictechtoeai.com:7443
pnpm/corepack 미사용 (대화형 Y/n 대기 방지).
부팅 순서 (의도)
Section titled “부팅 순서 (의도)”[부팅] ├─ LivekitDevServer (즉시 Automatic) → :7880 ├─ LivekitDevCaddy (즉시 Automatic) → :80/:443/:7443/:8443 └─ LivekitDevMeet (Delayed + DependOn LivekitDevServer) → :3000 └─ +90초 후 LivekitDev-Stack-Ensure 가 한 번 더 점검Caddy는 백엔드보다 먼저 떠도 되며, 그때 Meet/LiveKit이 아직 없으면 일시 502가 날 수 있다. Ensure 작업이 보완한다.
2. 헬스 체크 작업
Section titled “2. 헬스 체크 작업”| 항목 | 값 |
|---|---|
| 작업 이름 | LivekitDev-Stack-Ensure |
| 실행 | powershell.exe -File C:\Developments\LivekitDev\scripts\ensure_stack.ps1 |
| 계정 | SYSTEM (Highest) |
| 트리거 1 | At startup, Delay PT90S (90초) |
| 트리거 2 | 5분 간격 반복 (장기) |
| 로그 | logs\ensure-stack.log |
동작 요약 (ensure_stack.ps1):
LivekitDevServer→LivekitDevMeet→LivekitDevCaddy순으로 Stopped면Start-Service- 서비스는 Running인데 포트가 닫혀 있으면
Restart-Service- 7880 (Server), 3000 (Meet), 443 (Caddy)
수동 실행:
C:\Developments\LivekitDev\start_all_services.bat# 또는powershell -NoProfile -ExecutionPolicy Bypass -File C:\Developments\LivekitDev\scripts\ensure_stack.ps13. 공개 URL (서비스가 살아 있을 때)
Section titled “3. 공개 URL (서비스가 살아 있을 때)”| URL | 용도 | 뒷단 |
|---|---|---|
| https://dev.tictechtoeai.com/ | 홈 (정적) | Caddy → homepage/dist |
| https://meet.dev.tictechtoeai.com/ | Meet UI | Caddy → 127.0.0.1:3000 |
| wss://meet.dev.tictechtoeai.com:7443 | LiveKit 시그널 | Caddy → 127.0.0.1:7880 |
| http://127.0.0.1:7880/ | LiveKit 헬스 (OK) |
직접 |
4. 방화벽 (설치 시 생성)
Section titled “4. 방화벽 (설치 시 생성)”install_stack_services.ps1이 없으면 생성:
| 규칙 이름 | 포트 |
|---|---|
| LivekitDev-FW-TCP-80 | 80 |
| LivekitDev-FW-TCP-443 | 443 |
| LivekitDev-FW-TCP-7443 | 7443 |
| LivekitDev-FW-TCP-8443 | 8443 |
| LivekitDev-FW-TCP-7880 | 7880 |
| LivekitDev-FW-TCP-7881 | 7881 |
| LivekitDev-FW-TCP-3000 | 3000 |
| LivekitDev-FW-UDP-50000-60000 | 50000–60000 UDP |
5. 자동 시작 안 하는 것 (수동)
Section titled “5. 자동 시작 안 하는 것 (수동)”| 구성 요소 | 비고 |
|---|---|
| avatar_bot | Python 수동 (avatar_bot/avatar_bot.py) |
| Wav2Lip / SadTalker | 오프라인 생성 파이프라인, 상주 아님 |
Flutter livekit_video_call |
정적 빌드 산출물; Caddy가 파일만 서빙 (프로세스 없음) |
| docs-site (Astro) | 개발용 npm run dev 만, 서비스 아님 |
| ComfyUI | 이 스택과 무관, 별도 |
6. 같은 머신 관련 자동 시작 (LivekitDev 밖)
Section titled “6. 같은 머신 관련 자동 시작 (LivekitDev 밖)”AudiverisWeb (VisionIvyDev)
Section titled “AudiverisWeb (VisionIvyDev)”| 항목 | 값 |
|---|---|
| 서비스 | AudiverisWeb — Automatic, Running |
| 포트 | 8080 (audiveris-web-*.jar) |
| 헬스 작업 | AudiverisWeb-Ensure — 부팅 +1분, 5분마다 |
| 스크립트 | C:\Developments\VisionIvyDev\audiverisdev\audiveris-web\ensure_service.ps1 |
| NSSM 바이너리 | LivekitDev 트리의 tools\nssm\... 를 공유 사용 중 |
LivekitDev 문서 범위 밖이지만, 부팅 시 같이 올라오는 개발 서비스이므로 인벤토리에 표기.
레거시: WSL Caddy (로그온 시)
Section titled “레거시: WSL Caddy (로그온 시)”| 작업 | 트리거 | 동작 |
|---|---|---|
Start WSL Ubuntu (for Caddy) |
사용자 로그온 | wsl -d Ubuntu -u root --exec /bin/true |
WSL Caddy Autostart |
사용자 로그온 | WSL 안에서 systemctl start caddy + sleep 유지 |
현재 프로덕션 에지는 Windows 네이티브 LivekitDevCaddy 이다.
WSL Caddy 작업은 예전 구성 잔존일 수 있다. 포트 80/443 충돌이 나면 이 작업들을 비활성화 검토:
Disable-ScheduledTask -TaskName 'WSL Caddy Autostart'Disable-ScheduledTask -TaskName 'Start WSL Ubuntu (for Caddy)'(비활성화 전에 WSL 쪽 Caddy가 실제로 바인딩하는지 확인.)
7. 설치 / 재설치 (관리자)
Section titled “7. 설치 / 재설치 (관리자)”powershell -NoProfile -ExecutionPolicy Bypass -File C:\Developments\LivekitDev\scripts\install_stack_services.ps1이 스크립트가 하는 일:
- NSSM으로 세 서비스 설치(재설치) + 로그 로테이션 + 자동 재시작
- Meet Delayed Auto + LiveKit 의존
- SCM failure recovery
- 방화벽 규칙
LivekitDev-Stack-Ensure작업 등록 (구 homepage 전용 작업 제거)- 서비스 즉시 기동
관련 파일:
| 경로 | 역할 |
|---|---|
scripts/install_stack_services.ps1 |
설치·재설치 |
scripts/ensure_stack.ps1 |
헬스/복구 |
scripts/install_caddy_service.ps1 |
Caddy만 (구형/부분) |
start_all_services.bat |
Ensure 수동 실행 + 상태 출력 |
start_all.bat |
구형 일괄 배치 (경로 D:\ 주의) — 상주 구성 이후에는 start_all_services.bat 권장 |
8. 일상 점검 명령
Section titled “8. 일상 점검 명령”# 서비스 상태Get-Service LivekitDevServer, LivekitDevMeet, LivekitDevCaddy | Format-Table Name, Status, StartType
# 작업Get-ScheduledTask LivekitDev-Stack-Ensure | Get-ScheduledTaskInfo
# 리슨 포트Get-NetTCPConnection -State Listen -LocalPort 80,443,3000,7443,7880,7881 | Select-Object LocalPort, OwningProcess | Sort-Object LocalPort
# 공개curl.exe -sI https://meet.dev.tictechtoeai.com/curl.exe -s "https://meet.dev.tictechtoeai.com/api/connection-details?roomName=t&participantName=p"재시작:
Restart-Service LivekitDevServerRestart-Service LivekitDevMeetRestart-Service LivekitDevCaddy9. 코드 수정 후
Section titled “9. 코드 수정 후”# Meetcd C:\Developments\LivekitDev\meetpnpm buildRestart-Service LivekitDevMeet
# Homepage (Caddy file_server가 dist 직접 읽음 — 재시작 선택)cd C:\Developments\LivekitDev\homepagenpm run build
# LiveKit 설정/바이너리 교체 후Restart-Service LivekitDevServer10. 과거 장애 메모
Section titled “10. 과거 장애 메모”| 현상 | 원인 |
|---|---|
| 외부 Meet 502 | Caddy만 살아 있고 Meet(:3000)·LiveKit(:7880) 종료 |
| 수동 기동 후 사라짐 | 터미널/에이전트 Job에 묶인 자식 프로세스 종료 |
| pnpm 서비스 멈춤 | Corepack 대화형 Y/n 대기 → node next start 로 전환 |
방화벽·DNS·TLS는 정상인데 Meet만 502인 경우가 위와 같았다. 상주 서비스 + Ensure로 완화.
11. 체크리스트 (재부팅 후)
Section titled “11. 체크리스트 (재부팅 후)”-
Get-Service LivekitDev*세 개 모두 Running -
:443,:3000,:7880LISTEN - https://meet.dev.tictechtoeai.com/ 200
- connection-details API 응답
- (선택)
logs\ensure-stack.log최근 줄에ok=True - (선택) WSL Caddy 작업이 네이티브 Caddy와 충돌하지 않는지