Install Object Storage MinIO on CentOS 7
오픈소스 Object Storage MinIO 설치 가이드
MinIO 란?
오픈소스 Object Storage (오브젝트 스토리지)이며 Go 언어로 작성되었기 때문에 가볍고 빠르게 동작하는 것이 장점입니다. 설치 또한 매우 쉽게 바이너리 파일 한개를 다운로드 받는것으로 끝낼 수 있으며 개발자나 고급 사용자를 위한 컴파일 설치또한 Git 2.x 버전만 있으면 커맨드 한번으로 설치가 가능합니다.
Object Storage MinIO 는 Amazon S3 와 호환되기 때문에 개발자들은 AWS 에서 제공하는 S3 SDK 를 받아서 Endpoint 및 Region 만 추가해 주면 S3 와 똑같이 개발하실 수 있습니다. 이것은 기존에 S3 로 개발하던 소스를 수정없이 사용 가능 하고 그 반대도 된다는 뜻이 됩니다.
확인하실 점으로는 MinIO 는 AGPL v3 라이센스라는 점입니다. 자세한 설명은 MinIO 공식 페이지에서 확인해 주시기 바랍니다.
MinIO 서버
MinIO 는 MinIO 서버와 MinIO 클라이언트 두개로 구성되어 있습니다. 단순 테스트만을 위해서는 서버만 설치해도 되지만 관리를 위해 클라이언트도 설치하는 것을 반드시 권장합니다.
MinIO 서버 설치 예시
wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio
MinIO 서버 실행 예시
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /mnt/data
위와 같이 바이너리 파일을 다운 받은 후 간단하게 ACCESS_KEY 와 SECRET_KEY 입력을 하고 데이타로 사용할 디렉토리만 명시해 주면 실행됩니다. 물론 프로덕션 환경에서 실행하기 위해서는 환경설정 파일을 만들고 systemd 에 등록하여 사용하는 것을 권장 합니다.
아래는 MinIO 단일구성 환경에서 설치하는 방법에 대해 간단히 정리한 내용입니다. (분산구성 환경에서의 설치는 조금 다르기 때문에 나중에 가이드 문서를 따로 작성 하겠습니다.)
사용자 및 그룹 생성
[root@10-19-11-220 /]# groupadd --gid 991 minio [root@10-19-11-220 /]# useradd -M -r --gid 991 -s /sbin/nologin --uid 991 minio
MinIO Working Directory 생성
MinIO 는 클라이언트 커맨드를 통해 최신 버전으로 업데이트를 하거나 분산환경 구성일때 다른 노드들을 제어할 수 있습니다. 이때 MinIO 에서 read/write 가능한 권한이 있어야 하므로 /usr/bin 또는 /usr/local/bin 에 설치하기 보다는 별도의 디렉토리에 설치하는 것을 권장합니다.
[root@10-19-11-220 /]# mkdir -p /usr/local/minio/bin [root@10-19-11-220 /]# cd /usr/local/minio/bin/ [root@10-19-11-220 bin]# wget https://dl.min.io/server/minio/release/linux-amd64/minio [root@10-19-11-220 bin]# chmod +x minio
환경설정 파일 작성
: vi /usr/local/minio/minio
MINIO_ACCESS_KEY="root" # 필수값: Root 자격증명 (이름이 꼭 root 일 필요는 없습니다.) MINIO_SECRET_KEY="password12#$56&*" # 필수값: Root 자격증명의 secret key MINIO_VOLUMES="/data/storage" # 필수값: 데이터가 저장될 데이터 디렉토리 MINIO_OPTS='127.0.0.1:9100' # 필수값: 바인딩 아이피 및 포트 MINIO_BROWSER=off # 선택값: MinIO 브라우저 사용유무 (프로덕션에서는 off 권장) MINIO_REGION_NAME=pangyo-south-1 # 선택값: 리전명
ACCESS_KEY, SECRET_KEY, VOLUMES, OPTS 4개는 필수 항목입니다.
BROWSER 옵션을 ON 으로 주시면 WEB UI 화면을 보실 수 있습니다. WEB UI 에서는 버킷생성, 삭제, 업로드, 다운로드 등의 간단한 기능만 제공되며 대부분의 관리는 MinIO 클라이언트를 이용합니다. 보안상의 문제로라도 여지를 주지 않기 위해 프로덕션 환경에서는 OFF 하는 것을 권장합니다. 리전명은 원하시는대로 설정하시면 됩니다. 저는 AWS 스럽게 한번 만들어 봤습니다. 이 외에도 설정할 수 있는 환경 변수는 매우 많으며, 더 자세한 내용은 MinIO Document 페이지를 참고 해 주시기 바랍니다.
작성 후 디렉토리 및 파일 전체를 minio 계정 소유자로 변경합니다.
[root@10-19-11-220 bin]# chown minio.minio -Rf /usr/local/minio [root@10-19-11-220 bin]# chown minio.minio -Rf /data/storage
systemd 생성
: vi /usr/lib/systemd/system/minio.service
[Unit] Description=MinIO Documentation=https://docs.min.io Wants=network-online.target After=network-online.target AssertFileIsExecutable=/usr/local/minio/bin/minio [Service] WorkingDirectory=/usr/local/minio/ User=minio Group=minio PermissionsStartOnly=true EnvironmentFile=/usr/local/minio/minio ExecStartPre=/bin/bash -c "[ -n \"${MINIO_VOLUMES}\" ] || echo \"Variable MINIO_VOLUMES not set in /usr/local/minio/minio\"" ExecStart=/usr/local/minio/bin/minio server --address $MINIO_OPTS $MINIO_VOLUMES StandardOutput=journal StandardError=inherit # Let systemd restart this service always Restart=always # Specifies the maximum file descriptor number that can be opened by this process LimitNOFILE=65536 # Specifies the maximum number of threads this process can create TasksMax=infinity # Disable timeout logic and wait until process is stopped TimeoutStopSec=infinity SendSIGKILL=no [Install] WantedBy=multi-user.target
systemd 등록 및 실행
[root@10-19-11-220 bin]# systemctl enable minio [root@10-19-11-220 bin]# systemctl start minio [root@10-19-11-220 bin]# systemctl status minio
MinIO 클라이언트
MinIO 클라이언트는 바이너리 파일명이 mc 이므로 mc 라고 부르겠습니다. mc 는 MinIO 뿐 아니라 gcs, s3, 외부에 있는 원격지 MinIO 서버까지 관리할 수 있게 설계 되었습니다. MinIO 는 서버만 설치되어 있다면 s3cmd 혹은 aws cli 등을 이용해서 관리해도 상관없으나 mc 를 이용하는 것이 더 빠르고 MinIO 자체 기능들을 사용할 수 있기 때문에 mc 를 이용하는 것을 권장합니다. mc 는 버킷 관리 부터 정책 관리, 서버 관리 등 아주 많은 기능들이 들어 있으며 이 가이드에서는 아주 간단한 것들만 다루도록 하겠습니다. 자세한 내용은 MinIO Document 를 참고해 주시기 바랍니다.
MinIO 클라이언트 설치 예시
wget https://dl.min.io/client/mc/release/linux-amd64/mc chmod +x mc
mc 의 경우 서버와는 다르게 단일 파일 실행으로 모든 커맨드가 가능하므로 다른 설정은 필요없고 편하게 사용하기 위해 기본 PATH 로 설정되어 있는 /usr/bin/ 아래로 옮겨 두셔도 됩니다. 이 가이드를 따라 하셨다면 서버를 설치하실 때 바인드 주소를 127.0.0.1 로 설정했기 때문에 원격지 관리가 되지 않습니다. 그래서 반드시 mc 는 MinIO 서버가 설치된 서버에 설치해 주시기 바랍니다.
[root@10-19-11-220 /]# wget https://dl.min.io/client/mc/release/linux-amd64/mc [root@10-19-11-220 /]# chmod +x mc [root@10-19-11-220 /]# mv mc /usr/bin/ [root@10-19-11-220 /]# mc --help
mc 호스트 별칭 추가
mc 에는 기본적으로 gcs, local, play, s3 4가지의 호스트 별칭이 추가되어 있습니다. 지금은 아무 의미 없으니 그냥 삭제 해 줍니다.
[root@10-19-11-220 /]# mc config host remove gcs [root@10-19-11-220 /]# mc config host remove local [root@10-19-11-220 /]# mc config host remove play [root@10-19-11-220 /]# mc config host remove s3
MinIO 서버를 mc 로 관리하기 위해서는 mc 호스트 별칭을 추가해 주어야만 해당 별칭을 통해 관리가 가능해 집니다. 아래와 같은 식으로 호스트 별칭 추가가 가능합니다. 이 가이드에서는 별칭명을 local 로 설정하였습니다.
mc config host add [HOST Alias] http://127.0.0.1:9000 [access_key] [secret_key]
[root@10-19-11-220 /]# mc config host add local http://127.0.0.1:9100 root password12#$56&*
아래 커맨드를 이용하여 list 를 확인해 봅니다.
[root@10-19-11-220 /]# mc config host list local URL : http://127.0.0.1:9100 AccessKey : root SecretKey : password12#$56&* API : s3v4 Path : auto
아래는 간단하게 mc 를 이용하여 사용자 및 정책 등을 관리하는 예시 입니다. 더 자세한 내용은 mc help
를 이용하거나 Document 확인을 해 보시기 바랍니다.
사용자 추가 (그룹은 user 대신 group 으로 변경)
mc admin user add [HOST Alias] [계정] [비밀버호]
mc admin user add local fallboyz password1234
사용자 비활성화
mc admin user disable [HOST Alias] [계정]
mc admin user disable local fallboyz
사용자 제거
mc admin user remove [HOST Alias] [계정]
mc admin user remove local fallboyz
정책 추가
mc admin policy add [HOST Alias] [정책이름] [정책파일]
mc admin policy add local first-policy policy1.json
정책 맵핑
mc admin policy set [HOST Alias] [정책이름] user=[계정]
mc admin policy set local first-policy user=fallboyz
사용자 리스트
mc admin user list [HOST Alias]
mc admin user list local
버킷 정책 리스트
mc admin policy list [HOST Alias]
mc admin policy list local
버킷 정책 확인
mc admin policy info [HOST Alias] [정책이름]
mc admin policy info local first-policy
Tip 1. MinIO 서버는 SSL 을 지원 합니다. 흔히 알려진 Let’s Encrypt 를 이용하여 자동화 할 수도 있습니다.
Tip 2. 리버스 프록시를 이용할 수 있습니다. Caddy, Nginx, Apache 등을 이용하시면 되며, 저는 Nginx 를 이용하였습니다.
간단하게 MinIO 서버와 클라이언트 설치법에 대해 알아봤습니다. 다음엔 MinIO 의 분산모드 환경으로 설치하는 방법에 대해서 한번 간단히 알아보도록 하겠습니다.