Docker compose (development)
Docker Compose is the recommended approach for local development and testing.
1. Clone the repository
2. Configure the environment
Create a local environment file:config/.env with values appropriate for your environment.
Refer to Environment variables for details.
3. Start services
Start the required infrastructure services:4. Verify the installation
Confirm that Matcher is running:Docker compose services
The defaultdocker-compose.yml includes:
| Service | Port | Purpose |
|---|---|---|
matcher | 8080 | Matcher API |
postgres | 5432 | PostgreSQL database |
redis | 6379 | Redis cache |
rabbitmq | 5672, 15672 | RabbitMQ (AMQP and management UI) |
Development with hot reload
For active development, use:Kubernetes / helm (production)
Production deployments should use the official Helm chart.
Prerequisites
- Kubernetes 1.28+
- Helm 3.12+
kubectlconfigured for the target cluster
1. Add the helm repository
2. Create a namespace
3. Configure values
Create avalues.yaml file with your deployment configuration:
4. Create secrets
Create Kubernetes secrets for sensitive credentials:5. Install the chart
6. Verify the deployment
Upgrading
To upgrade an existing deployment:Environment variables
Matcher is configured entirely through environment variables.
Application
| Variable | Default | Description |
|---|---|---|
ENV_NAME | development | Runtime environment name |
LOG_LEVEL | info | Log verbosity |
SERVER_ADDRESS | :8080 | HTTP server address |
HTTP_BODY_LIMIT_BYTES | 104857600 | Maximum request size |
Database (postgresql)
| Variable | Default | Description |
|---|---|---|
POSTGRES_HOST | localhost | Database host |
POSTGRES_PORT | 5432 | Database port |
POSTGRES_USER | matcher | Username |
POSTGRES_PASSWORD | - | Password |
POSTGRES_DB | matcher | Database name |
POSTGRES_SSLMODE | disable | SSL mode |
POSTGRES_MAX_OPEN_CONNS | 25 | Max open connections |
POSTGRES_MAX_IDLE_CONNS | 10 | Max idle connections |
Cache (redis)
| Variable | Default | Description |
|---|---|---|
REDIS_HOST | localhost:6379 | Redis address |
REDIS_PASSWORD | - | Password |
REDIS_DB | 0 | Database index |
REDIS_POOL_SIZE | 10 | Pool size |
Messaging (rabbitmq)
| Variable | Default | Description |
|---|---|---|
RABBITMQ_HOST | localhost | Broker host |
RABBITMQ_PORT | 5672 | Broker port |
RABBITMQ_USER | guest | Username |
RABBITMQ_PASSWORD | guest | Password |
RABBITMQ_VHOST | / | Virtual host |
Authentication
| Variable | Default | Description |
|---|---|---|
AUTH_ENABLED | true | Enable authentication |
AUTH_SERVICE_ADDRESS | - | Auth service URL |
DEFAULT_TENANT_ID | - | Default tenant ID |
DEFAULT_TENANT_SLUG | - | Default tenant slug |
Observability
| Variable | Default | Description |
|---|---|---|
OTEL_ENABLED | false | Enable OpenTelemetry |
OTEL_SERVICE_NAME | matcher | Trace service name |
OTEL_EXPORTER_ENDPOINT | - | OTLP exporter endpoint |
TLS
| Variable | Default | Description |
|---|---|---|
SERVER_TLS_CERT_FILE | - | TLS certificate path |
SERVER_TLS_KEY_FILE | - | TLS private key path |
Verify the installation
Validate that Matcher is operating correctly.
Health check
Readiness check
API verification
Troubleshooting
Common issues
Connection refused to PostgreSQL
Connection refused to PostgreSQL
- Cause: PostgreSQL is not running or unreachable.
- Resolution:
- Verify PostgreSQL is running:
docker-compose ps postgres - Check connection values in
.env - Test connectivity:
nc -zv localhost 5432 - Review logs:
docker-compose logs postgres
Redis connection timeout
Redis connection timeout
- Cause: Redis is not running or credentials are incorrect.
- Resolution:
- Verify Redis is running:
docker-compose ps redis - Confirm
REDIS_PASSWORD - Test connectivity:
redis-cli -h localhost ping
RabbitMQ queues not created
RabbitMQ queues not created
- Cause: RabbitMQ is still initializing or the virtual host is missing.
- Resolution:
- Wait until RabbitMQ is healthy
- Access the management UI at http://localhost:15672
- Verify
RABBITMQ_VHOST
Authentication errors
Authentication errors
- Cause: Auth service is unreachable or the token is invalid.
- Resolution:
- Verify
AUTH_SERVICE_ADDRESS - Disable auth for development:
AUTH_ENABLED=false - Review auth service logs
Migration failed
Migration failed
- Cause: Database migrations could not be applied.
- Resolution:
- Check migration status:
make migrate-status - Review migration logs
- Apply migrations manually:
make migrate-up - Inspect the
schema_migrationstable if needed

