Skip to content
This repository has been archived by the owner on Nov 3, 2024. It is now read-only.

Add MinIO Docker Compose Service #173

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

NBZ4live
Copy link

@NBZ4live NBZ4live commented Nov 7, 2021

The New Solution/Problem/Issue/Bug:

This recipe adds a MinIO container to a project.

MinIO is a S3 compatible object-storage.
It can be used, to run an S3 instance locally, in case the hosted S3 is not reachable (like developing while offline)

Manual Testing Instructions:

Follow the instructions from docker-compose-services/minio/README.md.
Expected result:

  • A working MinIO instance is available in the project.
  • The object browser is available at https://<projectname>.ddev.site:9000.
  • All files uploaded through the object browser can be listed with ddev exec -s minio ls -al /data/default

@rfay
Copy link
Member

rfay commented Nov 8, 2021

Thanks!

Copy link
Member

@rfay rfay left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks so much for this contribution! @truls1502 was also working on this at some point, so requesting his review here.

I wasn't able to get this working, from the host browser the http URL says:

$ curl http://d9.ddev.site:9000
<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx/1.20.1</center>
</body>
</html>

And the https port gets a 400 error:

$ curl  https://d9.ddev.site:9000
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied.</Message><Resource>/</Resource><RequestId>16BF76401B7CA5EB</RequestId><HostId>e3483c39-1c6f-4b72-bcbc-5fe39a3bac71</HostId></Error>

I imagine that's just because I don't know how to provide credentials?

The server is configured through the environment variables in `docker-compose.minio.yaml`
Default credentials (for API and object browser):
* MINIO_ACCESS_KEY=minio
* MINIO_SECRET_KEY=minio123
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if these would be better to put in config.yaml these days, rather than having people edit the docker-compose.minio.yaml.

* Start (or restart) DDEV to have the service initialized: `ddev start`

## Connection
* MinIO is available at `ddev-<projectname>-minio:9000` **inside the containers** and at `https://<projectname>.ddev.site:9000` **outside the containers**
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please figure out how to move this to a port other than 9000. 9000 is always such a terrible thing, spurring fights between xdebug and php-fpm... and even minio!!!!

build:
context: './minio-build'
restart: always
ports:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use expose: here instead of ports:. That will make it not create a bind point on the host, which is unneeded.

Suggested change
ports:
expose:

@rfay
Copy link
Member

rfay commented Jan 15, 2022

Looking forward to getting this in @NBZ4live and thanks for the contribution. Please just pull the suggested commits and rebase and respond to other comments and we can move forward.

@smustgrave
Copy link

Tried following the steps but unfortunately doesn't seem to be working. Do you know if this should work with the m1 chips?

@smustgrave
Copy link

https://drupal9-ddev.ddev.site:9000/ redirects to http://drupal9-ddev.ddev.site:39085/ and throws a connection refused error

When I change the port from 9000 to 9005 and try to visit the url I get

502: Unresponsive/broken ddev back-end site.
This is the ddev-router container: The back-end webserver at the URL you specified is not responding. You may want to use "ddev restart" to restart the site.

@smustgrave
Copy link

Okay finally got it working

`version: '3.6'
services:
minio:
container_name: ddev-${DDEV_SITENAME}-minio
build:
context: './minio-build'
restart: always
ports:
- "9010"
labels:
com.ddev.site-name: ${DDEV_SITENAME}
com.ddev.approot: $DDEV_APPROOT
environment:
- VIRTUAL_HOST=$DDEV_HOSTNAME
- HTTP_EXPOSE=9011:9010
- HTTPS_EXPOSE=9010:9010
- MINIO_ROOT_USER=minio
- MINIO_ROOT_PASSWORD=minio123
command: server /data --console-address :9010
volumes:
- type: "volume"
source: minio
target: "/data"
volume:
nocopy: true
- type: "bind"
source: "."
target: "/mnt/ddev_config"
web:
links:
- minio:$DDEV_HOSTNAME

volumes:
minio:
name: "${DDEV_SITENAME}-minio"
`

@rfay
Copy link
Member

rfay commented Jun 21, 2022

@mglaman points out that he has minio going on https://github.com/bluehorndigital/mojo

@zaifastafa
Copy link

Hi @rfay any info on this? I was hoping to have a service as well for local development.

if I use this file

version: '3.6'
services:
  storage:
    container_name: ddev-${DDEV_SITENAME}-minio
    image: minio/minio
    command: 'server /data --console-address ":9001" --address ":8080" '
    volumes:
      - storage:/data
    environment:
      - LOG_LEVEL=trace
      - MINIO_ROOT_USER=minioadmin
      - MINIO_ROOT_PASSWORD=minioadmin
      - MINIO_DOMAIN=storage
      # DDEV configurations to expose MinIO over the network.
      - VIRTUAL_HOST=$DDEV_HOSTNAME
      - HTTP_EXPOSE=8081:8080
      - HTTPS_EXPOSE=8080:8080
    expose:
      - '8080'
      - '9001'
    labels:
      # These labels ensure this service is discoverable by ddev
      com.ddev.site-name: ${DDEV_SITENAME}
      com.ddev.approot: $DDEV_APPROOT
    networks:
      default:
        aliases:
          - mojodata.storage
  storage_cli:
    container_name: ddev-${DDEV_SITENAME}-mc
    image: minio/mc
    depends_on:
      - storage
    entrypoint: /bin/bash
    stdin_open: true
    tty: true

  web:
    environment:
      FILESYSTEM_DRIVER: s3
      AWS_ACCESS_KEY_ID: minioadmin
      AWS_SECRET_ACCESS_KEY: minioadmin
      AWS_DEFAULT_REGION: us-east-1
      S3_BUCKET: mojodata
      S3_PROTOCOL: https
      S3_CNAME: ${DDEV_SITENAME}.ddev.site:8080
      S3_ENDPOINT: http://storage:8080
      S3_USE_PATH_STYLE_ENDPOINT: 1
      S3_CNAME_IS_BUCKET: 0
    links:
      - storage:$DDEV_HOSTNAME
volumes:
  storage:

there are issues in starting up the project. Is there any specific thing that I need to adjust in here?

@rfay
Copy link
Member

rfay commented Nov 11, 2022

@zaifastafa please say what the issues are, and maybe somebody can help you.

It would be great if somebody who uses this would turn it into a ddev add-on.

@zaifastafa
Copy link

When this file is added and I do ddev restart, the project starts fine but when opening the project it gives 503 ddev error.

@rfay
Copy link
Member

rfay commented Nov 11, 2022

A 503 normally means you have the wrong docroot or that the docroot has no index.php in it. ddev logs may help you understand the 503.

Please do a standard trivial working project, maybe Drupal9 quickstart or something, and add this, and see if you still have the problem.

@seebeen
Copy link

seebeen commented Aug 14, 2023

Hello,

I've implemented a full DDEV MinIO addon here.
It exposes 9000 only locally, and gets a random port for localhost.

https://github.com/oblakstudio/ddev-minio

Fully tested and it works

@timkelty
Copy link

FWIW, I have been using @seebeen's ddev-minio and it is working great.

@seebeen
Copy link

seebeen commented Jan 18, 2024

@rfay can we move the ddev-minio to the official namespace?

@rfay
Copy link
Member

rfay commented Jan 18, 2024

Sure, please open an issue in ddev-minio. I'm in Chile, it may be a while but we'll do it.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants