The Personal Website of Jeremy Boles

MinIO

A self-hosted object store that speaks S3.

MinIO is a self-hosted object store, compatible with the S3 API, and able to replicate to other object stores.

Installation

There’s no Debian package, so it’s a binary and a service file. On a Debian server, start with a user for it to run as.

sudo adduser --disabled-login --no-create-home minio

Then fetch the binary and put it somewhere sensible.

wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mkdir -p /opt/minio/bin
sudo cp minio /opt/minio/bin/minio
sudo chmod 755 /opt/minio/bin/minio
sudo chown minio:minio /opt/minio/bin/minio

Somewhere for the objects, and somewhere for the configuration.

sudo mkdir -p /var/opt/minio
sudo chown minio:minio /var/opt/minio
sudo mkdir -p /etc/opt/minio
sudo chown minio:minio /etc/opt/minio

The Service File

The root user and password in the environment line below are placeholders. Change them before this is reachable by anything.

[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/opt/minio/bin/minio

[Service]
WorkingDirectory=/var/opt/minio

User=minio
Group=minio
ProtectProc=invisible

Environment=MINIO_VOLUMES="/var/opt/minio" MINIO_OPTS="-C /etc/opt/minio --address 127.0.0.1:9000" MINIO_ROOT_USER="root" MINIO_ROOT_PASSWORD="password"
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/opt/minio/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

Restart=always
LimitNOFILE=1048576
TasksMax=infinity
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now minio