안녕하세요! 강의 유익하게 듣고 있는 수강생입니다. 컨테이너 가상화 설명에서 궁금증이 생겨 글 남깁니다. (강의 장면 캡쳐가 불가하여 유사 그림으로 대체합니다!!) 도커는 호스트 OS의 커널을 바로 사용한다는 장점이 있다고 이해했습니다. 이때 여기서 호스트 OS가 리눅스라고 명시되어있는데 mac, windows를 사용하는 일반 사용자들도 호스트 os가 리눅스로 적용되는 것일 까요?? 해당 내용을 찾아보니 도커를 사용할 때는 리눅스 커널이 필수적으로 필요해서 가상화된 Linux를 내부적으로 사용한다고 확인했습니다. 이 내용을 리눅스 환경이 아닌경우 도커 내부에 리눅스가 가상화 기술로 적용되어 있다고 이해하는 것이 맞을까요?? 내장되어 있는 것이 맞다면 컨테이너 별로 리눅스가 별도로 포함되는것인지, 도커위에 하나의 리눅스OS를 갖고 있는 것인지 질문드리고 싶습니다! 유익한 강의 정말 감사드립니다 😀
강의를 들으면서 프로젝트로 실습해보다가 궁금한 점이 생겨 질문드립니다! 강의에서는 main 브랜치에 push가 일어나는 것이 트리거가 되는 경우를 설명해주셨습니다. 만약에 main 브랜치 하위에 기능별로 브랜치를 나누어서 feature/login, feature/post 식으로 브랜치가 존재하며 프론트엔드 React 코드, 백엔드 Spring 코드의 별도 구분 없이 각각의 브랜치에 같이 존재한다면 백엔드 코드만 ec2에 deploy 되도록 설정하는 방법이 있을까요?
안녕하세요. CICD강의 잘보고있습니다. [실습] 컨테이너 기반 + 확장성을 고려한 프로젝트에서 많이 쓰는 CI/CD 구축 방법 까지 잘 진행해서 배포까지 완료했습니다. scripts > start-server.sh 에서 질문이 있는데요 docker pull {ECR Repository 주소} /instagram-server:latest 여기서 에러가 나서 정상적인 docker image를 pull받지 못합니다. 제가 작성한 코드입니다. docker pull {EC2소유자}.dkr.ecr.ap-northeast-2.amazonaws.com/github-actions:latest 발생 에러 코드입니다. [stderr]Error response from daemon: Head " https:// {EC2소유자} .dkr.ecr.ap-northeast-2.amazonaws.com/v2/github-actions/manifests/latest ": no basic auth credentials 감사합니다.
우선 레포만 생성하는 workflow는 성공하였으며, slack 기능을 추가하는 과정에서 오류를 겪고 있습니다. gh repo create oddong-action/${{ inputs.prefix }}-${{ inputs.name }} --public --add-readme 새로운 레포를 만드는 명령 수행 시에 아래와 같이 권한 오류가 발생하고 있습니다. 어떤 설정을 추가로 해주어야 할지 문의드립니다.
안녕하세요! 도커의 사용목적에 대해 알고싶습니다. 도커가 편리한 이유는 여러 프로그램을 한 대의 컴퓨터에서 실행시킬 수 있기 때문이라고 이해하였습니다. 그런데 만약 서버 한 개만 돌릴 때는 도커를 사용해야 할 필연성이 있을까요? 단순히 확장성 떄문에 사용하는 건가요? 왜 써야 하는지 잘 모르겠습니다..
안녕하세요 강사님, 현재 강의를 참고하여 팀원끼리 클론 코딩 프로젝트를 하기위해 EC2에서 Spring Boot + MySQL 서비스를 Docker Compose로 구성하여 배포 중입니다. GitHub Actions를 통해 ECR에 푸시한 Spring Boot 이미지를 EC2에서 pull 받아서 docker-compose로 실행하는 파이프라인을 구축했습니다. 현재까지 진행한 작업에 대해 말씀드리겠습니다. Spring Boot 애플리케이션을 Dockerfile로 빌드해 Amazon ECR에 업로드 EC2에 MySQL과 Spring Boot를 각각 컨테이너로 구성 ( docker-compose.yml 사용) GitHub Actions에서 EC2로 SSH 접속 후 .env 생성 및 docker-compose up -d 자동 실행 설정 현재 EC2 인스턴스(t2.micro)에 연결이 실패하고있습니다. ssh -v -i를 통해 로그를 확인 해본 결과 연결은 성공하지만 인증 전 또는 핸드쉐이크 중에 connection reset 이 발생하였다고 합니다. 현재 인스턴스 유형은 t2.micro이며, Docker로 2개 컨테이너가 실행 중이었습니다. CPU/RAM 자원이 부족해 SSH 연결도 거부되는 것 아닌가 의심됩니다. 혹시 이 경우 인스턴스 유형을 업그레이드를 하는게 해결방법일지 혹은 다른 방법이 있을까요?
docker-compose up -d 할때 leafy_leafy-front_1가 자꾸 꺼지고 restart 되는게 반복되는데 docker logs leafy_leafy-front_1 를로 확인해본결과 exec /usr/local/bin/ docker-entrypoint.sh : no such file or directory 라는 오류가 있네요 윈도우로 수업 들을때는 문제없었는데 aws ec2 아마존 리눅스 에서 돌려보니 해당 오류가 계속 생겨서 질문드립니다 검색 및 예전 답변을 참고해서 crlf 를 lf 로 바꿔도보고 새로 clone 해보고 했는데 여전히 오류 입니다. 윈도우에서는 되다가 오히려 리눅스 환경에서 안되는게 이유를 모르겠습니다 ㅠㅠ 답변 부탁합니다
.gitignore에 추가된 application.yml을 CI/CD로 관리하기 강의에서 1:40초 부분에서 git add . / git status한 다음에 application.yml이 수정이 되고 있다. 캐싱떄문이라고 하셨는데 . application.properties를 yml로 바꾸고 aws: access-key: ABCDEFG secret-key : HOIJOIASDJO 이 값들을 입력했는데 git status에 어느부분이 문제인건가요? yml파일도 modified?라는 상태가 안떠서 문제인건지 정확히 이해를 못해서 질문 남깁니다. 혹시 .gitignore에 넣었으니깐 새로운 파일을 추가하던 수정을 하던 git status에 안떠야 정상인건가요?
- name: application.yml 만들기 run: echo "${{ secrets.APPLICATION_PROPERTIES }}" > ./src/main/resources/application.yml 강의에서 이런식으로 시크릿 변수에 yml을 미리 넣었는데 만약에 yml안에서도 시크릿 변수를 사용하면 제대로 동작을 하나요?? ex)kakaopay: secretKey: ${KAKAOPAY_KEY} 이런식으로 yml에 있다고 할 때
https://www.inflearn.com/community/questions/1532164/docker-%EB%B0%B1%EC%95%A4%EB%93%9C-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EC%8B%A4%ED%96%89%EC%8B%9C-%EC%98%A4%EB%A5%98 이 글처럼 똑같이 안되고있습니다. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'processorMetrics' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/SystemMetricsAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.micrometer.core.instrument.binder.system.ProcessorMetrics]: Factory method 'processorMetrics' threw exception; nested exception is java.lang.NullPointerException at org.springframework.beans.factory.support .ConstructorResolver.instantiate(ConstructorResolver.java:658) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:486) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1616) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1573) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1417) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1349) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .DefaultListableBeanFactory$DependencyObjectProvider.resolveStream(DefaultListableBeanFactory.java:2119) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .DefaultListableBeanFactory$DependencyObjectProvider.orderedStream(DefaultListableBeanFactory.java:2113) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryConfigurer.addBinders(MeterRegistryConfigurer.java:87) ~[spring-boot-actuator-autoconfigure-2.7.10.jar!/:2.7.10] at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryConfigurer.configure(MeterRegistryConfigurer.java:68) ~[spring-boot-actuator-autoconfigure-2.7.10.jar!/:2.7.10] at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryPostProcessor.postProcessAfterInitialization(MeterRegistryPostProcessor.java:64) ~[spring-boot-actuator-autoconfigure-2.7.10.jar!/:2.7.10] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:455) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1808) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.26.jar!/:5.3.26] ... 71 common frames omitted Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.micrometer.core.instrument.binder.system.ProcessorMetrics]: Factory method 'processorMetrics' threw exception; nested exception is java.lang.NullPointerException at org.springframework.beans.factory.support .SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.26.jar!/:5.3.26] at org.springframework.beans.factory.support .ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.26.jar!/:5.3.26] ... 93 common frames omitted Caused by: java.lang.NullPointerException: null at java.base/jdk.internal.platform.cgroupv2.CgroupV2Subsystem.getInstance(Unknown Source) ~[na:na] at java.base/jdk.internal.platform.CgroupSubsystemFactory.create(Unknown Source) ~[na:na] at java.base/jdk.internal.platform.CgroupMetrics.getInstance(Unknown Source) ~[na:na] at java.base/jdk.internal.platform.SystemMetrics.instance(Unknown Source) ~[na:na] at java.base/jdk.internal.platform.Metrics.systemMetrics(Unknown Source) ~[na:na] at java.base/jdk.internal.platform.Container.metrics(Unknown Source) ~[na:na] at jdk.management/com.sun.management.internal.OperatingSystemImpl.<init>(Unknown Source) ~[na:na] at jdk.management/com.sun.management.internal.PlatformMBeanProviderImpl.getOperatingSystemMXBean(Unknown Source) ~[na:na] at jdk.management/com.sun.management.internal.PlatformMBeanProviderImpl$3.nameToMBeanMap(Unknown Source) ~[na:na] at java.management/sun.management.spi.PlatformMBeanProvider$PlatformComponent.getMBeans(Unknown Source) ~[na:na] at java.management/java.lang.management.ManagementFactory.getPlatformMXBean(Unknown Source) ~[na:na] at java.management/java.lang.management.ManagementFactory.getOperatingSystemMXBean(Unknown Source) ~[na:na] at io.micrometer.core.instrument.binder.system.ProcessorMetrics.<init>(ProcessorMetrics.java:81) ~[micrometer-core-1.9.9.jar!/:1.9.9] at io.micrometer.core.instrument.binder.system.ProcessorMetrics.<init>(ProcessorMetrics.java:76) ~[micrometer-core-1.9.9.jar!/:1.9.9] at org.springframework.boot.actuate.autoconfigure.metrics.SystemMetricsAutoConfiguration.processorMetrics(SystemMetricsAutoConfiguration.java:59) ~[spring-boot-actuator-autoconfigure-2.7.10.jar!/:2.7.10] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Unknown Source) ~[na:na] at org.springframework.beans.factory.support .SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.26.jar!/:5.3.26] ... 94 common frames omitted docker logs -f leafy 했을 때 이렇게 나와요.. 커뮤니티에 나와있는대로 삭제했다가 다시 깔아봤고, name을 잘못적었는지도 확인해보았는데 전혀 잘못된게 없었습니다. leafy-postgres도 'Leafy 애플리케이션 구성' 강의에서 말씀하신것처럼 정상작동하는 것도 확인했습니다. docker inspect leafy-postgres | grep -A 2 "Networks" 를 치면 "Networks": { "leafy-network": { "IPAMConfig": null, 이렇게 나오고 있습니다. 어떻게 해야할까요 빠른답변 부탁드리겠습니다.
강사님 안녕하세요. nest를 완강하고 개인적으로 Node로 만들어보고 있습니다. 근데 Github Actions 까지 무사히 잘 완료가 되었는데요. 배포가 제대로 되어있는지 확인하려고 하니까 안되고 있습니다. 이렇게 서버가 살아있고 저는 3000번 포트를 사용해서 https://43.202.202.143:3000/ 이라고 작성했는데 접속이 안되더라고요. 제가 Gpt랑 나름 찾아봐서 작성해본 코드는 아래와 같습니다. ============================= name: Deploy To EC2 on: push: branches: - dev jobs: deploy: runs-on: ubuntu-latest steps: - name: Github Repository 파일 불러오기 uses: actions/checkout@v4 - name: Node 설치 uses: actions/setup-node@v4 with: node-version: "20" - name: 의존성(라이브러리) 설치 run: yarn install --frozen-lockfile - name: .env 파일 만들기 run: | echo '${{secrets.ENV}}' > .env # - name: 테스트 코드 실행 # run: npm run test # - name: 빌드 # run: npm run build - name: 압축하기 run: tar -czvf project.tar.gz .env package.json yarn.lock src - name: SCP로 EC2에 빌드된 파일 전송하기 uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USERNAME }} key: ${{ secrets.EC2_PRIVATE_KEY }} source: project.tar.gz target: /home/ubuntu/Solo-Resume-Project/tobe - name: SSH로 EC2에 접속하기 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.EC2_HOST }} # EC2의 퍼블릭 IPv4 주소 = 고정 주소를 말함. 연결 된 상태의 43.202.xxx.xxx <- 이런거 username: ${{ secrets.EC2_USERNAME }} # EC2 접속 username = 대부분 우분투 key: ${{ secrets.EC2_PRIVATE_KEY }} # EC2의 key-pair 파일의 내부 텍스트 script_stop: true script: | rm -rf /home/ubuntu/Solo-Resume-Project/current mkdir /home/ubuntu/Solo-Resume-Project/current mv /home/ubuntu/Solo-Resume-Project/tobe/project.tar.gz /home/ubuntu/Solo-Resume-Project/current/project.tar.gz cd /home/ubuntu/Solo-Resume-Project/current tar -xvf project.tar.gz yarn install pm2 kill pm2 start src/app.js --name "backend-server" ============================= 세팅도 전부 다했고요. 근데 pm2 logs를 작성하면 아래와 같이 나옵니다. 제가 env에 서버포트 번호를 넣어놓고 상수값을로 지정한 후에 따로 빼서 사용하는데 그것 때문인가요? 기존의 vs 코드에서는 잘 작동이 됩니다. 처음 혼자서 node로 작성하는거다보니 너무 질문이 많아서 죄송한데 답을 알려주시옵소서!!!