OpenWorkers – Rust로 구현된 셀프호스팅 Cloudflare Workers

1 month ago 9

  • OpenWorkers는 V8 기반에서 JavaScript를 실행하는 오픈소스 런타임으로, 엣지 컴퓨팅을 자체 인프라에서 구현할 수 있음
  • KV 저장소, PostgreSQL, S3/R2 호환 스토리지, 서비스 바인딩, 환경 변수 및 시크릿을 지원
  • fetch, ReadableStream, crypto.subtle 등 주요 Web API를 포함해 Cloudflare Workers와 높은 호환성 유지
  • V8 Isolate 샌드박스, 크론 스케줄링, Docker Compose 기반 배포 등으로 간단한 셀프호스팅 가능
  • 약 7년간 발전해온 프로젝트로, 벤더 종속 없는 JavaScript 실행 환경을 목표로 함

OpenWorkers 개요

  • OpenWorkersRust로 작성된 Cloudflare Workers 호환 런타임으로, V8 Isolate를 이용해 JavaScript를 실행
    • 엣지 컴퓨팅의 장점을 자체 서버 환경에서도 활용 가능
    • 오픈소스로 공개되어 자유롭게 배포 및 수정 가능

주요 기능

  • 바인딩(Bindings) 기능을 통해 다양한 외부 리소스와 연동
    • KV 스토리지: get, put, delete, list 지원
    • PostgreSQL 데이터베이스 연동
    • S3/R2 호환 스토리지 지원
    • 서비스 바인딩, 환경 변수 및 시크릿 관리 포함
  • Web API 지원
    • fetch, Request, Response, ReadableStream 등 표준 API 제공
    • crypto.subtle, TextEncoder/Decoder, Blob, setTimeout, AbortController 포함

아키텍처

  • 시스템은 nginx 프록시, 대시보드, API, 로그 서비스, 러너(runner) , PostgreSQL, NATS, 스케줄러 등으로 구성
    • 각 러너는 V8 Isolate 내에서 코드를 실행하며, CPU 100ms, 메모리 128MB 제한 적용
    • 5~6 필드 크론 문법을 지원하는 내장 스케줄러 포함
    • Cloudflare Workers와 문법 호환성 유지

셀프호스팅

  • 배포는 단일 PostgreSQL 데이터베이스Docker Compose 파일만으로 가능
    • git clone, .env 설정, docker compose up 명령으로 손쉽게 실행
    • 마이그레이션 및 토큰 생성 절차 포함

개발 배경

  • 7년간의 개발 과정을 거쳐 완성된 프로젝트
    • 초기에는 vm2로 JS 샌드박싱을 실험, 이후 Cloudflare Workers 모델에 영감을 받아 발전
    • Deno-core를 거쳐 현재는 rusty_v8 기반으로 재작성
  • 목표는 Cloudflare Workers 수준의 개발 경험(DX) 을 제공하면서 벤더 종속을 제거한 자체 서버 실행 환경 구축
  • 향후 실행 기록 및 재생 기능을 통한 결정적 디버깅(deterministic debugging) 기능 추가 예정

Read Entire Article