@@ -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 $@