ื“ืœื’ ืœืชื•ื›ืŸ ื”ืจืืฉื™

Pulumi

Infrastructure as Code using Pulumi with TypeScript for deploying Ever Gauzy.

Why Pulumiโ€‹

  • TypeScript โ€” same language as the platform codebase
  • Type safety โ€” compile-time infrastructure validation
  • Real programming โ€” loops, conditions, functions
  • Multi-cloud โ€” AWS, GCP, Azure, DigitalOcean

Directory Structureโ€‹

.deploy/pulumi/
โ”œโ”€โ”€ Pulumi.yaml # Project configuration
โ”œโ”€โ”€ Pulumi.prod.yaml # Production stack config
โ”œโ”€โ”€ index.ts # Main infrastructure code
โ”œโ”€โ”€ package.json # Dependencies
โ””โ”€โ”€ tsconfig.json # TypeScript config

Quick Startโ€‹

cd .deploy/pulumi

# Install dependencies
yarn install

# Login to Pulumi
pulumi login

# Create stack
pulumi stack init production

# Preview changes
pulumi preview

# Deploy
pulumi up

# Destroy
pulumi destroy

Exampleโ€‹

import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";

// Database
const db = new aws.rds.Instance("gauzy-db", {
engine: "postgres",
engineVersion: "16",
instanceClass: "db.t3.medium",
allocatedStorage: 50,
dbName: "gauzy",
username: "gauzy_admin",
password: pulumi.secret("secure-password"),
storageEncrypted: true,
});

// S3 for file storage
const bucket = new aws.s3.Bucket("gauzy-uploads", {
acl: "private",
versioning: { enabled: true },
});

// ECS Cluster
const cluster = new aws.ecs.Cluster("gauzy-cluster");

// Export outputs
export const dbEndpoint = db.endpoint;
export const bucketName = bucket.id;