e2b-dev / e2b-dev/runtime

Proposal: Add Volcengine self-hosting support

Open
#3,054 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Go
Stars
1.6k
Forks
438
PR merge metrics
No merged PRs in 30d

Description

Proposal: Add Volcengine (火山引擎) self-hosting support

Summary

Hi E2B team,

Thank you for building and open-sourcing E2B. The project is extremely valuable for AI code execution and sandboxed environments. We have seen strong interest from Volcengine (ByteDance Cloud / 火山引擎) users in China and Asia-Pacific who would like to run E2B in their own cloud environment.

We are currently evaluating a self-hosted E2B deployment on Volcengine, and we would like to contribute Volcengine self-hosting support back upstream if this aligns with your roadmap.

Similar to the Alibaba Cloud proposal (#3035), our approach is to keep the upstream architecture and core runtime behavior unchanged, and contribute the Volcengine-specific work as an isolated provider/deployment layer.

We would not change:

  • The public E2B API contract
  • Firecracker/orchestrator/template build core logic
  • Scheduler, NBD, networking, or other high-blast-radius runtime internals

Background: Why Volcengine

Volcengine (火山引擎) is ByteDance's enterprise cloud platform, widely adopted in China and Asia-Pacific, particularly strong in AI/ML workloads. It provides:

  • ECS (Elastic Compute Service) — bare-metal and virtualization instances with KVM/nested virtualization support (required for Firecracker)
  • TOS (Torch Object Storage) — S3-compatible object storage with multi-region support
  • CR (Container Registry) — Docker image registry with enterprise features
  • VPC / CLB / ALB — networking and load balancing
  • Redis & RDS (PostgreSQL) — managed database services
  • IAM — identity and access management with role-based credentials

Key advantage: Volcengine TOS is fully S3-compatible (endpoint: tos-s3-{region}.volces.com), which means the existing AWS S3 storage provider (storage_aws.go) can potentially be reused with custom endpoint configuration, significantly reducing implementation effort.

Proposed scope

If this direction makes sense, we can contribute the work incrementally:

1. Volcengine deployment support (Terraform)
  • Terraform provider volcengine/volcengine based infrastructure templates
  • ECS instance pools for control/client/orchestrator nodes (with KVM support)
  • CLB/ALB exposure for API and client-proxy
  • VPC, security group, and subnet configuration
  • IAM Role configuration for service authentication
2. Volcengine TOS storage provider
  • Object storage implementation for template/snapshot/rootfs artifacts
  • Leverage S3-compatible API — potentially reuse storage_aws.go with custom endpoint configuration
    • External endpoint: tos-s3-{region}.volces.com
    • Internal endpoint: tos-s3-{region}.ivolces.com
  • Range reads and large-object multipart upload support
  • IAM Role / STS token based credentials
  • Alternative: dedicated TOS SDK (Go SDK available) implementation if S3 compatibility is insufficient
3. Volcengine CR (Container Registry) provider
  • Store template build images in Volcengine CR
  • Pull/push support using IAM Role / CR temporary token flow
  • Repository creation or documented prerequisite
4. Nomad cluster on Volcengine
  • Packer-based disk image for Volcengine ECS
  • Nomad server/client cluster provisioning
  • Consul service discovery integration
  • Auto-scaling group configuration
5. Self-hosting documentation
  • Volcengine prerequisites (account, quotas, KVM-enabled instance types)
  • Required IAM permissions
  • Network architecture diagram
  • Step-by-step deployment guide
  • Smoke test and validation steps

Proposed contribution approach

We do not want to submit a large, hard-to-review PR.

If the maintainers are open to this direction, we would follow a phased approach:

  1. Design/docs PR — Architecture overview and Volcengine-specific design decisions
  2. TOS storage provider — With unit tests (may extend existing AWS provider with configurable endpoint, or implement standalone)
  3. CR artifacts registry provider — With tests
  4. Terraform deployment skeletoniac/provider-volcengine/ directory structure
  5. Nomad cluster disk image — Packer template for Volcengine ECS
  6. Self-hosting documentation — Complete deployment guide and smoke test

Proposed directory structure

iac/
provider-volcengine/
main.tf
variables.tf
Makefile
init/
modules/
nomad/
nomad-cluster/
nomad-cluster-disk-image/

packages/shared/pkg/storage/
storage_volcengine.go # TOS storage provider (or extend AWS with endpoint config)
storage_volcengine_test.go

Validation plan

We plan to validate the provider with:

  • API health check
  • Sandbox create / connect / delete
  • Pause / resume
  • Template build
  • Template build from image
  • Container registry pull path (Volcengine CR)
  • Basic concurrent sandbox creation
  • Storage read/write/range-read correctness
  • End-to-end latency benchmarks

Technical notes

  • Firecracker compatibility: Volcengine ECS supports bare-metal instances and nested virtualization (KVM), which is required for Firecracker microVMs.
  • S3 compatibility: Volcengine TOS supports the S3-compatible API, which may allow reusing the existing storage_aws.go with a custom endpoint. Available regions include cn-beijing, cn-shanghai, cn-guangzhou, ap-southeast-1, etc. (full list). We will evaluate whether this is sufficient or if a dedicated TOS SDK implementation is needed.
  • Terraform provider: The official volcengine/volcengine Terraform provider is available on the Terraform Registry with comprehensive resource coverage.
  • Go SDK: Official TOS Go SDK is available if native implementation is preferred over S3 compatibility layer.

Question

Would Volcengine (火山引擎) self-hosting support be something you would be open to accepting upstream, if we keep it isolated to provider, storage, registry, deployment, and documentation layers?

If yes, we can prepare a small initial design/docs PR for review before starting the implementation.


References:

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the proposed provider layout under iac/provider-volcengine/, the existing packages/shared/pkg/storage/storage_aws.go, and related proposal #3035. Done would be a maintainer-approved design/docs PR that defines the isolated Volcengine deployment, storage, registry, and documentation scope before implementation begins.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, terraform
Domain
cloud, devops, infrastructure
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.