Skip to content

Instantly share code, notes, and snippets.

@avoidik
Last active July 3, 2022 19:18
Show Gist options
  • Save avoidik/5b4b5a7948b6f1aa35379c43ff6ecdc2 to your computer and use it in GitHub Desktop.
Save avoidik/5b4b5a7948b6f1aa35379c43ff6ecdc2 to your computer and use it in GitHub Desktop.
Run Minio as systemd service

Run Minio on Raspberry Pi using systemd

This short how-to guide covers only single-node Minio setup

Steps

Add system user

sudo mkdir -p /opt/minio/certs
sudo addgroup --system minio
sudo adduser --system --home /opt/minio --shell /usr/sbin/nologin --no-create-home --gecos 'minio' --ingroup minio --disabled-login --disabled-password minio

Mount storage

Create folder

sudo mkdir -p /media/disk
sudo chown -R minio:minio /media/disk

Add line to /etc/fstab file (use blkid to identify your device)

UUID=7C04AC0604ABC18E /media/disk ntfs async,big_writes,noatime,nodiratime,nofail,uid=minio,gid=minio,umask=007,errors=remount-ro 0 2

Mount

sudo mount -a

Install Minio

sudo curl -fsSL https://dl.minio.io/server/minio/release/linux-arm/minio -o /opt/minio/minio
sudo chmod +x /opt/minio/minio

Enable SSL

sudo curl -fsSL https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-arm -o /usr/local/bin/mkcert
sudo chmod +x /usr/local/bin/mkcert
sudo mkcert -install
sudo update-ca-certificates
sudo mkcert -cert-file /opt/minio/certs/public.crt -key-file /opt/minio/certs/private.key example.org 1.2.3.4 # change hostname and ip to yours
sudo chown -R minio:minio /opt/minio/cert
sudo openssl verify -verbose -CAfile ~/.local/share/mkcert/rootCA.pem /opt/minio/certs/public.crt

Defaults

Create /etc/default/minio file

# Volume to be used for MinIO server.
MINIO_VOLUMES="/media/disk/"
# Use if you want to run MinIO on a custom port.
MINIO_OPTS="--certs-dir /opt/minio/certs --address 192.168.1.200:9000 --anonymous --quiet"
# Access Key of the server.
MINIO_ACCESS_KEY="user"
# Secret key of the server.
MINIO_SECRET_KEY="secret"
# Region name
MINIO_REGION_NAME="home-local"
  • Generate MINIO_SECRET_KEY value long and secure enough
  • Replace IP with yours

Service

Create /etc/systemd/system/minio.service file

[Unit]
Description=Minio Storage Service
After=network.target
AssertFileIsExecutable=/opt/minio/minio

[Service]
User=minio
Group=minio
EnvironmentFile=-/etc/default/minio
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/minio server $MINIO_OPTS $MINIO_VOLUMES
WorkingDirectory=/opt/minio
ReadWriteDirectories=/media/disk
StandardOutput=inherit
StandardError=inherit
LimitNOFILE=65536
Restart=always
TimeoutStopSec=infinity
SendSIGKILL=no
LimitNPROC=64
PrivateTmp=true
PrivateDevices=true
ProtectHome=true
ProtectSystem=strict
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

Enable service

sudo systemctl daemon-reload
sudo systemctl enable minio.service
sudo systemctl start minio.service
sudo systemctl status minio.service

Optional: Compile Minio yourself

(
git clone https://github.com/minio/minio.git ~/minio
cd ~/minio
git checkout master
git pull
go install -v -ldflags "$(go run buildscripts/gen-ldflags.go)"
sudo cp ~/go/bin/minio /opt/minio/minio
sudo chmod +x /opt/minio/minio
)

(
git clone https://github.com/minio/mc.git ~/mc
cd ~/mc
git checkout master
git pull
go install -v -ldflags "$(go run buildscripts/gen-ldflags.go)"
cp ~/go/bin/mc ~/.local/bin/mc
chmod +x ~/.local/bin/mc
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment