Skip to main content

Deploy using Pulumi

Installing Dependencies

Make sure to install the Pulumi CLI and the Defang CLI.

Make sure you are logged into the Defang CLI. Don't worry about the Pulumi CLI for now.

Project Directory Setup

Create a new directory for your project and navigate to it.

mkdir project && cd project

If you're familiar with Pulumi and/or are already logged in with the Pulumi CLI, you can skip the next step.

If you are new to pulumi and/or don't have an account, you can "login" to the filesystem by running the following command:

pulumi login file://./

This will make the Pulumi CLI store the state of your infrastructure in the current directory.

Initialize the Project

Run the following command to set your encryption passphrase for this terminal session:

export PULUMI_CONFIG_PASSPHRASE="super-secure-passphrase"

Now let's initialize the Pulumi project:

pulumi new typescript -y --force

This will create a new Pulumi project in the current directory and will create a Pulumi stack called dev by default. We use the --force flag because the directory isn't empty (we created a folder when we logged in with the Pulumi CLI).

Run the following command to add to the .gitignore file:

echo ".pulumi" >> .gitignore

Install the Defang Provider

Run the following command to install the Defang provider:

npm install @defang-io/pulumi-defang

Write the Pulumi Code

Your index.ts file should look like this:

import * as defang from '@defang-io/pulumi-defang/lib';

export const service = new defang.DefangService('minio', {
name: 'minio',
image: '',
// starts the server with the console address set to :9001
command: ['server', '--console-address', ':9001', '/data'],
// Set the root username
environment: {
secrets: [
// Set the root password as a secret which will be encrypted at rest
value: 'minio123',
// Run a healthcheck every 30 seconds
healthcheck: {
test: ['CMD', 'curl', 'http://localhost:9000/minio/health/live'],
interval: 30,
timeout: 5,
retries: 3,
// Expose the server on port 9000 and the console on port 9001
ports: [
target: 9000,
protocol: 'http',
mode: 'ingress',
target: 9001,
protocol: 'http',
mode: 'ingress',

Deploy to Defang


At the time of writing, the Defang Pulumi Provider only works with Defang Playground. We are working on BYOC support.

Run the following command to deploy your service:

pulumi up --stack=dev

Monitor the Deployment

You can monitor the deployment by running the following command:

defang tail --name minio

Logging Into Minio

The Defang Playground will give you a domain, which you can obtain by running the following command:

defang ls | grep 'minio.*9001'

If you navigate to the domain in your browser, you will be prompted to log in. Use the username minio and the password minio123.

Clean Up

To clean up the deployment, run the following command:

pulumi destroy --stack=dev