docs: Improved documentation for MinIO (#1524)

This commit is contained in:
Shahed Nasser
2022-05-30 10:22:14 +03:00
committed by GitHub
parent 4a23c65023
commit 269cbafe43

View File

@@ -1,57 +1,138 @@
# MinIO
In order to work with images in Medusa, you need a file service plugin responsible for hosting. Following this guide will allow you to upload images to MinIO bucket.
This document will guide you through installing the MinIO file service plugin on your Medusa server.
### Before you start
## Overview
At this point, you should have an instance of our store engine running. If not, we have a [full guide](https://docs.medusajs.com/tutorial/set-up-your-development-environment) for setting up your local environment.
To manage images in Medusa, you need a file service plugin responsible for hosting. Without a file service plugin, you will face issues while working with Medusa, such as when uploading images for products.
### Set up MinIO
Medusa provides three different options to handle your file storage. This document will focus on setting up [MinIO](https://min.io) on your local machine and connecting Medusa to it.
#### Create an MinIO bucket
## Prerequisites
In the MinIO console create a new bucket, then click into that bucket and change the `Access Policy` to `public`.
A Medusa server is required to be set up before following along with this document. You can follow the [quickstart guide](../quickstart/quick-start.md) to get started in minutes.
Be aware, that this will allow for anyone to acces your bucket. Avoid storing sensitive data.
## Set up MinIO
#### Generate access keys
You can follow [MinIOs guide to install it](https://docs.min.io/minio/baremetal/quickstart/quickstart.html) on your machine based on your operating system.
Navigate to users and perform the following steps:
After installing it, make sure MinIO is always running when your Medusa server is running. Its recommended that you set up an alias to quickly start the MinIO server as instructed at the end of the installation guides in MinIO.
- Enter new `Access Key` and `Secret Key`
- Select readwrite policy
- Submit the details
:::warning
### Installation
In MinIOs documentation, port `9000` is used for the address of the MinIO server. However, this collides with the port for the Medusa server. You must change the port for MinIO to another one (for example, port `9001`).
First, install the plugin using your preferred package manager:
:::
```bash npm2yarn
### Create a MinIO bucket
After installing MinIO and logging into the Console, click on “Create Bucket” to create a new bucket that will store the files of your Medusa server.
![Create Bucket](https://i.imgur.com/PwLldKt.png)
Then, in the form, enter a name for the bucket and click on Create Bucket. By MinIOs requirement, the name can only consist of lower case characters, numbers, dots (`.`), and hyphens (`-`).
![Bucket Info](https://i.imgur.com/UB477rl.png)
After creating the bucket, click on the cog icon at the top right to configure the bucket.
![Configure Bucket](https://i.imgur.com/0pB8RIM.png)
Then, click on the edit icon next to Access Policy. This will open a pop-up.
![Access Policy](https://i.imgur.com/qo3QQz4.png)
In the pop-up, change the selected value to “public” and click Set.
:::warning
Changing the Access Policy to public will allow anyone to access your bucket. Avoid storing sensitive data in the bucket.
:::
### Generate Access Keys
From the sidebar of your MinIO console, click on Identity then Service Accounts.
![Service Accounts Sidebar](https://i.imgur.com/CkTbrEc.png)
Then, click on Create Service Account.
![Create Service Account](https://i.imgur.com/a000HQf.png)
This will generate a random Access Key and Secret Key for you.
![Generated Keys](https://i.imgur.com/my4c7zU.png)
Click on Create. A pop-up will then show the value for your Access Key and Secret Key. Copy them to use in the next section.
:::caution
You will not be able to access the Secret Key after closing the pop-up. So, make sure to store it somewhere to use later when configuring the plugin.
:::
## Plugin Installation
In the directory of your Medusa server, run the following command to install the MinIO plugin:
```bash
npm install medusa-file-minio
```
Then configure your `medusa-config.js` to include the plugin alongside the required options:
Then, add the following environment variables in `.env`:
```=javascript
```bash
MINIO_ENDPOINT=<ENDPOINT>
MINIO_BUCKET=<BUCKET>
MINIO_ACCESS_KEY=<ACCESS_KEY>
MINIO_SECRET_KEY=<SECRET_KEY>
```
Where `<ENDPOINT>` is the URL of your MinIO server, `<BUCKET>` is the name of the bucket you created earlier, and `<ACCESS_KEY>` and `<SECRET_KEY>` are the keys you generated in the previous section.
Finally, configure your `medusa-config.js` to include the plugin with the required options:
```bash
{
resolve: `medusa-file-minio`,
options: {
endpoint: "minio.server.com",
bucket: "test",
access_key_id: "YOUR-ACCESS-KEY",
secret_access_key: "YOUR-SECRET-KEY",
endpoint: process.env.MINIO_ENDPOINT,
bucket: process.env.MINIO_BUCKET,
access_key_id: process.env.MINIO_ACCESS_KEY,
secret_access_key: process.env.MINIO_SECRET_KEY,
},
},
```
The two access keys in the options are the ones created in the previous section.
## Test it Out
:::tip
Run your Medusa server alongside the [Medusa Admin](../admin/quickstart.md) to try out your new file service. Upon editing or creating products, you can now upload thumbnails and images, that are stored in a MinIO server.
Make sure to use an environment variable for the secret key in a live environment.
![Image Uploaded on Admin](https://i.imgur.com/alabX2i.png)
:::
## Next.js Storefront Configuration
### Try it out
If youre using a [Next.js](../starters/nextjs-medusa-starter.md) storefront, you need to add an additional configuration that adds the MinIO domain name into the configured images domain names. This is because all URLs of product images will be from the MinIO server.
Finally, run your Medusa server alongside our admin system to try out your new file service. Upon editing or creating products, you can now upload thumbnails and images, that are stored in an MinIO server.
If this configuration is not added, youll receive the error ["next/image Un-configured Host”](https://nextjs.org/docs/messages/next-image-unconfigured-host).
In `next.config.js` add the following option in the exported object:
```jsx
module.exports = {
//other options
images: {
domains: [
"127.0.0.1",
//any other domains...
],
},
}
```
Where `127.0.0.1` is the domain of your local MinIO server.
## Whats Next 🚀
- Check out [more plugins](https://github.com/medusajs/medusa/tree/master/packages) you can add to your store.