minio in synology
S3 minio self hosted your synology nas
이번 시간에는 synology container manager를 이용하여 minio 를 docker에 올려보자.
Docker compose
services:
minio:
image: 'quay.io/minio/minio:RELEASE.2025-04-22T22-12-26Z'
command: 'server /data --console-address ":9001"'
# [변경점] environment 섹션을 삭제하고 아래 한 줄로 대체 가능
# 단, 이때는 .env 파일 내부의 변수명이 MINIO_ROOT_USER 처럼
# MinIO가 요구하는 이름과 정확히 같아야 함.
env_file:
- .env
volumes:
- '/volume1/docker/minio/data:/data'
- '/volume1/docker/minio/config:/root/.minio'
ports:
- 7412:9000
- 7413:9001
healthcheck:
test: ["CMD", "mc", "ready", "local"]
interval: 5s
timeout: 20s
retries: 10
SERVICE_PASSWORD_MINIO=32자의_강력한_token
SERVICE_USER_MINIO=16자의_강력한_token
MINIO_BROWSER_REDIRECT_URL=https://minioconsole.도메인
MINIO_ROOT_PASSWORD=$SERVICE_PASSWORD_MINIO
MINIO_ROOT_USER=$SERVICE_USER_MINIO
MINIO_SERVER_URL=https://minioapi.도메인
MINIO_REGION_NAME=us-east-1
MINIO_REGION=us-east-1token 생성은 https://1password.com/password-generator 에서도 가능합니다.
Nginx Proxy Manager를 이용하여 역방향 프록시를 설정합니다.
위에서 설정한 2개의 서브도메인을 연결합니다.
1. 포트 9000번 vs 9001번의 역할
이 두 포트는 용도가 완전히 다르므로 NPM에서 Proxy Host를 만들 때도 구분해야 함.
- 포트 9000 (API Server):
- 역할: 실제 데이터를 주고받는 핵심 통로. 프로그램, 코드, 백업 툴 등이 접속하는 곳.
- 연결:
s3.domain.com같은 도메인을 할당하여 이 포트(7412 -> 9000)로 연결해야 함.
- 포트 9001 (Web Console):
- 역할: 웹 브라우저에서 로그인하여 버킷을 생성하고 파일을 눈으로 보는 관리자 화면.
- 연결:
console.domain.com같은 도메인을 할당하여 이 포트(7413 -> 9001)로 연결해야 함.
docker-compose.yml에서 호스트 포트를 7412와 7413으로 매핑했으므로, NPM에서는 컨테이너 내부 포트(9000)가 아니라 시놀로지 IP와 7412, 7413 포트를 향하게 설정해야 함.2. NPM 스위치 설정 (True/False 권장값)
MinIO의 특성에 맞춰 포트별로 설정이 다름.
대상 포트 | 설정 항목 (Option) | 권장값 | 설정 이유 |
9000 (API) 데이터 전송용 | Cache Assets | False | 실시간 데이터 정합성 유지 필수 (캐싱 시 오류 발생) |
Block Common Exploits | False | (중요) S3의 복잡한 서명 헤더나 바이너리 업로드가 공격으로 오인되어 차단되는 것을 방지 | |
Websockets Support | True | 이벤트 알림 등 긴 연결 유지를 위해 필요 |
대상 포트 | 설정 항목 (Option) | 권장값 | 설정 이유 |
9001 (Console) 관리자 웹 UI | Cache Assets | False | 관리자 패널의 상태 변경 사항이 즉시 반영되어야 함 |
Block Common Exploits | True | 일반적인 웹 공격(XSS 등)으로부터 관리자 페이지 보호 | |
Websockets Support | True | 대시보드의 실시간 상태 모니터링(그래프 등) 작동을 위해 필수 |
3. Advanced Tab 설정 (Custom Nginx Configuration)
경고 문구("your own risk", "header ignored")는 NPM의 기본 로직과 충돌할 수 있으니 주의하라는 뜻임.
MinIO는 대용량 파일 업로드와 헤더 처리 때문에 아래 설정이 필수적임.
특히 9000번(API) 포트 설정에는 반드시 아래 내용을 넣어야 함.
입력할 코드 (9000번, 9001번 모두 권장)
NPM의 해당 Proxy Host 설정 -> Advanced 탭에 아래 내용을 복사해서 붙여넣음.
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;web UI console
[긴급]
2025년 중반(약 5월)부터 MinIO는 오픈소스(Community Edition) 정책을 대대적으로 변경하면서 관리자 웹 콘솔(Admin Console) 기능을 무료 버전에서 제거했음.
1. 사라진 이유: 정책 변경 (Object Browser vs Admin Console)
- 변경 시점: 2025년 5월경 업데이트부터 적용됨.
- 변경 내용:
- 과거 (2024년 버전 등): 웹 UI에서 유저 생성, 정책 설정, 모니터링, 로그 확인 등 모든 관리자 기능이 가능했음 (카게가 첨부한 스크린샷 화면).
- 현재 (2025년 9월 버전): 무료 Docker 이미지는 단순 "Object Browser" 역할만 하도록 기능이 축소됨. 버킷을 보고 파일을 올리는 것 외에 유저 관리, 그룹, 정책, 모니터링, Subnet(라이선스) 메뉴가 전부 삭제됨.
- MinIO 측의 입장: "완전한 관리자 UI 기능은 이제 상용 솔루션인 AIStor의 기능이다. 커뮤니티 사용자는 CLI 도구(
mc)를 사용하라"는 입장임.
따라서 위에 yml 안에 내용을 변경하였습니다.
Buckets & API key




활용방법
버켓을 누구나 읽기 설정을 해두었기에, 전역접속url 할 수 있으면 해당파일에 접근을 할 수 있다. 이 방식은 노션도 같다.
예를 들어서, 노션에서 이미지를 업로드 후 이미지를 노션에서는 삭제를 하지만, 이이미지의 URL을 미리 알고 있다면 당연히 직접 접근을 할 수 있다.
url_share직접접속링크
따라서, api URL로 접근을 하시면 됩니다. 위에 stack에서 api url 을 만들었으니, 아래 방식입니다.
https://minioapi.도메인/buckets_name/업로드파일이름.확장자
필자는? 어떻게?
mac에서는 아래의 앱에 S3지원하지에 Transmit 앱, Dropzone 앱, cloudmount 앱, mountain duck 앱 등이 있습니다.
cloudmount
아래처럼 세팅해서 파일 업로드 후 링크를 직접 만들어서 공유할 수 있다.

나머지 앱도 같은 방식으로 접속을 할 수 있다.
끝.