Render Web Services
This skill covers Web Service behavior on Render: how traffic reaches your process, how deploys go live, and how optional features (domains, disks, auto-deploy) interact. Use it alongside Blueprint and networking skills when wiring render.yaml or Dashboard settings.
When to Use
- Configuring or debugging port binding, PORT, or multi-port web services
- TLS/HTTPS expectations at the edge vs inside the container
- Health checks blocking or rolling back deploys
- Custom domains, DNS, and certificate provisioning
- Auto-deploy, CI-gated deploys, and PR preview generation
- Persistent disks and their impact on scaling and zero-downtime
- Deploy lifecycle: build, pre-deploy, swap, drain, rollback, shutdown delay
Deeper patterns live under references/ (health checks, domains, deploy phases).
Port Binding
- Listen on
0.0.0.0 (all interfaces). Binding only to localhost or 127.0.0.1 prevents Render’s proxy from reaching your app.
- Use the
PORT environment variable for the HTTP listen port. Render sets it for you; the default is often 10000 and you can change the configured value in the service Settings in the Dashboard.
- Reserved ports (do not bind your application to these for normal traffic):
18012, 18013, 19099.
Multi-port Web Services
- Only one port receives public HTTP traffic: the port aligned with
PORT.
- Additional open ports are reachable on Render’s private network only (not from the public internet through the same public URL pattern).
TLS and HTTPS
- TLS terminates at Render’s edge. The edge speaks HTTPS to clients; your process typically receives plain HTTP on
PORT.
- HTTPS redirect for clients is handled by the platform; users hitting HTTP are redirected appropriately at the edge.
- Do not terminate TLS inside the app for the primary public listener unless you have a rare, explicit need—standard Web Services assume HTTP behind the proxy.
Health Checks
- Configure a path via
healthCheckPath in a Blueprint or the Health Check Path field in the Dashboard.
- Render issues HTTP GET requests to that path. Responses must be
2xx or 3xx for success.
- Failed health checks prevent a new deploy from going live (the deploy does not succeed in taking production traffic as expected).
- Render probes on a repeat interval with a per-request timeout; both are configurable in service settings (see Dashboard). Failed checks during rollout prevent the new revision from receiving traffic.
- Check frequency, timeouts, and tuning guidance in
references/health-check-patterns.md.
Custom Domains
- Point DNS with a CNAME to
[service-name].onrender.com (use your service’s hostname from the Dashboard).
- Render automatically provisions and renews TLS certificates for verified domains.
- Apex (root) domains need provider-specific CNAME-like or flattened records where plain CNAME at
@ is unsupported.
- Wildcard domains (e.g.
*.example.com) are supported when configured and verified.
- Multiple custom domains per service are supported; Blueprints can list them under the
domains field.
See references/custom-domains.md for Dashboard steps, verification, and troubleshooting.
Auto-Deploy and PR Previews
autoDeployTrigger (Blueprint) / auto-deploy settings control when production deploys run:
commit — deploy on every push to the tracked branch
checksPass — deploy only when required Git checks pass
off — manual deploys only (Dashboard, CLI, hooks)
- PR previews are configured under Blueprint
previews.generation (and related preview settings); generation behavior depends on repo integration and plan.
Persistent Disks
- Attach disks via the
disk field in a Blueprint (or equivalent Dashboard storage settings).
- A service with an attached persistent disk is single-instance only: horizontal scaling is not available in that configuration.
- Zero-downtime deploys are disabled when a persistent disk is attached—deploys follow a different rollout pattern.
- Disk size increases are allowed; decreases are not.
- The disk is not mounted during the build phase—only at runtime in the running service.
Deploy Lifecycle
Typical flow:
- Build — clone repo, run
buildCommand, produce the runnable artifact/image.
- Pre-deploy command (optional) — runs in the new image before traffic switches; use for migrations. If it fails, the deploy is canceled.
- Deploy — new instances start; health checks must pass before traffic moves.
- Zero-downtime swap (when applicable) — traffic shifts to new instances; old instances drain in-flight work.
maxShutdownDelaySeconds (range 1–300, default 30) bounds how long old instances may continue handling requests during drain before shutdown.
- Rollbacks — revert to a previous successful deploy from the Dashboard.
Full sequence, hooks, filters, and CLI notes: references/deploy-lifecycle.md.
Free Tier Notes
Free Web Services have separate limits: services spin down after inactivity (cold starts on the next request), and they do not support scaling beyond a single instance or persistent disks. Treat free-tier behavior as distinct from paid Web Service defaults when advising on uptime and scaling.
References
| Topic |
File |
| Health check design, timeouts, pitfalls |
references/health-check-patterns.md |
| Domains, DNS, TLS verification |
references/custom-domains.md |
| Build, pre-deploy, drain, rollbacks, triggers |
references/deploy-lifecycle.md |
Related Skills
- render-deploy — Blueprints, first-time deploy,
render.yaml structure
- render-docker — Docker-based Web Services and image/runtime details
- render-networking — Private network, internal URLs, multi-port private listeners
- render-scaling — Instance counts, plans, and scaling constraints (including disk interactions)
1---2name: render-web-services3description: Configures Render web services—port binding, TLS, health checks, custom domains, auto-deploy, PR previews, persistent disks, and deploy lifecycle. Use when the user needs to set up a web service, fix health check failures, add a custom domain, configure zero-downtime deploys, or troubleshoot port binding issues.4license: MIT5---6
7# Render Web Services
8
9This skill covers **Web Service** behavior on Render: how traffic reaches your process, how deploys go live, and how optional features (domains, disks, auto-deploy) interact. Use it alongside Blueprint and networking skills when wiring `render.yaml` or Dashboard settings.
10
11## When to Use
12
13- Configuring or debugging **port binding**, **PORT**, or **multi-port** web services
14- **TLS/HTTPS** expectations at the edge vs inside the container
15- **Health checks** blocking or rolling back deploys
16- **Custom domains**, DNS, and certificate provisioning
17- **Auto-deploy**, **CI-gated deploys**, and **PR preview** generation
18- **Persistent disks** and their impact on scaling and zero-downtime
19- **Deploy lifecycle**: build, pre-deploy, swap, drain, **rollback**, shutdown delay
20
21Deeper patterns live under `references/` (health checks, domains, deploy phases).
22
23## Port Binding
24
25- Listen on **`0.0.0.0`** (all interfaces). Binding only to **`localhost`** or **`127.0.0.1`** prevents Render’s proxy from reaching your app.
26- Use the **`PORT`** environment variable for the HTTP listen port. Render sets it for you; the **default is often `10000`** and you can change the configured value in the service **Settings** in the Dashboard.
27- **Reserved ports** (do **not** bind your application to these for normal traffic): **`18012`**, **`18013`**, **`19099`**.
28
29### Multi-port Web Services
30
31- Only **one** port receives **public** HTTP traffic: the port aligned with **`PORT`**.
32- **Additional** open ports are reachable on Render’s **private network** only (not from the public internet through the same public URL pattern).
33
34## TLS and HTTPS
35
36- **TLS terminates at Render’s edge.** The edge speaks HTTPS to clients; your process typically receives **plain HTTP** on `PORT`.
37- **HTTPS redirect** for clients is handled by the platform; users hitting HTTP are redirected appropriately at the edge.
38- **Do not terminate TLS inside the app** for the primary public listener unless you have a rare, explicit need—standard Web Services assume HTTP behind the proxy.
39
40## Health Checks
41
42- Configure a path via **`healthCheckPath`** in a Blueprint or the **Health Check Path** field in the Dashboard.
43- Render issues **HTTP GET** requests to that path. Responses must be **`2xx` or `3xx`** for success.
44- **Failed health checks** prevent a new deploy from **going live** (the deploy does not succeed in taking production traffic as expected).
45- Render probes on a **repeat interval** with a per-request **timeout**; both are **configurable** in service settings (see Dashboard). Failed checks during rollout prevent the new revision from receiving traffic.
46- Check frequency, timeouts, and tuning guidance in `references/health-check-patterns.md`.
47
48## Custom Domains
49
50- Point DNS with a **CNAME** to **`[service-name].onrender.com`** (use your service’s hostname from the Dashboard).
51- Render **automatically provisions and renews** TLS certificates for verified domains.
52- **Apex** (root) domains need provider-specific **CNAME-like** or flattened records where plain CNAME at `@` is unsupported.
53- **Wildcard** domains (e.g. `*.example.com`) are supported when configured and verified.
54- Multiple custom domains per service are supported; Blueprints can list them under the **`domains`** field.
55
56See `references/custom-domains.md` for Dashboard steps, verification, and troubleshooting.
57
58## Auto-Deploy and PR Previews
59
60- **`autoDeployTrigger`** (Blueprint) / auto-deploy settings control when production deploys run:
61 - **`commit`** — deploy on every push to the tracked branch
62 - **`checksPass`** — deploy only when required **Git checks** pass
63 - **`off`** — **manual** deploys only (Dashboard, CLI, hooks)
64- **PR previews** are configured under Blueprint **`previews.generation`** (and related preview settings); generation behavior depends on repo integration and plan.
65
66## Persistent Disks
67
68- Attach disks via the **`disk`** field in a Blueprint (or equivalent Dashboard storage settings).
69- A service with an attached persistent disk is **single-instance** only: **horizontal scaling** is not available in that configuration.
70- **Zero-downtime deploys are disabled** when a persistent disk is attached—deploys follow a different rollout pattern.
71- **Disk size increases** are allowed; **decreases** are not.
72- The disk is **not mounted during the build phase**—only at **runtime** in the running service.
73
74## Deploy Lifecycle
75
76Typical flow:
77
781. **Build** — clone repo, run **`buildCommand`**, produce the runnable artifact/image.
792. **Pre-deploy command** (optional) — runs in the **new** image **before** traffic switches; use for **migrations**. If it **fails**, the deploy is **canceled**.
803. **Deploy** — new instances start; health checks must pass before traffic moves.
814. **Zero-downtime swap** (when applicable) — traffic shifts to new instances; **old instances drain** in-flight work.
82
83- **`maxShutdownDelaySeconds`** (range **1–300**, **default 30**) bounds how long old instances may continue handling requests during drain before shutdown.
84- **Rollbacks** — revert to a **previous successful deploy** from the Dashboard.
85
86Full sequence, hooks, filters, and CLI notes: `references/deploy-lifecycle.md`.
87
88## Free Tier Notes
89
90Free Web Services have **separate limits**: services **spin down after inactivity** (cold starts on the next request), and they do not support scaling beyond a single instance or persistent disks. Treat free-tier behavior as distinct from paid Web Service defaults when advising on uptime and scaling.
91
92## References
93
94| Topic | File |
95|--------|------|
96| Health check design, timeouts, pitfalls | `references/health-check-patterns.md` |
97| Domains, DNS, TLS verification | `references/custom-domains.md` |
98| Build, pre-deploy, drain, rollbacks, triggers | `references/deploy-lifecycle.md` |
99
100## Related Skills
101
102- **render-deploy** — Blueprints, first-time deploy, `render.yaml` structure
103- **render-docker** — Docker-based Web Services and image/runtime details
104- **render-networking** — Private network, internal URLs, multi-port private listeners
105- **render-scaling** — Instance counts, plans, and scaling constraints (including disk interactions)