> For the complete documentation index, see [llms.txt](https://docs.stackmate.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.stackmate.io/configuration/application-services.md).

# Application Services

Stackmate supports Docker container images deployment on managed container services, like [AWS ECS](https://aws.amazon.com/ecs/)

### What you get when introducing this service to your configuration

* A managed container service running the container `image` specified with the `cpu` and `memory` restrictions you've applied. The service will run on the `port` specified in the configuration
* A DNS record to the value set as your `domain` in the configuration
* A load balancer routing HTTP and HTTPS traffic to the container
* An SSL certificate for the domain name(s) specified

### Required attributes

* `type` - **string** - It should be set to `application`
* `image` - **string** - The docker image to run, for example `stackmate/sample-nodejs-app:latest`. It should be anything that Docker can pull from (for example a public DockerHub repository)
* `port` - **number / Optional for non-web services** - The port that your web application runs on. If your application doesn't expose a port (for example it's a backend worker or something similar), feel free to leave this empty

### Optional attributes

* `cpu` - **number** - The vCPU units that your container runs on. Acceptable values are: `0.25`, `0.5`, `1`, `2`, `4`, `8` and `16`.
* `memory` - **number** - The GB of memory available that the container runs on. You can use `0.5` and any integer value between `1` and `120` but please keep in mind that cloud providers might introduce some restrictions:
  * Available AWS [CPU and Memory combinations](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-tasks-services.html#fargate-tasks-size)
* `domain` - **string** - The domain name to use for your service. It can be both top-level domains (eg. stackmate.io) or subdomains (eg. app.stackmate.io)
* `www` - **boolean** - Whether to add another DNS record that starts with`www` (eg. [www.stackmate.io](http://www.stackmate.io)). Please note: This only applies when using a top-level domain name as `domain` (like eg. stackmate.io)

### Example configuration for an application container on AWS ECS

{% code title=".stackmate/config.yml" %}

```yaml
---
state:
  bucket: ...
  lockTable: ...

environments:
  production:
    nodejs-app:
      type: application
      image: stackmate/sample-nodejs-app:latest
      cpu: 0.5
      memory: 1
      port: 3000
      domain: stackmate.io
      # provider: aws # implied, since aws is the default provider
```

{% endcode %}

The example above will run a container of `0.5` vCPU, `1` GB of memory, that will expose port `3000` on AWS ECS Fargate. It will also create an application load balancer that will forward traffic to the container, using an auto-generated SSL certificate via ACM for `stackmate.io`. Finally, there will be a DNS record on Route53 with `stackmate.io` as the domain name, targeting the load balancer.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.stackmate.io/configuration/application-services.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
