배포과정(요약설명)
- 방법
- AWS EC2에서 프로젝트를 GitHub에서 Clone 받는 방식
- AWS EC2에서 프로젝트를 Docker Hub에서 Clone받는 방식 --> private로 1개까지 가능
- 과정(1번 방법)
- GitHub에서 applicagtion.properites, Dockerfile, docker-compose파일에 대해 보안성 검토 후 GitHub에 Push
- AWS EC2에서 GitHub에서 Clone받는 방식으로 Docker로 배포 진행 -> env파일은 AWS상에서 따로 작성
- 레퍼런스
- https://sjh9708.tistory.com/100 (참고)
- EC2 java17설치 : https://languagestory.tistory.com/154
- EC2 Gradle 설치 : https://velog.io/@k0000k/%EB%A6%AC%EB%88%85%EC%8A%A4%EC%97%90%EC%84%9C-Gradle-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0
- 빌드(./gradlew build) : https://brunch.co.kr/@topasvga/3553
(@Test코드에서 postgresql연결상태를 확인하기 때문에 현재 postgresql은 실행되지 X
-> sudo ./gradlew build -x test로 테스트는 제외하고 빌드 진행해야 정상 빌드됨) - "When using COPY with more than one source file, the destination must be a directory and end with a /" 오류발생 시
-> /build/libs/에 jar파일 개수 확인 후 한 개만 남기고 삭제(프로젝트이름-0.0.1-SANAPSHOT.jar남기기) - 외부접속을 위해 inbound규칙 추가 : https://developer-heo.tistory.com/48 (기존에 만들어진 보안그룹 ID를 클릭해서 수정 launch-wizard1,2를 변경해야 적용이 되었음)
- https://velog.io/@zosungwoo/Docker-Docker%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%B4-AWS-EC2%EC%97%90-%EB%B0%B0%ED%8F%AC%ED%95%B4%EB%B3%B4%EA%B8%B0-usol0ebm
- https://lucas-owner.tistory.com/48
- https://velog.io/@ckdgusjang/Docker-%EC%84%A4%EC%B9%98%EB%B6%80%ED%84%B0-Docker-hub-%EC%9D%B4%EB%AF%B8%EC%A7%80-push-%EA%B9%8C%EC%A7%80
- https://sjh9708.tistory.com/100 (참고)
- 이슈
- 인스턴스 연결 안 됨 : https://youngkyonyou.github.io/springboot/2021/05/16/springboot-post15.html
(cpu100%로 swap메모리 할당으로 해결)
- 인스턴스 연결 안 됨 : https://youngkyonyou.github.io/springboot/2021/05/16/springboot-post15.html
배포과정(세부내용)
- 재배포시 필요 사전 작업
- sudo docker-compose down (프로젝트 폴더 안에서)
- 사용하지 않는 컨테이너, 이미지 삭제(sudo docker rm(i) <ID>)
- sudo docker contatiner ls -a
- sudo docker images
- sudo rm -rf 프로젝트
- 배포 방법
- sudo git clone <URL> ( git clone --branch develop <URL>)
↓↓↓↓↓↓↓↓프로젝트 폴더 안에서 작업↓↓↓↓↓↓↓↓ - .env(+.env.prov)파일 추가, docker-compse파일 수정
2-1. application.properties에서 spring.profiles.active=prod 설정(.env.prod설정 파일 사용)
2-2. docker-compse에 참조할 env파일이 여러개일 경우 정상동작X, 필요한 .env.prod만 작성 - keystore.p12파일 프로젝트내에 이동
- sudo chmod u+x gradlew
- sudo ./gradlew build -x test
- cd /build/libs에 있는 jar파일 중 -SHANPSHOT.jar만 남기고 plain들어간 것은 삭제
- sudo docker-compose up -d
- sudo git clone <URL> ( git clone --branch develop <URL>)
- 기타
- Redis설치
(레퍼런스 -> 해당 레퍼런스는 aws에 redis를 설치하는 과정!
-> docker에 redis를 설치해서 사용할 경우 충돌이 나지 않도록 sudo systemctl stop redis로 종료!)- https://wookgu.tistory.com/26 (->설치 참고)
- https://jindevelopetravel0919.tistory.com/187 (-> 설정 참고)
- https://dangdangee.tistory.com/entry/Redis-ec2%EC%97%90-%EB%A0%88%EB%94%94%EC%8A%A4-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0 (-> aws 인바운드 설정 참고)
- docker-compose설정 추가 (설정 파일 참고) -> aws에 설치 하지 않고 docker이미지로 설치해서 사용 => docker를 실행하면 프로젝트, postgres, redis 이미지를 docker-compse에서 관리
- Redis설치
- 이슈(기타 오류 발생시 (application.properites, docker-compse)
- 로그확인(프로젝트) : docker logs <컨테이너ID>
- 로그확인(프로젝트+DB) : docker-compose logs -f
- 포트, ssl설정은 env파일에 하면 못읽어서 application.properites에직접 작성
- keystore파일 권한 ubuntu로 변경 -> sudo chown ubuntu:ubuntu keystore.p12
- keysotre 파일 위치를 못 찾는 경우 docker-compse에 설정
- 정확한 브랜치가 맞는지 확인 : git clone시 : git clone --branch develop <URL>
- 카카오 토큰을 받아오지 못하고 있음 -> 카카오 디벨로퍼 토큰 전송 url변경 필요(application.properites, kakao developer모두 수정 필요)
=> Git에서 clone받아서 수정한 파일 : docker-compse, application.properites, env , conf/SecurityConfig - 프로젝트 실행시 http관련 오류 발생시 spring프로젝트 ssl설정을 해줘야 한다.
=> https://coding-nyan.tistory.com/164 - DB설계 변경 후 엔티티 관계가 정상 반영되지 않을 경우 (application.properties에서 ddl-auto=create로 설정하고 재빌드 하고 다시 update로 변경)
- 개선사항
- 내용 : 현재 특정 이미지를 /var/www/uploads에 저장하도록 하고 있음 -> 실제 Linux경로에는 해당 이미지 파일이 없는 문제
(원인 : Docker의 볼룸 마운트가 설정 되지 않았기 때문 -> 컨테이너 내부에만 저장됨 --> 컨테이너 종료 한 뒤 다시 설정하면 파일이 사라지는 문제 발생)
- 컨테이너 내부 접속 : docker exec -it 컨테이너ID /lib/sh
- 컨테이너 내부 접속 : docker exec -it 컨테이너ID /lib/sh
- docker-compose에서 .env파일을 읽어 오지 못 하는 경우
- 내용 : 현재 특정 이미지를 /var/www/uploads에 저장하도록 하고 있음 -> 실제 Linux경로에는 해당 이미지 파일이 없는 문제