포트폴리오를 배포하고 각 프로젝트를 설명하는 과정에서 옛날에 작성했던 논문을 업로드하여 URL 형식으로 접근할 수 있는 Object Storage 를 따로 구축하기로 하였습니다. Object Storage 에서 Minio 서비스는 프로젝트 진행시 사용했던 것으로 간편하고 익숙한 녀석이라 채택하게 되었습니다.
1. Minio 구축
언제나 늘 그랬듯 Minio 도 Docker Compose 방식을 활용하였습니다. Minio 를 올리기 위한 Docker Compose 는 다음 블로그와 Docker Hub 를 참고하여 작성하였습니다. https://medium.com/@randy.hamzah.h/running-minio-server-with-docker-compose-54bab3afbe31
1.1 Minio 디렉토리 및 Docker Compose 생성
mkdir /data/minio
mkdir /data/minio/data
sudo vim /data/minio/docker-compose.yml
1.2 Docker Compose 설정
필자의 경우 wg-easy 와 nginx 의 docker-compose.yml 이 각각 다른 디렉토리에 형성되어 있기 때문에 networks 를 공유해야 하는 설정을 하였습니다.
services:
minio:
image: minio/minio
container_name: minio
ports:
- "9000:9000"
- "9001:9001"
environment:
- MINIO_ROOT_USER=[minio 서비스에 접근할 아이디]
- MINIO_ROOT_PASSWORD=[minio 서비스에 접근할 비밀번호]
volumes:
- ./data:/data
command: server /data --console-address ":9001"
restart: unless-stopped
networks:
- shared_network
networks:
shared_network:
external: true
1.2 Nginx.conf 수정
기존 설정되어 있는 nginx.conf 에 추가하였습니다.rewrite ^/minio/(.*)$ /$1 break
: 정규 표현식을 통한 Nginx 에 요청된 URL 경로를 다른 경로로 변환하기 위하여 사용합니다. 예를 들어, /minio/portfolio/paper.pdf
라는 요청이 들어오면, /minio/
를 제거하고 portfolio/paper.pdf
가 (.\*)
경로에 해당하게 됩니다. 이렇게 재작성된 URL은 http://minio:9000/portfolio/paper.pdf
형태가 됩니다.
location /minio {
rewrite ^/minio/(.*)$ /$1 break;
proxy_pass http://minio:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
1.3 방화벽 설정 및 권한 설정
포트번호 9000 번과 9001 번에 접근하기 위해 공유기 방화벽과 라즈베리파이의 방화벽을 모두 해제하였습니다.
sudo ufw 9000/tcp
sudo ufw 9001/tcp
1.4 Minio 접근
모든 설정을 끝낸 후에 docker compose up -d
를 통해 컨테이너를 실행하고 192.168.1.23:9001
로 접근하면 다음과 같은 페이지가 출력됩니다. 초기 Docker Compose 설정시 지정했던 아이디와 비밀번호를 입력하여 로그인합니다.
1.5 Bucket 설정 및 file upload
좌측에 있는 Bucket 을 클릭후 우측 상단에 Create Bucket 으로 Bucket 을 생성합니다. 필자는 portfolio 로 생성하였습니다. 이후에 해당 Bucket 에 접근하여 File 을 업로드 하였습니다.
2. 문제 발생
2.1 Access Denied
파일 업로드 후에 https://portfolio.jeenukchung.com/minio/portfolio/Paper.pdf 로 접근하니 다음과 같은 권한 문제가 발생하였습니다. 해당 문제는 Minio 에 업로드 된 파일에 접근할 권리가 없다는 뜻입니다. Minio 에서는 기본적으로 업로드된 객체에 대해 권한을 설정해야 외부에서 접근할 수 있습니다. 따라서 Minio Client (mc) 를 사용하여 버킷을 공개로 변경해야 합니다. 필자는 macOS 을 사용하고 있기 때문에 brew 를 통해 mc 를 설치하였습니다.
2.2 MacBook 에 MC 설치하기
brew install minio/stable/mc
2.3 Minio 서버에 연결 설정
설치가 완료된 후에 mc 명령어를 통해 해당 파일에 접근할 수 있게 해야 합니다. 해당 명령어를 사용하여 접근하면 다음과 같이 출력됩니다.
jeenukjung@JeenukChung-2 ~ % mc alias set myminio http://192.168.1.23:9000 jeenukchung qwerty123!
mc: Configuration written to `/Users/jeenukjung/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/Users/jeenukjung/.mc/share`.
mc: Initialized share uploads `/Users/jeenukjung/.mc/share/uploads.json` file.
mc: Initialized share downloads `/Users/jeenukjung/.mc/share/downloads.json` file.
Added `myminio` successfully.
그 다음 익명 사용자에게 다운로드 권한을 부여합니다.
jeenukjung@JeenukChung-2 ~ % mc anonymous set download myminio/portfolio
Access permission for `myminio/portfolio` is set to `download`
3. html 의 <a> 태그에 PDF 뷰어 설정하기
마지막으로 <a> 태그를 눌렀을 때 해당 URL 로 넘어가게끔 설정합니다.
<a href="#" class="btn btn-default" onclick="openPDF()">논문보기</a>
<script>
function openPDF() {
window.open('https://portfolio.jeenukchung.com/minio/portfolio/Paper.pdf')
}
</script>
성공 !
'라즈베리파이 가지고 놀기' 카테고리의 다른 글
외부에서 도메인으로 접속 가능하게 설정하기 (4) | 2024.10.22 |
---|---|
docker compose 설정 변경하기 (0) | 2024.10.18 |
라즈베리파이4에 nginx 올리기 (1) | 2024.10.18 |
라즈베리파이4에 wg-easy VPN 설정하여 외부에서 접속하기 (6) | 2024.10.18 |
라즈베리파이4에 Ubuntu 22.04.05 LTS 설치하기 (4) | 2024.10.17 |