Skip to content

Instantly share code, notes, and snippets.

@huobazi
Forked from corbtastik/minio.sh
Created July 6, 2022 07:21
Show Gist options
  • Select an option

  • Save huobazi/5c65e8b4ac44a51a6e165d627cc0e64c to your computer and use it in GitHub Desktop.

Select an option

Save huobazi/5c65e8b4ac44a51a6e165d627cc0e64c to your computer and use it in GitHub Desktop.

Revisions

  1. @corbtastik corbtastik revised this gist Mar 27, 2022. No changes.
  2. @corbtastik corbtastik revised this gist Mar 27, 2022. No changes.
  3. @corbtastik corbtastik revised this gist Mar 27, 2022. No changes.
  4. @corbtastik corbtastik created this gist Mar 27, 2022.
    132 changes: 132 additions & 0 deletions minio.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,132 @@
    #!/bin/bash
    # --------------------------------------------------------------------
    # [init] Create run dir, env file if they don't exist, then source env
    # --------------------------------------------------------------------
    init() {
    MINIO_CONTAINER_NAME=$1
    MINIO_RUN_DIR=/data1/run/${MINIO_CONTAINER_NAME}
    MINIO_DATA=${MINIO_RUN_DIR}/data
    MINIO_CERTS=${MINIO_RUN_DIR}/certs
    # create run dir for container instance
    if [ ! -d "${MINIO_RUN_DIR}" ]; then
    echo "Creating MinIO run dir: ${MINIO_RUN_DIR}"
    mkdir -p ${MINIO_DATA}
    mkdir -p ${MINIO_CERTS}
    fi
    # create .env file for container instance
    if [ ! -f ${MINIO_RUN_DIR}/minio.env ]; then
    echo "Creating ${MINIO_RUN_DIR}/minio.env file."
    cat <<-ENV_FILE > ${MINIO_RUN_DIR}/minio.env
    MINIO_HOST_NAME=${MINIO_HOST_NAME:-localhost}
    MINIO_PORT=${MINIO_PORT:-9000}
    MINIO_CONSOLE_PORT=${MINIO_CONSOLE_PORT:-9001}
    MINIO_CONTAINER_NAME=${MINIO_CONTAINER_NAME}
    MINIO_DATA=${MINIO_DATA}
    MINIO_CERTS=${MINIO_CERTS}
    MINIO_USERNAME=${MINIO_USERNAME:-minioadmin}
    MINIO_PASSWORD=${MINIO_PASSWORD:-$(openssl rand -base64 9)}
    ENV_FILE
    fi
    # hydrate env
    source ${MINIO_RUN_DIR}/minio.env 2>/dev/null
    }
    # --------------------------------------------------------------------
    # [certs] Generate self-signed cert to enable TLS for minio server
    # --------------------------------------------------------------------
    certs() {
    openssl req -new -newkey rsa:4096 \
    -days 365 -nodes -x509 \
    -subj "/CN=${MINIO_HOST_NAME}" \
    -addext "subjectAltName = DNS:${MINIO_HOST_NAME}" \
    -keyout ${MINIO_RUN_DIR}/certs/private.key \
    -out ${MINIO_RUN_DIR}/certs/public.crt 2>/dev/null
    }
    # -------------------------------------------------------------------
    # [run] Start container if it exists otherwise start new container
    # -------------------------------------------------------------------
    run() {
    # Do nothing if container is aleady running
    if [ $(docker ps -aq -f status=running -f name=${MINIO_CONTAINER_NAME}) ]; then
    echo "Container ${MINIO_CONTAINER_NAME} is already running."
    return
    fi
    # Start stopped container
    if [ $(docker ps -aq -f status=exited -f name=${MINIO_CONTAINER_NAME}) ]; then
    echo "Starting existing container ${MINIO_CONTAINER_NAME}..."
    docker start ${MINIO_CONTAINER_NAME}
    return
    fi
    # Generate certs for minio server
    echo "Generating certs for ${MINIO_CONTAINER_NAME}"
    certs ${MINIO_CONTAINER_NAME}
    # Start new container
    echo "Starting new container ${MINIO_CONTAINER_NAME} ${MINIO_USERNAME}:${MINIO_PASSWORD}"
    docker run -d \
    -p ${MINIO_PORT}:${MINIO_PORT} \
    -p ${MINIO_CONSOLE_PORT}:${MINIO_CONSOLE_PORT} \
    --user $(id -u):$(id -g) \
    --name ${MINIO_CONTAINER_NAME} \
    -e MINIO_ROOT_USER=${MINIO_USERNAME} \
    -e MINIO_ROOT_PASSWORD=${MINIO_PASSWORD} \
    -e MINIO_SERVER_URL=https://${MINIO_HOST_NAME}:${MINIO_PORT} \
    -v ${MINIO_DATA}:/data \
    -v ${MINIO_CERTS}:/run/certs \
    minio/minio server /data \
    --console-address ":${MINIO_CONSOLE_PORT}" \
    --certs-dir "/run/certs/"
    }
    # -------------------------------------------------------------------
    # [stop] Stop MinIO container
    # -------------------------------------------------------------------
    stop() {
    docker container stop ${MINIO_CONTAINER_NAME}
    }
    # -------------------------------------------------------------------
    # [status] Docker stats
    # -------------------------------------------------------------------
    status() {
    docker container stats --no-stream ${MINIO_CONTAINER_NAME}
    }
    # -------------------------------------------------------------------
    # [clean] Stop and remove MinIO container.
    # -------------------------------------------------------------------
    clean() {
    docker container rm --force ${MINIO_CONTAINER_NAME} 2>/dev/null
    }
    # -------------------------------------------------------------------
    # [usage] Print script usage.
    # -------------------------------------------------------------------
    usage() {
    echo "----------------------------------------------------"
    echo "Usage: $0 {run|stop|status|clean} NAME"
    echo "----------------------------------------------------"
    echo " $0 run my-minio-server"
    echo " $0 stop my-minio-server"
    echo " $0 status my-minio-server"
    echo " $0 clean my-minio-server"
    echo "----------------------------------------------------"
    }
    # -------------------------------------------------------------------
    # [main] - init and flow
    # -------------------------------------------------------------------
    main() {
    if [ $# -lt 2 ]; then
    usage
    exit 1
    fi

    init $2
    case "$1" in
    run) run $2 ;;
    stop) stop $2 ;;
    status) status $2 ;;
    clean) clean $2 ;;
    *)
    usage
    exit 1
    esac
    }
    # -------------------------------------------------------------------
    # ENTRYPOINT
    # -------------------------------------------------------------------
    main $@