Proposal: use Node.js sponsorship funds for additional CI/build capacity on Hetzner
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 5/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Necesita aclaración
- Estado de actividad
- Activo
- Stack tecnológico
- ansible, docker
- Área
- cloud, devops, infrastructure
Línea de trabajo
This is a governance proposal for the TSC and Build WG, with no code change to make. Read nodejs/build#4499 for the DigitalOcean context, then the Build WG's answers to the five operational questions. A newcomer can't finish this issue; it is done when the TSC decides on the spending and the Build WG confirms the setup works.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Context
We propose renting 5 Hetzner dedicated servers (~$600/month) to add Linux CI capacity we control, and we want the Build WG to say whether this setup works for them.
- DigitalOcean is sunsetting its Open Source Credits Program (nodejs/build#4499). DO has also said it will help us work through this, so we don't know yet whether we'll lose part, all, or none of our current allocation there. This proposal does not assume we lose those credits.
- In the last TSC meeting, @richardlau noted that more CI resources would improve build times, but our sponsorship agreements with providers are limited and growing them is expensive. We agreed to bring a concrete proposal to the TSC on using project funds.
So this is first about adding capacity we control. It would also give us a fallback if the DO situation ends badly.
Current DigitalOcean footprint
The DO API export lists 15 droplets with 82 vCPU and 172 GB RAM plus 8.6 TB of block storage, about $2,600/month at DO list price: $1,624 for droplets, ~$115 for backups and ~$860 for volumes.
| Role | Count | Size each | DO list price/month |
|---|---|---|---|
| ci.nodejs.org (Jenkins) | 1 | 12 vCPU / 32 GB | $384 |
| www | 1 | 8 vCPU / 16 GB | $112 |
| unofficial-builds | 1 | 8 vCPU / 16 GB (CPU-optimized) | $168 |
| gzemnid | 1 | 4 vCPU / 8 GB | $48 |
| metrics | 1 | 2 vCPU / 4 GB | $24 |
| Docker test hosts | 2 | 16 vCPU / 32 GB (CPU-optimized) | $672 |
| Distro test VMs (RHEL 8/9, Debian 13, Fedora 42/43, Ubuntu 24.04) | 6 | 2 vCPU / 4 GB | $160 |
| Release VMs (RHEL 8/9) | 2 | 2 vCPU / 4 GB | $52 |
Volumes are billed at $0.10/GiB per month (DO volume pricing):
| Volume | Attached to | Size | DO list price/month |
|---|---|---|---|
| nodejs-org-home-4t | www | 4,000 GB | $400 |
| nodejs-org-home | www | 2,000 GB | $200 |
| unofficial-builds | unofficial-builds | 1,000 GB | $100 |
| unofficial-builds-logs | unofficial-builds | 4 GB | $0.40 |
| volume-fra1-01 | gzemnid | 1,000 GB | $100 |
| volume-nyc3-02 | metrics | 500 GB | $50 |
| volume-sfo2-01 | nothing (unattached) | 100 GB | $10 |
| Total | 8,604 GB | ~$860 |
nodejs/build#4499 mentions 21 droplets, so a few may be missing from this export.
Proposal
Rent 5 Hetzner AX42 dedicated servers in Falkenstein/Helsinki for about $600/month (about $7,200/year) at list price, plus about $300 one-time setup.
Each AX42 has an AMD Ryzen 7 PRO 8700GE (8 cores / 16 threads), 64 GB ECC DDR5 and 2×512 GB NVMe. Current prices (Hetzner price adjustment, 15 June 2026; IPv4 pricing):
| Option | Monthly per server (incl. IPv4) | Setup per server | 5 servers/month |
|---|---|---|---|
| AX42-1 (list) | $119.00 | $59 | ~$595 |
| AX42-1-LTD (limited stock) | $79.20 | $39 | ~$396 |
If DO capacity stays, these servers are additional Linux CI capacity: more Docker test hosts and faster builds. If DO capacity goes away, they are sized to absorb everything except ci.nodejs.org and www:
| Server | Purpose |
|---|---|
| 1–2 | Docker test hosts |
| 3 | KVM host for distro test VMs |
| 4 | KVM host for release VMs only (kept isolated from test workloads) |
| 5 | KVM host for unofficial-builds, gzemnid, metrics |
Storage is the gap: each AX42 has only 2×512 GB NVMe, while unofficial-builds, gzemnid and metrics use about 2.5 TB of volumes on DO today. Server 5 would need extra drives (a Hetzner add-on) or a storage-line server instead, such as the SX65-2 at $92.10/month; the exact disk setup is an open question for the Build WG.
In the worst case, two more AX42s would cover ci and www, bringing a full exit to about $830/month in compute. www also needs about 6 TB of storage on top of that (see the volumes table), so the real figure depends on how much of it is still needed. Even with a storage server added, a full exit stays well under DO's ~$2,600/month list price.
Alternatively, if we lose the credits but keep ci.nodejs.org and www on DigitalOcean at our own expense, that part costs about $1,173/month at DO list price, mostly because of www's 6 TB of volumes:
| Droplet | Size | Droplet/month | Backups/month | Volumes/month | Total/month |
|---|---|---|---|---|---|
| ci.nodejs.org | Legacy "32gb", 12 vCPU / 32 GB | $384 | ~$76.80 | none | ~$460.80 |
| www | 8 vCPU / 16 GB Intel | $112 | none | $600 (6 TB) | $712 |
| Total | $496 | ~$77 | $600 | ~$1,173 |
Together with the 5 Hetzner servers, this hybrid comes to about $1,770/month. That is more than a full move, but it leaves the Jenkins controller and www where they are, which is the riskiest part of any migration. It's worth checking whether www still needs all 6 TB: trimming those volumes is the biggest lever on this scenario. ci.nodejs.org is on a legacy plan and may be cheaper on a current plan of the same size.
Why dedicated servers and not Hetzner Cloud: after the 2026 price changes, Hetzner Cloud with dedicated vCPUs costs ~$1,300/month for the same footprint, and the cheap cloud plans (CX/CAX) are currently not orderable.
Budget fit
Every scenario fits within 2026 sponsor income of $42,508 net to date. The Hetzner plan alone uses about 20% of it; adding ci.nodejs.org and www on DigitalOcean at list price takes it to about half.
Sponsor income (net) has grown each year: $3,347 in 2024, $30,470 in 2025 and $42,508 so far in 2026.
First-year cost of each scenario against 2026 income to date:
| Scenario | First-year cost (incl. setup) | Share of 2026 income |
|---|---|---|
| 5 AX42, list price, plus a storage server for server 5 | ~$8,600 | 20% |
| 5 AX42-LTD, plus a storage server | ~$6,100 | 14% |
| Full exit to Hetzner: 7 AX42 plus a storage server (www storage still to size) | ~$11,600+ | 27%+ |
| ci.nodejs.org + www on DO at list price, alone | ~$14,100 | 33% |
| 5 AX42 list + ci/www on DO | ~$22,700 | 53% |
| 5 AX42-LTD + ci/www on DO | ~$20,200 | 48% |
| 5 AX42 list + ci/www on DO, www trimmed from 6 TB to 2 TB | ~$17,900 | 42% |
The expensive case is the hybrid, and $7,200/year of it is www's 6 TB of DO volumes. If DO stops covering ci and www, moving them to Hetzner as well is the cheaper option and leaves most of the income for other project needs.
Questions for @nodejs/build
The key question is whether this works operationally for the Build WG.
- Is this setup good for you? Is bare-metal plus self-managed VMs/containers something the Build WG is comfortable running, compared with cloud droplets?
- Is it easy to set up? How much of this do the existing Ansible playbooks already cover, for Docker hosts and Jenkins agents in particular? What's missing for KVM/libvirt hosts and RHEL images?
- What would you prioritise if capacity stays on DO: more Docker hosts, faster test machines, or something else?
- Location: are EU-only machines fine for Jenkins agents? They connect outbound and can run behind NAT, so no extra public IPs are needed.
- Maintenance: we would own RAID, backups and hypervisor upgrades. Hetzner support handles hardware failures, and there is no live migration. Is that an acceptable load?
Ask to the TSC
- In principle, approve spending up to $750/month (including about 20% headroom, since Hetzner changed prices several times in 2026) plus setup fees from the project's sponsorship budget, reviewed every 6 months, conditional on the Build WG agreeing the setup works for them. We can tune this down if we need fewer servers (e.g. only for Docker).
- In principle, approve spending the sponsorship money needed to keep ci.nodejs.org and www running if DigitalOcean credits no longer cover them: up to about $1,200/month at current DO list prices, less if www's 6 TB of volumes can be trimmed or the droplets move elsewhere.
- The OpenJS Foundation will hold the Hetzner account and handle billing; the Build WG gets admin access to the servers.
- Keep this coordinated with the outcome of the DigitalOcean discussion in nodejs/build#4499.
/cc @nodejs/build @nodejs/tsc
Sources
- nodejs/build#4499: Solidify Digital Ocean Partnership
- Hetzner Price Adjustment 15 June 2026
- Hetzner IPv4 pricing
- DigitalOcean droplet export (
node_do.json), October 2026
AI crafted most of this analysis under my supervision.
- Lenguaje dominante
- JavaScript
- Estrellas
- 693
- Forks
- 143
- Merge medio
- 8 d 7 h
- PR fusionados (30 d)
- 3
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de nodejs/TSC
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 20/100
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 1/100
-
tsc-agenda
Dificultad 5/5 Más de una semana Aptitud para principiantes 8/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 3/100
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 18/100
Todos los issues de nodejs/TSC
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
glossyio/traffic-monitor#255 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
juice-shop/juice-shop#3706 ·
Los mantenedores suelen responder en 1 día
-
Main workflow runs twice for newly created refsPosiblemente ocupada @rustyconover la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
duckdb/duckdb-wasm#2293 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
521xueweihan/HelloGitHub#4115 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
outline/outline#14348 · 1 comentario ·
Los mantenedores suelen responder en 1 día