컴퓨터로 서버를 지정할까 했는데 아무래도 괜히 또 문제 생길까 무서워서 그냥 Oracle Cloud로 무료로 할 수 있다고 해서 해보려고 한다.
계정도 다 만들었고, 신용카드 등록가지 하고 로그인하니까 이런 창이 떴다. 서버는 일본의 오사카에 있는 서버를 골랐다.
이런게 떴는데 보안 관련된거라고.
여기서 앱 다운 받아서 설정해주면 된다.
다하니까 이런 창으로 넘어갔다. 뭔지 하나도 모르겠네
일단 나는 API를 배포하려는 것이 목적이기 때문에
- Cloud-native developer: 클라우드 환경에서 컨테이너와 같이 클라우드 기반 애플리케이션을 배포하고 관리하는 경우에 적합해. 네가 Docker 컨테이너로 API 서버를 배포하려는 경우에 맞는 선택이야.
- DevOps engineer: 서버 배포 및 운영, CI/CD와 관련된 개발 환경을 원하는 경우에 적합해. 인프라와 운영에 대해 좀 더 심화된 옵션들을 제공받을 수 있어.
라니까 이렇게 선택해서 가보자.
이제는 VM 인스턴스 생성을 해주자.
여기 클릭해주면 된다.
여기서 제일 중요한 Always Free 설정이 제대로 적용되어있는지부터 먼저 확인해주고..
다음이 이미지에 대한 설정인데,
뭐 할건 없는게 이게 무료다. 그래도 둘러보자면.
얘도 무료네, GPT는 얘를 추천하긴 하더라.
Ubuntu
가 초보자가 사용하기 좋다고한다. 오류 같은게 생기면 어떤 오류인지 잘 제공한다고..
그래서 난 제일 안정적이라는 Ubuntu 22.04
를 선택하고 넘어가야겠다.
그리고 보니까 밑에는
이런게 있던데.. 이것도 공짜 표시 잘 되어있으니까 그냥 설정 그대로 넘어가자.
이제 여기가 문젠데 저기 다운 버튼을 곡 클릭해서 다운 받아둬야한다.
난 개인 공용 두개 다 저장하고 따로 폴더를 만들어서 옮겨뒀다.
밑의 나머지 설정들은 다 그대로 둔 상태로 생성 버튼 클릭.
시간이 조금 걸려서 기다려줬다.
오오 생성됐다!!
이제 여기서 공인 IP 주소를 확인하고 내 프로젝트에다가 연결해주면 된다.
다음으로 해야 할 일은 SSH로 접속해서 인스턴스에 필요한 설정을 진행해야한다. 생성된 인스턴스에 접근하려면, 공인 IP 주소 (Public IP address)를 사용하면 됨.
SSH 접속 방법
터미널을 열고, 다음 명령어를 사용해 접속:
ssh -i /path/to/your/private-key ubuntu@217.142.xxx.xxx
여기서
/path/to/your/private-key
는 내가 저장한 SSH 개인 키 파일의 경로.예를 들어, 키 파일을 다운로드한 위치가
~/Downloads/
라면:ssh -i ~/Downloads/your-private-key.pem ubuntu@217.142.xxx.xxx
초기 접속 시 "Are you sure you want to continue connecting?"이라는 메시지가 나오면 yes라고 입력.
접속이 성공하면, 이제 인스턴스에 접속해서 Docker 설치 등 필요한 작업을 진행할 수 있음.
이 순서대로 진행하는데 오류가 떠서 보니까 다운 받은 KEY의 권한 때문이여서 권한 설정을 추가로 진행해줬다.
정상 실행 확인했다.
이제 Docker
를 또 따로 방금 연 서버에 다운 받아줘야한다.
서버에 접속한 상태로
sudo apt update
sudo apt install docker.io -y
sudo systemctl start docker
sudo systemctl enable docker
순차적으로 진행해주면 된다.
완료 했고..
이제는 도커이미지를 서버에 업로드 시켜야된다.
그래서 여태 도커 가입 안한 상태로 사용중이였는데 회원가입을 진행했고,,
터미널에서 로그인 실행.
그리고 해당 명령어로 image
를 Docker Hub
에 push 했다.
push 했기 때문에 내가 만든 공인 서버에서 pull을 진행하면 된다.
docker pull blackbird9711/star-info-api:latest
아 여기서 문제가 하나 발생했는데 계속 말했다 시피 난 Mac 환경이다. 그래서 push 한 이미지 파일이 ARM의 형태인데 서버에서 받아드리는게 달라서 오류 발생. 이미지 파일을 업로드 할 때 이를 해결하고 업로드 해줘야한다.
docker buildx create --use
docker buildx build --platform linux/amd64,linux/arm64 -t blackbird9711/star-info-api:latest --push .
해당 명령어로 다시 업로드 했고, 다시 pull 해보자.
정상 작동하는 것 같다.
저게 완료가 되면 여태 계속 해오던 것 처럼 저기서 따로 또 실행을 시켜주면 된다.
정상적으로 응답이 온다.
근데 이게 지금 문제가 크롬에서는 접속이 안된다.
이건 포트 방화벽 문제라서 설정을 해줬다.
그리고 오라클 서버 콘솔에서도
포트 5555에 대한 설정을 해줘야했다.
설정하고 난 이후 크롬에서는
오케이. 잘 작동한다.
근데 이제 좀 다시 문제가 있는데 별자리 데이터는 DB 접근이 없는 로직이라 잘 작동하는데 지금 DB에 대한 처리를 해주지 않아서 내가 연 서버에 로우 데이터가 없는 상황이다.
그래서 DB도 배포를 해줘야함..
일단 서버로 docker-compose.yml
을 전송시켜주어야 한다고 한다.
해줬고,
오류가 몇번 발생해서 다른 파일들도 전송해줬다.
하고 다시 실행했는데 이번엔 그 전에 5555포트를 점유하고 있던 도커 서버가 문제라서 정지, 삭제 후 다시 진행..
됐다!
폐기 다른 서버로 열어봐야겠다.
겪은 문제가 뭐냐면 전의 포스팅에서 wait-for-it.sh
을 받아서 사용했었는데 이거 없이도 될 것 같아서 프로젝트 내에서 삭제 했었다. 그리고 이미지를 재빌드 하고 push, pull 했는데 여전히 저 파일을 찾는 문제가 지속되어서 계속 시도 해봐도 안된다.
그리고 30일 후에 서버도 유로로 바뀌어서 어차피 다른 서버를 사용해야된다. 그래서 삭제 다른거 찾아보자.
삭제함.
기존 구글 콘솔에서 이용하던 타임존이나 구글 로그인 등등 있으니까 GCP로 처리해보자.
여기 VM 만들기로 이동.
여기서 라이브러리 다운 받아주고
인스턴스를 만들어주자.
일단 만들어서 한번 봤는데 무료로 사용하기는 어려움이 있을 것 같아서 딴걸 찾아봐야될 것 같다.
그냥 오라클로 서버를 다시 파자.. AWS로 하고 싶은데 여기가 비용 논란이 있었던 걸 알아서 굳이 모험하고 싶지 않다.
서버 다시 아까의 절차대로 만들었다.
서버 켜보기 전에
여기 와서 저번에 했던 그 포트 열어주는 작업도 바로 다시 했다.
서버 켜진거 확인했다.
초기 설정들과 docker를 사용하기 위한 환경 구축 해주고 pull 중임.
pull 완료 했고,
docker-compose.yml
생성해주고 작성하고 저장 후에 실행 시켜봄.
지금 새로 하면서 내가 겪었던 문제가 뭐였는지 정확히 보이는데, 난 도커 이미지를 푸쉬하면 docker-compose.yml
같은 파일도 함께 올라가는 줄 알았다. 근데 지금 보면 파일을 서버내에 생성해주고 있지 않은가? 맞다. 이 파일을 수정해야되는데 내가 프로젝트에서 수정을 하고 앉았으니 설정이 바뀔리가 없지.. 그래도 원인은 정확하게 파악했으니까 이제는 문제 생길 일은 없겠지.
여튼 필요한거 다 하고 정상 작동까지 되는 것도 확인했다.
이제 볼륨을 서버로 옮겨주는 작업만하면 진짜 끝.
볼륨 이름 확인해주고,,
mysql_data_backup.tar.gz
로 백업.
이제 scp로 서버에 전송시켜주면 된다.
전송했고 서버에 파일 확인후에 압축 풀어서 복원시키기..
오케이
여기 보면 DB 데이터도 잘 넘어갔다.
아니 잘 안넘어갔다. 저거 깡통이다.
한참 걸리긴 했는데 sudo docker volume ls
명령어로 보니까 볼륨이 내가 덮어쓰기를 할 star-info-api_mysql_data
하나와 ubuntu_star-info-api_mysql_data
가 존재했다. 아마 여기서 컨테이너를 지우고 다시 만들 때, docker-compose.yml
의 설정에서 설정한 볼륨인 star-info-api_mysql_data
에 멋대로 ubuntu_
이런 걸 붙히는게 원인이였던 것.
그래서 볼륨일단 다 삭제해주고 이름에 뭘 붙힌다는 규칙을 알았으니까 애초에 덮어쓰기를 해당 볼륨을 타겟해야한다.
sudo docker run --rm -v star-info-api_mysql_data:/volume -v
$(pwd):/backup busybox tar xzf /backup/mysql_data_backup.tar.gz -C /volume
기존에는 계속 이렇게 진행을 해서 적용이 안됐고,
sudo docker run --rm -v ubuntu_star-info-api_mysql_data:/volume -v
$(pwd):/backup busybox tar xzf /backup/mysql_data_backup.tar.gz -C /volume
이렇게 바꿔서 실행해봤다.
이제 진짜 다 들어왔네.
어휴 진짜 왜 지멋대로 뭘 붙히냐 짜증나게 여튼 해결 완료 이제 요청이 제대로 받아드려지는지 확인해보면 된다.
행성 데이터 요청해봤고 반환 잘 함.
행성 대접근도 잘 함.
유성우도 잘 함.
굳 DB의 로우데이터에 접근해야 작동했던 로직도 오류 없이 잘 받아준다.
이러면 배포도 끝이다 솔직히 도메인 설정도 해보고 싶은데 난 돈이 없으니까 여기까지 하련다.
이제 API 사용법 올리고 팀원한테 공유하면 될듯.
'Coding History > Team Project' 카테고리의 다른 글
팀플) Merge 기록 (0) | 2024.11.04 |
---|---|
팀플) Star Info API 요청 방식 설명. (0) | 2024.10.31 |
팀플) 별자리 데이터 검증. (0) | 2024.10.30 |
팀플) 유성우 가시성 판단 로직 -> 달의 위상구하기까지 (0) | 2024.10.27 |
팀플) 유성우데이터 DB 저장, 조회기능 SQLAlchemy (0) | 2024.10.25 |