An active account with AWS, GCP, or Azure with admin or owner permissions. Porter provisions infrastructure in your cloud account, so you’ll need permissions to create resources like Kubernetes clusters, networking components, and IAM roles.
A deployable application
Your application should:
Have a start command or Dockerfile
Be pushed to a GitHub repository (or have a container image in a registry)
Choose the cloud provider where you want Porter to provision your infrastructure.If you’ve previously connected a cloud account to Porter, you can reuse those credentials.
Porter provisions a Kubernetes cluster in your cloud account. The setup process varies by provider.
AWS
GCP
Azure
Porter uses AWS IAM role assumption to securely access your account without storing static credentials.
1
Enter your AWS Account ID
Log into your AWS Console and find your 12-digit Account ID in the top-right corner. Enter this ID in Porter.
2
Create the CloudFormation stack
Click Grant Permissions. Porter opens the AWS CloudFormation console to create a stack that provisions the porter-manager IAM role.
If the popup is blocked, check your browser settings and allow popups from Porter.
Scroll to the bottom of the CloudFormation page, check the I acknowledge that AWS CloudFormation might create IAM resources box, and click Create Stack.
The IAM role must remain in your AWS account for Porter to manage your infrastructure. Deleting it will prevent Porter from making changes.
3
Review costs
Porter displays estimated monthly costs for your infrastructure (~$225/month for AWS).These estimates are for the default cluster configuration. Actual costs vary based on usage, region, and any customizations you make.Review the cost breakdown and click Accept to continue.
4
Configure and provision
Porter pre-configures your cluster with sensible defaults:
Cluster name: Auto-generated based on your project
Region: Defaults to us-east-1
Node groups: Pre-configured with appropriate instance types
AWS resource quota limits
If AWS is limiting your account’s resource quota, Porter will display a warning and offer to auto-request quota increases on your behalf. Allow Porter to auto-request AWS quota is enabled by default.Alternatively, you can manually request quota increases through the AWS Service Quotas console.
You can customize these settings or accept the defaults. Click Provision to start creating your infrastructure.
Provisioning takes approximately 30-45 minutes. You can close the browser and return later. Porter continues working in the background.
Porter connects to GCP using Workload Identity Federation. Workload Identity Federation offers a mechanism for Porter to connect with your GCP project without requiring any static keys.
1
Enter your GCP Project ID
In Porter, select GCP. Enter your GCP project ID (visible at the top of any page in the GCP Console) and click Connect.
2
Run the setup in Cloud Shell
Porter generates a one-line setup command tied to this integration. Copy it, click Open Cloud Shell, and paste it into the shell that opens.The script runs Terraform inside your project to create a service account, a Workload Identity Pool with a trust policy scoped to your tenant, and the five Google APIs Porter needs to bootstrap federation (Cloud Resource Manager, IAM, IAM Credentials, STS, Service Usage). Setup takes about 30 seconds.
3
Wait for verification
The Porter dashboard polls automatically. Once the bootstrap completes, Porter finishes enabling the remaining APIs, grants the heavier IAM roles, and marks the cloud account connected. The status banner turns green and the Continue button enables.For the full mechanism (trust boundary, permissions granted, troubleshooting), see Connecting a Cloud Account → GCP.
4
Review costs
Porter displays estimated monthly costs for your infrastructure (~$253/month for GCP).These estimates are for the default cluster configuration. Actual costs vary based on usage, region, and any customizations you make.Review the cost breakdown and click Accept to continue.
5
Configure and provision
Porter pre-configures your cluster with sensible defaults:
Cluster name: Auto-generated based on your project
Region: Defaults to us-east1
Node groups: Pre-configured with appropriate instance types
You can customize these settings or accept the defaults. Click Provision to start creating your infrastructure.
Provisioning takes approximately 30-45 minutes. You can close the browser and return later. Porter continues working in the background.
Porter connects to Azure using a service principal with permissions to manage your infrastructure.
1
Create a service principal
Before connecting Azure to Porter, you need to create a service principal. You can do this using our automated script or manually.
Option 1: Automated setup (recommended)
If you have the Azure CLI installed and authenticated (az login), run our setup script:
# Download the setup scriptcurl -O https://raw.githubusercontent.com/porter-dev/docs/main/scripts/setup-azure-porter.sh# Make it executablechmod +x setup-azure-porter.sh# Run the script (optionally provide subscription ID)./setup-azure-porter.sh [your-subscription-id]
The script creates the required role, service principal, and grants necessary permissions. Copy the output credentials for the next step.
Option 2: Manual setup
For manual setup, follow the detailed instructions in our Azure provisioning guide. You’ll need to:
Enable required Azure resource providers
Create a custom IAM role
Create a service principal
Grant Microsoft Graph API permissions
2
Enter your credentials
In Porter, enter the following values from your service principal:
Field
Description
Subscription ID
Your Azure subscription ID
Application (Client) ID
The appId from your service principal
Client Secret
The password from your service principal
Tenant ID
The tenant from your service principal
Porter verifies the credentials immediately when you submit.
3
Review costs
Porter displays estimated monthly costs for your infrastructure (~$165/month for Azure).These estimates are for the default cluster configuration. Actual costs vary based on usage, region, and any customizations you make.Review the cost breakdown and click Accept to continue.
4
Configure and provision
Porter pre-configures your cluster with sensible defaults:
Cluster name: Auto-generated based on your project
Region: Defaults to eastus
Node groups: Pre-configured with appropriate instance types
You can customize these settings or accept the defaults. Click Provision to start creating your infrastructure.
Provisioning takes approximately 30-45 minutes. You can close the browser and return later. Porter continues working in the background.
Once your cluster is ready, choose how you want to deploy your code.
Agent
Dashboard
CLI
Ask an agent connected to the Porter MCP server to create the application for you. It detects your build settings from the codebase and opens a pull request that you merge to deploy.
Install the Porter GitHub App on the repository you want to deploy. The MCP server cannot install the GitHub App for you.
2
Ask your agent to deploy
Deploy this GitHub repository to Porter. Detect the build method and application settings from the codebase.
The agent resolves your Porter project and cluster, then calls create_app with the repository source and build configuration. Porter creates the application with a placeholder image and opens a pull request containing a GitHub Actions workflow.
3
Merge the pull request
Review and merge the pull request that the agent returns. Merging it triggers the workflow that builds your code and runs the first real deployment.
In the Porter dashboard, click Create Application, then choose your source.
GitHub repository
Docker registry
Porter builds your application from source code and sets up automated deployments on every push.
Choose which repositories Porter can access (all repositories or select specific ones)
Porter needs read access to detect your code structure and write access to create the deployment workflow.
2
Select your repository
Choose the repository containing your application
Select the branch to deploy (defaults to main or master)
3
Review detected applications
Porter scans your repository and automatically detects:
Frameworks and languages (Node.js, Python, Go, etc.)
Dockerfiles
Service types (web servers, workers, etc.)
You’ll see a card for each detected application showing the app name, detected framework, and repository path.
For monorepos with multiple services, Porter detects each application separately. A Node.js API in /api and a React frontend in /web appear as distinct applications. If some services are already deployed on your cluster, Porter hides them by default so you can focus on new applications. Expand the previously deployed section to view or re-add them.
4
Configure your application (optional)
Click the gear icon on any application card to customize:
Build method: Docker (using your Dockerfile) or Buildpacks (automatic)
Start command: The command to run your application
Port: The port your application listens on
For most applications, Porter’s detected defaults work without changes.
5
Deploy
Click Deploy to start your deployment.
6
Merge the GitHub Actions PR
This step is critical. Your application won’t be available until you merge the PR.
Porter creates a pull request in your repository containing a GitHub Actions workflow file at .github/workflows/porter.yml. This workflow handles building and deploying your application on every push.After clicking Deploy, you’ll see:
A toast notification with a “View PR” button that links directly to the pull request
A warning banner on your app’s page with a “Merge PR” link
Click either link to open the pull request on GitHub, then merge it. After merging, click Refresh on the banner to update the status. GitHub Actions triggers automatically and your first deployment begins.
Porter automatically provisions a public URL for your application at *.onporter.run. Click the URL in your dashboard to visit your deployed application.
Congratulations! Your application is now live and will automatically redeploy whenever you push to your selected branch.