공부한 내용
도커로 Redis 컨테이너 사용해 배포 환경에서 Redis 사용
•
docker-compose.yml
◦
atties 프로젝트
version: "3"
services:
  redis:
    image: redis
    container_name: atties_redis
  application:
    image: atties_spring
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql:rdsUrl
      SPRING_DATASOURCE_USERNAME: admin
      SPRING_DATASOURCE_PASSWORD: 비밀번호
      SPRING_REDIS_HOST: "redis"
      SPRING_REDIS_PORT: "6379"
    restart: always
    container_name: atties_spring
    ports:
      - "80:80"
    depends_on:
      - redis
C++
복사
◦
beach-combine 프로젝트
version: "3"
services:
        redis:
                image: redis
                container_name: beachcombine_redis
        application:
                image: beachcombine_spring
                environment:
                        SPRING_DATASOURCE_URL: jdbc:mysql:rdsUrl
                        SPRING_DATASOURCE_USERNAME: root
                        SPRING_DATASOURCE_PASSWORD: 비밀번호
                        SPRING_REDIS_HOST: "redis"
                        SPRING_REDIS_PORT: "6379"
                restart: always
                container_name: beachcombine_spring
                ports:
                        - "8080:8080"
                depends_on:
                        - redis                      
C++
복사
배포 서버에서 로그아웃 테스트
•
위에 docker-compose.yml을 잘 넣었다면 이제 할 일은 끝났다. 
•
배포해보자 → 한 방에 성공! ㅠㅠㅠ 이 얼마만에 한방에 된건지..ㅠㅠㅠ 행복하다
◦
.github/workflows/deploy.yml 파일 내 코드
name: Deploy
on:
  push:
    branches: [ "develop" ]
  pull_request: # 원래 이 부분은 주석처리하는데, 지금은 테스트를 위해 주석 해제함
    branches: [ "develop" ] # PR에 새 커밋올라왔을 때 배포 진행되게 하는 코드
permissions:
  contents: read
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    # 기본 체크아웃
    - name: Checkout
      uses: actions/checkout@v3
    # Gradlew 실행 허용
    - name: Run chmod to make gradlew executable
      run: chmod +x ./gradlew
    # JDK 11 세팅
    - name: Set up JDK 11
      uses: actions/setup-java@v3
      with:
        java-version: '11'
        distribution: 'temurin'
    # 환경 변수 설정
    - name: Set environment values
      run: |
        cd ./src/main/resources
        touch ./env.properties
        echo "${{ secrets.ENV }}" > ./env.properties
      shell: bash
    # 환경 변수 설정 (JSON)
    - name: create-json
      id: create-json
      uses: jsdaniell/create-json@v1.2.2
      with:
        name: "beach-combine-3770712535c0.json"
        json: ${{ secrets.BEACHCOMBINE }}
        dir: 'src/main/resources/'
    # Gradle build (Test 제외)
    - name: Build with Gradle
      uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
      with:
        arguments: clean build -x test
    # Docker build
    - name: Docker build
      run: |
        docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }}
        docker build -t beach_combine .
        docker tag beach_combine choo000407/beach_combine:${GITHUB_SHA::7}
        docker push choo000407/beach_combine:${GITHUB_SHA::7}
    # Deploy
    - name: Deploy
      uses: appleboy/ssh-action@master
      with:
        host: 35.216.84.77
        username: ${{ secrets.SSH_USERNAME }}
        key: ${{ secrets.SSH_PRIVATE_KEY }}
        passphrase: ${{ secrets.SSH_PASSPHRASE }}
        envs: GITHUB_SHA
        script: |
          sudo docker pull choo000407/beach_combine:${GITHUB_SHA::7}
          sudo docker tag choo000407/beach_combine:${GITHUB_SHA::7} beachcombine_spring
          sudo docker-compose up -d
C++
복사
•
최종 배포
◦
ddl-auto create에서 none으로 바꾸기
▪
initDB 때문에 ddl-auto none으로 하면 배포가 제대로 안됨. 해결법 찾기. 일단은 create으로 해줘서 해결함. 사실 시연용으로만 쓸거라 큰 문제는 없을 거 같음. 허나, 운영할 서비스였다면 큰 문제였을 것.
▪
교훈) 처음부터 none으로 하쟈,,,,
하루 정리
TIL 작성하기
GDSC
6시 실습 멘토
BeachCombine
로그아웃 기능 배포하기 (배포 환경에 Redis 도입)
