Deploy-It is a cloud deployment platform that automates the deployment process of web applications using AWS ECS, Fargate, S3, Kafka, ClickHouse, Postgres, Docker, Node.js, and Express.
Deploy-It integrates infrastructure services and container-based workflows to streamline web app deployment, there are three main services in this project:
- Build Server for Deployment:
/build-server
- Log Processing and Storage:
/api-server
- Request Handler Proxy:
/req-handler-proxy
A containerized build executor launched on-demand via AWS ECS Fargate. This service is containerized and pushed to AWS Container Registry.
- Clone GitHub repository
- Install project dependencies
- Run production build
- Upload artifacts to S3
- Stream structured logs to Kafka (topic:
build-log
)
An Express.js-based control plane that manages users, projects, deployments, logs, and analytics.
- Project CRUD
- Trigger build deployments
- Consume and store logs from Kafka to ClickHouse
- Aggregate request analytics
- Manage user auth and session
- AWS ECS Fargate: Runs
build-server
container viaRunTaskCommand
- Kafka: Receives structured logs from build containers
- ClickHouse: Stores structured logs for fast queries
- Prisma: ORM for PostgreSQL (users, projects, deployments)
- Creates new project with a unique slug
- Input Fields:
name
,gitRepoURL
- Accepts
projectId
- Creates new deployment (
status = QUEUED
) - Triggers ECS Fargate build with:
GIT_REPO_URL
,PROJECT_ID
,DEPLOYMENT_ID
- Subnet and security group
- Launches
build-server
container
- Queries logs in ClickHouse by
deployment_id
- Aggregates analytics grouped by:
- Path, Method, User Agent, IP
- Registers and logs in users
- Uses bcrypt for password hashing
- Returns JWT on login
- Lists all user-associated projects
- Lists all deployments for a project
- Subscribes to topic
build-log
- JSON-parses each log
- Inserts into
log_events
table in ClickHouse
Reverse proxy for routing frontend requests to deployed project containers.
- Subdomain or custom domain-based routing
- Reverse proxy to project containers
- Logs each request for analytics
-
Domain Parsing
Extracts subdomain fromreq.hostname
Matches withsubdomain
orcustomDomain
in project table -
Request Logging
Asynchronously inserts:path
,method
,userAgent
,ip
,projectId
Intoanalytics
table.
-
Proxy Handling
Proxies request to the corresponding build files in S3.
Layer | Technology |
---|---|
Frontend | Next.js, TailwindCSS |
Backend | Node.js, Express.js, Docker |
Infra | AWS ECS, Fargate, S3, ECR |
Messaging | Kafka |
Logs | ClickHouse |
Database | PostgreSQL (via Prisma ORM) |