1.  도커 이미지 리눅스 cpu 타입 체크

2.  해당 이미지 리눅스 cpu 타입에 맞는 EC2 설치 

 

3.  EC2 실행 후 도커 설치 이미지 가져오기

1. 도커 설치

sudo yum update -y
sudo yum install -y docker

2. 권한 부여

sudo usermod -aG docker $USER

3. 도커 서비스 시작

sudo service docker start

4. 이미지 가져오기 (주의: 도커에 로그인 하지 않으면 public 이미지만 가져오는 것이 가능)

docker pull {이미지 명} ex: suhanlim/druginfo-app:latest

 5. 도커 이미지 실행 시키기 (스프링 톰켓 기준 8080포트, 이미지 명)

docker run -d -p 8080:8080 suhanlim/druginfo-app:latest

 

장점

  • 따로 프로그램을 실행시키기 위한 프로그램들을 설치할 필요가 없어 간편하다.
  • nohub 명령어를 통해 죽지 않게 프로그램을 실행시킬 필요 없이 콘솔 종료 후에도 잘 동작한다. 

'Development > AWS' 카테고리의 다른 글

EC2 웹 서비스 배포시 인바운드 규칙  (0) 2023.08.12
EC2 접속 in Mac OS (bed permissions)  (0) 2023.08.12

전제 조건

  • Docker가 설치 되어 있고 실행 중 이어야 한다.
  • 스프링 프로젝트를 jar파일로 내보내고 root/target/ 에 따로 빼두어야 한다.
  • Docker에 계정으로 로그인 되어 있어야 한다.

 

1.  루트 디렉토리에 Dockerfile 만들기

FROM {jdk 명} ex: openjdk:17-jdk 
COPY {jar 파일 경로명} ex: target/druginfo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

경로에 파일 있는지 확인

 

2.  Docker 파일 빌드, Docker hub에 업로드

docker build -t [이미지 이름] .
docker tag [이미지 이름] username/[이미지 이름]:latest
docker push username/[이미지 이름]:latest

Docker 허브에 잘 올라와 있는지 확인

 

ip 주소에서 특유의 도메인을 사용하여 웹사이트를 배포하는 방법을 찾다가 알게된 지식을 차후에 다시 볼 수 있도록 기록한 내용

 

1.  도메인 주소 구매

https://www.gabia.com/

사진 속에서는 비용이 만만치 않아 보이지만 event domain을 구매하면 1년 기준 500~1000원 정도로 저렴하게 구매하는게 가능하다.

아래는 사진 예시

 

2.  AWS Route 53 이용

 

3.  도메인 관리 버튼에서 네임서버 설정

.은 빼야한다 (중요)

네임서버 정보변경은 루트서버 갱신 및 네임서버 캐시에 따라, 적용되는데 1~2일 정도 소요될 수 있다고 합니다.

 

도움 받은 글

https://seill.tistory.com/1112

 

요약

  1. 도메인 구매
  2. AWS Route 5S 서비스 사용
  3. 도메인 구매 사이트에서 네임 서버 등록 

 

Route 5S 서비스 이용 이유

다른 DNS 서비스를 사용해서 도메인 주소를 연결 할 수도 있지만 AWS에 있는 Route 5S 서비스를 이용하는 이유

  1. 통합성: Route 53은 기존 AWS 서비스와  통합된다.
  2. 높은 가용성: Route 53은 높은 가용성과 안정성을 제공하는 전 세계의 DNS 서버 네트워크를 활용하여 가용성과 안정성이 높다.
  3. 헬스 체크: Route 53은 헬스 체크 기능을 제공하여 특정 리소스의 상태를 모니터링 하고 문제 발생 시 트래픽을 다른 리소스로 자동으로 리디렉션 가능하다.
  4. 간단한 관리: AWS 서비스의 특징으로 Management Console을 통해 설정을 쉽게 관리할 수 있다.

도메인 구매 사이트에서 네임 서버 등록이 필요한 이유

네임 서버의 역활은 해당 도메인에 이름을 ip주소로 변환하는데 필요한 정보 제공해 주는 것이기 때문에

네임 서버의 등록이 되어 있지 않다면 도메인 주소를 통해 특정 ip 주소로 이동하는 것이 불가능하다. 

따라서 필수적으로 등록해 주어야 한다.

'Development > Git' 카테고리의 다른 글

Git Projects  (0) 2023.08.20
.gitignore 파일  (0) 2023.07.27
좋은 commit, Pull Request, branch 작성 방법  (0) 2023.07.24
Git branch 전략 (GitLab-Flow)  (0) 2023.07.24
Git branch 전략 (GitHub-Flow)  (1) 2023.07.23

 

초기 EC2 배포시 접속이 안될 때 가장 유력한 원인인 인바운드 규칙의 추가의 관한 내용을 기록하기 위해 작성

 

인바운드 규칙 추가

저 같은 경우는 8080 톰캣 포트를 사용하는 SpringBoot 프로젝트를 배포 하는 상황이므로 

규칙 추가 버튼을 사용하여 TCP 8080 포트 허용을 넣어 주어야 한다.

 

잘 실행이 되는 모습

'Development > AWS' 카테고리의 다른 글

(AWS, Docker) Docker image이용 배포  (0) 2023.08.12
EC2 접속 in Mac OS (bed permissions)  (0) 2023.08.12

1.  EC2 초기 생성시 key 파일 생성

 

2.  SSH 를 이용해 접근 시도

ssh -i {키 파일 이름}.pem ec2-user@{퍼블릭 IPv4 주소}

해당 메시지가 출력 되면서 접속이 실패하게 되는데 

자세한 원인은 해당 key 파일에 너무 많은 권한이 부여되어 있어 안전하지 않기 때문이다.

SSH는 private key의 보안을 매우 엄격하게 다룬다.

하지만 초기 ec2에서 key 파일을 생성시 

다음과 같이 chmod 644권한 수준을 초기에 가지고 있는데 이는

파일 소유자는 읽기 쓰기 권한, 그룹은 읽기 권한, 기타 사용자도 읽기 권한을 가지게 된다.

따라서 사실상 파일 소유자가 아니어도 기본적으로 모두 읽기가 가능하여 ssh가 보기에는 너무 많은 권한을 가지고 있는 것 으로 본다.

 

3.  해결법: chmod 400 ~파일명

chmod 400 {파일명}

위에 명령어를 통해 우리는 해당 파일을 읽는 권한만 사용하도록 부여하는 것이 가능하다.

참고로 chmod 뒤에 나오는 3자리 숫자는 2진법으로 계산했을 때 각 자리수는 앞 부터 소유자, 같은 그룹, 기타 사용자의 접근 권한을 

4: r (읽기), 2: w(쓰기), 1: x(실행) 의 합산을 표시하는 것 이다 

즉 chmod 400 {파일명}은 소유자에게만 읽기 권한을 제공한다는 의미이다.

 

접속 성공~

'Development > AWS' 카테고리의 다른 글

(AWS, Docker) Docker image이용 배포  (0) 2023.08.12
EC2 웹 서비스 배포시 인바운드 규칙  (0) 2023.08.12

상황

프로젝트 파일 실행시 grable이 전혀 빌드가 되지 않고 

java.io.StreamCorruptedException: invalid type code: 00
> invalid type code: 00

* Try:
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

다음 문구가 터미널에 출력 되는 상황

 

원인

주로 gradle의 버전이 맞지 않아서 발생한다고 한다.

해결법

settings -> Preferences -> Build, Execution, Deployment -> Build Tools -> Gradle

경로에서 설정된 Gradle의 JVM이 Spring 프로젝트를 만들었을 때 설정한 jdk와 동일하게 맞추어 주면 된다.

Group (패키지 이름)

    • 조직이 도메인을 가지고 있을 시 조직의 도메인을 거꾸로 적는다.
    • 특정 웹사이트 도메인이 없을 경우 Group은 회사나 조직의 이름과 프로젝트/팀 이름을 포함하는 것이 일반적
      • ex: com.[회사 또는 조직 이름].[프로젝트 또는 팀 이름]
    • Oracle표준 패키지 이름은 소문자 ASCII (a-z), 숫자 (0-9),  그리고 마침표 (.)로 이루어져야 한다.
      • 추가로 숫자를 시작으로 하는 것은 허용하지 않는다.

Artifact

  • 프로젝트 또는 애플리케이션의 이름
  • 소문자로 작성하며 공백이나 특수문자는 사용하지 않는다.
  • ex: 팀명 DrDrug → drdrug

Name

  • 프로젝트 명
  • Artifact와 비슷하게 작성

Description

  • 프로젝트에 대한 간략한 설명

Package name

  • Java 패키지의 이름으로, 일반적으로는 Group과 Artifact를 합친 이름을 사용

상황

안드로이드 어플에서 찍은 사진을 multipart-type요청으로 body에 담아 서버로 요청을 보냈을 때 발생

 

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded] with root cause

이유

사용자가 업로드하려고 시도한 파일의 크기가 서버에서 설정된 최대 업로드 가능 크기를 초과하였기 때문

SpringBoot에서 기본으로 설정된 최대 업로드 크기는 1048576 바이트(약 1MB) 만약 파일의 크기가 이 값을 초과한다면 FileSizeLimitExceededException 에러가 발생한다.

이 문제를 해결하기 위해서는 서버의 파일 업로드 제한을 증가시키거나, 사용자가 업로드하는 파일의 크기를 줄여야 한다.

 

해결

# application.properties 버전
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

# application.yml 버전
spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB

Spring Boot에서는 application.properties 또는 application.yml 파일에서 명시하여 파일 업로드 크기를 조정하여 해결 할 수 있다.

+ Recent posts