Use [MinIO](https://min.io) as the object store for your {{% product-name %}} instance.
InfluxDB uses the MinIO S3-compatible API to interact with your MinIO server or
cluster.
> MinIO is a high-performance, S3-compatible object storage solution released
> under the GNU AGPL v3.0 license. Designed for speed and scalability, it powers
> AI/ML, analytics, and data-intensive workloads with industry-leading performance.
>
> {{% cite %}}[MinIO GitHub repository](https://github.com/minio/minio?tab=readme-ov-file#readme){{% /cite %}}
MinIO provides both an open source version ([MinIO Community Edition](https://min.io/open-source/download))
and an enterprise version ([MinIO AIStor](https://min.io/download)).
While both can be used as your {{% product-name %}} object store,
**this guide walks through using MinIO Community Edition**.
- [Set up MinIO](#set-up-minio)
- [Configure InfluxDB to connect to MinIO](#configure-influxdb-to-connect-to-minio)
- [Confirm the object store is working](#confirm-the-object-store-is-working)
## Set up MinIO
1. **Install and deploy a MinIO server or cluster**.
You can install MinIO locally for testing and development or you can deploy
a production MinIO cluster across multiple machines. The MinIO documentation
provides detailed instructions for installing and deploying MinIO based on
your target operating system:
- [Install and deploy MinIO on **Linux**](https://min.io/docs/minio/linux/operations/installation.html)
(recommended for production deployments)
- [Install and deploy MinIO with **Kubernetes**](https://min.io/docs/minio/kubernetes/upstream/operations/installation.html)
- [Install and deploy MinIO with **Docker**](https://min.io/docs/minio/container/operations/installation.html)
- [Install and deploy MinIO on **macOS**](https://min.io/docs/minio/macos/operations/installation.html)
- [Install and deploy MinIO on **Windows**](https://min.io/docs/minio/windows/operations/installation.html)
2. **Download and install the MinIO Client (`mc`)**.
The MinIO client, or `mc` CLI, lets you perform administrative tasks on your
MinIO server or cluster like creating users, assigning access policies, and
more. Download and install the `mc` CLI for your local operating system
and architecture.
[See the **MinIO Client** section of the MinIO downloads page](https://min.io/open-source/download).
3. **Configure the `mc` CLI to connect to your MinIO server or cluster**.
{#configure-alias}
The `mc` CLI uses "aliases" to connect to a MinIO server or cluster.
The alias refers to a set of connection credentials used to connect to and
authorize with your MinIO server.
Use the `mc alias set` command and provide the following:
- **Alias**: A unique name or identifier for this credential set
({{% code-placeholder-key %}}`ALIAS`{{% /code-placeholder-key %}})
- **MinIO URL**: The URL of your MinIO server or cluster
({{% code-placeholder-key %}}`https://localhost:9000`{{% /code-placeholder-key %}}
if running locally)
- **Root username:** The root username you specified when setting up your
MinIO server or cluster
({{% code-placeholder-key %}}`ROOT_USERNAME`{{% /code-placeholder-key %}})
- **Root password**: The root password you specified when setting up your
MinIO server or cluster
({{% code-placeholder-key %}}`ROOT_PASSWORD`{{% /code-placeholder-key %}})
```bash { placeholders="ALIAS|http://localhost:9000|ROOT_(USERNAME|PASSWORD)" }
mc alias set ALIAS http://localhost:9000 ROOT_USERNAME ROOT_PASSWORD
```
4. **Create a MinIO bucket**.
Use the _MinIO Console_ or the _`mc mb` command_ to create a new bucket
in your MinIO server or cluster.
{{< tabs-wrapper >}}
{{% tabs "medium" %}}
[MinIO Console](#)
[mc CLI](#)
{{% /tabs %}}
{{% tab-content %}}
The MinIO Console is a graphical user interface that lets you manage and browse
buckets in your MinIO server or cluster. By default, the console is served on port
`9001`.
If running MinIO on your local machine, visit
to access the MinIO Console. If MinIO is running on a remote server, use your
custom domain or IP to access the MinIO console.
1. In the Minio Console, click **Create Bucket**.
2. Enter a bucket name. For this guide, use `influxdb3`.
3. Click **Create Bucket**.
{{% /tab-content %}}
{{% tab-content %}}
Use the `mc mb` command to create a new MinIO bucket named `influxdb3`.
Provide the MinIO alias configured in [step 3](#configure-alias) and the bucket
name using the `ALIAS/BUCKET_NAME` syntax--for example:
```bash { placeholders="ALIAS" }
mc mb ALIAS/influxdb3
```
{{% /tab-content %}}
{{< /tabs-wrapper >}}
5. **Create a MinIO user**.
Use the `mc admin user add` command to create a new user.
Provide the following:
- **MinIO alias**: The MinIO server alias (created in [step 3](#configure-alias))
to add the user to ({{% code-placeholder-key %}}`ALIAS`{{% /code-placeholder-key %}})
- **Username**: A unique username for the user
({{% code-placeholder-key %}}`MINIO_USERNAME`{{% /code-placeholder-key %}})
- **Password**: A password for the user
({{% code-placeholder-key %}}`MINIO_PASSWORD`{{% /code-placeholder-key %}})
```bash { placeholders="ALIAS|MINIO_(USERNAME|PASSWORD)" }
mc admin user add ALIAS MINIO_USERNAME MINIO_PASSWORD
```
> [!Note]
> MinIO user credentials are equivalent to credentials you would typically
> use to authorize with AWS S3:
>
> - A MinIO username is equivalent to an AWS access key ID
> - A MinIO password is equivalent to an AWS secret key
6. **Create an access policy that grants full access to the `influxdb3` bucket**.
MinIO uses S3 compatible access policies to authorize access to buckets.
To create a new access policy:
1. Create a file named `influxdb3-policy.json` that contains the following
JSON:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::influxdb3"]
},
{
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::influxdb3/*"]
}
]
}
```
2. Use the `mc admin policy create` command to create the new access policy
in your MinIO server or cluster. Provide the following:
- **MinIO alias**: The MinIO server alias (created in [step 3](#configure-alias)) to add
the access policy to ({{% code-placeholder-key %}}`ALIAS`{{% /code-placeholder-key %}})
- **Policy name**: A unique name for the policy
({{% code-placeholder-key %}}`POLICY_NAME`{{% /code-placeholder-key %}})
- **Policy file**: The relative or absolute file path of your
`influxdb3-policy.json` policy file
({{% code-placeholder-key %}}`/path/to/influxdb3-policy.json`{{% /code-placeholder-key %}})
```bash { placeholders="ALIAS|POLICY_NAME|/path/to/influxdb3-policy\.json" }
mc admin policy create \
ALIAS \
POLICY_NAME \
/path/to/influxdb3-policy.json
```
7. **Attach the access policy to your user.**
Use the `mc admin policy attach` command to attach the access policy to your
user.
> [!Note]
> MinIO supports attaching access policies to both users and user groups.
> All users in a user group inherit policies attached to the group.
> For information about managing MinIO user groups, see
> [MinIO Group Management](https://min.io/docs/minio/linux/administration/identity-access-management/minio-group-management.html).
Provide the following:
- **MinIO alias**: The MinIO server alias created in [step 3](#configure-alias)
({{% code-placeholder-key %}}`ALIAS`{{% /code-placeholder-key %}})
- **Policy name**: A unique username for the user
({{% code-placeholder-key %}}`POLICY_NAME`{{% /code-placeholder-key %}})
- **Username** or **group name**: The user or user group to assign the policy to
({{% code-placeholder-key %}}`MINIO_USERNAME`{{% /code-placeholder-key %}} or
{{% code-placeholder-key %}}`MINIO_GROUP_NAME`{{% /code-placeholder-key %}})
{{< code-tabs-wrapper >}}
{{% code-tabs %}}
[user](#)
[group](#)
{{% /code-tabs %}}
{{% code-tab-content %}}
```bash { placeholders="ALIAS|POLICY_NAME|MINIO_USERNAME" }
mc admin policy attach ALIAS POLICY_NAME --user MINIO_USERNAME
```
{{% /code-tab-content %}}
{{% code-tab-content %}}
```bash { placeholders="ALIAS|POLICY_NAME|MINIO_GROUP_NAME" }
mc admin policy attach ALIAS POLICY_NAME --group MINIO_GROUP_NAME
```
{{% /code-tab-content %}}
{{< /code-tabs-wrapper >}}
Your MinIO server or cluster is now set up and ready to be used with {{% product-name %}}.
## Configure InfluxDB to connect to MinIO
To use your MinIO server or cluster as the object store for your {{% product-name %}}
instance, provide the following options or environment variables with the
`influxdb3 serve` command:
{{< tabs-wrapper >}}
{{% tabs "medium" %}}
[Command options](#)
[Environment variables](#)
{{% /tabs %}}
{{% tab-content %}}
{{% show-in "enterprise" %}}- `--cluster-id`: Your {{% product-name %}} cluster ID ({{% code-placeholder-key %}}`INFLUXDB_CLUSTER_ID`{{% /code-placeholder-key %}}){{% /show-in %}}
- `--node-id`: Your {{% product-name %}} node ID ({{% code-placeholder-key %}}`INFLUXDB_NODE_ID`{{% /code-placeholder-key %}})
- `--object-store`: `s3`
- `--bucket`: `influxdb3`
- `--aws-endpoint`: Your MinIO URL ({{% code-placeholder-key %}}`http://localhost:9000`{{% /code-placeholder-key %}} if running locally)
- `--aws-access-key-id`: Your MinIO username ({{% code-placeholder-key %}}`MINIO_USERNAME`{{% /code-placeholder-key %}})
- `--aws-secret-access-key`: Your MinIO password ({{% code-placeholder-key %}}`MINIO_PASSWORD`{{% /code-placeholder-key %}})
- `--aws-allow-http`: _(Optional)_ Include if _not_ using HTTPS to connect to
your MinIO server or cluster
```bash { placeholders="INFLUXDB_(CLUSTER|NODE)_ID|http://localhost:9000|MINIO_(USERNAME|PASSWORD)" }
influxdb3 serve \
{{< show-in "enterprise" >}}--cluster-id INFLUXDB_CLUSTER_ID \
{{< /show-in >}}--node-id INFLUXDB_NODE_ID \
--object-store s3 \
--bucket influxdb3 \
--aws-endpoint http://localhost:9000 \
--aws-access-key-id MINIO_USERNAME \
--aws-secret-access-key MINIO_PASSWORD \
--aws-allow-http
```
{{% /tab-content %}}
{{% tab-content %}}
{{% show-in "enterprise" %}}- `INFLUXDB3_ENTERPRISE_CLUSTER_ID`: Your {{% product-name %}} cluster ID ({{% code-placeholder-key %}}`INFLUXDB_CLUSTER_ID`{{% /code-placeholder-key %}}){{% /show-in %}}
- `INFLUXDB3_NODE_IDENTIFIER_PREFIX`: Your {{% product-name %}} node ID ({{% code-placeholder-key %}}`INFLUXDB_NODE_ID`{{% /code-placeholder-key %}})
- `INFLUXDB3_OBJECT_STORE`: `s3`
- `INFLUXDB3_BUCKET`: `influxdb3`
- `AWS_ENDPOINT`: Your MinIO URL ({{% code-placeholder-key %}}`http://localhost:9000`{{% /code-placeholder-key %}} if running locally)
- `AWS_ACCESSKEY_ID`: Your MinIO username ({{% code-placeholder-key %}}`MINIO_USERNAME`{{% /code-placeholder-key %}})
- `AWS_SECRET_ACCESS_KEY`: Your MinIO password ({{% code-placeholder-key %}}`MINIO_PASSWORD`{{% /code-placeholder-key %}})
- `AWS_ALLOW_HTTP`: _(Optional)_ Set to `true` if _not_ using HTTPS to connect to
your MinIO server or cluster (default is `false`)
```bash { placeholders="INFLUXDB_(CLUSTER|NODE)_ID|http://localhost:9000|MINIO_(USERNAME|PASSWORD)" }
{{< show-in "enterprise" >}}export INFLUXDB3_ENTERPRISE_CLUSTER_ID=INFLUXDB_CLUSTER_ID
{{< /show-in >}}export INFLUXDB3_NODE_IDENTIFIER_PREFIX=INFLUXDB_NODE_ID
export INFLUXDB3_OBJECT_STORE=s3
export INFLUXDB3_BUCKET=influxdb3
export AWS_ENDPOINT=http://localhost:9000
export AWS_ACCESS_KEY_ID=MINIO_USERNAME
export AWS_SECRET_ACCESS_KEY=MINIO_PASSWORD
export AWS_ALLOW_HTTP=true
influxdb3 serve
```
{{% /tab-content %}}
{{< /tabs-wrapper >}}
## Confirm the object store is working
When {{% product-name %}} starts, it will seed your MinIO object store with the
necessary directory structure and begin storing data there. Confirm the object
store is functioning properly:
1. View the `influxdb3 serve` log output to confirm that the server is running correctly.
2. Inspect the contents of your MinIO `influxdb3` bucket to confirm that the
necessary directory structure is created. You can use the **MinIO Console**
or the **`mc ls` command** to view the contents of a bucket--for example:
```bash { placeholders="ALIAS" }
mc ls ALIAS/influxdb3
```