---
title: "Deploy Express on your own server - Deplo"
description: "Push an Express server and Deplo builds it and starts it, on a server you own, with HTTPS in front."
url: "https://deplo.build/frameworks/express"
image: "https://deplo.build/api/media/file/og_cover.png"
updated: "2026-10-09"
---

# Deploy Express on your own server

Push an Express server and Deplo builds it and starts it, on a server you own, with HTTPS in front.

## From repo to live in three steps

1. Connect the repository that holds your Express app.
2. Deplo detects Express and sets the install, build and start commands and the port.
3. Push to the branch: every push builds and rolls out a new version.

## What Deplo sets up

- Detected from the express dependency in package.json.
- Install and start commands chosen for you, with port 3000 already set.
- A managed database in the same environment, reachable over the internal network.
- HTTPS through Traefik as soon as the domain points at the server.

Detection runs on every deploy and is never stored, so a change to the project is picked up by the next push.

[Learn more](https://deplo.build/docs/concepts/what-happens-on-a-deploy#the-framework-is-detected)

## Express on Deplo

Short answers to what comes up before moving a Express app onto your own server.

### Which port should the app listen on?

Read the PORT variable: Deplo sets it to the app's port, and you can change that port in the settings.

### Where do environment variables go?

In the app's settings, per environment. They are available during the build too, and secret values are write only: nothing reads them back.

### Is there downtime when I push?

No. The new container has to pass its health check before the old one is retired.

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://deplo.build/#organization",
      "name": "Deplo",
      "url": "https://deplo.build",
      "description": "Deploy apps from Git, Docker images or Compose on your own servers with Deplo. Open source, automatic HTTPS, backups and no per-seat fees.",
      "logo": {
        "@type": "ImageObject",
        "url": "https://deplo.build/api/media/file/og_logo.png",
        "width": 824,
        "height": 824
      },
      "sameAs": [
        "https://ds.deplo.build",
        "https://x.com/deplocloud",
        "https://www.instagram.com/deplocloud",
        "https://github.com/DeploCloud/deplo"
      ]
    },
    {
      "@type": "WebSite",
      "@id": "https://deplo.build/#website",
      "name": "Deplo",
      "url": "https://deplo.build",
      "description": "Deploy apps from Git, Docker images or Compose on your own servers with Deplo. Open source, automatic HTTPS, backups and no per-seat fees.",
      "publisher": {
        "@id": "https://deplo.build/#organization"
      }
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Frameworks",
      "item": "https://deplo.build/frameworks"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Deploy Express on your own server",
      "item": "https://deplo.build/frameworks/express"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Which port should the app listen on?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Read the PORT variable: Deplo sets it to the app's port, and you can change that port in the settings."
      }
    },
    {
      "@type": "Question",
      "name": "Where do environment variables go?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "In the app's settings, per environment. They are available during the build too, and secret values are write only: nothing reads them back."
      }
    },
    {
      "@type": "Question",
      "name": "Is there downtime when I push?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. The new container has to pass its health check before the old one is retired."
      }
    }
  ]
}
```
