[삽질기록] 배포 삽질기2 🤦🏻‍♀️

케이·2022년 9월 18일
2

삽질기록

목록 보기
1/7

틀린 내용이 있다면 언제든지 지적해주시면 감사하겠습니다🙇🏻‍♀️

지난 시간에 이어.. (https://velog.io/@becolorful/학습정리-배포하다-이러면-안되겠다-싶어-작성하는-네트워크-정리) 배포를 진행하면서 삽질한 내용들을 정리해본다.

Github Action + Docker 사용해 배포 진행.

배포 하면서 만난 오류들

1. gradle.yml 문제 (부제: working-directory를 잘 확인하자)

문제 상황

아래와 같이 워크플로우가 동작할 디렉토리를 환경변수를 넣어놨는데..

jobs:
  build:

    runs-on: ubuntu-latest
    env:
          working-directory: ./BE/house 
          #워크플로우가 동작할 디렉토리
          
          후략..

자꾸 빌드가 실패했다고 오류가 나는 것이었다??????
어디에서 잘못된건지 살펴보다 도커 빌드 하는 부분에서 working-directory를 써주지 않은 것을 발견했다.

해결방법

# 도커 빌드(도커 이미지 생성)
      - name: Docker build
        working-directory: ${{ env.working-directory }}
        run: |
          docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
          후략..

위처럼 도커 빌드시에도 working-directory를 넣어주니 빌드가 성공적으로 진행됐다.

2. application.yml파일에서의 오류

문제 상황

${S3_ACCESS_KEY} 환경변수를 읽어오지 못하는 문제가 발생했다.

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: 주소~~
    username: ${MY_DATABASE_USERNAME}
    password: ${MY_DATABASE_PASSWORD}
  config:
    import: classpath:oauth.yml

<중략...>

cloud:
  aws:
    region:
      static: ap-northeast-2
    s3:
      bucket: house-image-bucket
    stack:
      auto: false
    credentials:
      access-key: ${S3_ACCESS_KEY}
      secret-key: ${S3_SECRET_KEY}

시도한 방법

(그럴리 없겠지만) S3 access key가 잘못되었을때 실패할까? 라는 생각이 들어 하드코딩으로 (예시 access-key: 임의의문자) 키값을 넣어놓고 실행하니 문제가 발생하지 않았다.
→ S3관련 요청이 있지 않는한 처음에 스프링을 띄울 때 문제가 될 것은 없다는 의미.

해결 방법

(혹시나 싶어) S3관련부분을 S3.yml로 분리하고 실행하니 초반에 발생하였던 문제(환경변수를 읽어오지 못하는 상황)가 발생하지 않았다.

여기서 드는 의문?

데이터베이스 관련한 것들도 환경변수로 읽어오는데 왜 S3 관련해서는.. 오류가 날까🤔 -> 아직 해결하지 못했다 학습 하자...

3. DB 연결 관련 오류

기본 내용을 항상 확인하자 나 자신아..

문제 상황

DB와의 통신이 되지 않았다.

해결 방법

앞서서 우리의 서버에서 DB에 연결할 수 있는지 확인.
(연결이 안된다면 라우팅 테이블, 서브넷, 보안규칙(인바운드)를 확인하자.)

  • 보안규칙 서버 ec2: 8080, 80이 있어야한다.

그럼에도 불구하고 되지 않는다면..?

1. bind-address 확인하고 주석 처리 하기

Sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf 를 입력해서 mysqld.cnf 파일을 수정해줘야 한다.

bind-address = 127.0.0.1
mysqlx-bind-address = 127.0.0.1

위의 두 부분을 주석처리 하고 저장

2. 80포트로 요청을 보내자

아무렇지도 않게 8080포트로 요청을 보내고 있었다;;
80포트로 요청을 보내니 해결.
예시)http://서버IP주소:80/api

번외 - 도커 명령어 정리

한참 쓸 때는 잘 기억하고 쓰다가.. 잠깐 안쓰면 까먹고.. 또 까먹고.. 해서 정리를 남긴다.

docker images: 도커 이미지 목록을 확인
docker ps: 현재 실행되고 있는 도커 컨테이너 목록 확인
docker ps -a: 실행/종료된 모든 도커 컨테이너 목록 확인
docker logs 컨테이너id: '컨테이너id'의 로그를 확인
docker run 이미지id: '이미지id'를 실행 (이때 -e 옵션으로 환경변수 설정 가능)
	예시) docker run 4759e03f -e MY_DATABASE_USERNAME=lee
profile
삽질하며 깨닫고 배웁니다. (a.k.a 프로삽질러) + 이 구역의 회고왕

0개의 댓글