Deploying services

This guide walks you through deploying a service to Forte, end to end. Use the web console or the CLI: choose the tab that matches your workflow.

Prerequisites

  • A Forte account
  • A GitHub repository with your code
  • The Forte GitHub App installed on your repository
CLI users

If you prefer the CLI, install the Forte CLI before continuing.

Step 1: Create a Project

Projects group related services. You need at least one project before creating a service.

  1. Open the Forte Console and click Create Project from the dashboard.
  2. Enter a name for your project (for example, my-app).
  3. Click Create.

Your new project appears in the sidebar project picker.

Open Console →

Step 2: Create a Service

A Service connects a GitHub repository to Forte's deployment pipeline. By default, each push to the configured branch triggers a deployment.

  1. Select your project from the sidebar, then navigate to Services.
  2. Click Create Service to open the creation form.
  3. Fill in the service details:

Service Details

Enter the details for your new service

GitHub Repository

username/my-app

GitHub Branch

main

What is this service for?

  • Service Name: A unique name within the project (for example, my-api-service).
  • GitHub Repository: Select from repositories where the Forte GitHub App is installed.
  • GitHub Branch: The branch to deploy from (typically main).
  • Usage Tier: Choose a tier that matches your workload. The Development tier is free and good for getting started.
  1. Click Create Service to start the first deployment.
Open Create Service →

Step 3: Watch your deployment

After you create the service, Forte starts the first build and deployment automatically.

Navigate to your service's detail page. The Deployments tab shows:

  • Build status: Live logs as your container image is built.
  • Deploy status: Progress as the image is pushed to the container registry and rolled out.
  • Service URL: Once healthy, your service's public endpoint appears at the top.
Open Services →
Automatic deployment

Forte deploys when you push to the configured branch. Each push triggers a build and rollout.

What happens behind the scenes

When you create a service, Forte runs a multi-stage pipeline:

  1. Containerization: If your repository already includes a Dockerfile, Forte uses it as-is. If not, Forte auto-detects your language and framework and packages your application for you, no configuration needed.
  2. Image build: Forte builds your code into a container image in a Linux environment. Environment variables configured on the service are available during the build as build arguments, so dependencies that need non-sensitive configuration (for example, feature flags or public API URLs) can read them. Secrets are not injected into the build environment and are runtime-only. Docker-in-Docker is supported, so you can use libraries like TestContainers from within your build. Builds time out after 30 minutes.
  3. Health check discovery: Your app must expose an HTTP GET route that returns a success status, such as /health, /status, or /. Forte detects the port your app listens on and discovers the health check path. This is required for your deployment to succeed.
  4. Deployment: Forte deploys the image to its infrastructure with autoscaling based on your selected tier.
  5. DNS & TLS: Forte provisions a permanent HTTPS endpoint on the tryforte.dev domain. This URL never changes for the lifetime of your service. You can add custom domains from the Forte dashboard.
  6. DDoS protection: Forte automatically protects your service against distributed denial-of-service attacks at the L3 and L7 layers. In general, malicious requests are mitigated before they even reach your code.

Forte logs each step on the service's deployment detail page.

Resetting a detected build configuration

Forte caches your service's build and health check configuration after the first deployment. If something structural changes (such as your app's port, runtime version, base image, build dependencies, or project layout), you can discard the cached configuration and Forte will re-detect it on the next deployment.

  1. Open your service in the Forte Console and click Edit Service.
  2. Scroll to Advanced Settings.
  3. Toggle the relevant switch:
    • Reset build configuration: Discards the cached build configuration so Forte detects or generates a new one on the next deployment.
    • Reset health check (under Health Check Configuration): Discards the cached health check port and path so Forte re-detects them on the next deployment.
  4. Click Save Changes. Forte starts a new deployment automatically using the refreshed configuration.
When to reset

Routine code changes don't require a reset: Forte continues to use your existing build configuration and health check on every push. Reset only when something about your build environment has changed in a way the existing configuration can't handle.

GitHub deployment status

Forte automatically reports deployment status back to your GitHub repository using GitHub Deployments. No configuration is required: this works out of the box for any service connected to a GitHub repository.

For each deployment, Forte:

  • Creates a GitHub Deployment linked to the commit (or branch HEAD for manual triggers).
  • Posts status updates as the pipeline progresses: in_progress when the build starts, and success or failure when it completes.
  • Links back to the Forte Console: each status includes a link to the deployment detail page with full build logs.

The deployment environment name in GitHub is set to your service name, so you can track deployment history per service directly in your repository's Environments tab.

Best-effort reporting

GitHub deployment status reporting is best-effort. If reporting fails (for example, a GitHub API issue), your build and deployment continue normally.

Search

Search your resources, console pages, and documentation