import { Callout } from '@theguild/components'

# External Composition

<Callout type="warning">Only available for Federation projects.</Callout>

The process of running the self-host version with External Composition is similar to the process of
running it with Hive Cloud version - you'll need to run the
[external composition service](/docs/schema-registry/external-schema-composition). The difference is
that you'll be able to run it locally, instead of running it on a publicly available service.

We provide a
[Docker image](https://github.com/graphql-hive/platform/pkgs/container/composition-federation-2) for
running external composition service for Apollo Federation v2.

The pre-built image implements the best-practice to secure your endpoint, and uses the latest
version of Apollo Federation v2.

For self-hosting we recommend adding the external composition federation container configuration to
your `docker-compose.community.yml`:

```yaml filename="docker-compose.community.yml"
services:
  # ... other services
  external-composition:
    image: '${DOCKER_REGISTRY}composition-federation-2${DOCKER_TAG}'
    networks:
      - 'stack'
    healthcheck:
      test: ['CMD', 'wget', '--spider', '-q', 'localhost:3069/_readiness']
      interval: 5s
      timeout: 5s
      retries: 6
      start_period: 5s
    ports:
      - 3069:3069
    environment:
      PORT: 3069
      SECRET: '${EXTERNAL_COMPOSITION_SECRET}'
```

Make sure to set the `EXTERNAL_COMPOSITION_SECRET` environment variable to a secure value.

```bash filename="Secure external composition secret example"
export EXTERNAL_COMPOSITION_SECRET=$(openssl rand -hex 16)
```

After that and restarting your stack, you can use the external composition service by adding it to
an existing project in the Settings.

Since the Hive server is using the internal docker network, you need to use the service name as the
hostname `http://composition-federation-2:3069/compose`. Also, make sure to use the correct secret.

![External Composition Federation 2](/docs/pages/self-hosting/federation-2/external-composition-config.png)

[You can read more about the process of configuring the external composition service in the your Hive instance here](/docs/schema-registry/external-schema-composition#connect-to-hive)
