From 328be081af80acdee063e3b0fab51eb56c718642 Mon Sep 17 00:00:00 2001 From: kimhyeyeon Date: Fri, 28 Nov 2025 09:08:12 +0900 Subject: [PATCH 1/2] mission11 --- .github/workflows/cd.yml | 42 ++++++++++++++++++++++++++++++++++++++++ .github/workflows/ci.yml | 27 ++++++++++++++++++++++++++ Dockerfile | 16 +++++++++++++++ docker-compose.yaml | 31 +++++++++++++++++++++++++++++ mission9/.dockerignore | 2 ++ 5 files changed, 118 insertions(+) create mode 100644 .github/workflows/cd.yml create mode 100644 .github/workflows/ci.yml create mode 100644 Dockerfile create mode 100644 docker-compose.yaml create mode 100644 mission9/.dockerignore diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml new file mode 100644 index 000000000..0b2bb724a --- /dev/null +++ b/.github/workflows/cd.yml @@ -0,0 +1,42 @@ +name: CD - Deploy to EC2 + +on: + push: + branches: [ "main" ] + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and Push Docker image + uses: docker/build-push-action@v4 + with: + context: ./mission9 + file: ./Dockerfile + push: true + tags: ${{ secrets.DOCKERHUB_USERNAME }}/express-app:latest + platforms: linux/amd64 + + - name: Copy SSH key + run: | + echo "${{ secrets.EC2_KEY }}" > key.pem + chmod 600 key.pem + + - name: Deploy on EC2 + run: | + ssh -o StrictHostKeyChecking=no -i key.pem ec2-user@${{ secrets.EC2_HOST }} << 'EOF' + docker pull ${{ secrets.DOCKERHUB_USERNAME }}/express-app:latest + docker stop express-app || true + docker rm express-app || true + docker run -d -p 3000:3000 --name express-app ${{ secrets.DOCKERHUB_USERNAME }}/express-app:latest + EOF diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..44b7ee75f --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,27 @@ +name: CI - Test on PR + +on: + pull_request: + branches: [ "main" ] + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: 20 + + - name: Install dependencies + run: npm install + working-directory: ./mission9 + + - name: Run tests + run: npm test + working-directory: ./mission9 + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..9e4dbea74 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +FROM node:20 + +WORKDIR /app + +COPY package*.json ./ +COPY prisma ./prisma + +RUN npm install + +COPY . . + +VOLUME /app/uploads + +EXPOSE 3000 + +CMD ["npm", "run", "start"] diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 000000000..19c246362 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,31 @@ +version: '3.8' + +services: + app: + image: kimdolmeng/express-app:latest + container_name: express-app + ports: + - 3000:3000 + volumes: + - upload_data:/app/uploads + environment: + DB_HOST: postgres + DB_USER: user_mbti + DB_PASSWORD: pw_mbti + DB_NAME: db_mbti + depends_on: + - db + + postgres: + image: postgres:15-alpine + container_name: postgres-db + volumes: + - postgres_data:/var/lib/postgresql/data + environment: + POSTGRES_DB: db_mbti + POSTGRES_USER: user_mbti + POSTGRES_PASSWORD: pw_mbti + +volumes: + upload_data: + postgres_data: \ No newline at end of file diff --git a/mission9/.dockerignore b/mission9/.dockerignore new file mode 100644 index 000000000..93f136199 --- /dev/null +++ b/mission9/.dockerignore @@ -0,0 +1,2 @@ +node_modules +npm-debug.log From 3be30b071021987292fbee78644f9725ff401254 Mon Sep 17 00:00:00 2001 From: kimhyeyeon Date: Fri, 28 Nov 2025 09:36:15 +0900 Subject: [PATCH 2/2] mission 11 --- .github/workflows/cd.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 0b2bb724a..b253d087e 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -40,3 +40,4 @@ jobs: docker rm express-app || true docker run -d -p 3000:3000 --name express-app ${{ secrets.DOCKERHUB_USERNAME }}/express-app:latest EOF +