Follow the steps below to deploy ToolJet on a ECS cluster.
1. Setup a PostgreSQL database
ToolJet uses a postgres database as the persistent storage for storing data related to users and apps.
2. Create a target group and an application load balancer to route traffic onto ToolJet containers.
You can [reference](https://docs.aws.amazon.com/AmazonECS/latest/userguide/create-application-load-balancer.html) AWS docs to set it up. Please note that ToolJet server exposes `/api/health`, which you can configure for health checks.
:::note
This setup follows the old AWS UI for ECS as some options are missing on the latest experience.
:::
3. Create task definition for deploying ToolJet app as a service on your preconfigured cluster.
1. Select Fargate as launch type compatibility.
<imgclassName="screenshot-full"src="/img/setup/ecs/launch-type-compatibility.png"alt="select launch type compatibility"/>
2. Configure IAM roles and set operating system family as Linux
- Specify environmental values for the container. You'd want to make use of secrets to store sensitive information or credentials, kindly refer the AWS [docs](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data-secrets.html) to set it up.
- Click on next step to configure networking options
- Select your designated VPC, Subnets and Security groups. Kindly ensure that the security group allows for inbound traffic to http port 3000 for the task.
<imgclassName="screenshot-full"src="/img/setup/ecs/service-security-group-config.png"alt="service security group config"/>
- Since migrations are run as a part of container boot, please specify health check grace period for 900 seconds.
- Select the application loadbalancer option and set the target group name to the one we had created earlier. This will auto populate the health check endpoints.
:::info
The setup above is just a template. Feel free to update the task definition and configure parameters for resources and environment variables according to your needs.
:::
5. Verify if ToolJet is running by checking by checking the status of the tasks in the created service.
### Creating default admin workspace and account
You can create a new revision of your existing task definition to have a one time task to seed with default admin.
1. Create a new revision from your existing task definition.
You can change task definition name to `tooljet-seed-task`
2. Click on your existing container name to edit container.
3. Change container command from `npm,run,start:prod` to `npm,run,db:seed:prod`
4. Go back to your cluster dashboard and click on Run new task.
<imgclassName="screenshot-full"src="/img/setup/ecs/run-new-task.png"alt="run new task"/>
5. Configure your run task with the `tooljet-seed-task` for your cluster. It should look like: