본문 바로가기

프로젝트/On-Premise

On-Premise: Jenkins 설치 및 Nginx 라우팅 (4)

1. 계기

 

Spring Boot를 통한 프로젝트의 CI/CD를 구성하기 위해 Jenkins 설치 환경 구성이 필요했어요 !

그리고 Jenkins를 모니터링 하기 위해 Nginx 라우팅이 필요했어요 😅

 

2. Docker Network 생성

 

Nginx와 Jenkins를 연결해주는 Docker Network를 먼저 생성해줍니다

docker network create 이름

 

저는 해당 네트워크의 이름을 nginx로 짓고 진행했어요 😀

3. Docker-Compose 파일 생성

 

Jenkins도 Docker-Compose를 통해 설치해줄거에요 !

먼저 Jenkins에 대한 Compose 파일을 생성합니다

# jenkins_compose.yml

version: '3'

services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    restart: unless-stopped
    ports:
      - "7000:8080"
      - "50000:50000"
    volumes:
      - jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
      - /usr/libexec/docker:/usr/libexec/docker
    environment:
      - TZ=Asia/Seoul
      - JENKINS_OPTS=--prefix=/jenkins
    networks:
      - nginx

volumes:
  jenkins_home:
    name: jenkins_home

networks:
  nginx:
    external: true

 

Jenkins 파이프라인에서 Docker를 사용해야 하는데, 이때 호스트의 Docker를 그대로 사용하기 위해 DOOD 방식을 채택했어요

이를 위해 Docker 관련 볼륨을 마운트해줬습니다 🫡

 

그리고 Nginx의 라우팅 경로를 맞춰주기 위해 JENKINS_OPTS=--prefix=/jenkins 옵션을 환경 변수로 넣어줬습니다

(https://도메인/jenkins로 Jenkins에 접속할 수 있도록 하기 위함)

 

또한 연결을 위한 외부 네트워크를 만들어줬으므로, Nginx의 Compose 파일도 수정해줍니다

# nginx_compose.yml

version: '3'

services:
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - nginx:/etc
      - /etc/letsencrypt:/etc/letsencrypt:ro
    environment:
      - TZ=Asia/Seoul
    restart: unless-stopped
    networks:
      - nginx

volumes:
  nginx:
    name: nginx
    
networks:
  nginx:
    external: true

 

4. Nginx 라우팅 설정 추가

 

이제 Nginx 컨테이너로 접속해 이전에 작성한  /etc/nginx/nginx.conf 에 라우팅을 추가해줍시다

# nginx.conf
# 중략

server {
        listen 443 ssl;
        server_name 도메인;

        ssl_certificate /etc/letsencrypt/live/도메인/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/도메인/privkey.pem;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers HIGH:!aNULL:!MD5;

        location /jenkins/ {
            proxy_pass http://jenkins:8080/jenkins/;
            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-Host $host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;
            proxy_redirect off;
        }
}

 

location 부분을 추가하고, jenkins 서비스 내의 8080포트를 /jenkins/ 패스로 매핑시켜줘요

이제 해당 주소로 접속을 해보면 (https://도메인/jenkins)

 

이처럼 Jenkins 화면이 나오게 됩니다 😊

저는 이미 설치가 완료된 상태여서 이와 같이 나오고, 아직 설치가 되지 않으신 분들은 설치 화면이 나올거에요

설치는 나오는 절차대로 진행하면 큰 무리 없이 진행할 수 있으므로 생략하도록 하겠습니다

 

다음번엔 OpenVPN을 이용한 DB의 외부 접근 보안에 대해 이야기 해볼게요 !