From b9883c5ad91ed1e76edac7439511b30f38f0479e Mon Sep 17 00:00:00 2001
From: Jacopo Gasparetto <jacopo.gasparetto@cnaf.infn.it>
Date: Tue, 4 Apr 2023 12:40:06 +0200
Subject: [PATCH] Add minio service

---
 README.md           |  1 +
 docker-compose.yaml | 14 ++++++++++++
 nginx/default.conf  | 56 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 71 insertions(+)

diff --git a/README.md b/README.md
index e8b0b95..078afdf 100644
--- a/README.md
+++ b/README.md
@@ -19,3 +19,4 @@ The following endpoint are available
 
 - Webapp [localhost:8080](localhost:8080)
 - API [localhost:8080/api/v1/](localhost:8080/api/v1/)
+- Minio [localhost:9000](localhost:9000)
diff --git a/docker-compose.yaml b/docker-compose.yaml
index f4fc2a7..e036432 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -21,6 +21,17 @@ services:
       - ./backend/src/:/app/
     environment:
       - WATCHFILES_FORCE_POLLING=true   # Enable uvicorn auto-reload
+  
+  minio:
+    container_name: minio
+    image: minio/minio
+    command:
+      - server
+      - /data
+      - --console-address
+      - ":9001"
+    volumes:
+      - minio_storage:/data
   nginx:
     image: nginx:latest
     container_name: nginx
@@ -28,6 +39,9 @@ services:
       - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
     ports:
       - 8080:80
+      - 9000:9000
+      - 9001:9001
 
 volumes:
   node_modules:
+  minio_storage:
diff --git a/nginx/default.conf b/nginx/default.conf
index e3503a4..95fa037 100644
--- a/nginx/default.conf
+++ b/nginx/default.conf
@@ -16,6 +16,10 @@ server {
     proxy_pass http://backend;
   }
 
+  location /minio {
+    proxy_pass http://minio;
+  }
+
   # https://stackoverflow.com/questions/70585472/websocketclient-js16-websocket-connection-to-ws-localhost3000-ws-failed-r
   location /ws {
     proxy_pass http://frontend;
@@ -24,3 +28,55 @@ server {
     proxy_set_header Connection "upgrade";
   }
 }
+
+# https://min.io/docs/minio/linux/integrations/setup-nginx-proxy-with-minio.html
+server {
+  listen 9000;
+  # Allow special characters in headers
+  ignore_invalid_headers off;
+  # Allow any size file to be uploaded.
+  # Set to a value such as 1000m; to restrict file size to a specific value
+  client_max_body_size 0;
+  # Disable buffering
+  proxy_buffering off;
+  proxy_request_buffering off;
+
+  location / {
+    proxy_set_header Host $http_host;
+    proxy_set_header X-Real-IP $remote_addr;
+    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+    proxy_set_header X-Forwarded-Proto $scheme;
+
+    proxy_connect_timeout 300;
+    # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
+    proxy_http_version 1.1;
+    proxy_set_header Connection "";
+    chunked_transfer_encoding off;
+
+    proxy_pass http://minio:9000/; # This uses the upstream directive definition to load balance
+  }
+}
+server {
+  listen 9001;
+  location / {
+    proxy_set_header Host $http_host;
+    proxy_set_header X-Real-IP $remote_addr;
+    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+    proxy_set_header X-Forwarded-Proto $scheme;
+    proxy_set_header X-NginX-Proxy true;
+
+    # This is necessary to pass the correct IP to be hashed
+    real_ip_header X-Real-IP;
+
+    proxy_connect_timeout 300;
+
+    # To support websockets in MinIO versions released after January 2023
+    proxy_http_version 1.1;
+    proxy_set_header Upgrade $http_upgrade;
+    proxy_set_header Connection "upgrade";
+
+    chunked_transfer_encoding off;
+
+    proxy_pass http://minio:9001/; # This uses the upstream directive definition to load balance and assumes a static Console port of 9001
+  }
+}
\ No newline at end of file
-- 
GitLab