MSA 세팅 시작 [1] Nginx와 Jenkins 설치

최준호·2022년 3월 24일
0

jayeon-msa

목록 보기
1/8
post-thumbnail

📘서버는 raspberry4

aws나 azure 등의 cloud 기반 서버가 아닌 raspberry를 사용하는 이유는 무료 서버를 사용해본 사람들이라면 모두 공감하는 것이 서버의 용량과 ram의 크기가 너무 작다... aws 무료 인스턴스의 경우 gateway까지만 세팅했는데 서버 터짐...

네이버 클라우드 플랫폼의 경우 크레딧을 제공해줘서 어느정도 성능을 세팅할 순 있지만 크레딧 모두 사용 후 매달 금액을 내야하는 부담이...ㅜㅜ 서버의 세팅은 docker 이미지화해서 올려둘 것이기 때문에 추후에 cloud 서버로 이전하는건 어렵지 않을거란 생각에 (아마 1주일 열심히 하면 되지 않을까?...) 우선 집에 있는 라즈베리로 진행하려고 한다.

라즈베리의 스펙은

https://www.devicemart.co.kr/goods/view?no=12234534

해당 제품의 4G짜리로 초기 세팅을 시작한다.

라즈베리는 윈도우, 맥과 다른 ARM CPU를 사용하여 Docker의 오피셜 이미지를 사용하거나 window나 mac에서 소스 작업하여 Dockerfile로 작성하여 이미지를 hub에 푸시했을 경우 포맷이 다르다는 오류로 실행이 안되는 경우가 매우 매우 많으므로 될수 있다면 AMD CPU를 사용하는 컴퓨터로 세팅하기를 추천한다...ㅜㅜ 하지만 전기세는 감당을 해야겠지...ㅜ

🔨OS는 Linux Ubuntu 20.4 LTS

기존의 라즈베리를 뒀었지만 여러개의 디비서버나 Docker를 테스트하면서 많은 docker image들 등 모두 찾아 지우기 귀찮고 또 여러 에러를 직접 부딪히면서 해보고 싶어서 아예 포맷하고 처음부터 하기 위해서 raspberry imager를 통해 포맷과 OS 설치를 동시에 진행했다.

초기 비밀번호까지 설정해주고 서버 시작!

🐋Docker 설치

apt update
apt-get update

를 통해 최신화 해주고

docker를 설치해보자

apt install docker.io -y

명령어면 도커 설치가 끝난다.

예전에는 이것저것 할게 많았는데 되게 간단해져서 좋아진거 같다.

apt install docker-compose -y

docker-compose까지 모두 설치해놓자

내가 구성하려는 방법은 다음 그림과 같다. Docker로 Jenkins 서버를 띄우고 Jenkins에서 git으로 소스를 pull한 뒤 패키징하여 각 Microservice에서 docker hub를 통해 이미지를 다운받고 실행시켜서 컨테이너들을 관리하려고 한다.

Docker Network 생성하기

docker network create --gateway 172.18.0.1 --subnet 172.18.0.0/16 msa

gateway로 172.18.0.1를 사용하고하고 host는 ~16까지로 지정했다.

🤵‍♂️Jenkins Server 설치

docker-compose.yml을 작성한다.

version: '3.7'
  
services:
    jenkins:
        container_name: jenkins
        image: mlucken/jenkins-arm
        volumes:
            - ./data:/var/jenkins_home
            - /var/run/docker.sock:/var/run/docker.sock
        ports:
            - 8080:8080
        privileged: true
        user: root

networks:
    default:
        external:
            name: msa

다음과 같이 작성해서 8080 포트로 뚫어서 사용한다.

그 후에는 jenkins 초기 세팅 글을 참고해서 진행하면 된다.

✖️Jenkins 추가 설정

참고 Jenkins 세팅참고글

jenkins를 최신으로 업데이트하거나 필요 plugin을 추가로 설치한 뒤

jenkins의 세팅을 하기위해 Global Tool Configuration으로 와서 jdk git Gradle
설정을 진행하자!

👉JDK

Oracle 계정 정보를 입력한 뒤 다음과 같이 설정했다.

👉git & gradle

다음과 같이 세팅한 뒤 저장한다.

그리고 git hub 접근을 위해 다음 설정으로 들어간다.

설정 정보를 입력해주고

git 정보를 입력해서 script를 만들어내어서

pipeline {
    agent any

    stages {
        stage('clone') {
            steps {
                echo 'Clone'
                git branch: 'main', credentialsId: '8e8302f1-6b98-4bfe-9981-2e027e49089b', url: 'https://github.com/juno-choi/jayeon-config.git'
            }
        }
    }
}

내에 다음과 같은 파이프라인을 작성했다.

빌드를 실행하면 정상 실행된 것을 확인할 수 있다.

성공한 로그를 확인하면

git 파일을 해당 경로에서 실행한 것을 확인할 수 있다.

참고 git clone 참고 영상

container 내부로 들어가서 해당 경로를 확인하면 다음과 같이 clone이 정상 실행된 것을 확인할 수 있다.

다음 진행을 위해 jenkins 서버 내에 Docker를 설치해줬다.

apt update
apt install docker.io -y

다음 진행을 위해 java도 설치해줬다.

apt-get update
apt-get install openjdk-11-jdk -y

이제 파이프 라인을 docker hub에 push까지 하도록 수정해보자.

pipeline {
    agent any

    stages {
        stage('CLONE') {
            steps {
                git branch: 'main', credentialsId: '8e8302f1-6b98-4bfe-9981-2e027e49089b', url: 'https://github.com/juno-choi/jayeon-config.git'
            }
        }
        stage('CLEAN') {
            steps {
                sh 'cd /var/jenkins_home/workspace/config'
                sh 'chmod +x gradlew'
                sh './gradlew clean'
            }
        }
        stage('BUILD') {
            steps {
                sh './gradlew build'
            }
        }
        stage('HUB PUSH') {
            steps {
                sh 'docker build -t ililil9482/config-server:1.0 .'
                sh 'docker push ililil9482/config-server:1.0'
            }
        }
    }
}

다음과 같이 수정해주었고

정상 실행되었다.

허브에도 정상적으로 올라갔다. 이제 config 서버는 image로 땡겨서 서버를 켜주면 된다.

✅Nginx Server 설치

nginx는 지정해준 url을 통해 도메인을 붙여줄 수 있게끔 해주는 서버로 사용하려고 한다. jenkins 서버web 서버 api 서버를 포트가 아닌 도메인으로 구분해서 사용하면 더 편하게 접근할 수 있기 때문에 nginx 서버를 사용하여 세팅해보자.

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    upstream jenkins {
        server jenkins:8080;
    }

    server {
        listen 80;
        server_name 'url';

        location / {
            proxy_pass http://jenkins;
        }
    }

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    #include /etc/nginx/conf.d/*.conf;
}

nginx.conf 파일을 다음과 같이 작성하고

#Dockerfile
FROM nginx:latest

COPY nginx.conf /etc/nginx/conf.d/nginx.conf

CMD ["nginx", "-g", "daemon off;"]

EXPOSE 80

Dockerfile을 작성해준다.

docker build -t my-nginx:1.0 .

이미지 만들어준다.

정상적으로 이미지 등록된거 확인하고

version: '3.7'
  
services:
    nginx:
        container_name: nginx
        image: my-nginx:1.0
        ports:
            - 80:80

networks:
    default:
        external:
            name: msa

docker-compose로 작성해서 실행해보자!

설정한 url로 접근이 가능한것을 확인할 수 있었다.

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글