Files
wehub-resource-sync bb5c75ce05
Component Security Validation / Security Audit (push) Has been cancelled
Deploy to Cloudflare Pages / deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:38:58 +08:00

474 lines
9.6 KiB
Markdown

# Render Runtime Options
Complete guide to available runtimes on Render, including versions, configuration, and best practices for each language.
## Native Language Runtimes
### Node.js (`runtime: node`)
**Supported Versions:** 14, 16, 18, 20, 21
**Default Version:** 20
**Version Specification:**
Specify Node version in `package.json`:
```json
{
"engines": {
"node": "20.x"
}
}
```
**Package Managers:**
- **npm**: Default, uses `package-lock.json`
- **Yarn**: Auto-detected if `yarn.lock` exists
- **pnpm**: Auto-detected if `pnpm-lock.yaml` exists
**Common Build Commands:**
```bash
npm ci # Recommended (faster, reproducible)
npm ci && npm run build # Build step included
yarn install --frozen-lockfile # Yarn equivalent
pnpm install --frozen-lockfile # pnpm equivalent
```
**Common Start Commands:**
```bash
npm start # Uses "start" script in package.json
node server.js # Direct file execution
node dist/main.js # Built output
```
**Popular Frameworks:**
- Express.js, Fastify, Koa (APIs)
- Next.js (full-stack React)
- Nest.js (enterprise TypeScript)
- Remix (full-stack React)
- Nuxt.js (full-stack Vue)
**Example Configuration:**
```yaml
type: web
name: node-app
runtime: node
buildCommand: npm ci && npm run build
startCommand: npm start
```
---
### Python (`runtime: python`)
**Supported Versions:** 3.8, 3.9, 3.10, 3.11, 3.12
**Default Version:** 3.11
**Version Specification:**
Option 1 - `runtime.txt`:
```
python-3.11.5
```
Option 2 - `Pipfile`:
```toml
[requires]
python_version = "3.11"
```
**Package Managers:**
- **pip**: Default, uses `requirements.txt`
- **Poetry**: Auto-detected if `pyproject.toml` exists
- **Pipenv**: Auto-detected if `Pipfile` exists
**Common Build Commands:**
```bash
pip install -r requirements.txt
pip install -r requirements.txt && python manage.py collectstatic --no-input
poetry install --no-dev
pipenv install --deploy
```
**Common Start Commands:**
```bash
gunicorn app:app # Flask
gunicorn config.wsgi:application # Django
uvicorn main:app --host 0.0.0.0 --port $PORT # FastAPI
celery -A tasks worker # Celery worker
```
**Popular Frameworks:**
- Django (full-stack web framework)
- Flask (microframework)
- FastAPI (modern async API framework)
- Celery (task queue)
**Example Configuration:**
```yaml
type: web
name: python-app
runtime: python
buildCommand: pip install -r requirements.txt
startCommand: gunicorn app:app --bind 0.0.0.0:$PORT
```
---
### Go (`runtime: go`)
**Supported Versions:** 1.20, 1.21, 1.22, 1.23
**Default Version:** Latest stable
**Version Specification:**
Specify in `go.mod`:
```go
module myapp
go 1.22
```
**Build System:** Uses Go modules
**Common Build Commands:**
```bash
go build -o bin/app .
go build -o bin/app cmd/server/main.go
go build -tags netgo -ldflags '-s -w' -o bin/app
```
**Common Start Commands:**
```bash
./bin/app
./bin/server
```
**Popular Frameworks:**
- net/http (standard library)
- Gin (fast web framework)
- Echo (high performance framework)
- Chi (lightweight router)
- Fiber (Express-inspired framework)
- Gorilla Mux (powerful router)
**Example Configuration:**
```yaml
type: web
name: go-app
runtime: go
buildCommand: go build -o bin/app .
startCommand: ./bin/app
```
---
### Ruby (`runtime: ruby`)
**Supported Versions:** 3.0, 3.1, 3.2, 3.3
**Default Version:** 3.3
**Version Specification:**
Option 1 - `.ruby-version`:
```
3.3.0
```
Option 2 - `Gemfile`:
```ruby
ruby '3.3.0'
```
**Package Manager:** Bundler (uses `Gemfile` and `Gemfile.lock`)
**Common Build Commands:**
```bash
bundle install --jobs=4 --retry=3
bundle install && bundle exec rails assets:precompile
```
**Common Start Commands:**
```bash
bundle exec rails server -b 0.0.0.0 -p $PORT
bundle exec puma -C config/puma.rb
bundle exec rackup -o 0.0.0.0 -p $PORT
bundle exec sidekiq # Worker
```
**Popular Frameworks:**
- Ruby on Rails (full-stack framework)
- Sinatra (microframework)
- Sidekiq (background jobs)
**Example Configuration:**
```yaml
type: web
name: rails-app
runtime: ruby
buildCommand: bundle install && bundle exec rails assets:precompile
startCommand: bundle exec puma -C config/puma.rb
```
---
### Rust (`runtime: rust`)
**Supported Versions:** Latest stable
**Default Version:** Latest stable
**Build System:** Cargo
**Common Build Commands:**
```bash
cargo build --release
cargo build --release --locked
```
**Common Start Commands:**
```bash
./target/release/myapp
```
**Popular Frameworks:**
- Actix Web (powerful, performant)
- Rocket (web framework with focus on usability)
- Axum (modern, ergonomic framework)
- Warp (composable web framework)
**Example Configuration:**
```yaml
type: web
name: rust-app
runtime: rust
buildCommand: cargo build --release
startCommand: ./target/release/myapp
```
---
### Elixir (`runtime: elixir`)
**Supported Versions:** Latest stable
**Default Version:** Latest stable
**Build System:** Mix
**Common Build Commands:**
```bash
mix deps.get --only prod
mix deps.get && mix compile
mix do deps.get, compile, assets.deploy
```
**Common Start Commands:**
```bash
mix phx.server
elixir --name myapp -S mix phx.server
```
**Popular Frameworks:**
- Phoenix (full-stack web framework)
- Phoenix LiveView (real-time applications)
**Example Configuration:**
```yaml
type: web
name: elixir-app
runtime: elixir
buildCommand: mix deps.get --only prod && mix compile
startCommand: mix phx.server
```
---
## Container Runtimes
### Docker (`runtime: docker`)
Build your application from a Dockerfile in your repository.
**Additional Configuration:**
- `dockerfilePath`: Path to Dockerfile (default: `./Dockerfile`)
- `dockerContext`: Build context directory (default: `.`)
**Example Configuration:**
```yaml
type: web
name: docker-app
runtime: docker
dockerfilePath: ./Dockerfile
dockerContext: .
```
**Multi-stage Dockerfile Example:**
```dockerfile
# Build stage
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Production stage
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY package*.json ./
RUN npm ci --only=production
EXPOSE 10000
CMD ["node", "dist/main.js"]
```
**Best Practices:**
- Use multi-stage builds to reduce image size
- Copy `package.json` before source code (better caching)
- Use `.dockerignore` to exclude unnecessary files
- Expose port dynamically via `$PORT` environment variable
- Run as non-root user for security
---
### Pre-built Image (`runtime: image`)
Deploy pre-built Docker images from a container registry.
**Additional Configuration:**
- `image`: Full image URL with tag or digest
- `registryCredential`: Credentials for private registries
**Example with Public Image:**
```yaml
type: web
name: prebuilt-app
runtime: image
image: ghcr.io/myorg/myapp:v1.2.3
```
**Example with Private Registry:**
```yaml
type: web
name: private-app
runtime: image
image: myregistry.com/myapp:latest
registryCredential:
username: my-username
password:
sync: false # User provides in Dashboard
```
**Use Cases:**
- Deploy images built in CI/CD pipeline
- Use images from container registries
- Deploy Docker Hub images
- Use private registry images
---
## Static Runtime (`runtime: static`)
Serve pre-built static files without a backend runtime. Files are served via CDN.
**Additional Configuration:**
- `staticPublishPath`: Directory containing built files (e.g., `./dist`, `./build`)
**Common Build Commands by Framework:**
**React (Create React App):**
```bash
npm ci && npm run build
# Outputs to: ./build
```
**Vue:**
```bash
npm ci && npm run build
# Outputs to: ./dist
```
**Next.js (Static Export):**
```bash
npm ci && npm run build && npm run export
# Outputs to: ./out
```
**Gatsby:**
```bash
npm ci && npm run build
# Outputs to: ./public
```
**Vite:**
```bash
npm ci && npm run build
# Outputs to: ./dist
```
**Example Configuration:**
```yaml
type: web
name: react-app
runtime: static
buildCommand: npm ci && npm run build
staticPublishPath: ./build
```
---
## Runtime Comparison
| Runtime | Build Speed | Cold Start | Best For |
|---------|-------------|------------|----------|
| Node.js | Fast | Fast | APIs, full-stack apps |
| Python | Medium | Medium | Data apps, APIs, web |
| Go | Fast | Very Fast | High performance APIs |
| Ruby | Slow | Medium | Rails apps, traditional web |
| Rust | Very Slow | Very Fast | Performance-critical services |
| Elixir | Medium | Fast | Real-time, concurrent apps |
| Docker | Varies | Medium | Any language, custom setup |
| Static | Very Fast | N/A | SPAs, documentation, marketing |
---
## Choosing the Right Runtime
**Choose Node.js when:**
- Building JavaScript-based applications
- Need rich npm ecosystem
- Want fast iteration and deployment
- Building full-stack applications (Next.js, Remix)
**Choose Python when:**
- Building data-heavy applications
- Need machine learning libraries
- Django or Flask expertise
- Data processing pipelines
**Choose Go when:**
- Need high performance and low resource usage
- Building microservices
- Want simple deployment (single binary)
- Handling high concurrency
**Choose Ruby when:**
- Building traditional web applications
- Ruby on Rails expertise
- Rapid development priority
**Choose Rust when:**
- Maximum performance required
- Systems programming
- Resource-constrained environments
**Choose Docker when:**
- Need custom system dependencies
- Multi-language application
- Existing Dockerfile
- Need full control over environment
**Choose Static when:**
- Building SPAs or static sites
- No backend processing needed
- Want CDN caching and fast delivery
- Documentation or marketing sites