# Deployment requirements

{% hint style="danger" %}
**This documentation is for the CARTO Self-Hosted Legacy Version**. Use only if you've installed this specific version. Explore our latest documentation for updated features.
{% endhint %}

In order to run CARTO on your own infrastructure setup, the following requirements must be met at a minimum:

### Recommended Background

Before proceeding with the installation, it is recommended that the individual performing the setup is familiar with cloud environments, specifically [GCP](https://cloud.google.com/) (Google Cloud Platform), [AWS](https://aws.amazon.com/) (Amazon Web Services), or [Azure](https://azure.microsoft.com/) (Microsoft Azure). This prior experience ensures a smoother deployment process and a better understanding of the underlying infrastructure.

1. **Cloud Platform Proficiency:** Basic proficiency in the chosen cloud platform is recommended. This includes the ability to navigate the respective console, manage instances or clusters, and configure networking settings.
2. **Account Authorization:** Ensure that you have the necessary permissions and access rights within your cloud platform account. This typically involves appropriate role assignments.
3. **Resource Understanding:** A grasp of fundamental concepts such as virtual machines, Kubernetes, storage, and networking within your chosen cloud environment will enhance your ability to deploy and manage resources effectively.

Having a solid understanding of cloud services will empower you to navigate the deployment process with confidence.

### Hardware and Software requirements

The hardware and software requirements below must be met to ensure an optimal performance of the CARTO platform:

#### Single VM deployment (Docker Compose)

* Ubuntu 20.04 or above
* Docker version 20.10 or above
* Docker Compose standalone version 1.29 or above.
* 60 GB disk
* 4 CPUs (x86)
* 16 GB memory

#### Orchestrated deployment (Kubernetes)

* Kubernetes 1.12 or above
* [Helm ](https://helm.sh/docs/intro/install/)3.6.0 or above
* At least 3 nodes with 2x vCPUs and 16 GB of memory

### External database

CARTO requires a dedicated PostgreSQL database to manage its metadata. The metadata information stored in this database is the following:

* Configuration of Maps: data sources, layers, tooltips, legends, etc.
* Configuration of Workflows.
* Configuration of Applications.
* Connection credentials to other data warehouses like BigQuery, Snowflake, PostgreSQL, Redshift, Databricks, or Oracle.
* Other CARTO internal metadata

{% hint style="info" %}
The CARTO metadata PostgreSQL database is only used to store CARTO metadata. This database is not the database to be used with CARTO to store your geospatial data.
{% endhint %}

This metadata database must be maintained (in terms of updates, backups, high availability, ...) by you. Our recommendation is to use the managed service provided by your cloud provider:

* Google: [Cloud SQL for PostgreSQL](https://cloud.google.com/sql/postgresql).
* AWS: [Amazon RDS for PostgreSQL.](https://aws.amazon.com/rds/postgresql/)
* Azure: [Azure Database for PostgreSQL](https://azure.microsoft.com/en-us/products/postgresql).

**The current PostgreSQL recommended version is 14 or above.**

An admin user with permission to create users and databases is required during the installation process.

{% hint style="warning" %}
CARTO Self-hosted includes containers with PostgreSQL, but they are only for debugging purposes and will be removed in future versions
{% endhint %}

### Network ingress requirements

CARTO might need to be accessible to other people in your company (or the internet if you desire it) who needs using it. In order to do that, you need to configure:

* A full domain/subdomain that will be pointing to the machine.
* (Optional) A TLS certificate for the domain/subdomain. If no TLS certificate is provided, a self-signed certificate will be generated. The TLS certificate private key can't be protected with a passphrase.
* Access to HTTPS port (443). HTTP port (80) is optional and is going to redirect to HTTPS.

{% hint style="warning" %}
A full domain is required. You cannot install CARTO in a domain path like <https://my.domain.com/carto>
{% endhint %}

{% hint style="info" %}
If you would like to use some advanced features of Analytics Toolbox like LDS or some Wokflows features like import/export, your domain should be publicly accessible from the internet
{% endhint %}

### Network egress requirements

The CARTO Self-Hosted deployment requires access to some external services. Some of them are required for the software to work, and others depend on the cloud and data warehouse you will run and connect CARTO to. Finally, there is a set of optional services that you will need to open in case you will use those services with CARTO. For these services, HTTP/HTTPS domains must be “accepted”.

**Required services:**

* `auth.carto.com` Auth system at CARTO based on [Auth0](https://auth0.com), a leading provider for authentication and authorization.
* `pubsub.googleapis.com` & `www.googleapis.com` Used as a message broker between CARTO servers and the Self-Hosted to transfer information about the license and telemetry.
* `api.openai.com` Required to use [AI Agents](https://docs.carto.com/carto-user-manual/ai-agents) in your maps.

**Additional services required for Self-Hosted deployment:**

* `storage.googleapis.com` Access to download the client package and the containers required to run CARTO Self-Hosted.
* `gcr.io` & `cloudresourcemanager.googleapis.com` This is a necessary step solely for downloading the essential containers needed to operate CARTO Self-Hosted.

**Cloud/Data warehouse specific requirements:**

Depending on the cloud you are deploying and the data warehouse you are using, you will also need to open certain services to connect your data.

* **Google Cloud**
  * `bigquery.googleapis.com` & `oauth2.googleapis.com` & `bigquerydatatransfer.googleapis.com` If you are going to use BigQuery.
    * These are also needed [if you are going to use the CARTO Data Warehouse](https://docs.carto.com/carto-self-hosted/guides/guides/enable-the-carto-data-warehouse).
    * `sts.googleapis.com` is needed if you are going to use Workload Identity Federation connections for BigQuery
  * `storage.googleapis.com` Access to CARTO platform [buckets](https://docs.carto.com/carto-self-hosted/guides/guides/configure-your-own-buckets).
* **AWS**
  * `.amazonaws.com` Required if you are going to use AWS S3 [buckets](https://docs.carto.com/carto-self-hosted/guides/guides/configure-your-own-buckets).
* **Azure**
  * `.blob.core.windows.net` Required if you are going to use [Azure Blob storage](https://docs.carto.com/carto-self-hosted/guides/guides/configure-your-own-buckets).
* **Snowflake**
  * `*.snowflakecomputing.com` If you are going to use Snowflake.
* **Databricks**
  * `*.databricks.com` If you are going to use Databricks.

**LDS specific requirements:**

These are the requirements for [Location Data Services](https://docs.carto.com/carto-for-developers/key-concepts/apis#location-data-services-lds):

* `api.tomtom.com` Used for geocoding and routing.
* `isoline.router.hereapi.com` Used for isolines.

**Optional requirements:**

* `events.launchdarkly.com`, `stream.launchdarkly.com`, `clientstream.launchdarkly.com` These are used to activate/deactivate features on the software.

{% hint style="info" %}
If you need further and more detailed information, please [contact us.](mailto:support@carto.com)
{% endhint %}

### External services required

Deploying CARTO Self-Hosted platform on cloud vendors like GCP, AWS, and Azure involves several external services and configurations. Below is a general guide to document the external services needed for deploying CARTO on these cloud platforms.

{% tabs %}
{% tab title="Google Cloud Platform (GCP)" %}

* **Compute Engine:** virtual machines for hosting CARTO. Just required if you'd like to deploy the single vm deployment in GCP.
* **GKE**: managed kubernetes service for hosting CARTO orchestrated container deployment. Just required if you'd like to deploy the orchestrated container deployment in GCP.
* **Cloud Storage:** mandatory for storing data and configurations in GCP.
* **Cloud SQL:** managed database service for PostgreSQL mandatory for storing the metadata database.
* **Cloud DNS:** for managing domain names and DNS records.
  {% endtab %}

{% tab title="Amazon Web Services (AWS)" %}

* **EC2 Instances:** virtual machines for hosting CARTO. Just required if you'd like to deploy the single vm deployment in AWS.
* **EKS**: managed kubernetes service for hosting CARTO orchestrated container deployment. Just required if you'd like to deploy the orchestrated container deployment in AWS.
* **S3:** object storage for data. Mandatory if you'd like to store your data in AWS.
* **RDS:** managed database service for PostgreSQL. Mandatory in AWS for storing our metadata database.
* **Route 53:** mandatory for domain management and DNS if you're configuring it in AWS.
  {% endtab %}

{% tab title="Microsoft Azure" %}

* **Virtual Machines:** for hosting CARTO single vm deployment.
* **AKS:** for hosting CARTO orchestrated container deployment.
* **Azure Blob Storage:** for storing data and configurations.
* **Azure Database for PostgreSQL:** managed database service.
* **Azure DNS:** for domain management and DNS.
  {% endtab %}
  {% endtabs %}

### License requirements

A CARTO installation package that contains your environment configuration and a license key is required during the installation process. If you don't have these, you should request them at <support@carto.com>.
