이미지로 배포하는 것이 성공했던 날, 구성이 바꼈다.
비교적 많은 일들이 있었지만, 최종적으로는 내가 올린 웹서버에 두 가지 프로젝트를 올려 멀티 호스팅을 해주어야 했다.
지금 구조는 매번 main에 푸시할 때마다 프로젝트를 포함한 웹서버 도커 이미지를 다시 만들어 배포하는 방식이다.
한 가지 프로젝트만 수정해도 다시 이미지를 만들어 배포한다면 너무 비효율적이다.
그래서, 호스트 서버의 특정 경로에 빌드된 프로젝트를 배포하고, 해당 특정 경로를 마운트한 도커 컨테이너 실행하는 방법을 사용했다.
멀티 호스팅을 설정한 설정 파일은 호스트 서버에 두고, 이미지를 다시 만들때 복사해 가져가도록 했다.
그래서 최종적으로 이전 워크플로우에서 변경할 부분은 다음과 같다.
- name: Check out code
uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 18
- name: Install pnpm
uses: pnpm/action-setup@v2
id: pnpm-install
with:
version: 8
run_install: false
- name: Install typescript
run: pnpm install typescript
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Setup pnpm cache
uses: actions/cache@v3
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Build vite app
run: pnpm build
- name: executing remote ssh commands using key
uses: appleboy/scp-action@master
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.EC2_PORT }}
source: ./*
target: /target_dir