본문 바로가기

Deploy

MusicCommunitySheets 프로젝트 배포 과정 리마인드하기

사용 기술: AWS EC2, MySql, Nginx, Spring boot, Docker, Git Actions

 

1. Spring boot 프로젝트

- 도커파일 생성 (최상단 폴더)

FROM eclipse-temurin:17-jdk-jammy
ARG JAR_FILE=build/libs/*.jar
ARG PROFILES
COPY ${JAR_FILE} app.jar
ENV TZ Asia/Seoul
ENTRYPOINT ["java","-Dspring.profiles.active=${PROFILES}","-jar","app.jar"]

 

2. AWS

-ec2 인스턴스 생성

-8080, 443, 80 포트 열기

-탄력적 IP 연결

- C:\Users\YourUsername\.ssh에  key 저장

3. 인스턴스

3-1. 접속

- 쉘스크립트 작성( 탄력적 IP 사용)

- 쉘스크립트 이용해 인스턴스 접속

- sudo su 

- 기본 셋팅

  • apt-get update
  • apt-get upgrade

- swap 생성 작업

  • free -h ( 시스템 메모리와 스왑 사용량 확인)
  • fallocate -l 1G /swapfile ( 스왑 파일 생성)
  • chmod 600 /swapfile (권한 설정)
  • mkswap /swapfile (스왑 파일을 스왑 영역으로 설정)
  • swappon /swapfile (스왑파일 활성화)
  • free -h ( 다시 시스템 메모리와 스왑 사용량 확인)

3-2. 도커

- 도커 다운로드

- 도커 로그인

  • Docker login
  • 비밀번호 입력

- 도커 Nginx, MySQL 이미지 설치( 도커 허브에서 명령어 찾기)

- 도커 네트워크 설치

  • network create <네트워크명>

- 컨테이너 설치

  • docker run -d --name <컨테이너명> --network <네트워크명>  -p 80:80 -p 443:443 nginx
  • docker run -d --name <컨테이너명> --network <네트워크명> -e MYSQL_ROOT_PASSWORD=<mysql비밀번호> -p 3306:3306 mysql

- 네트워크 확인

  • docker network inspect <네트워크명>

- MySQL 접속

  • docker exec -it <컨테이너명> bash
  • mysql -u root -p 
  • 패스워드 입력
  • create database <연결할 DB 명>
  • exit

- Nginx 설정

  • docker exec -it <컨테이너명> bin/bash
  • apt-get update
  • apt-get upgrade
  • apt install vim
  • vim /etc/nginx/conf.d/default.conf
# location / {}에 추가
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
  • exit

3-3. 컴포즈 파일

- 컴포즈 파일 생성

  • vim docker-compose.yml
version: '3.8'
services:
  server:
    image: <도커Id>/<이미지명>:latest
    container_name: <컨테이너명>
    ports:
      - "8080:8080"
    environment:
      - PROFILES=prod
    networks:
      - my_app_network

networks:
  my_app_network:
    external: true

 

- 컴포즈 로그 확인법

docker-compose -f <컴포즈파일명> logs

 

4. Git actions

-github에서 /github/worksflows/CICD.yml 작성

 

번외 https 적용

- 도메인 구입

- Route 53 적용

- 인스턴스 접속

- sudo su

- docker exec -it <nginx컨테이너명> bin/bash

- vim /etc/nginx/conf/default.f

server {
    server_name  도메인명;

    #추가
    
    location /.well-known/acme-challenge/ {
        allow all;
        root /var/www/certbot;
    } 
}

 

certbot --nginx -d 

 

'Deploy' 카테고리의 다른 글

NGINX 기초  (0) 2024.07.20