Deployment

EC2 서버 배포


EC2 IP 주소 확인


curl ident.me
xx.xxx.x.xxx

EC2 셋팅


  1. pemKey 이용해서 EC2 서버 들어가기

    terminal

    ssh -i {yourkey}.pem {ubuntu@xxxx.xx.x.x.x}

  2. 방화벽 오픈

    • 기본적으로 방화벽이 설정돼있음

    • 필요한 포트번호 열기

      • https : 443, http: 80, ssh : 22/tcp

      • Jenkins: 8080, SpringBoot: 8081, mysql:3306

      sudo ufw allow <Port>
  3. 방화벽 활성화

    sudo ufw enable
  4. 방화벽 상태 확인

    sudo ufw status

도커 설정


  1. 오래된 버전의 도커 삭제

  2. apt package update

  3. 도커 설치를 위해 필요한 패키지 설치

  4. gpg Key 다운

    • 리눅스 패키지 툴이 프로그램 패키지가 유효한지 확인하기 위해 설치 전 gpg키를 통해 검증함

  5. Docker Engine 설치

  6. Docker 설치 확인

도커 설정


  1. 사용자 권한 설정

    • 설정 후 재시작을 해야 적용됨

  2. docker-compose 설치

    • docker-compose

      • 젠킨스 설치할 때 편하게 하기 위해 설치

      • 여러 개의 컨테이너로부터 이루어진 서비스를 구축, 실행하는 순서를 자동으로 하여, 관리를 간단히하는 기능

젠킨스 설치(도커 컨테이너) 및 계정 생성


  1. 젠킨스 컨테이너 생성

    • docker-compose 이용

    • 도커에 젠킨스를 이미지를 이용하여 설치

  2. 네트워크 생성

    • default 네트워크를 harunetwork로 설정

    • 이 네트워크로 컨테이너 간 통신을 한다.

  3. docker-compose.yml 생성

    • jenkins의 home, docker.sock을 바인딩 시켜 젠킨스 컨테이너를 삭제해도 데이터는 남도록 한다.

    • jenkins는 8080포트를 받는다.

    • nginx의 포트 80, 443을 열어 http, https를 받을 수 있도록 한다.

    • nginx 컨테이너의 conf.d폴더, letsencrypt폴더, certbot폴더, dist폴더를 바인딩한다.

    • certbot 컨테이너의 letsencrypt폴더, certbot폴더를 바인딩한다. 이 때 nginx의 컨테이너의 letsencryt, certbot폴더와 같은 곳을 바인딩 시켜야 한다.

      • certbot : Let's Encrypt 인증서를 사용하여 자동으로 HTTPS를 활성화하는 무료 오픈 소스 소프트웨어 도구

    • services : 컨테이너 서비스

    • jenkins : 서비스 이름

    • image : 컨테이너 생성시 사용할 image, 여기서는 jenkins/jenkins:lts 이미지를 사용(jenkins의 lts버전을 가져온다는 뜻)

    • container_name : 컨테이너 이름

    • volumes : 공유 폴더 느낌, aws의 /var/run/docker.sock와 컨테이너 내부의 /var/run/docker.sock를 연결, /jenkins 폴더와 /var/jenkins_home 폴더를 연결.

    • ports : 포트 매핑, aws의 8080포트와 컨테이너의 8080 포트를 연결한다.

    • privileged : 컨테이너 시스템의 주요 자원에 연결할 수 있게 하는 것 기본적으로 False로 한다고 한다.

    • user : 젠킨스에 접속할 유저 계정 (root로 할 경우 관리자)

  4. docker-compose.yml 실행

  5. 도커 컨테이너 확인

젠킨스 생성


  1. 젠킨스 확인

  2. password 확인

  3. 플러그인 설치

    • install suggested plugins 클릭

    • 기본 플러그인 자동 설치

    • select plugins to install : 사용자 지정 플러그인 설치

    • 설치중

  4. Admin User 생성

    • 계정명 : your id

    • 암호 : your password

    • 이름 : your name

    • 이메일 주소 : your email

    젠킨스 설정

    1. Jenkins 관리 선택

    2. 플러그인 관리

    3. 플러그인 설치

      • gitlab

      • docker

      • ssh

    젠킨스 프로젝트 생성 WebHook 설정, 자동 빌드 테스트

    1. 깃랩 Repo

    2. 젠킨스 프로젝트 생성

      • 새로운 Item 클릭

    3. 프로젝트 설정

      • freestyle project 클릭

      • 깃랩 url 입력

        → 에러 메시지가 나타나는게 정상!!

      • jenkins 추가

        • Username : 깃랩 아이디

        • Password : 깃랩 비밀번호

        • ID : Credential 구별할 아무 텍스트 입력하면 됩니다.

      • Credential 추가

        → 오류 메시지 사라지면 성공!

      • MR 시 빌드 될 브랜치 설정

      • 빌드 설정

        • 프로젝트 merge시 자동 빌드

        • 고급 클릭 - secret token 생성

        • build step - execute shell 추가

          → 연결 테스트를 위한 pwd 명령어 입력(추후 수정)

      깃랩 WebHook 연결

      1. 깃랩 Settings - Webhooks

      2. 정보 입력

    젠킨스와 연결된 gitlab 프로젝트로 도커 이미지 빌드

    1. 젠킨스 커네이너 안에 도커 설치

      • 젠킨스에서 도커 빌드를 하기 위함

    2. docker 사전 패키지 설치

      • 루트계정으로 접속되어있기 때문에, 젠킨스 컨테이너 내부에서는 명령어에 sudo를 지움

    3. gpg 키 다운로드

    4. 젠킨스 컨테이너 내부에 설치된 os 확인

      • OS : debian

      • 기존 제공 방식은 ubuntu에 대한 gpg키를 다운로드 하는것이기 때문에 debian으로 바꿔야함

      • 바꾸지 않으면 패키지를 못찾음

      • 기존 명령어에서 ubuntu로 되어있는 부분을 debian으로 바꾸어주면 됨

    5. Docker 설치

      • Jenkins Container에 Docker 설치 완료!

    6. 프로젝트에 DockerFile 작성

      1. SpringBoot DockerFile

      • classpath 인식 안되어 application.yml을 스프링이 읽지 못했음 → application.yml 을 컨테이너에 직접 복사 후 사용함

      b. React Project DockerFile

      *** 경로 수정하기

젠킨스에서 DockerFile 이용 도커 이미지 생성(Backend)


  1. Jenkins 관리 클릭

  2. Global Tool Configuration 클릭

  3. Gradle 추가

  4. 젠킨스 프로젝트 페이지에서 구성 버튼 클릭

  5. Build Steps 수정

    ** 순서 중요!!!

  6. 빌드 성공

  7. tar파일 생성 확인

    • 젠킨스에서 도커 이미지 빌드 후 tar 압축파일로 생성 완료!


  • Dockerfile 이미지 빌드 전 스프링 프로젝트 빌드 필요!!

빌드한 도커 이미지를 베이스로 컨테이너 생성(기본 배포 완료)


  1. Jenkins 관리 선택

  2. 시스템 설정 클릭

  3. Publish over ssh - ssh servers 추가

    • Name : 그냥 이름

    • Hostname : EC2 IP

    • Username : EC2 접속 계정 이름

    • Key : EC2 에서 생성했던 pem파일(VSCode로 오픈 후 복붙)

  4. Test Configuration 클릭

  5. 컨테이너 확인

    • backend 컨테이너가 추가됨

컨테이너간 서버 통신을 위한 네트워크 설치


  1. 네트워크 설치

EC2서버에 mysql 설치


  1. docker-compose.mysql.yml 생성

    1. 실행

    1. 확인

    mysql container 실행중!!

Docker-compose + Nginx SSL 적용하기 (certbot)

nginx 설정


SSL 인증서 발급


  1. certbot 설치

    • nginx 컨테이너에서 80포트를 사용중이어서 컨테이너 중지!

  2. 재설치

  3. 인증서 경로 확인

  4. nginx container 볼륨 설정

    • ec2서버 경로에 저장된 인증서를 nginx container 안에 넣어줘야 함

  5. nginx 이미지 다시 올리기

  6. 컨테이너 확인

  7. 확인


Last updated