Connection Setup

Configure Elasticsearch and OpenSearch connections in Sigmie — basic auth, API keys, bearer tokens, SSL certificates, and multi-node clusters.

On this page

The Installation guide covers basic local connections. This page covers everything else: production auth, SSL, multi-node clusters, and cloud providers.

Sigmie uses the same connection API for Elasticsearch and OpenSearch. Only the engine type and credentials change.

Authentication

Basic auth

use Sigmie\Sigmie;
 
$sigmie = Sigmie::create(
hosts: ['https://elasticsearch.example.com:9200'],
config: [
'auth' => ['elastic', 'your-password'],
]
);

For lower-level control, build the client manually:

use Sigmie\Http\JSONClient;
use Sigmie\Base\Http\ElasticsearchConnection;
use Sigmie\Base\Drivers\Elasticsearch;
 
$client = JSONClient::createWithBasic(
hosts: ['https://elasticsearch.example.com:9200'],
username: 'elastic',
password: 'your-password'
);
 
$connection = new ElasticsearchConnection($client, new Elasticsearch);
$sigmie = new Sigmie($connection);

API key

Generate the key in Elasticsearch:

curl -X POST "localhost:9200/_security/api_key" \
-H 'Content-Type: application/json' \
-u elastic:your-password \
-d '{"name": "my-api-key", "expiration": "90d"}'

Base64-encode id:api_key and pass it as the Authorization header:

$sigmie = Sigmie::create(
hosts: ['https://elasticsearch.example.com:9200'],
config: [
'headers' => [
'Authorization' => 'ApiKey ' . base64_encode('id:api_key'),
],
]
);

Bearer token

$sigmie = Sigmie::create(
hosts: ['https://elasticsearch.example.com:9200'],
config: [
'headers' => [
'Authorization' => 'Bearer your-token-here',
],
]
);

SSL/TLS

Self-signed certificates (development)

$sigmie = Sigmie::create(
hosts: ['https://localhost:9200'],
config: ['verify' => false],
);

Warning: Never disable SSL verification in production.

Custom CA certificates

$sigmie = Sigmie::create(
hosts: ['https://elasticsearch.example.com:9200'],
config: ['verify' => '/path/to/ca-certificate.pem'],
);

Multiple nodes

$sigmie = Sigmie::create(
hosts: [
'10.0.0.1:9200',
'10.0.0.2:9200',
'10.0.0.3:9200',
],
config: ['auth' => ['elastic', 'your-password']],
);

Requests are distributed round-robin. If a node fails, Sigmie retries the next one.

OpenSearch

Specify the engine type:

use Sigmie\Enums\SearchEngineType;
 
$sigmie = Sigmie::create(
hosts: ['https://localhost:9200'],
engine: SearchEngineType::OpenSearch,
config: [
'auth' => ['admin', 'MyStrongPass123!@#'],
'verify' => false,
]
);

See OpenSearch for the full integration.

Cloud providers

Elastic Cloud

$sigmie = Sigmie::create(
hosts: ['https://my-deployment.es.us-east-1.aws.found.io:9243'],
config: ['auth' => ['elastic', 'your-cloud-password']],
);

Find your endpoint in the deployment dashboard under “Elasticsearch endpoint.”

AWS OpenSearch Service

AWS requires IAM-signed requests. Build a Guzzle handler with the AWS SDK:

use Aws\Credentials\CredentialProvider;
use Aws\Signature\SignatureV4;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Middleware;
use Sigmie\Http\JSONClient;
use Sigmie\Base\Http\ElasticsearchConnection;
use Sigmie\Base\Drivers\Opensearch;
 
$credentials = CredentialProvider::defaultProvider()();
$signer = new SignatureV4('es', 'us-east-1');
$handler = HandlerStack::create();
$handler->push(Middleware::mapRequest(fn ($request) =>
$signer->signRequest($request, $credentials)
));
 
$client = JSONClient::create(
hosts: ['https://search-domain.us-east-1.es.amazonaws.com:443'],
config: ['handler' => $handler]
);
 
$connection = new ElasticsearchConnection($client, new Opensearch);
$sigmie = new Sigmie($connection);

Configuration options

The config array accepts any Guzzle HTTP option. Common ones:

Option Type Default Description
connect_timeout int 10 Seconds to wait for the connection.
timeout int 30 Seconds to wait for the response.
verify bool|string true SSL verification (boolean or CA path).
auth array null Basic auth ['username', 'password'].
headers array [] Custom HTTP headers.

Timeouts

$sigmie = Sigmie::create(
hosts: ['127.0.0.1:9200'],
config: [
'connect_timeout' => 15,
'timeout' => 120, // long for bulk operations
]
);

Environment-based configuration

$sigmie = Sigmie::create(
hosts: explode(',', $_ENV['ELASTICSEARCH_HOSTS']),
config: [
'auth' => [$_ENV['ES_USER'], $_ENV['ES_PASSWORD']],
'verify' => $_ENV['ES_VERIFY_SSL'] === 'true',
]
);

Verify the connection

if ($sigmie->isConnected()) {
echo "Connected.\n";
}
 
foreach ($sigmie->indices() as $index) {
echo $index->name . "\n";
}

Troubleshooting

cURL error 7: Failed to connect The cluster isn’t running, or your host/port is wrong. Try curl http://localhost:9200.

cURL error 60: SSL certificate problem Use 'verify' => false in development, a valid certificate in production, or 'verify' => '/path/to/ca.pem' for a custom CA.

401 Unauthorized Wrong credentials, or auth isn’t configured the way you think. Check cluster security logs.

cURL error 28: Operation timed out Increase connect_timeout and timeout. For bulk operations, 60–120 seconds is common.