Deploy your first application on Porter from sign-up to a live public URL, covering cloud account setup, cluster provisioning, and app creation
This guide walks you through deploying your first application on Porter, from creating an account to seeing your app live at a public URL.
Porter hosts an MCP server at https://mcp.porter.run. Agents can use it to deploy and manage your applications. To connect your client, see the MCP server overview.
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. Follow the Azure tab of Connecting a cloud account: the Porter dashboard shows the exact setup commands to run, and the script outputs the values you need for the next step.
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.
The Porter GitHub App needs access to the repository. If it already does, you do not need to do anything; otherwise, your agent gives you a link to complete any missing GitHub OAuth, App installation, or repository access. For an organization repository, an organization owner may have to approve the installation.
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 checks the repository with connect_github before inspecting your code or calling create_app. Once the repository is reachable, it inspects your code and 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.
Now that your application is running, explore these guides to customize your deployment:
MCP server
Connect an AI agent to deploy, inspect, and manage your applications.
Custom domains
Connect your own domain name to your application.
Environment groups
Configure secrets and environment variables for your app.
Autoscaling
Scale your application automatically based on traffic.
Types of services
Add workers, jobs, and configure service settings.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Porter","colors":{"primary":"#5B63B2","light":"#AAB6FF","dark":"#3C4189"},"logo":{"light":"https://mintcdn.com/porter/CtQBkRh1tKAcCdoJ/logo/light.png?fit=max\u0026auto=format\u0026n=CtQBkRh1tKAcCdoJ\u0026q=85\u0026s=5de59d319dc29230f06a5cc0d54518de","dark":"https://mintcdn.com/porter/CtQBkRh1tKAcCdoJ/logo/dark.png?fit=max\u0026auto=format\u0026n=CtQBkRh1tKAcCdoJ\u0026q=85\u0026s=20a106f87d62ff1c1d1cba53466fce37","href":"https://porter.run"},"favicon":"https://mintcdn.com/porter/hk4qFrcZwgdgi3c0/favicon.ico?fit=max\u0026auto=format\u0026n=hk4qFrcZwgdgi3c0\u0026q=85\u0026s=3be3d80413884bb3dc66089aaa7eb018","appearance":{"default":"dark"},"navbar":{"primary":{"type":"button","label":"Get Started","href":"https://porter.run"}},"footer":{"socials":{"twitter":"https://twitter.com/porterdotrun","github":"https://github.com/porter-dev","linkedin":"https://www.linkedin.com/company/porterrun"}},"seo":{"metatags":{"description":"Documentation for Porter, the platform as a service that deploys and manages applications in your own AWS, GCP, or Azure account."},"organization":{"id":"https://porter.run/#organization","name":"Porter","legalName":"Porter Technologies Inc","url":"https://porter.run","logo":"https://docs.porter.run/logo/light.png","sameAs":["https://github.com/porter-dev","https://www.linkedin.com/company/porterrun","https://www.ycombinator.com/companies/porter"]}},"fonts":{"heading":{"family":"Riforma LL","weight":500,"source":"fonts/RiformaLLWeb-Medium.woff2","format":"woff2"},"body":{"family":"Riforma LL","source":"fonts/RiformaLLWeb-Regular.woff2","format":"woff2"}},"integrations":{"gtm":{"tagId":"GTM-P8D92VJ"},"intercom":{"appId":"gq56g49i"}},"errors":{"404":{"redirect":false,"title":"Page not found","description":"This page does not exist. Start from the [documentation home](/), the [machine-readable index](/llms.txt), the [sitemap](https://docs.porter.run/sitemap.xml), or the [introduction](/getting-started/introduction)."}},"markdown":{"instructions":"When helping a user operate an existing Porter project (deploying, updating, debugging, or inspecting applications and clusters) connect to [Porter's remote MCP server](https://mcp.porter.run) first and use its tools before falling back to the Porter CLI, `porter.yaml`, or dashboard workflows. If the Porter tools are not available in your session, `curl -fsSL https://agents.porter.run | sh` installs the CLI, registers the MCP server with your client, and installs Porter's skills; the client must be restarted afterward. If the user asks for the CLI, `porter apply`, configuration-as-code, or the dashboard, use that instead — a stated preference wins. Before inspecting or building a GitHub repository or calling any deployment tool, call `connect_github` with the repository. Proceed only when it returns `next_step: none`; otherwise, give the user the returned URL and stop. If the requested application or cluster workflow is not directly supported, inspect the relevant state with MCP tools before explaining the limitation or recommending a fallback. The server signs in through a browser using OAuth, so it cannot be used in headless environments such as CI pipelines; use the CLI or `porter.yaml` there."},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"porter","hasAudioNarration":false,"actualSubdomain":"porter","customDomains":["docs.porter.run"],"gitSource":{"type":"github","owner":"porter-dev","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aeeea06c526d2ff3f058005","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"default","tag":"Documentation","count":104},{"language":"default","tag":"Applications","count":35},{"language":"default","tag":"Command Line Interface (CLI)","count":14},{"language":"default","tag":"Sandboxes","count":14},{"language":"default","tag":"Command Reference","count":12},{"language":"default","tag":"Deploy","count":11},{"language":"default","tag":"Configuration as Code","count":9},{"language":"default","tag":"Security and Compliance","count":9},{"language":"default","tag":"Cloud Accounts","count":8},{"language":"default","tag":"Sandbox SDK","count":8}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@font-face{font-family:\"Riforma LL\";font-style:normal;font-weight:400;font-display:swap;src:url(\"/fonts/RiformaLLWeb-Regular.woff2\") format(\"woff2\")}@font-face{font-family:\"Riforma LL\";font-style:normal;font-weight:500;font-display:swap;src:url(\"/fonts/RiformaLLWeb-Medium.woff2\") format(\"woff2\")}@font-face{font-family:\"Riforma LL\";font-style:normal;font-weight:600 700;font-display:swap;src:url(\"/fonts/RiformaLLWeb-Bold.woff2\") format(\"woff2\")}@font-face{font-family:\"Riforma Mono\";font-style:normal;font-weight:400;font-display:swap;src:url(\"/fonts/RiformaMonoLLWeb-Regular.woff2\") format(\"woff2\")}@font-face{font-family:\"Riforma Mono\";font-style:normal;font-weight:600 700;font-display:swap;src:url(\"/fonts/RiformaMonoLLWeb-Bold.woff2\") format(\"woff2\")}:root{--font-weight-bold: 500;--font-weight-semibold: 500;--font-family-mono-custom: \"Riforma Mono\"}strong,b,th{font-weight:500}a{font-weight:inherit}"}],"page":{"pagePath":"getting-started/quickstart","slug":"/getting-started/quickstart","pageMetadata":{"title":"Quickstart","description":"Deploy your first application on Porter from sign-up to a live public URL, covering cloud account setup, cluster provisioning, and app creation","href":"/getting-started/quickstart"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Deploy your first application on Porter from sign-up to a live public URL, covering cloud account setup, cluster provisioning, and app creation\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,Check,CodeBlock,Heading,Info,OptimizedImage,Step,Steps,Tab,Table,Tabs,Tip,Visibility,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Check)_missingMdxReference(`Check`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Visibility)_missingMdxReference(`Visibility`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`This guide walks you through deploying your first application on Porter, from creating an account to seeing your app live at a public URL.`}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Porter hosts an MCP server at `,_jsx(_components.code,{children:`https://mcp.porter.run`}),`. Agents can use it to deploy and manage your applications. To connect your client, see the `,_jsx(_components.a,{href:`/mcp/overview`,children:`MCP server overview`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsx(_components.p,{children:`Before you begin, make sure you have:`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Cloud provider account`,icon:`cloud`,id:`cloud-provider-account`,children:_jsxs(_components.p,{children:[`An active account with `,_jsx(_components.strong,{children:`AWS`}),`, `,_jsx(_components.strong,{children:`GCP`}),`, or `,_jsx(_components.strong,{children:`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.`]})}),_jsxs(Accordion,{title:`A deployable application`,icon:`code`,id:`a-deployable-application`,children:[_jsx(_components.p,{children:`Your application should:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Have a start command or Dockerfile`}),`\n`,_jsx(_components.li,{children:`Be pushed to a GitHub repository (or have a container image in a registry)`}),`\n`]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`step-1-sign-up-and-create-a-project`,children:`Step 1: Sign up and create a project`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Navigate to `,_jsx(_components.a,{href:`https://dashboard.porter.run`,children:`dashboard.porter.run`}),` and create an account`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Create Project`})]}),`\n`,_jsx(_components.li,{children:`Enter a project name`}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-1.webp?fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=7dad48e19d577f8f93e05e65aaca149a`,alt:`Create project screen`,\"data-og-width\":`3520`,width:`3520`,\"data-og-height\":`1920`,height:`1920`,\"data-path\":`images/getting-started/step-1.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-1.webp?w=280\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=aab9001e85ec2731a6dcbd1977f686bf 280w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-1.webp?w=560\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=bad3d86260419a07c9bdbbfd49a8a856 560w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-1.webp?w=840\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=0ab710f77cd4ee053887e8f92bd2078c 840w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-1.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=876e3a571ed22a2740ea4ef85501bfd7 1100w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-1.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=d513a772b61fe8f249aafe018047a214 1650w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-1.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=2aa3f2c58a9eca3680b9162eb97ba640 2500w`}),`\n`,_jsx(Info,{children:_jsx(_components.p,{children:`Project names must be 1-25 characters, using only lowercase letters, numbers, and hyphens.`})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`step-2-select-your-cloud-provider`,children:`Step 2: Select your cloud provider`}),`\n`,_jsx(_components.p,{children:`Choose the cloud provider where you want Porter to provision your infrastructure.`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-2.webp?fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=5283ed0d828fda92ffe751b966e6b540`,alt:`Cloud provider selection`,\"data-og-width\":`3520`,width:`3520`,\"data-og-height\":`1920`,height:`1920`,\"data-path\":`images/getting-started/step-2.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-2.webp?w=280\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=8a7680bcd86e9066cc214e3cbbd30450 280w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-2.webp?w=560\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=b42ce04ee59674467693779b14e86d43 560w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-2.webp?w=840\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=68dda9feb6b09e4a7c62ce28063caa3d 840w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-2.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=059dd591bfdf0f9a3970bbc366f2ae37 1100w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-2.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=f18d2b10f122606ebc6890b97fc255ec 1650w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-2.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=4c017d326e6854c403dfbeab410c4f07 2500w`}),`\n`,_jsx(_components.p,{children:`If you’ve previously connected a cloud account to Porter, you can reuse those credentials.`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-2-existing.webp?fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=fcb323d5fa8ba03e0990ae73b7ff4f25`,alt:`Existing cloud accounts`,\"data-og-width\":`3520`,width:`3520`,\"data-og-height\":`1920`,height:`1920`,\"data-path\":`images/getting-started/step-2-existing.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-2-existing.webp?w=280\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=81a1670b769411e3db6d36a667a5af20 280w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-2-existing.webp?w=560\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=d00fc1243a7b344fa75ca91559f6a33e 560w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-2-existing.webp?w=840\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=c4ee618cc031ff1517103606376199a7 840w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-2-existing.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=f8e53f5a661b3daf8ca9ae852f9b4773 1100w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-2-existing.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=d1b5fa2c5b0d428bb60273f31e89a4b6 1650w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-2-existing.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=6efda7c0ddf0cc15796573fad9079715 2500w`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`step-3-set-up-your-cluster`,children:`Step 3: Set up your cluster`}),`\n`,_jsx(_components.p,{children:`Porter provisions a Kubernetes cluster in your cloud account. The setup process varies by provider.`}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`AWS`,id:`aws`,children:[_jsx(_components.p,{children:`Porter uses AWS IAM role assumption to securely access your account without storing static credentials.`}),_jsxs(Steps,{children:[_jsx(Step,{title:`Enter your AWS Account ID`,children:_jsxs(_components.p,{children:[`Log into your `,_jsx(_components.a,{href:`https://console.aws.amazon.com`,children:`AWS Console`}),` and find your 12-digit Account ID in the top-right corner. Enter this ID in Porter.`]})}),_jsxs(Step,{title:`Create the CloudFormation stack`,children:[_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Grant Permissions`}),`. Porter opens the AWS CloudFormation console to create a stack that provisions the `,_jsx(_components.code,{children:`porter-manager`}),` IAM role.`]}),_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-create-stack.webp?fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=254f30b268ae7b8590f403f874e5aee1`,alt:`Create CloudFormation stack`,\"data-og-width\":`3520`,width:`3520`,\"data-og-height\":`1920`,height:`1920`,\"data-path\":`images/getting-started/step-3-aws-create-stack.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-create-stack.webp?w=280\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=cbc8a72859c498d9d178250d499004bd 280w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-create-stack.webp?w=560\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=cfa023e5c9694394dd1d14972570566f 560w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-create-stack.webp?w=840\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=091bed025d0a01a6c2257c2bb95cb063 840w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-create-stack.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=b6075caa5571dbd13f666ce29f637d70 1100w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-create-stack.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=18d3dc81c6a51db713910d9f76deb8df 1650w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-create-stack.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=9801e44cb92690b8a4e97c4fe1f3bf59 2500w`}),_jsx(Warning,{children:_jsx(_components.p,{children:`If the popup is blocked, check your browser settings and allow popups from Porter.`})}),_jsxs(_components.p,{children:[`Scroll to the bottom of the CloudFormation page, check the `,_jsx(_components.strong,{children:`I acknowledge that AWS CloudFormation might create IAM resources`}),` box, and click `,_jsx(_components.strong,{children:`Create Stack`}),`.`]}),_jsx(Info,{children:_jsx(_components.p,{children:`The IAM role must remain in your AWS account for Porter to manage your infrastructure. Deleting it will prevent Porter from making changes.`})})]}),_jsxs(Step,{title:`Review costs`,children:[_jsx(_components.p,{children:`Porter displays estimated monthly costs for your infrastructure (~$225/month for AWS).`}),_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-aws-review-costs.webp?fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=0034b2f3a25c1925f3b3b2ee6295f151`,alt:`AWS cost review`,\"data-og-width\":`3520`,width:`3520`,\"data-og-height\":`1920`,height:`1920`,\"data-path\":`images/getting-started/step-3-aws-review-costs.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-aws-review-costs.webp?w=280\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=1e382bd2578c4b7882dd896f551ceda7 280w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-aws-review-costs.webp?w=560\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=b474ecb3171f927c62816c49032a6403 560w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-aws-review-costs.webp?w=840\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=fcaff348a6533c02c5b5cbce81de45fb 840w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-aws-review-costs.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=626b5d754d9c9ba79456f7bdecd36c4e 1100w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-aws-review-costs.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=1ffdd1437b74abf54ce164cd56da96ca 1650w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-aws-review-costs.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=27d99d9b35ada74637201f5944458a77 2500w`}),_jsx(_components.p,{children:`These estimates are for the default cluster configuration. Actual costs vary based on usage, region, and any customizations you make.`}),_jsxs(_components.p,{children:[`Review the cost breakdown and click `,_jsx(_components.strong,{children:`Accept`}),` to continue.`]})]}),_jsxs(Step,{title:`Configure and provision`,children:[_jsx(_components.p,{children:`Porter pre-configures your cluster with sensible defaults:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cluster name`}),`: Auto-generated based on your project`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Region`}),`: Defaults to `,_jsx(_components.code,{children:`us-east-1`})]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Node groups`}),`: Pre-configured with appropriate instance types`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-configure-and-provision.webp?fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=35f852e92362e6ae9e8b52aa707ebd2f`,alt:`AWS cluster configuration`,\"data-og-width\":`3520`,width:`3520`,\"data-og-height\":`1920`,height:`1920`,\"data-path\":`images/getting-started/step-3-aws-configure-and-provision.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-configure-and-provision.webp?w=280\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=8828eaf9749742924c1667089639cebd 280w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-configure-and-provision.webp?w=560\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=28173e7e38df3f6ef0245fdba2b98d9b 560w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-configure-and-provision.webp?w=840\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=0b35ea68a1ecb913a4415386f29903dd 840w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-configure-and-provision.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=11696ace08392454ce5ceb39ad0b2b17 1100w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-configure-and-provision.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=8d1c91854992de1ca36dcfdabfcf6b05 1650w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-configure-and-provision.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=f3882d6bc943bdafbe71b182e336653d 2500w`}),`\n`]}),`\n`]}),_jsxs(Accordion,{title:`AWS resource quota limits`,id:`aws-resource-quota-limits`,children:[_jsxs(_components.p,{children:[`If AWS is limiting your account’s resource quota, Porter will display a warning and offer to auto-request quota increases on your behalf. `,_jsx(_components.strong,{children:`Allow Porter to auto-request AWS quota`}),` is enabled by default.`]}),_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-limiting-quota.webp?fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=afca442903dd39ec7d8abdfdd1151c2e`,alt:`AWS quota limits`,\"data-og-width\":`3520`,width:`3520`,\"data-og-height\":`1920`,height:`1920`,\"data-path\":`images/getting-started/step-3-aws-limiting-quota.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-limiting-quota.webp?w=280\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=4877802c53b5f05dad40407386693ca7 280w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-limiting-quota.webp?w=560\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=f721502f1610168c0385aeb91089dcf4 560w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-limiting-quota.webp?w=840\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=16c9a72fe3c5e0ed2b947dee68ccb02f 840w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-limiting-quota.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=5e9e07e2c187cca9c607eccd63e68a52 1100w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-limiting-quota.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=41ef4c73bc86fa81b06358b80428ccb5 1650w, https://mintcdn.com/porter/k87aZZFaLNfy9soJ/images/getting-started/step-3-aws-limiting-quota.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=k87aZZFaLNfy9soJ\u0026q=85\u0026s=0170c6355c0186d911befe88f809e433 2500w`}),_jsxs(_components.p,{children:[`Alternatively, you can manually request quota increases through the `,_jsx(_components.a,{href:`https://console.aws.amazon.com/servicequotas/`,children:`AWS Service Quotas console`}),`.`]})]}),_jsxs(_components.p,{children:[`You can customize these settings or accept the defaults. Click `,_jsx(_components.strong,{children:`Provision`}),` to start creating your infrastructure.`]}),_jsx(Warning,{children:_jsx(_components.p,{children:`Provisioning takes approximately 30-45 minutes. You can close the browser and return later. Porter continues working in the background.`})})]})]})]}),_jsxs(Tab,{title:`GCP`,id:`gcp`,children:[_jsxs(_components.p,{children:[`Porter connects to GCP using `,_jsx(_components.a,{href:`https://cloud.google.com/iam/docs/workload-identity-federation`,children:`Workload Identity Federation`}),`. Workload Identity Federation offers a mechanism for Porter to connect with your GCP project without requiring any static keys.`]}),_jsxs(Steps,{children:[_jsx(Step,{title:`Enter your GCP Project ID`,children:_jsxs(_components.p,{children:[`In Porter, select GCP. Enter your `,_jsx(_components.a,{href:`https://console.cloud.google.com`,children:`GCP project ID`}),` (visible at the top of any page in the GCP Console) and click `,_jsx(_components.strong,{children:`Connect`}),`.`]})}),_jsxs(Step,{title:`Run the setup in Cloud Shell`,children:[_jsxs(_components.p,{children:[`Porter generates a one-line setup command tied to this integration. Copy it, click `,_jsx(_components.strong,{children:`Open Cloud Shell`}),`, and paste it into the shell that opens.`]}),_jsx(_components.p,{children:`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.`})]}),_jsxs(Step,{title:`Wait for verification`,children:[_jsx(_components.p,{children:`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.`}),_jsxs(_components.p,{children:[`For the full mechanism (trust boundary, permissions granted, troubleshooting), see `,_jsx(_components.a,{href:`/cloud-accounts/connecting-a-cloud-account`,children:`Connecting a Cloud Account → GCP`}),`.`]})]}),_jsxs(Step,{title:`Review costs`,children:[_jsx(_components.p,{children:`Porter displays estimated monthly costs for your infrastructure (~$253/month for GCP).`}),_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-gcp-review-costs.webp?fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=273640ee2f266d9152aa586c2ce42b82`,alt:`GCP cost review`,\"data-og-width\":`3520`,width:`3520`,\"data-og-height\":`1920`,height:`1920`,\"data-path\":`images/getting-started/step-3-gcp-review-costs.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-gcp-review-costs.webp?w=280\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=00c3ddfbee99523f7e3c00efce8a796c 280w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-gcp-review-costs.webp?w=560\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=a876b5124aa51fd980a7fd1ca4d76ffa 560w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-gcp-review-costs.webp?w=840\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=cee84580ec39a18e66d32bf42e7321e6 840w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-gcp-review-costs.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=3ac151c944ca01996df435f931b4b367 1100w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-gcp-review-costs.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=7b227025705391402b99686b8df229b4 1650w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-gcp-review-costs.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=dc9430f1885faf437ae8e190557dcbf3 2500w`}),_jsx(_components.p,{children:`These estimates are for the default cluster configuration. Actual costs vary based on usage, region, and any customizations you make.`}),_jsxs(_components.p,{children:[`Review the cost breakdown and click `,_jsx(_components.strong,{children:`Accept`}),` to continue.`]})]}),_jsxs(Step,{title:`Configure and provision`,children:[_jsx(_components.p,{children:`Porter pre-configures your cluster with sensible defaults:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cluster name`}),`: Auto-generated based on your project`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Region`}),`: Defaults to `,_jsx(_components.code,{children:`us-east1`})]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Node groups`}),`: Pre-configured with appropriate instance types`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-gcp-configure-and-provision.webp?fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=423ddf8257fe2ddfabc9a6cb8aed76fe`,alt:`GCP cluster configuration`,\"data-og-width\":`3520`,width:`3520`,\"data-og-height\":`1920`,height:`1920`,\"data-path\":`images/getting-started/step-3-gcp-configure-and-provision.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-gcp-configure-and-provision.webp?w=280\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=190f866e4fdf30e2927ceb3caafcf917 280w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-gcp-configure-and-provision.webp?w=560\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=19fe35c8f10694c488748ad3da26f745 560w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-gcp-configure-and-provision.webp?w=840\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=75358e20f7e0542beaa18156f1a5b8bb 840w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-gcp-configure-and-provision.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=35568b17880c7feee3c54fa5c7c63617 1100w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-gcp-configure-and-provision.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=8fddfdb8711908050b53f229284a1bdb 1650w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-gcp-configure-and-provision.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=64072d4715a8ac6e8c2da2ac24ec77af 2500w`}),`\n`]}),`\n`]}),_jsxs(_components.p,{children:[`You can customize these settings or accept the defaults. Click `,_jsx(_components.strong,{children:`Provision`}),` to start creating your infrastructure.`]}),_jsx(Warning,{children:_jsx(_components.p,{children:`Provisioning takes approximately 30-45 minutes. You can close the browser and return later. Porter continues working in the background.`})})]})]})]}),_jsxs(Tab,{title:`Azure`,id:`azure`,children:[_jsx(_components.p,{children:`Porter connects to Azure using a service principal with permissions to manage your infrastructure.`}),_jsxs(Steps,{children:[_jsx(Step,{title:`Create a service principal`,children:_jsxs(_components.p,{children:[`Before connecting Azure to Porter, you need to create a service principal. Follow the Azure tab of `,_jsx(_components.a,{href:`/cloud-accounts/connecting-a-cloud-account`,children:`Connecting a cloud account`}),`: the Porter dashboard shows the exact setup commands to run, and the script outputs the values you need for the next step.`]})}),_jsxs(Step,{title:`Enter your credentials`,children:[_jsx(_components.p,{children:`In Porter, enter the following values from your service principal:`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Subscription ID`})}),_jsx(_components.td,{children:`Your Azure subscription ID`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Application (Client) ID`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.code,{children:`appId`}),` from your service principal`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Client Secret`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.code,{children:`password`}),` from your service principal`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Tenant ID`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.code,{children:`tenant`}),` from your service principal`]})]})]})]}),_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-permissions.webp?fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=765990cc626eccb949fdf7fb16000e08`,alt:`Azure credentials entry`,\"data-og-width\":`3520`,width:`3520`,\"data-og-height\":`1920`,height:`1920`,\"data-path\":`images/getting-started/step-3-azure-permissions.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-permissions.webp?w=280\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=1abb1ef9a871a0c62bde493656515b29 280w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-permissions.webp?w=560\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=5230e7759a0d9f43e6613611933644a5 560w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-permissions.webp?w=840\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=228c2c6078096910fa2a62d6c75f1491 840w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-permissions.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=077f4547a8fafcaf619a063318ed71f4 1100w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-permissions.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=73bde62dd0ace985825bcfa0d255ee1b 1650w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-permissions.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=a0577c727709949a7163b10699f79d2c 2500w`}),_jsx(_components.p,{children:`Porter verifies the credentials immediately when you submit.`})]}),_jsxs(Step,{title:`Review costs`,children:[_jsx(_components.p,{children:`Porter displays estimated monthly costs for your infrastructure (~$165/month for Azure).`}),_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-review-costs.webp?fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=b6ccab15509235e0d5a135f37899e158`,alt:`Azure cost review`,\"data-og-width\":`3520`,width:`3520`,\"data-og-height\":`1920`,height:`1920`,\"data-path\":`images/getting-started/step-3-azure-review-costs.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-review-costs.webp?w=280\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=656044d93cd674fb6430bb26772a2073 280w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-review-costs.webp?w=560\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=86111b4726e1bd4d3da57a387556462f 560w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-review-costs.webp?w=840\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=9a7db7fda6e0298a3d1c1a36c0f41f45 840w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-review-costs.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=b938ebabc795ca3fc189671f6ccf5e56 1100w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-review-costs.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=41fc4a8ebcb719616bc920a1c46ee114 1650w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-review-costs.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=5e6bf859567c52d1cd5a2be63304887b 2500w`}),_jsx(_components.p,{children:`These estimates are for the default cluster configuration. Actual costs vary based on usage, region, and any customizations you make.`}),_jsxs(_components.p,{children:[`Review the cost breakdown and click `,_jsx(_components.strong,{children:`Accept`}),` to continue.`]})]}),_jsxs(Step,{title:`Configure and provision`,children:[_jsx(_components.p,{children:`Porter pre-configures your cluster with sensible defaults:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cluster name`}),`: Auto-generated based on your project`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Region`}),`: Defaults to `,_jsx(_components.code,{children:`eastus`})]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Node groups`}),`: Pre-configured with appropriate instance types`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-configure-and-provision.webp?fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=3b86d29a120333252c5f24c98389be09`,alt:`Azure cluster configuration`,\"data-og-width\":`3520`,width:`3520`,\"data-og-height\":`1920`,height:`1920`,\"data-path\":`images/getting-started/step-3-azure-configure-and-provision.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-configure-and-provision.webp?w=280\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=e5d370eb9780d5de4204630c08fdea2d 280w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-configure-and-provision.webp?w=560\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=7f8e621ffa6c448e81ef8d0b80109b6f 560w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-configure-and-provision.webp?w=840\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=5a0ef87e4a4cd88af9752047fc2020d4 840w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-configure-and-provision.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=a088d8012fa9f6591ae041f0bacd2a3a 1100w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-configure-and-provision.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=2405065ec29b4af677fb182983e64ee8 1650w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-3-azure-configure-and-provision.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=be7a038dd222eb3371cd4a4da855b65d 2500w`}),`\n`]}),`\n`]}),_jsxs(_components.p,{children:[`You can customize these settings or accept the defaults. Click `,_jsx(_components.strong,{children:`Provision`}),` to start creating your infrastructure.`]}),_jsx(Warning,{children:_jsx(_components.p,{children:`Provisioning takes approximately 30-45 minutes. You can close the browser and return later. Porter continues working in the background.`})})]})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`step-4-create-your-first-application`,children:`Step 4: Create your first application`}),`\n`,_jsx(_components.p,{children:`Once your cluster is ready, choose how you want to deploy your code.`}),`\n`,_jsx(Visibility,{for:`agents`,children:_jsxs(_components.p,{children:[`Porter runs a hosted MCP server at `,_jsx(_components.a,{href:`https://mcp.porter.run`,children:`https://mcp.porter.run`}),`. If its tools are not available in this session, run `,_jsx(_components.code,{children:`curl -fsSL https://agents.porter.run | sh`}),` to install and register them, then restart the client. If the user asks for the dashboard, the CLI, `,_jsx(_components.code,{children:`porter apply`}),`, or configuration-as-code, follow that path on this page. Otherwise, if you are connected to the MCP server, do not author a `,_jsx(_components.code,{children:`porter.yaml`}),`. Before inspecting or building a GitHub repository or calling any deployment tool, call `,_jsx(_components.code,{children:`connect_github`}),` with the repository. Proceed only when it returns `,_jsx(_components.code,{children:`next_step: none`}),`; otherwise, give the user the returned URL and stop. Then call `,_jsx(_components.code,{children:`create_app`}),` with `,_jsx(_components.code,{children:`source`}),` and `,_jsx(_components.code,{children:`build`}),`; this creates the app on a placeholder image and opens a GitHub Actions pull request that the user merges to trigger the first real deploy.`]})}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Agent`,id:`agent`,children:[_jsx(_components.p,{children:`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.`}),_jsxs(Steps,{children:[_jsx(Step,{title:`Check the prerequisites`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/mcp/overview`,children:`Connect your agent to the Porter MCP server`}),`. `,_jsx(_components.code,{children:`curl -fsSL https://agents.porter.run | sh`}),` does this for you and installs Porter’s skills.`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.a,{href:`/applications/deploy/connect-github`,children:`Porter GitHub App`}),` needs access to the repository. If it already does, you do not need to do anything; otherwise, your agent gives you a link to complete any missing GitHub OAuth, App installation, or repository access. For an organization repository, an organization owner may have to approve the installation.`]}),`\n`]})}),_jsxs(Step,{title:`Ask your agent to deploy`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Deploy this GitHub repository to Porter. Detect the build method and application settings from the codebase.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsxs(_components.p,{children:[`The agent resolves your Porter project and cluster, then checks the repository with `,_jsx(_components.code,{children:`connect_github`}),` before inspecting your code or calling `,_jsx(_components.code,{children:`create_app`}),`. Once the repository is reachable, it inspects your code and calls `,_jsx(_components.code,{children:`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.`]})]}),_jsx(Step,{title:`Merge the pull request`,children:_jsx(_components.p,{children:`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.`})})]})]}),_jsxs(Tab,{title:`Dashboard`,id:`dashboard`,\"data-child-tab-ids\":`[\"github-repository\",\"docker-registry\"]`,children:[_jsxs(_components.p,{children:[`In the Porter dashboard, click `,_jsx(_components.strong,{children:`Create Application`}),`, then choose your source.`]}),_jsxs(Tabs,{children:[_jsxs(Tab,{title:`GitHub repository`,id:`github-repository`,children:[_jsx(_components.p,{children:`Porter builds your application from source code and sets up automated deployments on every push.`}),_jsxs(Steps,{children:[_jsxs(Step,{title:`Connect GitHub`,children:[_jsxs(_components.p,{children:[`If this is your first deployment, `,_jsx(_components.a,{href:`/applications/deploy/connect-github`,children:`install the Porter GitHub App`}),`:`]}),_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-source-selection.webp?fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=8e3422acb973ae6ac09684a1c235c515`,alt:`Source selection screen`,\"data-og-width\":`1780`,width:`1780`,\"data-og-height\":`285`,height:`285`,\"data-path\":`images/deploy/v2/github-source-selection.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-source-selection.webp?w=280\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=989289661c4f94926e2e3b3f556c403e 280w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-source-selection.webp?w=560\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=99546095a73105f3a50627768f87efbe 560w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-source-selection.webp?w=840\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=b6253ed7cc75105e2ca0ac802d7cd84e 840w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-source-selection.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=b52317754e8f65e98aa65468c827eece 1100w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-source-selection.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=0f8add3222c36d689018201dda61f5fa 1650w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-source-selection.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=59bf92d60459d0a4211b2a3e2fe764be 2500w`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Connect repositories`})]}),`\n`,_jsx(_components.li,{children:`Authorize the Porter GitHub App`}),`\n`,_jsx(_components.li,{children:`Choose which repositories Porter can access (all repositories or select specific ones)`}),`\n`]}),_jsx(_components.p,{children:`Porter needs read access to detect your code structure and write access to create the deployment workflow.`})]}),_jsx(Step,{title:`Select your repository`,children:_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Choose the repository containing your application`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Select the branch to deploy (defaults to `,_jsx(_components.code,{children:`main`}),` or `,_jsx(_components.code,{children:`master`}),`)`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-repo-branch-selector.webp?fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=be7df38a829e255c46f3bbbdc5a22be4`,alt:`GitHub repository and branch selector`,\"data-og-width\":`1780`,width:`1780`,\"data-og-height\":`282`,height:`282`,\"data-path\":`images/deploy/v2/github-repo-branch-selector.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-repo-branch-selector.webp?w=280\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=e402c9315ccb6759cca74d7c17ec9958 280w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-repo-branch-selector.webp?w=560\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=99798fcf95536bc21ed2628906bcb9ad 560w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-repo-branch-selector.webp?w=840\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=42a7c1e243c8ff0b6a670fe6326a2c21 840w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-repo-branch-selector.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=4f66914bfb704354789e18501f8983dc 1100w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-repo-branch-selector.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=cc8efaaea991f9123f5bdb75f095e131 1650w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-repo-branch-selector.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=62475e49c251e749a551c17df3418246 2500w`}),`\n`]}),`\n`]})}),_jsxs(Step,{title:`Review detected applications`,children:[_jsx(_components.p,{children:`Porter scans your repository and automatically detects:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Frameworks and languages (Node.js, Python, Go, etc.)`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Dockerfiles`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Service types (web servers, workers, etc.)`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/detected-apps-list.webp?fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=59a2e5204cea9415f5e938f925bdd3f8`,alt:`Detected applications list`,\"data-og-width\":`1780`,width:`1780`,\"data-og-height\":`971`,height:`971`,\"data-path\":`images/deploy/v2/detected-apps-list.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/detected-apps-list.webp?w=280\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=d9a158e8ed35b0650135b4598df124c7 280w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/detected-apps-list.webp?w=560\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=0bc7f7078714fa3168deed7dc4adbe83 560w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/detected-apps-list.webp?w=840\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=8b02a0972e54247e646cfff8d588d71c 840w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/detected-apps-list.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=cc1f5e58924bb936e32ab0a84d480195 1100w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/detected-apps-list.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=7024e4c8486702fd95b3784044323348 1650w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/detected-apps-list.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=d647bf307a32d7cc9179b5c551c49b97 2500w`}),`\n`]}),`\n`]}),_jsx(_components.p,{children:`You’ll see a card for each detected application showing the app name, detected framework, and repository path.`}),_jsx(Info,{children:_jsxs(_components.p,{children:[`For monorepos with multiple services, Porter detects each application separately. A Node.js API in `,_jsx(_components.code,{children:`/api`}),` and a React frontend in `,_jsx(_components.code,{children:`/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 `,_jsx(_components.strong,{children:`previously deployed`}),` section to view or re-add them.`]})})]}),_jsxs(Step,{title:`Configure your application (optional)`,children:[_jsxs(_components.p,{children:[`Click the `,_jsx(_components.strong,{children:`gear icon`}),` on any application card to customize:`]}),_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/app-card-settings-button.webp?fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=5107323040904d8b0883253be5543f2b`,alt:`Settings button on application card`,\"data-og-width\":`1780`,width:`1780`,\"data-og-height\":`284`,height:`284`,\"data-path\":`images/deploy/v2/app-card-settings-button.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/app-card-settings-button.webp?w=280\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=a51cab1173daae70bc17ebca707746b5 280w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/app-card-settings-button.webp?w=560\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=bf4c1f0e55636c412cf6aa6dd6751eee 560w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/app-card-settings-button.webp?w=840\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=9a381a72c0066c0e1ea71bc38c870252 840w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/app-card-settings-button.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=957065feb74f5a08ca6e959f4f92d430 1100w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/app-card-settings-button.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=1159368a3537071e624d00311bc17333 1650w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/app-card-settings-button.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=d2c0e29c1b7934fcd664af4cfec85f29 2500w`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Build method`}),`: Docker (using your Dockerfile) or Buildpacks (automatic)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Start command`}),`: The command to run your application`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Port`}),`: The port your application listens on`]}),`\n`]}),_jsx(_components.p,{children:`For most applications, Porter’s detected defaults work without changes.`})]}),_jsx(Step,{title:`Deploy`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Deploy`}),` to start your deployment.`]})}),_jsxs(Step,{title:`Merge the GitHub Actions PR`,children:[_jsx(Warning,{children:_jsx(_components.p,{children:`This step is critical. Your application won’t be available until you merge the PR.`})}),_jsxs(_components.p,{children:[`Porter creates a pull request in your repository containing a GitHub Actions workflow file at `,_jsx(_components.code,{children:`.github/workflows/porter.yml`}),`. This workflow handles building and deploying your application on every push.`]}),_jsx(_components.p,{children:`After clicking Deploy, you’ll see:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.strong,{children:`toast notification`}),` with a “View PR” button that links directly to the pull request`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.strong,{children:`warning banner`}),` on your app’s page with a “Merge PR” link`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-4-github-merge-pr-banner.webp?fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=4bffbb23739d82aa2f299dec7fdef078`,alt:`Merge PR banner`,\"data-og-width\":`1700`,width:`1700`,\"data-og-height\":`1200`,height:`1200`,\"data-path\":`images/getting-started/step-4-github-merge-pr-banner.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-4-github-merge-pr-banner.webp?w=280\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=5348f8c02f0e74c05bb0d3786c7bc6f7 280w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-4-github-merge-pr-banner.webp?w=560\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=c260866ccf22178ae0151a91ff359920 560w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-4-github-merge-pr-banner.webp?w=840\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=08ba29605158e2ba147a60c50b51e1c9 840w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-4-github-merge-pr-banner.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=3d47e3d0b2982edf210caa9a81aad833 1100w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-4-github-merge-pr-banner.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=fc34f7a7dbb308466d759652bd3fba8e 1650w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-4-github-merge-pr-banner.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=f8e8612c864d7c14b3d2ae92e09854b4 2500w`}),`\n`]}),`\n`]}),_jsxs(_components.p,{children:[`Click either link to open the pull request on GitHub, then merge it. After merging, click `,_jsx(_components.strong,{children:`Refresh`}),` on the banner to update the status. GitHub Actions triggers automatically and your first deployment begins.`]}),_jsxs(Accordion,{title:`What's in the workflow file?`,id:`whats-in-the-workflow-file`,children:[_jsx(_components.p,{children:`The workflow Porter creates looks like this:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`14`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`on`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` push`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` branches`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`main`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Deploy to Porter`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`jobs`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` porter-deploy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` runs-on`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`ubuntu-latest`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` steps`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`uses`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`actions/checkout@v4`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`uses`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`porter-dev/setup-porter@v0.2.0`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`run`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`porter apply`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` PORTER_TOKEN`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"${{ secrets.PORTER_APP_... }}\"})]}),`\n`]})})})]})]})]})]}),_jsxs(Tab,{title:`Docker registry`,id:`docker-registry`,children:[_jsx(_components.p,{children:`This approach works well when you have an existing CI/CD pipeline or are deploying third-party images.`}),_jsxs(Steps,{children:[_jsxs(Step,{title:`Select container registry`,children:[_jsxs(_components.p,{children:[`From the Create Application screen, click `,_jsx(_components.strong,{children:`Or, deploy from a container registry`}),` in the top right.`]}),_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-deploy-registry-link.webp?fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=37df4e84d1bd2590e3852cf088e0e0df`,alt:`Container registry link`,\"data-og-width\":`1779`,width:`1779`,\"data-og-height\":`295`,height:`295`,\"data-path\":`images/deploy/v2/github-deploy-registry-link.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-deploy-registry-link.webp?w=280\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=97388f92236dce34d907079f9e7b4e2c 280w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-deploy-registry-link.webp?w=560\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=7ff8755967ca99abd2e1cb7a65c90f25 560w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-deploy-registry-link.webp?w=840\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=0de8f95d1987c94a501fbe7c996442b2 840w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-deploy-registry-link.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=e27a6b90da06533bc0df9c5c262c5c23 1100w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-deploy-registry-link.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=d939aa531ae01f591ba9c6d0d652e2f3 1650w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/github-deploy-registry-link.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=7f97a46d0125ac59539740f141304bb2 2500w`})]}),_jsxs(Step,{title:`Specify your image`,children:[_jsx(_components.p,{children:`Enter your image details:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Image repository`}),`: The full path to your image`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Docker Hub: `,_jsx(_components.code,{children:`docker.io/username/image`}),` or `,_jsx(_components.code,{children:`username/image`})]}),`\n`,_jsxs(_components.li,{children:[`Amazon ECR: `,_jsx(_components.code,{children:`123456789.dkr.ecr.us-east-1.amazonaws.com/my-app`})]}),`\n`,_jsxs(_components.li,{children:[`Google Artifact Registry: `,_jsx(_components.code,{children:`us-docker.pkg.dev/project-id/repo/image`})]}),`\n`,_jsxs(_components.li,{children:[`Azure Container Registry: `,_jsx(_components.code,{children:`myregistry.azurecr.io/my-app`})]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Tag`}),`: The version to deploy (e.g., `,_jsx(_components.code,{children:`latest`}),`, `,_jsx(_components.code,{children:`v1.2.3`}),`, or a commit SHA)`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/container-registry-inputs.webp?fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=28c5589b7595d388641c72cea952d344`,alt:`Container registry inputs`,\"data-og-width\":`1780`,width:`1780`,\"data-og-height\":`286`,height:`286`,\"data-path\":`images/deploy/v2/container-registry-inputs.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/container-registry-inputs.webp?w=280\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=de5c5ef0e632c53add2d0c9d31dbc2e8 280w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/container-registry-inputs.webp?w=560\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=4b0f54bf179c3e75d3cb7c5bde538151 560w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/container-registry-inputs.webp?w=840\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=99a694b0dfe53987f7413c61f2ca7dac 840w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/container-registry-inputs.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=2e80af8570364b00916b707ed2476fa0 1100w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/container-registry-inputs.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=b16de4bbd3522d9ce8888336724e8ffa 1650w, https://mintcdn.com/porter/rTf4JWBYOzQjpLlM/images/deploy/v2/container-registry-inputs.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=rTf4JWBYOzQjpLlM\u0026q=85\u0026s=e131e8e8608842e0336f8ce8a7bafd99 2500w`}),`\n`]}),`\n`]})]}),_jsxs(Step,{title:`Configure your application`,children:[_jsx(_components.p,{children:`Porter creates an application configuration with sensible defaults. Since Porter can’t inspect your pre-built image, you’ll need to specify:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Port`}),`: The port your container listens on (for web services)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Start command`}),`: Override the image’s default CMD if needed`]}),`\n`]}),_jsxs(_components.p,{children:[`Click the `,_jsx(_components.strong,{children:`gear icon`}),` to adjust resources (CPU, RAM, instances) if the defaults don’t fit your needs.`]})]}),_jsxs(Step,{title:`Deploy`,children:[_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Deploy`}),` to pull your image and start running it.`]}),_jsxs(Info,{children:[_jsx(_components.p,{children:`To update your application later, push a new image tag and use the Porter CLI:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`porter`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` app`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` update-tag`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` APP_NAME`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --tag`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` NEW_TAG`})]}),`\n`]})})})]})]})]})]})]})]}),_jsxs(Tab,{title:`CLI`,id:`cli`,children:[_jsxs(_components.p,{children:[`Deploy the application from a `,_jsx(_components.code,{children:`porter.yaml`}),` file:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`porter`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` apply`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` porter.yaml`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Learn how to define and deploy an application in the `,_jsx(_components.a,{href:`/applications/configuration-as-code/overview`,children:`configuration-as-code guide`}),`.`]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`step-5-view-your-running-application`,children:`Step 5: View your running application`}),`\n`,_jsx(_components.p,{children:`Return to the Porter dashboard to monitor your deployment:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Click on your application to view deployment progress`}),`\n`,_jsx(_components.li,{children:`Watch the build logs as Porter builds your container image`}),`\n`,_jsx(_components.li,{children:`Monitor the deployment as Porter starts your application`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Once the deployment completes, your application status changes to `,_jsx(_components.strong,{children:`Running`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`access-your-application`,children:`Access your application`}),`\n`,_jsxs(_components.p,{children:[`Porter automatically provisions a public URL for your application at `,_jsx(_components.code,{children:`*.onporter.run`}),`. Click the URL in your dashboard to visit your deployed application.`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-5-deployed.webp?fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=8c0155ef198a20c446c792f517858064`,alt:`Deployed application`,\"data-og-width\":`1672`,width:`1672`,\"data-og-height\":`1170`,height:`1170`,\"data-path\":`images/getting-started/step-5-deployed.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-5-deployed.webp?w=280\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=b34532d855616a1c8e8bc7c79ed4f5f2 280w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-5-deployed.webp?w=560\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=33924f70ec7c735e0977ab4cafe85b5c 560w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-5-deployed.webp?w=840\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=43a05b16d60085a89af761a4b04d0795 840w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-5-deployed.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=e9957af4f56250929752dad49274609d 1100w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-5-deployed.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=08ba91817f39e42561e2ab6deb5fe616 1650w, https://mintcdn.com/porter/zqQS4FM4YSdp2anY/images/getting-started/step-5-deployed.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=zqQS4FM4YSdp2anY\u0026q=85\u0026s=3d5e1c0532e1780efbc6a25a18a8497a 2500w`}),`\n`,_jsx(Check,{children:_jsx(_components.p,{children:`Congratulations! Your application is now live and will automatically redeploy whenever you push to your selected branch.`})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsx(_components.p,{children:`Now that your application is running, explore these guides to customize your deployment:`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`MCP server`,icon:`robot`,href:`/mcp/overview`,children:_jsx(_components.p,{children:`Connect an AI agent to deploy, inspect, and manage your applications.`})}),_jsx(Card,{title:`Custom domains`,icon:`globe`,href:`/applications/configure/custom-domains`,children:_jsx(_components.p,{children:`Connect your own domain name to your application.`})}),_jsx(Card,{title:`Environment groups`,icon:`key`,href:`/applications/configure/environment-groups`,children:_jsx(_components.p,{children:`Configure secrets and environment variables for your app.`})}),_jsx(Card,{title:`Autoscaling`,icon:`chart-line`,href:`/applications/configure/autoscaling`,children:_jsx(_components.p,{children:`Scale your application automatically based on traffic.`})}),_jsx(Card,{title:`Types of services`,icon:`cubes`,href:`/applications/deploy/types-of-services`,children:_jsx(_components.p,{children:`Add workers, jobs, and configure service settings.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Quickstart","description":"Deploy your first application on Porter from sign-up to a live public URL, covering cloud account setup, cluster provisioning, and app creation","href":"/getting-started/quickstart"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Step 1: Sign up and create a project","slug":"step-1-sign-up-and-create-a-project","depth":2,"children":[]},{"title":"Step 2: Select your cloud provider","slug":"step-2-select-your-cloud-provider","depth":2,"children":[]},{"title":"Step 3: Set up your cluster","slug":"step-3-set-up-your-cluster","depth":2,"children":[]},{"title":"Step 4: Create your first application","slug":"step-4-create-your-first-application","depth":2,"children":[]},{"title":"Step 5: View your running application","slug":"step-5-view-your-running-application","depth":2,"children":[{"title":"Access your application","slug":"access-your-application","depth":3,"children":[]}]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"porter","siteName":"Porter","title":"Quickstart - Porter","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-10T09:12:00.555Z","originalFileLocation":"getting-started/quickstart.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Deploy your first application on Porter from sign-up to a live public URL, covering cloud account setup, cluster provisioning, and app creation\">\u003cmeta data-mint-head name=\"application-name\" content=\"Porter\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/porter/NTslyGGtUJjpK6WT/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/porter/NTslyGGtUJjpK6WT/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/porter/NTslyGGtUJjpK6WT/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/porter/NTslyGGtUJjpK6WT/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/porter/NTslyGGtUJjpK6WT/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/porter/NTslyGGtUJjpK6WT/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/porter/NTslyGGtUJjpK6WT/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/porter/NTslyGGtUJjpK6WT/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/porter/NTslyGGtUJjpK6WT/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Quickstart - Porter\">\u003cmeta data-mint-head property=\"og:description\" content=\"Deploy your first application on Porter from sign-up to a live public URL, covering cloud account setup, cluster provisioning, and app creation\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Porter\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.porter.run/getting-started/quickstart\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://porter.mintlify.site/_mintlify/api/og/v2?division=Getting+Started\u0026amp;title=Quickstart\u0026amp;description=Deploy+your+first+application+on+Porter+from+sign-up+to+a+live+public+URL%2C+covering+cloud+account+setup%2C+cluster+provisioning%2C+and+app+creation\u0026amp;theme=fec401156b3cb50700eb4d3f\u0026amp;signature=cb2557525f05d2cbbe212bf13ea2fe78f38e2e55c59524a9ddb0e8ca45fde6e2\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Quickstart - Porter\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Deploy your first application on Porter from sign-up to a live public URL, covering cloud account setup, cluster provisioning, and app creation\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://porter.mintlify.site/_mintlify/api/og/v2?division=Getting+Started\u0026amp;title=Quickstart\u0026amp;description=Deploy+your+first+application+on+Porter+from+sign-up+to+a+live+public+URL%2C+covering+cloud+account+setup%2C+cluster+provisioning%2C+and+app+creation\u0026amp;theme=fec401156b3cb50700eb4d3f\u0026amp;signature=cb2557525f05d2cbbe212bf13ea2fe78f38e2e55c59524a9ddb0e8ca45fde6e2\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/porter/NTslyGGtUJjpK6WT/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Porter\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5B63B2\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.porter.run/getting-started/quickstart\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/getting-started/quickstart.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://porter.run/#organization\",\"name\":\"Porter\",\"legalName\":\"Porter Technologies Inc\",\"url\":\"https://porter.run\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://docs.porter.run/logo/light.png\"},\"sameAs\":[\"https://github.com/porter-dev\",\"https://www.linkedin.com/company/porterrun\",\"https://www.ycombinator.com/companies/porter\"]},{\"@type\":\"WebSite\",\"@id\":\"https://docs.porter.run#website\",\"name\":\"Porter\",\"url\":\"https://docs.porter.run\",\"publisher\":{\"@id\":\"https://porter.run/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.porter.run/getting-started/quickstart#webpage\",\"url\":\"https://docs.porter.run/getting-started/quickstart\",\"name\":\"Quickstart\",\"description\":\"Deploy your first application on Porter from sign-up to a live public URL, covering cloud account setup, cluster provisioning, and app creation\",\"dateModified\":\"2026-09-10T09:12:00.555Z\",\"isPartOf\":{\"@id\":\"https://docs.porter.run#website\"},\"breadcrumb\":{\"@id\":\"https://docs.porter.run/getting-started/quickstart#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.porter.run/getting-started/quickstart#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Documentation\",\"item\":\"https://docs.porter.run/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Getting Started\",\"item\":\"https://docs.porter.run/getting-started/introduction\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Quickstart\",\"item\":\"https://docs.porter.run/getting-started/quickstart\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.porter.run/getting-started/quickstart#article\",\"headline\":\"Quickstart\",\"name\":\"Quickstart\",\"description\":\"Deploy your first application on Porter from sign-up to a live public URL, covering cloud account setup, cluster provisioning, and app creation\",\"url\":\"https://docs.porter.run/getting-started/quickstart\",\"mainEntityOfPage\":{\"@id\":\"https://docs.porter.run/getting-started/quickstart#webpage\"},\"dateModified\":\"2026-09-10T09:12:00.555Z\",\"publisher\":{\"@id\":\"https://porter.run/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.porter.run#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Porter\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Porter","nav":{"global":null,"groups":[{"group":"Documentation","pages":[{"title":"Overview","sidebarTitle":"Overview","href":"/index"},{"group":"Getting Started","pages":[{"title":"Introduction","href":"/getting-started/introduction"},{"title":"Concepts","description":"Understand Porter's core architecture including cloud accounts, clusters, applications, services, and how they fit together for deployments","href":"/getting-started/concepts"},{"title":"Quickstart","href":"/getting-started/quickstart"}]},{"group":"AI Agents \u0026 MCP","pages":[{"title":"MCP Server","sidebarTitle":"MCP Server","description":"Connect Claude Code, Cursor, Codex, and other AI agents to the Porter MCP server to deploy, debug, and manage apps in your own AWS, GCP, or Azure account.","href":"/mcp/overview"},{"title":"MCP Server Tools","sidebarTitle":"Tools","href":"/mcp/tools"}]},{"group":"Cloud Accounts","pages":[{"title":"Cloud accounts","sidebarTitle":"Overview","href":"/cloud-accounts/overview"},{"title":"Connecting a cloud account","sidebarTitle":"Connecting a Cloud Account","href":"/cloud-accounts/connecting-a-cloud-account"},{"title":"Creating a cluster","sidebarTitle":"Creating a Cluster","href":"/cloud-accounts/creating-a-cluster"},{"title":"Node groups","sidebarTitle":"Node Groups","href":"/cloud-accounts/node-groups"},{"title":"Cluster upgrades","sidebarTitle":"Cluster Upgrades","href":"/cloud-accounts/cluster-upgrades"},{"title":"Advanced Cluster Settings","href":"/cloud-accounts/advanced-cluster-settings"},{"title":"Cluster observability","sidebarTitle":"Cluster Observability","href":"/cloud-accounts/cluster-observability"},{"title":"Deleting a cluster","sidebarTitle":"Deleting a Cluster","href":"/cloud-accounts/deleting-a-cluster"}]},{"group":"Applications","pages":[{"group":"Deploy","pages":[{"title":"Deploying applications","href":"/applications/deploy/overview"},{"title":"Connect GitHub","href":"/applications/deploy/connect-github"},{"title":"Types of services","href":"/applications/deploy/types-of-services"},{"title":"Deploy from a GitHub repository","href":"/applications/deploy/deploy-from-github-repo"},{"title":"Deploy from a Docker registry","href":"/applications/deploy/deploy-from-docker-registry"},{"title":"Configuring application services","href":"/applications/deploy/configuring-application-services"},{"title":"Building your application","href":"/applications/deploy/builds"},{"title":"Deploy multiple apps from one build","href":"/applications/deploy/multiple-deploys-from-same-build"},{"title":"Pre-deploy jobs","href":"/applications/deploy/pre-deploy-jobs"},{"title":"Rollbacks","href":"/applications/deploy/rollbacks"},{"title":"Using other CI tools","href":"/applications/deploy/using-other-ci-tools"},{"title":"Cloning an application","hidden":true,"href":"/applications/deploy/duplicating-apps"}]},{"group":"Configuration as Code","pages":[{"title":"Configuration as code with porter.yaml","sidebarTitle":"Overview","href":"/applications/configuration-as-code/overview"},{"title":"porter.yaml reference","sidebarTitle":"Reference","href":"/applications/configuration-as-code/reference"},{"title":"Deploying multiple apps with porter.yaml","href":"/applications/configuration-as-code/addons-porter-yaml"},{"group":"Service Configuration","pages":[{"title":"Web services in porter.yaml","href":"/applications/configuration-as-code/services/web-service"},{"title":"Worker services in porter.yaml","href":"/applications/configuration-as-code/services/worker-service"},{"title":"Job services in porter.yaml","href":"/applications/configuration-as-code/services/job-service"},{"title":"Predeploy in porter.yaml","href":"/applications/configuration-as-code/services/predeploy"},{"title":"Autoscaling in porter.yaml","sidebarTitle":"Autoscaling","href":"/applications/configuration-as-code/services/autoscaling"},{"title":"Connections in porter.yaml","sidebarTitle":"Connections","href":"/applications/configuration-as-code/services/connections"}]}]},{"group":"Environment Groups","pages":[{"title":"Environment groups","href":"/applications/configure/environment-groups"}]},{"group":"Configure","pages":[{"title":"Basic configuration","href":"/applications/configure/basic-configuration"},{"title":"Autoscaling","href":"/applications/configure/autoscaling"},{"title":"Temporal autoscaling","href":"/applications/configure/temporal-autoscaling"},{"title":"HTTPS certificates and custom domains","href":"/applications/configure/custom-domains"},{"title":"Zero-downtime deployments","href":"/applications/configure/zero-downtime-deployments"},{"title":"Advanced networking","href":"/applications/configure/advanced-networking"},{"title":"Secure cloud access","href":"/applications/configure/secure-cloud-access"}]},{"group":"Observability","pages":[{"title":"Monitoring","href":"/applications/observability/monitoring"},{"title":"Logging","href":"/applications/observability/logging"},{"title":"Alerts","href":"/applications/observability/alerts"},{"title":"App metadata environment variables","href":"/applications/observability/app-metadata"},{"title":"Custom metrics autoscaling","href":"/applications/observability/custom-metrics-and-autoscaling"},{"title":"DevOps Agent","sidebarTitle":"DevOps Agent","href":"/applications/observability/devops-agent"}]},{"group":"Debug","pages":[{"title":"Common errors","href":"/applications/debug/common-errors"}]}]},{"group":"Sandboxes","pages":[{"title":"Sandboxes Overview","href":"/sandboxes/overview"},{"title":"Sandboxes Getting Started","href":"/sandboxes/getting-started"},{"title":"Volumes","href":"/sandboxes/volumes"},{"title":"Sandbox Networking","href":"/sandboxes/networking"},{"title":"Sandbox Capacity","href":"/sandboxes/capacity"},{"group":"Sandbox SDK","pages":[{"group":"Python","pages":[{"title":"Python Sandbox SDK quickstart","href":"/sandboxes/sdk/python/quickstart"},{"title":"Python Sandbox SDK volumes","href":"/sandboxes/sdk/python/volumes"},{"title":"Python Sandbox SDK reference","href":"/sandboxes/sdk/python/reference"},{"title":"Python Sandbox SDK errors","href":"/sandboxes/sdk/python/errors"}]},{"group":"TypeScript","pages":[{"title":"TypeScript Sandbox SDK quickstart","href":"/sandboxes/sdk/typescript/quickstart"},{"title":"TypeScript Sandbox SDK volumes","href":"/sandboxes/sdk/typescript/volumes"},{"title":"TypeScript Sandbox SDK reference","href":"/sandboxes/sdk/typescript/reference"},{"title":"TypeScript Sandbox SDK errors","href":"/sandboxes/sdk/typescript/errors"}]}]},{"title":"Sandboxes CLI","href":"/sandboxes/cli"}]},{"group":"Add-ons","pages":[{"title":"Add-ons","sidebarTitle":"Overview","href":"/addons/overview"},{"group":"QM","root":{"title":"QM","sidebarTitle":"QM","href":"/addons/qm"},"pages":[{"title":"QM Use Cases","sidebarTitle":"Use cases","href":"/addons/qm/use-cases"}]},{"title":"Datastores","sidebarTitle":"Datastores","href":"/addons/datastores"},{"title":"Custom Helm Charts","sidebarTitle":"Custom Helm Charts","href":"/addons/custom-helm-charts"},{"title":"Third-party observability","sidebarTitle":"Third-party Observability","href":"/addons/third-party-observability"},{"title":"Persistent storage","sidebarTitle":"Storage","href":"/addons/storage"}]},{"group":"Integrations","pages":[{"title":"Doppler","href":"/integrations/doppler"},{"title":"Infisical","href":"/integrations/infisical"}]},{"group":"Command Line Interface (CLI)","pages":[{"title":"CLI installation","href":"/cli/installation"},{"title":"CLI basic usage","href":"/cli/basic-usage"},{"group":"Command Reference","pages":[{"title":"porter apply","sidebarTitle":"porter apply","href":"/standard/cli/command-reference/porter-apply"},{"title":"porter auth","href":"/standard/cli/command-reference/porter-auth"},{"title":"porter clusters","href":"/standard/cli/command-reference/porter-clusters"},{"title":"porter cloud-accounts","href":"/standard/cli/command-reference/porter-cloud-accounts"},{"title":"porter config","href":"/standard/cli/command-reference/porter-config"},{"title":"porter project","href":"/standard/cli/command-reference/porter-project"},{"title":"porter app","href":"/standard/cli/command-reference/porter-app"},{"title":"porter job","href":"/standard/cli/command-reference/porter-job"},{"title":"porter datastore connect","href":"/standard/cli/command-reference/porter-datastore-connect"},{"title":"porter env","href":"/standard/cli/command-reference/porter-env"},{"title":"porter registry","href":"/standard/cli/command-reference/porter-registry"},{"title":"porter target","href":"/standard/cli/command-reference/porter-target"}]}]},{"group":"Preview Environments","pages":[{"title":"Preview environments","href":"/preview-environments/overview"},{"title":"Preview environment overrides","href":"/preview-environments/defining-overrides"},{"title":"Custom preview environment workflows","href":"/preview-environments/custom-workflows"}]},{"group":"Security and Compliance","pages":[{"title":"Role-based access control","href":"/security-and-compliance/role-based-access-control"},{"title":"Audit logs","href":"/security-and-compliance/audit-logs"},{"title":"AWS permissions required for Porter","sidebarTitle":"AWS Roles \u0026 Permissions","href":"/security-and-compliance/aws-permissions"},{"title":"Static egress IPs","href":"/security-and-compliance/static-egress-ip"},{"title":"Configuring AWS ALB on Porter","sidebarTitle":"Configuring AWS ALB","href":"/security-and-compliance/configuring-alb"},{"title":"Using Cloudflare DNS with Porter","sidebarTitle":"Cloudflare DNS","href":"/security-and-compliance/cloudflare-dns"},{"title":"SOC 2 and HIPAA compliance","href":"/security-and-compliance/soc2-hipaa"},{"title":"Porter IP ranges","sidebarTitle":"Porter's IP Ranges","href":"/security-and-compliance/porter-ip-ranges"},{"title":"Tailscale VPN","sidebarTitle":"Tailscale VPN","href":"/security-and-compliance/tailscale"}]},{"group":"Other Guides","pages":[{"title":"Running GPU workloads","href":"/other/gpu-workloads"},{"title":"Deleting dangling resources","href":"/other/deleting-dangling-resources"},{"title":"AWS VPC peering","sidebarTitle":"AWS VPC Peering","href":"/other/aws-vpc-peering"},{"title":"Kubernetes 101","href":"/other/kubernetes-101"},{"title":"Migrate from Heroku","href":"/other/migrate-from-heroku"}]},{"group":"Terms \u0026 Privacy","pages":[{"title":"Terms of service","href":"/terms-and-privacy/terms-of-service"},{"title":"Privacy policy","href":"/terms-and-privacy/privacy-policy"}]}]}]},"basePath":"","title":"Quickstart - Porter","buildId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","deploymentId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-CE4cYsJE.js","lightbox-handle-r17bVUz3.js"]}