FROM node:alpine WORKDIR /usr/src/app COPY . . RUN npm install RUN npm run build EXPOSE 3000 CMD [ "node", "dist/main.js" ]
node_modules
# Ubuntu일 경우 $ sudo apt update $ sudo apt install amazon-ecr-credential-helper
~ 경로에서 .docker라는 폴더 만들고, config.json 파일 만들어서 위와 같이 작성해라.{ "credsStore": "ecr-login" }

AmazonEC2ContainerRegistryFullAccess 정책 추가하기name: Deploy To EC2 on: push: branches: - main 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: npm ci - name: .env 파일 만들기 run: | touch .env echo '${{ secrets.ENV }}' >> .env - name: 테스트 코드 실행 run: npm run test - 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_ACCESS_KEY }} - name: ECR에 로그인하기 id: login-ecr uses: aws-actions/amazon-ecr-login@v2 - name: Docker 이미지 생성 run: docker build -t instagram-server . - name: Docker 이미지에 Tag 붙이기 run: docker tag instagram-server ${{ steps.login-ecr.outputs.registry }}/instagram-server:latest - name: ECR에 Docker 이미지 Push하기 run: docker push ${{ steps.login-ecr.outputs.registry }}/instagram-server:latest - name: SSH로 EC2에 접속하기 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USERNAME }} key: ${{ secrets.EC2_PRIVATE_KEY }} script_stop: true script: | docker stop instagram-server || true docker rm instagram-server || true docker pull ${{ steps.login-ecr.outputs.registry }}/instagram-server:latest docker run -d --name instagram-server -p 3000:3000 ${{ steps.login-ecr.outputs.registry }}/instagram-server:latest