• Get application security done the right way! Detect, Protect, Monitor, Accelerate, and more…
  • Are you looking for object storage software to host on your server?

    I guess, yes?

    There is plenty of cloud-based object storage like AWS S3 and other I mentioned here. However, if you need to host your data on your server,  MinIO can help within your data centers.

    MiniIO is open-source, popular distributed object storage software and compatible with S3. It’s enterprise-ready and known for its high performance.

    You can use MinIO from a simple web application to large data distribution workloads for analytics and machine learning applications. It can help in many use cases.

    • Standard flat file storage
    • Multi-cloud data distribution
    • Disaster recovery
    • Data analytics

    Is it bulky software?

    Nope, it’s just around ~50MB and Kubernetes-friendly. It writes data and metadata as an object. This removes the dependency on having an additional database or software to store metadata and improve performance.

    The below architecture from their official site.

    Let’s explore some of the features worth noting.

    • High-performance – the title says. It’s capable of reading/writing at the speed of ~170GB/s. That’s a lot!
    • Scalable – go for clustering and scale as you need
    • Cloud-native
    • Data protection using Erasure code method
    • Multiple encryption supported including AES-CBC, AES-256-GCM, ChaCha20
    • Compatible with common KMS
    • Application and user identity
    • Event notification
    • Federation using etcd and CoreDNS

    MinIO is a good choice for software defined storage. Let’s explore how to set things up.

    Installing MinIO Server

    You can install on Linux, Windows, macOS and through Kubernetes. Prefer building through source? Sure, you can do if you have Golang installed.

    For this demonstration, I will install on CentOS which is hosted on Kamatera.

    • Login to the server
    • Create a folder under desired file system. Maybe minio-server
    • Navigate to the newly created folder and run the below wget command
    wget https://dl.min.io/server/minio/release/linux-amd64/minio

    It will download a binary file and should looks like this.

    -rw-r--r--  1 root root 48271360 Oct 18 21:57 minio

    Make the file executable with chmod command

    chmod 755 minio

    Let’s start the MinIO as a server.

    ./minio server /data &

    /data mentioned above is the file system where MinIO will store the objects.

    Starting is quick and you should see the startup info as below.

    Endpoint:  http://xx.71.141.xx:9000 http://127.0.0.1:9000      
    AccessKey: minioadmin 
    SecretKey: minioadmin 
    
    Browser Access:
       http://xx.71.141.xx:9000 http://127.0.0.1:9000      
    
    Command-line Access: https://docs.min.io/docs/minio-client-quickstart-guide
       $ mc alias set myminio http://xx.71.141.xx:9000 minioadmin minioadmin
    
    Object API (Amazon S3 compatible):
       Go:         https://docs.min.io/docs/golang-client-quickstart-guide
       Java:       https://docs.min.io/docs/java-client-quickstart-guide
       Python:     https://docs.min.io/docs/python-client-quickstart-guide
       JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
       .NET:       https://docs.min.io/docs/dotnet-client-quickstart-guide
    Detected default credentials 'minioadmin:minioadmin', please change the credentials immediately using 'MINIO_ACCESS_KEY' and 'MINIO_SECRET_KEY'

    Let’s access MinIO on browser with default credentials – minioadmin:minioadmin

    Interface is very neat and clean but before anything, let’s change the default credential as it expose the risk. There is no option to change the admin credential through browser but environment variables.

    To change MinIO default credential, we will export export the access and secret key as below and start the MinIO.

    export MINIO_ACCESS_KEY=geekflare
    export MINIO_SECRET_KEY=geekpassword
    ./minio server /data &

    Now, it shouldn’t complain about default credential detection warning.

    Let’s try to upload some files.

    • Click + icon at the right bottom and create a bucket
    • I uploaded a test file and immediately visible on browser

    and, on the server

    [[email protected] geekflare]# ls -ltr
    total 4
    -rw-r--r-- 1 root root 11 Oct 19 11:09 MinIO-Test.txt
    [[email protected] geekflare]#

    If you click on file share button on the browser, you will get the shareable link and an option to set the expiry.

    MinIO Client

    MinIO client is more than aws-cli which let you manage the storage. Client is available for Windows, macOS and Linux.

    To install on Linux, run the following.

    wget https://dl.min.io/client/mc/release/linux-amd64/mc
    chmod 755 mc

    Run the mc command to see the command help.

    [[email protected] ~]# ./mc
    NAME:
      mc - MinIO Client for cloud storage and filesystems.
    
    USAGE:
      mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]
    
    COMMANDS:
      alias      set, remove and list aliases in configuration file
      ls         list buckets and objects
      mb         make a bucket
      rb         remove a bucket
      cp         copy objects
      mirror     synchronize object(s) to a remote site
      cat        display object contents
      head       display first 'n' lines of an object
      pipe       stream STDIN to an object
      share      generate URL for temporary access to an object
      find       search for objects
      sql        run sql queries on objects
      stat       show object metadata
      mv         move objects
      tree       list buckets and objects in a tree format
      du         summarize disk usage recursively
      retention  set retention for object(s)
      legalhold  manage legal hold for object(s)
      diff       list differences in object name, size, and date between two buckets
      rm         remove objects
      version    manage bucket versioning
      ilm        manage bucket lifecycle
      encrypt    manage bucket encryption config
      event      manage object notifications
      watch      listen for object notification events
      undo       undo PUT/DELETE operations
      policy     manage anonymous access to buckets and objects
      tag        manage tags for bucket and object(s)
      replicate  configure server side bucket replication
      admin      manage MinIO servers
      update     update mc to latest release
      
    GLOBAL FLAGS:
      --autocompletion              install auto-completion for your shell
      --config-dir value, -C value  path to configuration folder (default: "/root/.mc")
      --quiet, -q                   disable progress bar display
      --no-color                    disable color theme
      --json                        enable JSON lines formatted output
      --debug                       enable debug output
      --insecure                    disable SSL certificate verification
      --help, -h                    show help
      --version, -v                 print the version
      
    TIP:
      Use 'mc --autocompletion' to enable shell autocompletion
    
    VERSION:
      RELEASE.2020-10-03T02-54-56Z
    [[email protected] ~]#

    Let’s try to list the file which I uploaded through mc command.

    First, we need to set the alias to the storage we want to administer.

    [[email protected] ~]# ./mc alias set minio http://xx.71.141.xx:9000/ geekflare geekpassword
    Added `minio` successfully.
    [[email protected] ~]#
    • minio is the alias name. You can change this to whatever you want.
    • Change HTTP endpoint to your real one
    • Change access and secret key with yours

    and, to list, will use ls command as below.

    [[email protected] ~]# ./mc ls --recursive minio 
    [2020-10-19 11:09:06 UTC]    11B geekflare/MinIO-Test.txt
    [[email protected] ~]#

    Great. it works!

    You can do literaly every thing through the client. Not just you can mange MinIO cloud storage but also GCS, AWS S3, Azure.

    Check out this client quick start guide for more details.

    MinIO SDK

    Depending on your application stack, you can interact with object storage programmatically using SDK. It supports Go, Python, Node.js, .NET, Haskell and Java.

    MinIO Gateway

    Add MiniIO gateway to S3, Azure, NAS, HDFS to take advantage of MinIO browser and disk caching.

    Conclusion

    If you are looking for private, hybrid or multi-cloud object storage then MinIO looks promising. Give a try and you’ll fall in love with it. To test things, you can get Kamatera’s MinIO VM or install yourself on any Cloud server.