시뻘건 개발 도전기

Object Storage with CDN(used gcore) 본문

기타/기타

Object Storage with CDN(used gcore)

시뻘건볼때기 2023. 8. 4. 23:17
반응형

일단 방금 유레카를 외치면서 한 바탕 감동의 쓰나미를 즐기다 왔다.

지금 토이프로젝트를 하고 있는데 워낙 사이즈가 크다 보니 별 삽질을 다 하는거 같다ㅜㅜ

 

방금 내가 무엇을 했냐면 minio로 Object Storage를 구축하고 CDN을 사용했다.

Object Storage가 뭐고 CDN이 뭔지는 GPT가 나보다 더 잘  알려줄테니 넘어간다.

 

자!!! 오늘의 삽질을 기록한다.

 

 

 

1. minio 구축

일단 나의 서버는 arm architecture 32bit를 사용한다.(확인하는 방법  또한 gpt에게로..)

 

  • minio 바이너리의 최신 버전을 받는다.
cd /usr/local/bin/
wget https://dl.min.io/server/minio/release/linux-arm/minio
  • 실행 권한을 부여한다.
chmod +x minio
  • minio의 전용 사용자를 생성한다.
useradd -r minio -s /sbin/nologin
  • minio 바이너리의 소유권을 minio 사용자로 변경한다.
chown minio:minio ./minio
  • minio가 잘 설치되었는지 확인할겸 버전 확인 해본다.
minio --version
  • minio storage partition을 mount한다.
fdisk -l
mkfs.ext4 /dev/sda1 # ext4 형식으로 format
mkdir /mnt/minio1
vi /etc/fstab
/dev/sda1 /mnt/minio1 ext4 rw 0 0 # /etc/fstab에 추가
mount -a # 마운트
  • mount directory를 생성할때 주의할 점.
    • minio의 경우에는 MINIO_VOLUMES 설정으로 여러 스토리지를 사용할 수 있는데 그 형식은 minio{1...n}이다.
    • 따라서 나중에 스토리지를 증가시켜야할 것을 대비하여 끝에 index로 관리하는 것이 좋다.
  • 마운트가 잘 되었는지 확인한다. 
    • 마운트가 잘 되었다면 마운트 디렉토리가 노출된다.
df -h
  • 마운트된 storage의 소유권을 minio 사용자로 변경한다.
  • minio의 설정파일을 생성한다.  
mkdir /etc/minio
chown minio:minio /etc/minio # 소유권 변경
vi /etc/minio/minio

# /etc/minio/minio에 아래 내용 추가
MINIO_ACCESS_KEY="{your access key}"
MINIO_VOLUMES="/mnt/minio1" # 여러개일 때/mnt/minio{1...n}
MINIO_OPTS="-C /etc/minio --address 0.0.0.0:9000"
MINIO_ROOT_USER="root"
MINIO_ROOT_PASSWORD="root"
  • minio 서비스 파일을 받는다.
cd /etc/systemd/system/
wget https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service
  • 서비스 파일을 수정한다.
vi minio.service

# 아래 내용으로 변경한다.
User=minio
Group=minio
EnvironmentFile=/etc/minio/minio
  • systemd 데몬 reload (변경한 내용을 적용하기 위해서)
systemctl daemon-reload
  • minio start
systemctl start minio
  • minio 상태 조회
systemctl status minio

 

2. minio 접속

  • http://{공인ip 혹은 localhost}:9000으로 접속하면 아래와 같이 minio access가 가능하다

  • id와 password는 /etc/minio/minio에서 설정했던 MINIO_ROOT_USER와 MINIO_ROOT_PASSWORD를 사용하면 로그인이 가능하다.

 

3. 내가 겪은 이슈

사실 너무나도 많은 이슈가 있어서 하나하나 기억하기가 쉽지 않다..(기록을 하면서 할 걸 그랬다...) 오죽하면 하루종일 OS를 수십번 갈아 엎었다.

내가 히고 싶었던 것은 multi storage 지원인데, 물리적인 스토리지가 하나밖에 없어서 OS를 올리고 남은 메모리를 repartitioning을 통해 마운트하여 사용하고 싶었다. 이 부분에서 얼마나 많은 오류를 만났는지 모른다.

상세한 오류 메시지는  기억이 안나지만, 내용은 아래와 같다.

  • 그 공간은 이미 커널에서 사용하고 있어!
  • 스토리지의 경로가 invalid해!
  • 재부팅이 필요해! (재부팅을 했는데 부팅이 안되는 충격을 가져다 주었다.)
    • 이 부분은 파티션을 나눌때 부팅파일이 깨진 것으로 추측이된다.

지금 이 글을 쓰면서도 수 많은 이슈를 해결해놓고 기록을 하지 못한다는 사실에 분노하고있다.......

 

 


 

4. CDN 연결

이제 Object Storage를 구축했으니 이 스토리지에 연결할 CDN을 사용해보자.

일단 CDN도 AWS cloudfront가 있지만 나는 "gcore"를 사용했다. (사실 남들 다 할줄 아는거 말고 인터넷에도 정보가 없는 걸 하고싶었다.)

 

  • cdn을 사용하기 위해서는 도메인이 필요하다.
    • 도메인을 무료로 얻기 위해서 freenom을 많이 사용하는데 나는 도메인 검색해도 아무 동작을 하지 않아서 결국 한국 도메인을 통해 도메인을 얻었다.
    • 도메인을 사용할 ip는 나의 minio가 있는 공인 ip다.
  • 도메인을 얻었다면 gcore에 접속하여 "Try for free"를 클릭하자

  • 새롭게 열린 탭에서 오른쪽 상단에 "create CDN resource"를 클릭하자.

  • Accelerate and protect only static assets를 선택하고 다음으로 넘어간다.
  • Origin Source에 좀전에 얻은 도메인을 입력한다
    • Use default port 체크를 해제하고 minio의 port를 입력한다.
  • Custom domain에는 내가 cdn을 통해  접근할 url을 입력해준다.
  • cl-gl99715be3.gcdn.co를 복사해서 도메인을 얻은 곳에서 CNAME을 도메인에 맵핑시켜줘야한다.

  • CNAME을 나의 도메인으로 연결한다.

  • 나머지는 계속 다음으로 넘어가기만 하면 된다.
  • minio에 버킷을 생성하고 필요시 디렉토리를 생성한 다음에 이미지를 업로드하면 아래와같이 cdn으로부터 이미지를 가지고올 수 있다.

 

 

참고문헌

 

반응형

'기타 > 기타' 카테고리의 다른 글

시니어 개발자가 되려고 하는 과정  (1) 2024.02.15
주니어 개발자에게 이직이란?  (0) 2022.01.28
개발자의 학습 태도  (0) 2020.10.05
주니어 개발자의 직장 생활  (0) 2020.07.12
Comments