몽땅뚝딱 개발자

서버 관련: ssh, nginx, Docker, GitHub Actions 본문

Development/환경설정

서버 관련: ssh, nginx, Docker, GitHub Actions

레오나르도 다빈츠 2025. 6. 16. 14:55

 

 

1. ssh란?

ssh란 Secure Shell의 줄임말이다. 아래 명령어는 원격서버에 보안 연결로 접속하는 명령어이다.

.pem은 Private Key 파일 확장자로 EC2 인스턴스를 만들 때 생성되는 비밀번호 대신 사용하는 인증키이다.

ssh -i my-key.pem ubuntu@your-ip

 

* 도서추천: 처음 배우는 AWS, 모두의 리눅스

 

 

 

2. nginx

가볍고 빠른 웹 서버 소프트웨어이다.

정적 파일(=프론트 빌드 파일)을 클라이언트에게 전달(=서빙)하거나 백엔드 API 서버로 프록시 연결도 해준다.

nginx는 EC2 혹은 Docker 컨테이너 내부에서 실행된다.

 

 

 

3. Docker란? 

앱 실행 환경을 통째로 포장한 박스이다. 환경설정 + 배포 + 실행을 표준화하는 기술이다.

Node, Python, MySQL, Redis 등을 설치할 필요 없이 하나의 이미지로 어디서든 동일한 환경으로 실행가능하다.

 

Dockerfile을 작성하고 docker build 명령어로 이미지를 생성한다.

여기서 이미지란 컨테이너를 만들기 위한 설계도 + 재료들이 담긴 것이다.

(Dockerfile -> 이미지 -> 그 이미지를 컨테이너로 실행)

 

Step 1. Dockerfile 생성

# Node.js 앱을 위한 Dockerfile
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]

 

Step 2. 이미지 만들기

docker build -t my-app .

 

Step 3. 이미지로부터 컨테이너 만들고 실행하기

// -p 3000:3000: 내 컴퓨터의 3000번 포트를 컨테이너의 3000번 포트에 연결하겠다는 뜻
// my-app: 실행할 Docker 이미지 이름
docker run -p 3000:3000 my-app

 

 

 

3-1. Docker의 실행환경

내 PC에서 run (무료)

AWS EC2에서 run

AWS ECS / Fargate 사용

Docker Hub 저장

 

 

 

4. GitHub Actions

CI(빌드 & 테스트): 코드 푸시 시 자동 실행

CD(배포): EC2에 SSH 접속하여 최신 코드 배포

 

.github/workflows/deploy.yml

EC2에 SSH로 접속해서 배포하는 예시

name: Deploy to EC2

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v3

    - name: Copy files to EC2 via SSH
      uses: appleboy/scp-action@v0.1.1 // scp-action: 코드를 EC2로 복사
      with:
        host: ${{ secrets.EC2_HOST }}
        username: ubuntu
        key: ${{ secrets.EC2_SSH_KEY }}
        source: "."
        target: "/home/ubuntu/app"

    - name: Run remote deploy commands
      uses: appleboy/ssh-action@v1.0.0 // ssh-action: EC2 접속 후 배포 명령어 실행
      with:
        host: ${{ secrets.EC2_HOST }}
        username: ubuntu
        key: ${{ secrets.EC2_SSH_KEY }}
        script: |
          cd /home/ubuntu/app
          docker-compose down
          docker-compose up -d --build

 

Comments