Deployment
EC2 서버 배포
EC2 IP 주소 확인
curl ident.mexx.xxx.x.xxxEC2 셋팅
pemKey 이용해서 EC2 서버 들어가기
terminal
ssh -i {yourkey}.pem {ubuntu@xxxx.xx.x.x.x}방화벽 오픈
기본적으로 방화벽이 설정돼있음
필요한 포트번호 열기
https : 443, http: 80, ssh : 22/tcp
Jenkins: 8080, SpringBoot: 8081, mysql:3306
sudo ufw allow <Port>
방화벽 활성화
sudo ufw enable방화벽 상태 확인
sudo ufw status
도커 설정
오래된 버전의 도커 삭제
apt package update
도커 설치를 위해 필요한 패키지 설치
gpg Key 다운
리눅스 패키지 툴이 프로그램 패키지가 유효한지 확인하기 위해 설치 전 gpg키를 통해 검증함
Docker Engine 설치
Docker 설치 확인
도커 설정
사용자 권한 설정
설정 후 재시작을 해야 적용됨
docker-compose 설치
docker-compose
젠킨스 설치할 때 편하게 하기 위해 설치
여러 개의 컨테이너로부터 이루어진 서비스를 구축, 실행하는 순서를 자동으로 하여, 관리를 간단히하는 기능
젠킨스 설치(도커 컨테이너) 및 계정 생성
젠킨스 컨테이너 생성
docker-compose 이용
도커에 젠킨스를 이미지를 이용하여 설치
네트워크 생성
default 네트워크를 harunetwork로 설정
이 네트워크로 컨테이너 간 통신을 한다.
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로 할 경우 관리자)
docker-compose.yml 실행
도커 컨테이너 확인
젠킨스 생성
젠킨스 확인
password 확인
플러그인 설치
install suggested plugins 클릭
기본 플러그인 자동 설치
select plugins to install : 사용자 지정 플러그인 설치

설치중

Admin User 생성
계정명 : your id
암호 : your password
이름 : your name
이메일 주소 : your email
젠킨스 설정Jenkins 관리 선택

플러그인 관리

플러그인 설치
gitlab

docker

ssh

젠킨스 프로젝트 생성 WebHook 설정, 자동 빌드 테스트깃랩 Repo
젠킨스 프로젝트 생성
새로운 Item 클릭

프로젝트 설정
freestyle project 클릭

깃랩 url 입력
→ 에러 메시지가 나타나는게 정상!!

jenkins 추가

Username : 깃랩 아이디
Password : 깃랩 비밀번호
ID : Credential 구별할 아무 텍스트 입력하면 됩니다.
Credential 추가
→ 오류 메시지 사라지면 성공!

MR 시 빌드 될 브랜치 설정

빌드 설정
프로젝트 merge시 자동 빌드

고급 클릭 - secret token 생성

build step - execute shell 추가
→ 연결 테스트를 위한 pwd 명령어 입력(추후 수정)

깃랩 WebHook 연결깃랩 Settings - Webhooks

정보 입력
젠킨스와 연결된 gitlab 프로젝트로 도커 이미지 빌드젠킨스 커네이너 안에 도커 설치
젠킨스에서 도커 빌드를 하기 위함
docker 사전 패키지 설치
루트계정으로 접속되어있기 때문에, 젠킨스 컨테이너 내부에서는 명령어에 sudo를 지움
gpg 키 다운로드
젠킨스 컨테이너 내부에 설치된 os 확인
OS : debian
기존 제공 방식은 ubuntu에 대한 gpg키를 다운로드 하는것이기 때문에 debian으로 바꿔야함
바꾸지 않으면 패키지를 못찾음
기존 명령어에서 ubuntu로 되어있는 부분을 debian으로 바꾸어주면 됨
Docker 설치
Jenkins Container에 Docker 설치 완료!
프로젝트에 DockerFile 작성
SpringBoot DockerFile
classpath 인식 안되어 application.yml을 스프링이 읽지 못했음 → application.yml 을 컨테이너에 직접 복사 후 사용함
b. React Project DockerFile
*** 경로 수정하기
젠킨스에서 DockerFile 이용 도커 이미지 생성(Backend)
Jenkins 관리 클릭

Global Tool Configuration 클릭
Gradle 추가
젠킨스 프로젝트 페이지에서 구성 버튼 클릭
Build Steps 수정
** 순서 중요!!!
빌드 성공
tar파일 생성 확인
젠킨스에서 도커 이미지 빌드 후 tar 압축파일로 생성 완료!
Dockerfile 이미지 빌드 전 스프링 프로젝트 빌드 필요!!
빌드한 도커 이미지를 베이스로 컨테이너 생성(기본 배포 완료)
Jenkins 관리 선택
시스템 설정 클릭
Publish over ssh - ssh servers 추가
Name : 그냥 이름
Hostname : EC2 IP
Username : EC2 접속 계정 이름
Key : EC2 에서 생성했던 pem파일(VSCode로 오픈 후 복붙)
Test Configuration 클릭
컨테이너 확인
backend 컨테이너가 추가됨
컨테이너간 서버 통신을 위한 네트워크 설치
네트워크 설치
EC2서버에 mysql 설치
docker-compose.mysql.yml 생성
실행
확인
mysql container 실행중!!
Docker-compose + Nginx SSL 적용하기 (certbot)
nginx 설정
SSL 인증서 발급
certbot 설치
nginx 컨테이너에서 80포트를 사용중이어서 컨테이너 중지!
재설치
인증서 경로 확인
nginx container 볼륨 설정
ec2서버 경로에 저장된 인증서를 nginx container 안에 넣어줘야 함

nginx 이미지 다시 올리기
컨테이너 확인
확인
Last updated