Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion skills/.sync-source
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
source: https://github.com/render-oss/skills
ref: main
commit: 4e4a00a51a99aa772793b1a2ab3abe0e214c88ef
commit: 1b36c1643c1e6105c73ca19cb387fc916d1da4fc
note: generated by scripts/sync-skills.sh; do not edit vendored skills by hand.
6 changes: 2 additions & 4 deletions skills/render-deploy/references/configuration-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ buildCommand: bundle install && bundle exec rails assets:precompile

**Use internal URLs for better performance:**

When using `fromDatabase`, Render automatically provides internal `.render-internal.com` URLs:
Use `fromDatabase` to populate an environment variable with the database's internal connection string.

```yaml
envVars:
Expand All @@ -330,8 +330,6 @@ envVars:
property: connectionString
```

This provides: `postgresql://user:pass@postgres.render-internal.com:5432/db`

**Benefits:**
- Lower latency (same data center)
- No external bandwidth charges
Expand Down Expand Up @@ -581,7 +579,7 @@ routes:

**Database:**
- [ ] Connection pooling configured
- [ ] Using internal URLs (`.render-internal.com`)
- [ ] Using the connection string supplied by `fromDatabase`
- [ ] SSL enabled if needed

**Plans:**
Expand Down
33 changes: 16 additions & 17 deletions skills/render-deploy/references/service-types.md
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ buildFilter:

### Purpose

Internal services accessible only within your Render account. Not exposed to the internet.
Services that receive traffic only from other Render services on the same private network. They aren't exposed to the public internet.

### Use Cases

Expand All @@ -360,9 +360,9 @@ Internal services accessible only within your Render account. Not exposed to the
- **No public URL**: Only accessible via internal DNS
- **Internal networking**: Fast, low-latency connections
- **Port binding required**: Must bind to `0.0.0.0:$PORT`
- **Private DNS**: `[service-name].render-internal.com`
- **Same-account only**: Only accessible from same account
- **No internet access**: Traffic stays within Render network
- **Private hostname**: Each service has a unique internal hostname
- **Private-network scope**: The connecting service must be in the same workspace and region
- **No public ingress**: Can't be accessed from the public internet

### Required Configuration

Expand All @@ -374,39 +374,38 @@ buildCommand: npm ci
startCommand: npm start
```

### Accessing Private Services
### Internal Addresses

From other services in the same account:
Render gives each web service and private service a unique hostname on the private network. The hostname is stable and maps to instance IPs which can change between deploys. Free web services can't receive private traffic it.

```javascript
// Use .render-internal.com domain
const API_URL = 'http://internal-api.render-internal.com:10000';
```
Services can communicate over the private network when they belong to the same workspace and region. Find the internal address in the service's **Connect** menu under **Internal**. Private services also show it as the **Service Address**.

An internal address has the form `internal-hostname:port`. Add the protocol when the client requires one, for example `http://internal-hostname:port`.

Or use service references:
In a Blueprint, use `fromService` to inject the address into another service:

```yaml
services:
- type: web
name: frontend
runtime: node
envVars:
- key: INTERNAL_API_URL
- key: API_URL
fromService:
name: internal-api
type: pserv
property: hostport
```

### Best Practices
For web services and private services, `host` provides the internal hostname and `hostport` provides the hostname and listening port as `host:port`.

1. **Use internal DNS**: Always use `.render-internal.com` domains
### Best Practices

2. **No authentication needed**: Already isolated to account
1. **Use internal addresses**: Use the hostname from the Dashboard or inject it with a Blueprint service reference.

3. **Fast communication**: Low latency between services
2. **Fast communication**: Low latency between services

4. **Simplify architecture**: No need for external load balancers
3. **Simplify architecture**: No need for external load balancers

---

Expand Down
Loading