내맘대로 개발일지

[AWS] 아무것도 모르는데 EC2 + Docker + MariaDB + nginx 본문

IT

[AWS] 아무것도 모르는데 EC2 + Docker + MariaDB + nginx

eulBlue 2025. 11. 11. 11:26

진짜 아무것도 모른다.

개발만 해봤지 인프라 처음해본다.

곁눈질도 안해봤고 해주는대로 떠먹어서 개발만 해봤다.

근데 이번에 기회가 생겨서 처음부터 해보려고 하는데 진짜 아무것도 몰라서 처음부터 끝까지

기록을 좀 해놓으려고 한다. 해당 페이지에서 다 해놓으려고 한다.

나처럼 아무것도 모르면 따라하면 될것같다 ㅎ

1. EC2 생성하기

보통 Amazon Linux 를 선택하는 것 같다
테스트용 서버로 구축할꺼라서 싸게싸게 잡는것이 필수

키체인은 없으면 새 키 페어 생성을 통해서 만들면 된다.

0.0.0.0/0 으로 하면 털려서 요금폭탄 맞으니까 반드시 보안그룹을 설정할 수 있도록 하자
테스트용이라 40 정도로만 잡고 늘리는건 되는데 줄이는건 안된다고 들어서 보수적인게 좋은것같다

2. 접속하기

chmod 400 /{경로}/*.pem

이건 반드시 해줘야하는데 보안상 위험하니까 400 으로 막아버려주고

경로를 입력할때는 중괄호는 빼고 ... 입력하면된다 ㅎㅎ

키는 진짜 절대 무슨일이 있어도 잃어버리면 안되니까 모아놓도록 하자

ssh -i /{경로}/{키체인이름}.pem {사용자이름}@{자동 할당된 IP 주소 퍼블릭 IP}

EC2 만들고 상세 페이지로 넘어가면

여기서 필요한 정보들은 다 보일꺼다 맞춰서 입력해주면 접속완료!

   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'

접속완료하면 이런 귀여운 새가 마주해준다.

이 다음부터가 걱정되는건데 힘내서 함 해보자고

3. 깃 설치하기

깃 레포지토리를 클론해와야하니까 먼저 깃 설치해주시고

sudo yum install git -y

나는 비공개 레포지토리라서 ssh 접속이 필요해서 키 만들어줘야한다 :(

ssh-keygen -t ed25519 -C "이메일"
Enter file in which to save the key (/home/ec2-user/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/ec2-user/.ssh/id_ed25519
Your public key has been saved in /home/ec2-user/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:...
The key's randomart image is:
+--[ED25519 256]--+
|     .o      . oE|
|    o. .     .o..|
|   . oo .   o .. |
|    o+.=   . +.. |
| . .+=o S . o =. |
|  =.=..o o   = ..|
|.=.. o.       o .|
|+ .o.          o |
| .+B*.          .|
+----[SHA256]-----+

대충 엔터 갈겨주면 키가 생성된다.

그다음 키를 확인해야 등록하니까

cat ~/.ssh/id_ed25519.pub

해주면 이제 키를 확인할 수 있는데 이거 복사해서 깃에 등록해주고

클론 해주면 레포지토리 복사는 끝

3. MariaDB 설치하기

sudo yum install mariadb105-server -y
sudo systemctl enable mariadb
sudo systemctl start mariadb

세개의 명령어를 입력해주면 mariaDB 설치는 완료

sudo mysql -u root

입력했을 때

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.5.29-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

다음과 같이 뜬다면 일단 설치하고 접속하는거 까지는 완료된 상태이다.

나갈때는 \q 헤헤 ..

원격으로 들어가기 위해서 user 설정이 필요한데

CREATE USER 'root'@'{IP}' IDENTIFIED BY '{패스워드}';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'{IP}' WITH GRANT OPTION;
FLUSH PRIVILEGES;

이렇게 하면 생성 완료

4. PM2 설치

이제 pm2 를 설치해야하는데 애는 Node 가 필요해서 먼저 설치해줘야한다

curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
sudo yum install -y nodejs
sudo npm install -g pm2

일단 설치만 해놓고 추가적인 설정은 Docker 띄우고 나서

마저 진행하도록 하자

5. Doker 설치

sudo yum update -y
sudo yum install -y docker
sudo systemctl enable --now docker
sudo groupadd docker            # docker 그룹이 없는 경우 만듦
sudo usermod -aG docker ec2-user
sudo mkdir -p /usr/libexec/docker/cli-plugins/
sudo curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m) \
  -o /usr/libexec/docker/cli-plugins/docker-compose
sudo chmod +x /usr/libexec/docker/cli-plugins/docker-compose
docker compose version

여기까지하면 이제 필요한 설치는 다 한것같고 ..

두근두근 실제 띄우기 시간이다.

6. 컨테이너 띄우기

우선 나는 서버가 Java Spring 이라서 JDK 를 설치해줘야한다.

sudo dnf install -y java-17-amazon-corretto

자바버전은 자신의 환경에 맞게 설치를 해주고

dokerfile 을 작성해주면된다.

chmod +x ./gradlew
./gradlew clean bootJar -x

하면 이제 JAR 빌드파일을 만들어주고나서

sudo docker build -t {클론받은폴더명} .

그다음에 이미지 빌드해주면

[internal] load build definition from Dockerfile
...
naming to docker.io/library/{프로젝트명}

뭐 이런식으로 쭉 실행된다.

docker run -d --name {컨테이너명} \
  -p 8080:8080 \
  -e JAVA_TOOL_OPTIONS="-XX:MaxRAMPercentage=70 -XX:+UseContainerSupport -XX:+UseG1GC" \
{프로젝트명}

이렇게하면 이제 도커가 뜨는데 성공한다.

docker ps

를 실행해보면 내가 만든 컨테이너가 띄워져있으면 성공!

7. nginx 설치하기

이제 도메인을 nginx 를 설치하고 띄울 준비를 해보자

sudo dnf install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx

설치를 완료하고나면

sudo nano /etc/nginx/conf.d/bsms-backend.conf

입력하고나면 이제 .conf 입력할 수 있게 변하는데

server {
  listen 80;
  server_name _;

  location /api/ {
    proxy_pass http://127.0.0.1:8080/;
    proxy_http_version 1.1;
    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;
    proxy_read_timeout 120s;
    proxy_connect_timeout 5s;
    proxy_send_timeout 120s;
  }

  location = / {
    return 200 "OK - Nginx is running\n";
    add_header Content-Type text/plain;
  }
}

작성하고

sudo nginx -t
sudo systemctl reload nginx

저장하면 기본적인 설정은 완료되는 듯 하다.

이제 curl 로 확인해보면 정상적인 응답이 내려오는지 확인해볼수도 있고

퍼블릭 IP 로 들어가면 OK - Nginx is running 뜨면 엔진엑스 설정은 끝난듯하다.