🐯
경민민 IT 핸드북
  • Orientation
    • 전달사항
    • 복습방법
    • 수료한 선배의 한마디
    • 간단 자기소개
    • 스터디
  • 백엔드
    • Java
      • 1장 프로그래밍 기초
      • 2장 자바 메모리구조
        • 1. Stack
        • 2. Heap
      • 6장 객체
      • 8장 상속
      • 9장 다형성
      • 10장 추상클래스와 인터페이스
      • 13장 Generic
      • 14장 Thread
      • 15장 Network
      • 16장 Lamda
        • 1. 내부 클래스 (Inner Class)
          • DTO , VO, Builder Pattern
        • 2. 람다 표현식 (Lambda Expression)
        • 3. 스트림 API (Stream API)
          • Optional
      • 17장 Enum
  • 프론트
    • Node.js
    • Java Script
      • ES6+
        • Node.js로 자바스크립트 실행
        • let , const , var
        • Destructuring문법
          • Rest(...) 문법
        • Arrow Function
        • 모듈
        • ETC
    • Type Script
      • 개요
      • TS설치 및 환경설정
      • 타입스크립트 기본
        • 기본 자료형들과 타입추론
        • Object, Array , Tuple
        • Any, Unknown, Union Type
        • Function Type
          • Type Assertion && Narrowing
          • Never type
        • Type Aliases와 Interface
        • 리터럴 타입
        • 함수 추가 문법
        • Class문법
        • 객체 타입 추가 문법
        • 실습문제 1차
        • 실습문제 2차
        • 실습문제 3차
    • React
      • 개요
      • SPA 와 MPA
        • SEO(작성예정)
      • 리액트 프로젝트 생성(18.3.1.ver)
        • HTML + react 샘플
        • CRA 와 Vite 비교
      • 리액트 개념들
        • Component
          • 클래스 컴포넌트(작성예정)
          • 함수형 컴포넌트(작성예정)
        • JSX
        • React Virtual Dom
          • Reconciliation
        • hook
          • useState
        • 리액트 데이터 전달
          • FLUX
      • 백엔드 서버 연동
        • 비동기요청
        • 웹소켓
        • Promise(작성예정)
      • 실습문제 1
      • 실습문제 2
      • 실습문제3
      • 실습문제4
  • 프레임워크
    • Spring
      • Spring 개발환경 구축
        • 프로젝트 환경설정
        • 프로젝트 생성
          • MVC Project 생성이슈
        • Maven 설정
        • web.xml 설정
        • Spring Bean Configuration.xml 설정
      • Spring Legacy Project
        • Spring 요청 및 응답 흐름
        • Spring 주요 Annotation
          • 의존성 주입방식의 차이점
          • @ModelAttribute와 유효성검사
          • 비동기처리
          • 스프링 예외처리
        • Logging
        • Pagination
        • Spring File 업로드 및 다운로드
        • Spring WebSocket
        • Spring AOP
      • Spring 라이브러리들(작성예정)
        • Lombok
        • Maven
        • MyBatis
      • Spring 구성 모듈(작성예정)
      • 스프링 과제
    • Spring Boot
      • Spring Boot 개발환경 구축
      • 스프링 부트 프로젝트 생성방법들
        • 프로젝트에서 사용하는 의존성들
      • 스프링 프로젝트 구조
        • SpringBootApplication
      • application.properties
      • Cross Origin
        • CORS
      • WebSocket
        • Stomp(작성중)
      • 로그인(작성중)
      • Spring Security(작성중)
      • 실습문제 Select
      • 실습문제 Update
      • 실습문제 Delete
  • 형상관리(Git)
    • GitHub설정
    • SourceTree를 활용한 깃허브 연동
      • 소스트리 설치
      • Clone
      • Branch
        • Branch Protection rules
          • Branch Protection Rules 상세규칙
        • Rebase 와 Squash (작성예정)
      • Team Project 설정
        • 팀장 프로젝트 셋팅
          • Collaborator
          • .gitignore 설정
        • 팀원 프로젝트 셋팅
        • 공통 프로젝트 진행
  • 프로젝트
    • 진행순서
      • 요구사항 분석 단계
        • 유용한 사이트
      • 프로그램 설계 단계
        • 유용한 사이트
      • 프로그램 구현단계
        • SourceTree를 활용한 Team Project설정
      • 테스트 단계
  • 배포
    • AWS-EC2 배포 연습
    • DevOps
      • IT시스템의 변화와 DevOps
      • DevOps 라이프사이클
    • 젠킨스
      • 도커
        • 도커 설치 방법
        • 도커 기본 명령어들
      • 젠킨스 설치
      • 젠킨스 프로젝트 생성
      • 젠킨스 소스코드 통합 - Github
      • 젠킨스 빌드 설정 - Maven
      • 배포 서버 구축하기
      • 파이프라인 구축
      • AWS 서버 생성
        • AWS 인스턴스 생성
        • AWS - Zenkins 연동
        • AWS - 배포서버 연동
        • AWS - Jenkins CI/CD파이프라인 구축
  • 유용한 사이트 모음
  • SQL
    • SQLD
      • 데이터 모델링의 이해 - 스키마
      • 데이터 모델링의 이해 - ERD
      • 데이터 모델링의 이해 - 정규화
      • 데이터 모델링의 이해 - NULL
      • SQL 기본 및 활용 - WINDOW FUNCTION
    • Oracle
      • 1장 개요
      • 2장 SQL
  • LLM 서비스
    • 1장 LLM에 대한 이해
    • 2장 프롬프트 엔지니어링
      • 프롬프트와 프롬프트 엔지니어링
      • GPT PlayGround
      • 프롬프트 작문 유형
      • 기본 프롬프트 엔지니어링 태크닉
      • 고급 프롬프트 엔지니어링 태크닉
        • ReAct Prompting
        • Active-Prompt
        • Reflexion
        • Graph Prompt
      • OpenAI API설정
      • OpenAI를 활용한 프롬프트 엔지니어링 실습
        • 실습 프롬프트
    • 3장 Lang Chain 프레임워크
      • LangSmith 프레임워크
        • LangSmith를 활용한 LangChain 모니터링 설정
      • LangChain 실습 1 - Prompt
        • 실습 코드
      • LangChain 실습 2 - LLM 캐시와 메모리
    • 4장 RAG
      • Document Loader - 문서 로더
      • Text Splitter - 텍스트 분할
      • Embedding - 임베딩
      • Vector Store - 벡터 저장소
      • Retriever - 검색기
      • ReRanker - 재평가자
      • RAG
Powered by GitBook
On this page
  • 배포컨테이너 구축
  • 1. 도커 파일 생성
  • 2. 도커 이미지 생성
  • 3. 도커 실행
  • 젠킨스 배포 설정
  • 1. 배포용 SSH Server 구축
  • step1. Docker file생성
  • step2. Docker 이미지 생성
  • step3. SSH-Server 컨테이너 실행
  • step4. 접속 테스트(필수)
  • 2. Publish Over SSH 플러그인 설치
  • 3. SSH Server 등록
  • 4. 프로젝트 설정
  • 5. 빌드 테스트
  1. 배포
  2. 젠킨스

배포 서버 구축하기

Previous젠킨스 빌드 설정 - MavenNext파이프라인 구축

Last updated 8 months ago

이전시간들에서는 Github Integration플러그인을 활용하여 젠킨스 서버로 Github 레파지토리의 소스코드를 불러오고, Maven Integration플러그인을 활용하여 소스코드를 jar파일로 Build하는 작업까지 완료했습니다. 다음 순서로는 Build완료한 jar파일을 별도의 컨테이너로 배포하여 애플리케이션을 서비스해보도록 하겠습니다.

배포컨테이너 구축

젠킨스를 활용하여 소스코드를 배포작업 하기 전에 빌드한 jar파일을 바탕으로 어떻게 컨테이너를 실행하는지 알아보도록 하겠습니다.

1. 도커 파일 생성

#사용할 베이스 이미지
FROM openjdk:17

#1차COPY 복사할 jar파일의 [현재위치] -> [복사될 위치]
COPY target/hello-jenkins.jar hello-jenkins.jar

#컨테이너 실행시 호출할 명령어
CMD ["java", "-jar","hello-jenkins.jar"]

2. 도커 이미지 생성

생성한 도커파일을 기반으로 도커이미지를 build하기 위해 도커파일이 존재하는 경로에서 아래 명령어를 입력하도록 하겠습니다.

docker build -t app-container:jre17 .

현재 디렉토리에 존재하는 Dockerfile을 기반으로 app-container:jre17라는 이미지를 빌드하는 명령어입니다.

3. 도커 실행

생성한 이미지를 바탕으로 도커이미지를 실행하여 컨테이너를 생성하도록 하겠습니다.

docker run -d -p 8081:10000 --name springbootApp app-container:jre17

포트바인딩은 호스트PC에서 8081에 접속시 컨테이너 내부의 10000포트와 연결되도록 설정하였습니다.(스프링부트의 server.port가 10000번입니다)

작업 완료 후 localhost:8081로 접속했을 시 아래와 같은 화면이 나오면 정상입니다.

젠킨스 배포 설정

위에 기술한 내용을 바탕으로 컨테이너 생성이 성공적으로 완료되었다면 위 과정을 젠킨스에 등록하여 젠킨스가 빌드될 때 jar파일을 별도의 컨테이너에 배포하는 작업을 수행하도록 하겠습니다. 이때 젠킨스에서 Deploy해주는 jar,war파일들을 바탕으로 컨테이너를 생성해주는 배포용 서버를 먼저 구축 한 후 배포용 서버에서 자동화 배포 파이프라인을 구축해 보도록 하겠습니다.

배포용 서버를 구축한 후 최종 CI/CD 파이프라인 구성도는 아래와 같습니다.

위 작업을 수행하기에 앞서서 배포용 서버를 생성한 후 생성한 서버를 젠킨스에 등록하여 생성된 서버쪽으로 jar파일을 배포할 수 있도록 하겠습니다.

1. 배포용 SSH Server 구축

젠킨스 서버에서 배포용 서버로 JAR파일을 배포하기 위해서는 서버와 서버간의 통신이 필요하며 리눅스에서는 일반적으로 SSH(Secure Shell Protocol)을 이용하여 통신을 합니다.

+ssh방식 통신 설명+

SSH 방식 통신은 클라이언트가 처음 SSH서버에 접근할 때 SSH Public Key를 클라이언트의 환경에 저장합니다.

젠킨스에서 빌드 완료한 jar파일을 전달할 SSH-Sever를 도커를 활용하여 컨테이너화 시켜주도록 하겠습니다.

step1. Docker file생성

# CentOS 7 기반 이미지
FROM centos:7

# EOL 설정
RUN sed -i 's|mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-Base.repo && \
    sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Base.repo

# 필수 패키지 및 Docker 설치
RUN yum -y update && \
    yum -y install \
        openssh-server \
        sudo \
        curl \
        gnupg2 && \
    yum clean all

# Docker 설치
RUN curl -fsSL https://get.docker.com | sh && \
    systemctl enable docker

# SSH 서비스 설정
RUN mkdir -p /var/run/sshd && \
    echo 'root:1234' | chpasswd && \
    sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
    sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && \
    ssh-keygen -A

# 포트 열기
EXPOSE 22
EXPOSE 2375

# 컨테이너 시작 시 서비스 실행
CMD ["/bin/bash", "-c", "sudo /usr/sbin/sshd -D & sudo dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"]

step2. Docker 이미지 생성

docker build -t ssh-server -f 도커파일명 .

step3. SSH-Server 컨테이너 실행

docker run --privileged --name ssh-server -itd -p 10022:22 -p 2375:2375 -p 8081:10000 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup ssh-server:latest

step4. 접속 테스트(필수)

ssh서버에 접근하기 위해서는 아래 명령어를 통해 접근할 수 있습니다. 접근 완료 후 비밀번호는 1234로 접속하시면 됩니다.

ssh root@localhost -p 10022

2. Publish Over SSH 플러그인 설치

3. SSH Server 등록

젠킨스 관리 - System - SSH Servers

  • name : SSH-Server의 고유한 이름을 지정합니다.

  • Hostname : SSH-Server가 설치된 pc의 IP주소를 입력합니다.

  • Username은 ssh-server의 root계정을 입력하시면 됩니다.

  • RomteDirectory : ssh에 접속 후 이동할 디렉토리 주소를 작성합니다.

고급옵션을 체크한 후 비밀번호와 연결을 위한 포트번호를 작성합니다.

4. 프로젝트 설정

프로젝트 - 설정 - 빌드 후 조치 - send build artifacts over ssh

빌드 완료후 ssh를 통해 패키지를 전송하는 옵셥입니다. 전달할 패키지와, 전달할 서버를 선택하여 작성하시면 됩니다.

+추가+

컨테이너 생성시

docker stop springbootApp;

docker rm springbootApp;

docker rmi app-container:jre17;

5. 빌드 테스트

작성 완료후 빌드를 통해 배포가 정상적으로 이루어져있는지 테스트를 진행하도록 하겠습니다. 빌드시 아래와 같은 결과창이 뜨면 성공입니다.

어플리케이션을 컨테이너로서비스하기 위해서는 컨테이너를 생성할 수 있는 이미지가 필요합니다. 도커 이미지를 생성하기 위한 명령어는 에 기술하도록 하겠습니다.

도커파일