diff --git a/.github/workflows/minio-compress-encrypt.yaml b/.github/workflows/minio-compress-encrypt.yaml new file mode 100644 index 000000000..024067a2c --- /dev/null +++ b/.github/workflows/minio-compress-encrypt.yaml @@ -0,0 +1,79 @@ +version: '3.7' + +# Settings and configurations that are common for all containers +x-minio-common: &minio-common + image: minio/minio:${JOB_NAME} + command: server --console-address ":9001" http://minio{1...4}/cdata{1...2} + expose: + - "9000" + - "9001" + environment: + MINIO_CI_CD: "on" + MINIO_ROOT_USER: "minio" + MINIO_ROOT_PASSWORD: "minio123" + MINIO_COMPRESS: "true" + MINIO_COMPRESS_MIMETYPES: "*" + MINIO_KMS_SECRET_KEY: "my-minio-key:OSMM+vkKUTCvQs9YL/CVMIMt43HFhkUpqJxTmGl6rYw=" + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] + interval: 30s + timeout: 20s + retries: 3 + +# starts 4 docker containers running minio server instances. +# using nginx reverse proxy, load balancing, you can access +# it through port 9000. +services: + minio1: + <<: *minio-common + hostname: minio1 + volumes: + - cdata1-1:/cdata1 + - cdata1-2:/cdata2 + + minio2: + <<: *minio-common + hostname: minio2 + volumes: + - cdata2-1:/cdata1 + - cdata2-2:/cdata2 + + minio3: + <<: *minio-common + hostname: minio3 + volumes: + - cdata3-1:/cdata1 + - cdata3-2:/cdata2 + + minio4: + <<: *minio-common + hostname: minio4 + volumes: + - cdata4-1:/cdata1 + - cdata4-2:/cdata2 + + nginx: + image: nginx:1.19.2-alpine + hostname: nginx + volumes: + - ./nginx-4-node.conf:/etc/nginx/nginx.conf:ro + ports: + - "9000:9000" + - "9001:9001" + depends_on: + - minio1 + - minio2 + - minio3 + - minio4 + +## By default this config uses default local driver, +## For custom volumes replace with volume driver configuration. +volumes: + cdata1-1: + cdata1-2: + cdata2-1: + cdata2-2: + cdata3-1: + cdata3-2: + cdata4-1: + cdata4-2: diff --git a/.github/workflows/minio-erasure.yaml b/.github/workflows/minio-erasure.yaml new file mode 100644 index 000000000..dd4d34147 --- /dev/null +++ b/.github/workflows/minio-erasure.yaml @@ -0,0 +1,53 @@ +version: '3.7' + +# Settings and configurations that are common for all containers +x-minio-common: &minio-common + image: minio/minio:${JOB_NAME} + command: server --console-address ":9001" edata{1...4} + expose: + - "9000" + - "9001" + environment: + MINIO_CI_CD: "on" + MINIO_ROOT_USER: "minio" + MINIO_ROOT_PASSWORD: "minio123" + MINIO_COMPRESS: "true" + MINIO_COMPRESS_MIMETYPES: "*" + MINIO_KMS_SECRET_KEY: "my-minio-key:OSMM+vkKUTCvQs9YL/CVMIMt43HFhkUpqJxTmGl6rYw=" + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] + interval: 30s + timeout: 20s + retries: 3 + +# starts 4 docker containers running minio server instances. +# using nginx reverse proxy, load balancing, you can access +# it through port 9000. +services: + minio1: + <<: *minio-common + hostname: minio1 + volumes: + - edata1-1:/edata1 + - edata1-2:/edata2 + - edata1-3:/edata3 + - edata1-4:/edata4 + + nginx: + image: nginx:1.19.2-alpine + hostname: nginx + volumes: + - ./nginx-1-node.conf:/etc/nginx/nginx.conf:ro + ports: + - "9000:9000" + - "9001:9001" + depends_on: + - minio1 + +## By default this config uses default local driver, +## For custom volumes replace with volume driver configuration. +volumes: + edata1-1: + edata1-2: + edata1-3: + edata1-4: diff --git a/.github/workflows/minio-pools.yaml b/.github/workflows/minio-pools.yaml new file mode 100644 index 000000000..88ac8a0aa --- /dev/null +++ b/.github/workflows/minio-pools.yaml @@ -0,0 +1,117 @@ +version: '3.7' + +# Settings and configurations that are common for all containers +x-minio-common: &minio-common + image: minio/minio:${JOB_NAME} + command: server --console-address ":9001" http://minio{1...4}/pdata{1...2} http://minio{5...8}/pdata{1...2} + expose: + - "9000" + - "9001" + environment: + MINIO_CI_CD: "on" + MINIO_ROOT_USER: "minio" + MINIO_ROOT_PASSWORD: "minio123" + MINIO_KMS_SECRET_KEY: "my-minio-key:OSMM+vkKUTCvQs9YL/CVMIMt43HFhkUpqJxTmGl6rYw=" + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] + interval: 30s + timeout: 20s + retries: 3 + +# starts 4 docker containers running minio server instances. +# using nginx reverse proxy, load balancing, you can access +# it through port 9000. +services: + minio1: + <<: *minio-common + hostname: minio1 + volumes: + - pdata1-1:/pdata1 + - pdata1-2:/pdata2 + + minio2: + <<: *minio-common + hostname: minio2 + volumes: + - pdata2-1:/pdata1 + - pdata2-2:/pdata2 + + minio3: + <<: *minio-common + hostname: minio3 + volumes: + - pdata3-1:/pdata1 + - pdata3-2:/pdata2 + + minio4: + <<: *minio-common + hostname: minio4 + volumes: + - pdata4-1:/pdata1 + - pdata4-2:/pdata2 + + minio5: + <<: *minio-common + hostname: minio5 + volumes: + - pdata5-1:/pdata1 + - pdata5-2:/pdata2 + + minio6: + <<: *minio-common + hostname: minio6 + volumes: + - pdata6-1:/pdata1 + - pdata6-2:/pdata2 + + minio7: + <<: *minio-common + hostname: minio7 + volumes: + - pdata7-1:/pdata1 + - pdata7-2:/pdata2 + + minio8: + <<: *minio-common + hostname: minio8 + volumes: + - pdata8-1:/pdata1 + - pdata8-2:/pdata2 + + nginx: + image: nginx:1.19.2-alpine + hostname: nginx + volumes: + - ./nginx-8-node.conf:/etc/nginx/nginx.conf:ro + ports: + - "9000:9000" + - "9001:9001" + depends_on: + - minio1 + - minio2 + - minio3 + - minio4 + - minio5 + - minio6 + - minio7 + - minio8 + +## By default this config uses default local driver, +## For custom volumes replace with volume driver configuration. +volumes: + pdata1-1: + pdata1-2: + pdata2-1: + pdata2-2: + pdata3-1: + pdata3-2: + pdata4-1: + pdata4-2: + pdata5-1: + pdata5-2: + pdata6-1: + pdata6-2: + pdata7-1: + pdata7-2: + pdata8-1: + pdata8-2: diff --git a/.github/workflows/mint.yml b/.github/workflows/mint.yml new file mode 100644 index 000000000..b6b6a154f --- /dev/null +++ b/.github/workflows/mint.yml @@ -0,0 +1,57 @@ +name: Mint Tests + +on: + pull_request: + branches: + - master + +# This ensures that previous jobs for the PR are canceled when the PR is +# updated. +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + mint-test: + runs-on: mint + timeout-minutes: 120 + steps: + - name: cleanup #https://github.com/actions/checkout/issues/273 + run: | + sudo -S rm -rf ${GITHUB_WORKSPACE} + mkdir ${GITHUB_WORKSPACE} + - name: checkout-step + uses: actions/checkout@v3 + + - name: setup-go-step + uses: actions/setup-go@v2 + with: + go-version: 1.20.x + + - name: github sha short + id: vars + run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + + - name: build-minio + run: | + make install + docker build . -t "minio/minio:${{ steps.vars.outputs.sha_short }}" + + - name: compress and encrypt + run: | + ${GITHUB_WORKSPACE}/.github/workflows/run-mint.sh "compress-encrypt" "minio" "minio123" "${{ steps.vars.outputs.sha_short }}" + + - name: multiple pools + run: | + ${GITHUB_WORKSPACE}/.github/workflows/run-mint.sh "pools" "minio" "minio123" "${{ steps.vars.outputs.sha_short }}" + + - name: standalone erasure + run: | + ${GITHUB_WORKSPACE}/.github/workflows/run-mint.sh "erasure" "minio" "minio123" "${{ steps.vars.outputs.sha_short }}" + docker rmi -f minio/minio:${{ steps.vars.outputs.sha_short }} + + + diff --git a/.github/workflows/nginx-1-node.conf b/.github/workflows/nginx-1-node.conf new file mode 100644 index 000000000..bb13bde24 --- /dev/null +++ b/.github/workflows/nginx-1-node.conf @@ -0,0 +1,100 @@ +user nginx; +worker_processes auto; + +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; + +events { + worker_connections 4096; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + sendfile on; + keepalive_timeout 65; + + # include /etc/nginx/conf.d/*.conf; + + upstream minio { + server minio1:9000; + } + + upstream console { + ip_hash; + server minio1:9001; + } + + server { + listen 9000; + listen [::]:9000; + server_name localhost; + + # To 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; + # To 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; + } + } + + server { + listen 9001; + listen [::]:9001; + server_name localhost; + + # To 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; + # To 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_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 websocket + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + chunked_transfer_encoding off; + + proxy_pass http://console; + } + } +} diff --git a/.github/workflows/nginx-4-node.conf b/.github/workflows/nginx-4-node.conf new file mode 100644 index 000000000..cca82f6fe --- /dev/null +++ b/.github/workflows/nginx-4-node.conf @@ -0,0 +1,106 @@ +user nginx; +worker_processes auto; + +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; + +events { + worker_connections 4096; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + sendfile on; + keepalive_timeout 65; + + # include /etc/nginx/conf.d/*.conf; + + upstream minio { + server minio1:9000; + server minio2:9000; + server minio3:9000; + server minio4:9000; + } + + upstream console { + ip_hash; + server minio1:9001; + server minio2:9001; + server minio3:9001; + server minio4:9001; + } + + server { + listen 9000; + listen [::]:9000; + server_name localhost; + + # To 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; + # To 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; + } + } + + server { + listen 9001; + listen [::]:9001; + server_name localhost; + + # To 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; + # To 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_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 websocket + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + chunked_transfer_encoding off; + + proxy_pass http://console; + } + } +} diff --git a/.github/workflows/nginx-8-node.conf b/.github/workflows/nginx-8-node.conf new file mode 100644 index 000000000..aedf95151 --- /dev/null +++ b/.github/workflows/nginx-8-node.conf @@ -0,0 +1,114 @@ +user nginx; +worker_processes auto; + +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; + +events { + worker_connections 4096; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + sendfile on; + keepalive_timeout 65; + + # include /etc/nginx/conf.d/*.conf; + + upstream minio { + server minio1:9000; + server minio2:9000; + server minio3:9000; + server minio4:9000; + server minio5:9000; + server minio6:9000; + server minio7:9000; + server minio8:9000; + } + + upstream console { + ip_hash; + server minio1:9001; + server minio2:9001; + server minio3:9001; + server minio4:9001; + server minio5:9001; + server minio6:9001; + server minio7:9001; + server minio8:9001; + } + + server { + listen 9000; + listen [::]:9000; + server_name localhost; + + # To 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; + # To 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; + } + } + + server { + listen 9001; + listen [::]:9001; + server_name localhost; + + # To 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; + # To 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_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 websocket + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + chunked_transfer_encoding off; + + proxy_pass http://console; + } + } +} diff --git a/.github/workflows/nginx.conf b/.github/workflows/nginx.conf new file mode 100644 index 000000000..cca82f6fe --- /dev/null +++ b/.github/workflows/nginx.conf @@ -0,0 +1,106 @@ +user nginx; +worker_processes auto; + +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; + +events { + worker_connections 4096; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + sendfile on; + keepalive_timeout 65; + + # include /etc/nginx/conf.d/*.conf; + + upstream minio { + server minio1:9000; + server minio2:9000; + server minio3:9000; + server minio4:9000; + } + + upstream console { + ip_hash; + server minio1:9001; + server minio2:9001; + server minio3:9001; + server minio4:9001; + } + + server { + listen 9000; + listen [::]:9000; + server_name localhost; + + # To 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; + # To 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; + } + } + + server { + listen 9001; + listen [::]:9001; + server_name localhost; + + # To 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; + # To 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_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 websocket + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + chunked_transfer_encoding off; + + proxy_pass http://console; + } + } +} diff --git a/.github/workflows/run-mint.sh b/.github/workflows/run-mint.sh new file mode 100755 index 000000000..559074fc5 --- /dev/null +++ b/.github/workflows/run-mint.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +set -ex + +export MODE="$1" +export ACCESS_KEY="$2" +export SECRET_KEY="$3" +export JOB_NAME="$4" +export MINT_MODE="full" + +docker system prune -f +docker volume prune -f + +## change working directory +cd .github/workflows + +docker-compose -f minio-${MODE}.yaml up -d +sleep 5m + +docker run --rm --net=host \ + --name="mint-${MODE}-${JOB_NAME}" \ + -e SERVER_ENDPOINT="127.0.0.1:9000" \ + -e ACCESS_KEY="${ACCESS_KEY}" \ + -e SECRET_KEY="${SECRET_KEY}" \ + -e ENABLE_HTTPS=0 \ + -e MINT_MODE="${MINT_MODE}" \ + docker.io/minio/mint:edge \ + aws-sdk-go \ + aws-sdk-java \ + aws-sdk-php \ + aws-sdk-ruby \ + awscli \ + healthcheck \ + mc \ + minio-go \ + minio-java \ + minio-js \ + minio-py \ + s3cmd \ + s3select \ + versioning + +docker-compose -f minio-${MODE}.yaml down +sleep 10s + +docker system prune -f +docker volume prune -f + +## change working directory +cd ../../ +