[Infra] 01. EC2 서버 초기 세팅

이기혁·2026년 3월 13일

naeda

목록 보기
5/10

처음 프로젝트 서버를 받았을 때 솔직히 좀 막막했다. 인프라에 대한 경험이 전무했고, EC2 인스턴스 하나 주고 "여기에 서비스를 올려라"하는데, SSH 접속부터 Docker 설치까지 전부 직접해야했다.

SSH 접속

SSAFY 에서 제공받은 .pem 키 파일로 접속한다.
Windows 환경이라 PowerShell에서 진행했다.
텍스트

ssh -i J14~.pem ubuntu@j14~.p.ssafy.io

근데 처음에 Permission Denied가 떴다.
원인이 2가지였는데,

  1. Windows에서 .pem 파일 권한 문제
    Linux에서는 chmod 600이면 끝나는데 Windows에서는 icacls로 권한을 조정해야 한다.
icacls J14D103T.pem /inheritance:r
icacls J14D103T.pem /grant:r "%USERNAME%:R"
  1. .pem 파일 줄바꿈 문제
    Windows에서 파일을 열었다 저장하면 CRLF로 바뀌는 경우가 있다. OpenSSH는 LF만 인식해서 identity file type -1 에러가 난다.
    notepad에서 줄바꿈을 LF로 바꿔주면 해결된다.

Docker & Docker Compose 설치

접속 성공 후 가장 먼저 한 건 Docker 설치이다.
Ubuntu 22.04 기준으로 진행했다.

# 기존 패키지 충돌 방지
sudo apt-get remove docker docker-engine docker.io containerd runc

# 필수 패키지 설치
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release

# Docker 공식 GPG 키 추가
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Docker 레포지토리 추가
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Docker 설치
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# ubuntu 유저에게 docker 권한 부여 (sudo 없이 docker 사용)
sudo usermod -aG docker ubuntu

마지막 usermod 이후에 SSH 재접속해야 반영된다. 이거 몰라서 왜 안 되지 한참 삽질했다.

디렉토리 구조 만들기

배포용 디렉토리를 미리 만들어둔다. 나중에 Jenkins가 이 경로로 소스를 전송하고, docker compose를 실행하는 구조이다.

mkdir -p /home/ubuntu/naeda/infra

Nginx 설치 (리버스 프록시)

Spring Boot가 8080 포트로 뜨는데, 외부에서는 443(HTTPS)으로 접근해야 하니까 Nginx를 리버스 프록시로 세팅했다.

sudo apt-get install -y nginx

/etc/nginx/sites-available/naeda 파일을 만들어서 프록시 설정을 넣는다.

server {
    listen 80;
    server_name j14d103.p.ssafy.io;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
sudo ln -s /etc/nginx/sites-available/naeda /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

여기서 주의할 점이 servername을 반드시 실제 도메인으로 적어야 한다. 처음에 server_name ;으로 해놨다가 나중에 SSL 인증서 발급할 때 certbot이 서버 블록을 못 찾아서 또 삽질했다.

방화벽 & 보안그룹

EC2 보안 그룹에서 다음 포트들이 열려 있어야 한다.

정리

EC2 초기 세팅에서 배운 점은, 로컬 Windows 환경과 Linux 서버 환경의 차이를 체감한 것이다. .pem 키 권한 문제, 줄바꿈 차이, Docker 권한 문제 등 사소한 것들이 모여서 시간을 많이 잡아먹었다. 한번 정리해두면 다음 프로젝트에서는 10분이면 끝나는 작업이다.

0개의 댓글