Portfolio 사이트 올리기

최준호·2022년 3월 27일
0

Microservice Architecture

목록 보기
32/32
post-thumbnail

예전에 만들어놨던 node.js 기반의 포트폴리오 사이트가 있는데 수정해서 jenkins에 등록해놓고 사용하려고 한다.

🐋Docker network 생성

프론트 프로젝트는 최대한 aws에 올리려고 한다. 그래서 우선 network부터 다시 세팅해야한다.

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

🐋Dockerfile 생성

FROM node:slim

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . /app

EXPOSE 3000

CMD [ "npm", "run", "start"]

다음과 같이 작성해주었고 docker는 java와 다르게 jar만 던지는게 아니라 소스 전체를 다 가져가야한다. 그래서 package만 이동 후 install해주고 그 후에 모든 소스를 복사해가는 형식이였다.

node_modules
package-lock.json

그리고 node는 해당 파일은 최초 install 시에 생성되는 파일들인데 이 파일들까지 같이 옮겨버리면 에러가 발생한다. .dockerignore 파일을 root에 만들어서 COPY할 때 제외되도록 설정해주자.

docker build -t ililil9482/portfolio:1.0 .

이미지를 생성해주었고 정상적으로 실행되었음을 확인할 수 있다.

이전에는 해당 파일을 hub에 푸시를 jenkins에서 진행했지만 aws와 window는 서로 충돌이 발생하지 않으므로 바로 local에서 hub로 푸시한다.

docker push ililil9482/portfolio:1.0

docker hub로 푸시하고

정상적으로 올라갔다.

🐋docker-compose.yml 작성

version: '3.7'
  
services:
    portfolio:
        image: "ililil9482/portfolio:1.0"
        container_name: portfolio
        expose:
            - 3000
networks:
    default:
        external:
            name: portfolio

aws 서버에 yml 파일을 작성해주자.

🤵‍♂️jenkins 설정

aws 키를 하나 추가해주어야한다.

aws라는 이름으로 추가해주었다.

pipeline {
    agent any

    stages {
        stage('Down') {
            steps {
sshPublisher(publishers: [
  sshPublisherDesc(configName: 'aws',
  transfers: [
    sshTransfer(cleanRemote: false,
    excludes: '',
    execCommand: 'cd /project/portfolio && sudo docker-compose down',
    execTimeout: 120000,
    flatten: false,
    makeEmptyDirs: false,
    noDefaultExcludes: false,
    patternSeparator: '[, ]+',
    remoteDirectory: '',
    remoteDirectorySDF: false,
    removePrefix: '',
    sourceFiles: '')
  ],
  usePromotionTimestamp: false,
  useWorkspaceInPromotion: false,
  verbose: false)
])
            }
        }

        stage('Pull') {
            steps {
sshPublisher(publishers: [
  sshPublisherDesc(configName: 'aws',
  transfers: [
    sshTransfer(cleanRemote: false,
    excludes: '',
    execCommand: 'sudo docker pull ililil9482/portfolio:1.0',
    execTimeout: 120000,
    flatten: false,
    makeEmptyDirs: false,
    noDefaultExcludes: false,
    patternSeparator: '[, ]+',
    remoteDirectory: '',
    remoteDirectorySDF: false,
    removePrefix: '',
    sourceFiles: '')
  ],
  usePromotionTimestamp: false,
  useWorkspaceInPromotion: false,
  verbose: false)
])
            }
        }

        stage('Up') {
            steps {
sshPublisher(publishers: [
  sshPublisherDesc(configName: 'aws',
  transfers: [
    sshTransfer(cleanRemote: false,
    excludes: '',
    execCommand: 'cd /project/portfolio && sudo docker-compose up -d',
    execTimeout: 120000,
    flatten: false,
    makeEmptyDirs: false,
    noDefaultExcludes: false,
    patternSeparator: '[, ]+',
    remoteDirectory: '',
    remoteDirectorySDF: false,
    removePrefix: '',
    sourceFiles: '')
  ],
  usePromotionTimestamp: false,
  useWorkspaceInPromotion: false,
  verbose: false)
])
            }
        }
        
        
    }
}

파이프 라인을 다음과 같이 작성 후

컨테이너가 실행된 것을 확인할 수 있다.

✅Nginx 추가하기

FROM nginx:latest

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

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

EXPOSE 80

Dockerfile을 작성해주고

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;

    server {
        listen 80;

        location / {
            proxy_pass http://portfolio:3000;
        }
    }

    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 파일도 작성해준다.

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

networks:
    default:
        external:
            name: portfolio

마지막 docker-compose.yml 파일까지 작성해서 실행시키면

http://3.38.251.117/

접속이 잘 되는 것을 확인할 수 있었다.

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

0개의 댓글