묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결DevOps를 위한 Docker 가상화 기술 (Private Harbor Registry)
replicas 가 생기지 않는 문제
docker stack services my-stack 이러한 명령어로 스택에 있는 서비스를 확인했을 때, replicas가 생기지 않는 문제가 발생합니다. docker service logs my-stack_nginx으로 로그를 확인했을 때, "my-stack_nginx.1.e52u87cn5fsb@65b1999ee81f | exec /docker-entrypoint.sh: invalid argument" 라는 오류 메시가 발생합니다.
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
8080로 설정 후 8080 포트 접속이 안되는데, 8081이 접속됩니다.
아래 이미지는 도커 실행 후 docker ps 명령어로 docker 가 잘 실행중인지 확인한 것인데요,, 이후 브라우저에서 "http://127.0.0.1:8080/" 로 접속하면 사이트에 연결할 수 없음으로 나오는데 "http://127.0.0.1:8081"로 접속하면 로그인 창이 열리고 있습니다... 임시 비밀번호로 로그인도 잘 되고요.. 혹시 원인을 알 수 있는 방법이 있을까요? - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨DevOps의 정석 - DevOps의 시작부터 끝까지 모두 짚어 드립니다!
강의 교안 요청 드려요
강의 교안을 신청을 했는데 (폼 작성) 아직 못받았습니다.tidehyun@gmail.com 로 교안 좀 부탁드릴게요.감사합니다.
-
해결됨개발자를 위한 쉬운 도커
아예 Linux Ubuntu PC에서 실습을 따라하려고 하는데
아예 ubuntu Linux PC에서 따라하려고 하는데 Docker Desktop이랑 많이 혼동이 될까요?
-
미해결DevOps를 위한 Docker 가상화 기술 (Private Harbor Registry)
docker는 어떻게 macos에서 리눅스를 실행할 수 있는것일까요?
vmware는 os전체를 가상화하고docker는 hostos의 커널을 공유하고 os가 아닌 일부분만 가상화 한다고 했는데...어떻게 macos에서 리눅스가 실행될 수 있는것일까요?이론적으로 같은 운영체제만 가상화 가능할것 아닌가요?
-
해결됨개발자를 위한 쉬운 도커
Gradle 빌드 시 빌드 실패
안녕하세요. "SpringBoot 백엔드 컨테이너 구성" 강의 중 하기 명령을 실습해보고 있습니다만,gradle clean build --no-daemon 명령어를 실행하면이미지와 같이 org.springframework.boot 가 발견되지 않아 빌드 실패한다고 하는데 원인을 잘 모르겠습니다.도움 부탁드립니다.
-
미해결DevOps를 위한 Docker 가상화 기술 (Private Harbor Registry)
docker -e 옵션에 대한 질문
안녕하세요 강의 항상 잘 보고 있습니다.처음으로 궁금증이 생겨 질문 드립니다.멀티 컨테이너 구성 2번 강의를 듣고 있습니다.여기서docker run -d -p 8088:8088 --network my-network-e "spring.datasource.url=jdbc:mariadb://my-mariadb:3306/mydb" ......이부분에서 -e을 사용할때 이미지에 딱히 옵션을 스프링으로 전달하는 방식이 안나와 있는것 같은데 어떻게 스프링 부트까지 옵션전달이 되는지 궁금합니다.
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
환경변수 질문 있습니다
저는 application.yml을 통째로 git secret에 작성하지 않고 다음과 같이 각각을 환경변수로 잡아서 민감한 정보를 숨겼습니다. 그리고 build step 에서 env를 통해 환경변수 값들을 전달해서 사용하려 하였는데, 실제 docker를 통해 실행할 때 해당 환경변수 값들을 찾을수 없다는 에러가 발생하는 상황입니다.저는 build 단계에서 해당 환경변수 값들이 모두 들어간 상태의 완전한 상태로 build가 된다고 생각했지만 실제로는 해당 환경변수들을 일단 빈값으로 놔두고 build하기 때문이라고 알게되었는데 저의 이러한 방식보다는 그냥 application.yml을 통째로 git secret에 넣는 방식이 좋은걸까요..?spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: {SQL_URL} username: {SQL_USERNAME} password: {SQL_PASSWORD} jpa: hibernate: ddl-auto: update properties: hibernate: format_sql: true data: redis: host: {REDIS_HOST:localhost} port: ${REDIS_PORT:6379}name : Deploy To EC2 on: push: branches: - main - feat/ci_cd jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: JDK 17 version install uses: actions/setup-java@v4 with: distribution: temurin java-version: 17 - name: test and build run: | chmod +x ./gradlew ./gradlew clean build working-directory: ./ env: SQL_URL: {{ secrets.DB_URL }} SQL_USERNAME: {{ secrets.DB_USERNAME }} SQL_PASSWORD: {{ secrets.DB_PASSWORD }} REDIS_HOST: {{ secrets.REDIS_HOST }} REDIS_PORT: {{ secrets.REDIS_PORT }} AWS_ACCESS_KEY: {{ secrets.AWS_ACCESS_KEY }} AWS_REGION: {{ secrets.AWS_REGION }} AWS_S3_BUCKET: {{ secrets.AWS_S3_BUCKET }} AWS_SECRET_KEY: {{ secrets.AWS_SECRET_KEY }} TOUR_INFO_KEY: {{ secrets.TOUR_INFO_KEY }} - name: AWS credential setup uses: aws-actions/configure-aws-credentials@v4 with: aws-region: {{ secrets.AWS_REGION }} aws-access-key-id: {{ secrets.AWS_ACCESS_KEY }} aws-secret-access-key: {{ secrets.AWS_SECRET_KEY }} - name: ECR login id: login-ecr uses: aws-actions/amazon-ecr-login@v2 - name: Docker image create run: docker build -t kkilogbu . - name: Docker tag run: docker tag kkilogbu {{ steps.login-ecr.outputs.registry }}/backend:latest - name: Docker image push to ECR run: docker push {{ steps.login-ecr.outputs.registry }}/backend:latest - name: EC2 connection with SSH uses: appleboy/ssh-action@v1.0.3 with: host: {{ secrets.EC2_HOST }} username: {{ secrets.EC2_USERNAME }} key: {{ secrets.EC2_PRIVATE_KEY }} script: | docker stop kkilogbu || true docker rm kkilogbu || true docker pull {{ steps.login-ecr.outputs.registry }}/backend:latest docker run -d --name kkilogbu -p 8080:8080 ${{ steps.login-ecr.outputs.registry }}/backend:latest
-
해결됨개발자를 위한 쉬운 도커
도커 볼륨을 현업에서 사용할 때 질문이 있습니다.
도커 볼륨이 Host OS의 특정 공간에 저장되어 있다하면, 실제 Host OS 자체가 삭제되면 영속성도 제거가 될 거라고 생각을 하고 있습니다. 그렇다면 현업에서 AWS 인스턴스 등을 이용하여 서비스를 하게 될 때 영속성을 저장하는 방법이 따로 존재하는 걸까요? 영속성을 관리해주는 인스턴스나 서비스를 이용하여 더 철저하게 보관하는 편일까요?
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
codedeploy 배포 관련 질문
현재 appspec.yml을 보면 S3에 저장한 모든 파일을 destination에 저장하도록 되어있습니다.files: # S3에 저장한 파일들 중 destination(AWS EC2)으로 이동시킬 대상을 지정한다. # / 이라고 지정하면 S3에 저장한 전체 파일을 뜻한다. - source: / # EC2의 어떤 경로에 저장할 지 지정한다. destination: /home/ubuntu/spring-gift-point그런데 push를 여러개 진행하면 tar.gz파일도 여러개 생기게되는데 이러면 S3의 있는 모든 tar.gz파일을 가져오게되는건가요?deploy.yml에서 파일 압축을 할 때 yml 파일과 scripts폴더를 같이 압축하는 이유가 궁금합니다. 두 파일 모두 project.jar 파일에 들어있기 때문에 project.jar파일만 압축해도 상관없지않나요?- name: 압축하기 run: tar -czvf $GITHUB_SHA.tar.gz project.jar appspec.yml scriptscodedeploy를 활용한 무중단 배포나 로드 밸런싱 강의를 할 수 있다고 하셨는데 따로 강의를 내실 예정이 있으신지 궁금합니다!
-
미해결DevOps를 위한 Docker 가상화 기술 (Private Harbor Registry)
Prometheus 및 컨테이너 상태 메트릭 수집
Prometheus 설명 부분에서요,컨테이너 상태에 대한 Metrics 수집 부분에 대해서 질문있습니다.실무에서 컨테이너 환경에서 애플리케이션을 개발한적은 없고, Prometheus, Grafana, Loki, Promtail 정도만 컨테이너 기반에서 로그 수집하는 정도로만 활용해봤는데요,스프링 부트 환경에 액츄에이터, 마이크로미터 라이브러리 구성해서 N개의 서버(운영, 개발, 스테이징 서버 등)에서 프로파일에 따른 로그를 수집하고, Promtail도 각 서버에 설치하고, 별도의 모니터링 서버에 컨테이너 기반으로 Prometheus, Grafana, Loki 셋팅해서 사용하고 있습니다.(이렇게 구성한 아키텍쳐?가 베스트 프랙티스인지는 잘모르겠네요)그런데 해당 강의를 듣고 생각한게 컨테이너 기반의 애플리케이션을 올릴 경우 추가적으로 컨테이너 상태에 대한 메트릭 수집이 있을 것 같은데요, 컨테이너 실행/중지 같은 상태 제외하면 어떤 유의미한 데이터를 수집할 수 있는지 감이 안오는데, 어떤것들이 있을까요? CPU나 메모리 같은 리소스 정도가 있을꺼 같고..추가적으로 컨테이너 환경의 애플리케이션을 구성한다면 MSA 환경이 아니더라도 로그 정보를 별도의 로그 서버에서 관리하는게 일반적인가요? 이 강의를 듣기전에는 애플리케이션 서버가 당연히 로그도 수집하는거로 생각해서 Promtail도 각 로그파일이 있는 서버에 다 설치했거든요. 이전 섹션에서 로그를 별도 컨테이너에서 관리하는거 보고 궁금증이 생겼습니다.
-
해결됨개발자를 위한 쉬운 도커
섹션 2 이미지 강의 수업자료를 보면서 궁금한 점이 생겼습니다.
이 강의로 도커에 처음 입문하게 되었습니다. 강의를 듣던 중 도커가 이런 식으로 작동하는 것이구나에 대해 이해해 가고 있던 와중 섹션 2 이미지 강의에서 보여주신 수업자료 화면에서 궁금한 점이 생겨 질문드립니다.아직 제가 강의로만 도커를 입문해서 경험이 없어서 그런데 하이퍼바이저 가상화에서는 하이퍼바이저가 서로 다른 os (호스트 os 와 게스트 os) 를 조율해서 자원을 사용할 수 있도록 한다고 하셨는데컨테이너 기술의 경우 무조건 호스트 os 와 같은 os 를 가진 이미지 만을 사용해야 하는 것인가요? 필요에 의해 다른 os를 가진 이미지를 사용하는 일은 없는 것인지 만약 있다면 서로 다른 os 간의 조율은 어떻게 되는 것인지 궁금합니다
-
해결됨DevOps를 위한 Docker 가상화 기술 (Private Harbor Registry)
syslog 의미?용도?
안녕하세요. syslog 관련해서 질문드립니다.Container Logging System 사용 ② 섹션에서 syslog-nm 컨테이너(서버)에 logback 설정에 appender name="SYSLOG"는 백엔드의 logback을 이용해 다른 서버에서 로그를 관리하는 의미이고, 이전 섹션에서 컨테이너 실행시 --log-driver=syslog는 로그를 컨테이너 로그뿐만 아니라 전반적인 로그를 통합해서 본다는 의미로써 syslog 명칭만 동일하게 부여했을뿐 목적이 다른게 맞는거죠?저는 syslog라는거 자체가 컨테이너 로그 뿐만 아니라 광범위하게 통합해서 관리한다.라고 이해했었는데 해당 강의에서는 단순히 syslog 명칭만 같고 다른 의미로 쓰인거 같아 약간 혼동이 있네요.
-
미해결애플리케이션 배포 자동화와 CI/CD
ssh 비밀번호 일치하는데 오류가 뜹니다
제가 만든 프로젝트에서 배포하려고 강의를 보면서 따라하고 있습니다+scp 에러가 뜨길래 강의 보면서 따라했습니다우선 docker로 넘어가서 키 생성한 뒤에 application-instance에서 생성한 public key를 넣어주었는데 서로 일치하지 않는건지 계속 같은 오류가 뜹니다또한 젠킨스 dashboard에서도 credentials에 잘 설정해주었는데도 이러네요ㅜ저 private key에는 아까 docker로 넘어가서 생성한 키의 private key를 넣어주었습니다
-
해결됨개발자를 위한 쉬운 도커
Dockerfile과 커밋방식에 대해 질문 있습니다.
"COPY 빌드컨텍스트경로 레이어경로" 여기서 레이어 경로는 어떻게 구성되어 있는지 알 수 있나요?강의 내용중에 "커밋 방식을 사용하면 기존 레이어에 새로운 레이어를 한 장 더 추가할 수 있다." 라고 했는데 추가된 새로운 레이어는 읽기 전용 레이어 인가요?
-
해결됨개발자를 위한 쉬운 도커
copy-on-write 전략에 대해 추가 질문 있습니다.
안녕하세요 전에 copy-on-write 전략에 대해 질문을 했는데 추가 질문이 있어 질문글을 작성합니다.https://www.inflearn.com/community/questions/1307477/copy-on-write-%EC%A0%84%EB%9E%B5%EC%97%90-%EB%8C%80%ED%95%B4-%EC%A7%88%EB%AC%B8-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4위 질문 글에서 2번 부분에 대해 추가 질문이 있습니다.읽기/쓰기 레이어에서 index.html 파일을 여러번 수정하는 경우에 대해서 궁금한 부분이 있습니다.완전 처음에는 얘기 해주신대로 읽기/쓰기는 텅 비어 있는 상태라 읽기 레이어의 index.html 파일을 그대로 복사해 와서 바뀐 부분만 있으면 수정한 후 사용합니다.여기서 읽기/쓰기 index.html 파일이 한번 더 수정이 되면 읽기 레이어의 index.html 파일을 복사해 와서 기존에 있는 읽기/쓰기 레이어에서의 index.html 파일에서 바뀐 부분만 복사해온 index.html 파일에서 변경한 후 사용하는건가요?정리하면 읽기/쓰기 index.html 파일을 여러번 수정해도 복사해서 가져오는 부분은 항상 읽기 index.html 파일이고 기존 읽기/쓰기 index.html 파일에서 바뀐 부분을 읽기 레이어에서 가져온 index.html 파일에 넣어서 만드는 건지 궁금합니다.
-
해결됨비전공자도 이해할 수 있는 CI/CD 입문·실전
역할과 정책에 관한 질문
IAM 설정을 처음해보면서 역할과 정책에 대한 개념이 아직 제대로 이해되지 않은거 같아 질문드립니다.'다른 AWS 리소스에 접근하기 위해선 역할이나 사용자를 생성해 그 안에서 정책을 연결해서 권한을 부여해야한다.' 이렇게 이해했는데 맞을까요?ec2에서는 역할을 만들때 정책을 생성했는데 CodeDeploy에서는 정책을 설정하지 않아도 되는 이유가 궁금합니다.EC2 인스턴스는 역할 연결을 통해, github actions는 엑세스 키를 통해 권한을 부여받는다고 이해했는데 맞을까요?
-
해결됨비전공자도 이해할 수 있는 CI/CD 입문·실전
도커 이미지 푸시까지는 성공하나, ssh에서 fail이 나옵니다.
강의 및 노션에 있는 부분을 최대한 응용해서, next.js app을 생성중입니다.ecr 저장소에서 도커 이미지가 확실히 푸시되었지만, ssh접속에서 에러가 발생했습니다.======CMD====== docker stop instagram-server || true docker rm instagram-server || true docker pull 767398114270.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server:latest docker run -d --name instagram-server -p 3000:3000 767398114270.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server:latest ======END====== err: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.44/containers/instagram-server/stop": dial unix /var/run/docker.sock: connect: permission denied err: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Delete "http://%2Fvar%2Frun%2Fdocker.sock/v1.44/containers/instagram-server": dial unix /var/run/docker.sock: connect: permission denied err: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.44/images/create?fromImage=767398114270.dkr.ecr.ap-northeast-2.amazonaws.com%2Finstagram-server&tag=latest": dial unix /var/run/docker.sock: connect: permission denied 2024/08/13 11:11:21 Process exited with status 1그래서 workflow를 수정했는데, 밑에 처럼 진행하니 정상처리가 되었습니다.- name: SSH로 EC2에 접속하기 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.EC2_HOST }} # 인스턴스의 퍼블릭 IP 또는 DNS 이름 username: ${{ secrets.EC2_USERNAME }} # 일반적으로 'ubuntu' 또는 'ec2-user' key: ${{ secrets.EC2_PRIVATE_KEY }} # SSH 개인 키 script_stop: true script: | aws ecr get-login-password --region ap-northeast-2 | sudo docker login --username AWS --password-stdin ${{ steps.login-ecr.outputs.registry }} sudo docker stop instagram-server || true sudo docker rm instagram-server || true sudo docker pull ${{ steps.login-ecr.outputs.registry }}/instagram-server:latest sudo docker run -d --name instagram-server -p 3000:3000 ${{ steps.login-ecr.outputs.registry }}/instagram-server:latest혹시 제가 실수하거나 놓친 부분이있을까요??
-
해결됨비전공자도 이해할 수 있는 CI/CD 입문·실전
배포는 성공하지만, pm2 list를 확인해보면 에러가 발생이 되어있습니다.
해당 부분을 응용해서, aws linux / next.js를 진행하고 있었습니다. 앞선 강의는 잘 되었으나, 해당 강의해서 어려움을 겪게되어 질문을 남기게 되었습니다.우서 배포를 확인해보니 성공, s3버킷에는 압춗파일이 잘 올라갔습니다.ls를 통해서 디렉토리까지 생성이 되는것을 확인하였습니다.하지만 node_modules가 설치가 안되어 log를 확인해보니,아래와 같은 에러가 발생합니다. 혹시 설정에 문제가 있을까요? cd: /home/ec2-user/instantgram-server: No such file or directory 2024-08-12 15:00:19 [stderr]npm ERR! Tracker "idealTree" already exists 2024-08-12 15:00:19 [stderr] 2024-08-12 15:00:19 [stderr]npm ERR! A complete log of this run can be found in: /home/ec2-user/.npm/_logs/2024-08-12T15_00_19_547Z-debug-0.log 2024-08-12 15:00:20 [stdout][PM2] Spawning PM2 daemon with pm2_home=/home/ec2-user/.pm2 2024-08-12 15:00:20 [stdout][PM2] PM2 Successfully daemonized 2024-08-12 15:00:20 [stderr][PM2][WARN] No process found 2024-08-12 15:00:20 [stdout][PM2] [v] All Applications Stopped 2024-08-12 15:00:20 [stdout][PM2] [v] PM2 Daemon Stopped 2024-08-12 15:00:21 [stdout][PM2] Spawning PM2 daemon with pm2_home=/home/ec2-user/.pm2 2024-08-12 15:00:21 [stdout][PM2] PM2 Successfully daemonized 2024-08-12 15:00:21 [stdout][PM2] Starting /usr/bin/npm in fork_mode (1 instance) 2024-08-12 15:00:21 [stdout][PM2] Done.#appspec.yml version: 0.0 os: linux files: # S3에 저장한 파일들 중 destination(AWS EC2)으로 이동시킬 대상을 지정한다. # / 이라고 지정하면 S3에 저장한 전체 파일을 뜻한다. - source: / # EC2의 어떤 경로에 저장할 지 지정한다. destination: /home/ec2-user/instagram-server permissions: - object: / owner: ec2-user group: ec2-user hooks: ApplicationStart: - location: scripts/start-server.sh timeout: 60 runas: ec2-user#deploy.yml name: Deploy To EC2 on: push: branches: - master jobs: Deploy: runs-on: ubuntu-latest steps: - name: Github Repository 파일 불러오기 uses: actions/checkout@v4 # Github Repository의 파일을 가져오는 Action - name: Node.js 설치 uses: actions/setup-node@v4 # Node.js를 설치하는 Action with: node-version: 18.x # Node.js 버전 - name: 의존성(라이브러리) 설치 run: npm ci # npm ci는 package-lock.json에 있는 의존성을 설치하는 명령어 - name: .env 파일 만들기 run: | echo '${{ secrets.ENV }}' > .env - name: 테스트 코드 실행 run: npm run test - name: 빌드 run: npm run build # 빌드 - name: 압축하기 run: tar -zcvf $GITHUB_SHA.tar.gz appspec.yml scripts public .next .env package.json package-lock.json # 압축 - name: AWS Resource에 접근할 수 있게 AWS credentials 설정 uses: aws-actions/configure-aws-credentials@v4 with: aws-region: ap-northeast-2 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCRESS_KEY }} - name: S3에 프로젝트 폴더 업로드하기 run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.tar.gz s3://instagram-server-s3/$GITHUB_SHA.tar.gz - name: Code Deploy를 활용해 EC2에 프로젝트 코드 배포 run: aws deploy create-deployment --application-name instagram-server --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name Production --s3-location bucket=instagram-server-s3,bundleType=tgz,key=$GITHUB_SHA.tar.gz #start-server.sh #!/bin/bash echo "-----------------서버 바로 배포 시작-----------------" cd /home/ec2-user/instantgram-server npm i pm2 kill pm2 start npm --name "my-next-app" -- start echo "-----------------서버 바로 배포 끝-----------------"
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
구글링해서 나온건 다따라해봤는데 ,...안돼네요 강사님 하신거랑 똑같이했는데 메시지는 키값을못찾는다고나오는거같은데...이거 방법이 없을까요