Skill Builder::사전 작업 및 설정::인프라 환경 구축 및 설치

페이지 이동경로

인프라 환경 구축

Skill Builder 구동을 위해 필요한 하드웨어 서버 또는 VM(Virtual Machine, 가상 머신) 구성은 다음과 같습니다. 이때 하드웨어 서버 또는 VM은 반드시 최소 사양을 만족해야 합니다.

인프라 환경 구축

Docker Image Server

Docker Image Server는 Builder ServerSkill Server로 구성되며, 웹 페이지에서 Skill을 편집하고 구동 서버에 Skill을 배포하는 데 필요합니다.

  • Builder Server에 속하는 Builder Web Server, Builder Back-end Server 그리고 Builder Database Server는 하나의 물리적 서버에서 같이 구동이 가능합니다.
  • Builder Server에서 Skill Server로 Skill을 배포하기 위해 서로 양방향 통신이 가능해야 합니다.
Docker Image Server
분류 서버 개수 설명
Builder Server Builder Web Server 1 Skill을 편집할 수 있는 웹 서버
Builder Back-end Server 1 Skill을 편집할 수 있는 백엔드 서버
Builder Database Server 1 Skill을 편집할 수 있는 데이터베이스 서버
Skill Server Skill Back-end Server 1 Skill이 배포되어 실행되는 서버
- 외부(챗봇)로부터 Skill(API) 호출을 받기 위해 외부와 통신이 가능해야 함
- 스테이지 구성 및 이중화 정책에 따라 Scale out이 가능

Docker Container Server

Docker Container Server는 Docker Image Server와 마찬가지로 Builder ServerSkill Server로 구성되며, 다운로드받은 Docker Image를 구동하는 서버로 사용되고 있습니다.

  • Builder Server에 속하는 Builder Web Server, Builder Back-end Server 그리고 Builder Database Server는 하나의 물리적 서버에서 같이 구동이 가능합니다.
  • Builder Server에서 Skill Server로 Skill을 배포하기 위해 서로 양방향 통신이 가능해야 합니다.
Docker Container Server
분류 서버 개수 설명
Builder Server Builder Web Server 1 Skill을 편집할 수 있는 웹 서버
Builder Back-end Server 1 Skill을 편집할 수 있는 백엔드 서버
Builder Database Server 1 Skill을 편집할 수 있는 데이터베이스 서버
Skill Server Skill Back-end Server N Skill이 배포되어 실행되는 서버
- 외부(챗봇)로부터 Skill(API) 호출을 받기 위해 외부와 통신이 가능해야 함
- 스테이지 구성 및 이중화 정책에 따라 Scale out 가능

Reverse Proxy Server

Reverse Proxy Server는 고가용성(High Availability)으로 구성된 Skill Server(운영 서버)의 API를 하나의 도메인으로 호출하는 데 필요합니다.

Reverse Proxy Server
서버 개수 설명
Reverse Proxy Server 1 Skill Server의 API를 하나의 도메인으로 호출하는데 필요

Skill Builder 설치

Skill Builder의 설치 및 실행 관련 사항은 Docker 사용 여부를 기준으로 설명합니다.

안내
Docker가 아닌 네이티브 환경으로 Skill Builder를 설치하는 방법은 업데이트 예정입니다.

Docker를 사용할 경우

Docker를 사용하면 Skill Builder의 빠른 설치, 실행 및 버전 패치가 용이합니다. Docker 구동 환경에서는 운영 시스템 종류 및 별도의 사전 프로그램 설치 여부와 무관하게 바로 Skill Builder를 사용할 수 있습니다.
Skill(API)은 메모리 상에 배포되기 때문에 데이터베이스에 보관되는 데이터는 Skill Builder의 설정 및 사용자 스킬 편집 데이터일 뿐, 업무에 관련된 데이터는 저장이 되지 않습니다. 데이터페이스 내 데이터는 로컬 서버에 저장됩니다.

필수 프로그램 설치

Docker를 사용할 경우 필수 설치 프로그램은 다음과 같습니다.

  • Docker
  • Docker Compose
  • MySQL(또는 MariaDB)

기존에 MySQL 또는 MariaDB를 보유하고 있는 경우에는 다음의 스크립트를 실행하여 apibuilder라는 이름의 Schema를 신규 생성합니다.

  • .env, docker-compose.yml, start.sh, pull.sh, entrypoint.sh

코드예제MySQL

DB_VOLUME=db-apibuilder
DB_PASSWORD=passwd

docker stop mysql docker rm mysql docker run –name mysql
–ulimit nofile=20000:40000
-v $DB_VOLUME:/var/lib/mysql
-e MYSQL_DATABASE=apibuilder
-v cnf:/etc/mysql/conf.d
-p 3306:3306 -e MYSQL_ROOT_PASSWORD=$DB_PASSWORD
-d mysql

서비스 실행 파일 준비

Skill Builder를 실행시킬 서버에 다음의 5개 파일을 준비한 후, 각 파일을 ~/Skillbuilder-Script/ 경로에 위치시킵니다.

.env

코드예제.env

#### CONTAINER CONFIG
export FRONT_IMAGE_NAME=kepsol/apibuilder-front
export SERVER_IMAGE_NAME=kepsol/apibuilder-server
export DEPLOY_IMAGE_NAME=kepsol/apibuilder-deploy

export FRONT_VERSION=1.5.0
export SERVER_VERSION=1.5.0
export DEPLOY_VERSION=1.5.0

#### API CONFIG
export API_SERVER_URI=http://localhost:8081

#### DATABASE CONFIG
export DATABASE_INFO=jdbc:mysql://localhost:3306/apibuilder
export DATABASE_ROOT_PASSWORD=passwd

docker-compose.yml

코드예제docker-compose.yml

version: '3.4'
services:
  front:
    container_name: apibuilder-front
    network_mode: apibuilder-network
    image: ${FRONT_IMAGE_NAME}:${FRONT_VERSION}
    volumes:
      - ./entrypoint.sh:/entrypoint.sh
    environment:
      - API_SERVER_URI=${API_SERVER_URI}
    command: sh -c 'sh entrypoint.sh && nginx -g "daemon off;"'  
    ports:
      - "8080:80"

  server:
    container_name: apibuilder-server
    network_mode: apibuilder-network
    image: ${SERVER_IMAGE_NAME}:${SERVER_VERSION}
    volumes:
      - ./libs:/libs
      - ./resources:/resources
    environment:
      - SPRING_DATASOURCE_URL=${DATABASE_INFO}?useUnicode=true&characterEncoding=utf8
      - SPRING_DATASOURCE_PASSWORD=${DATABASE_ROOT_PASSWORD}
    ports:
      - "8081:8081"

  deploy:
    container_name: apibuilder-deploy
    network_mode: apibuilder-network
    image: ${DEPLOY_IMAGE_NAME}:${DEPLOY_VERSION}
    volumes:
      - ./libs:/libs
      - ./runningData:/runningData
    ports:
      - "8083:8081"
      - "8084:8082"

networks:
  apibuilder-network:
     external: true

start.sh

코드예제start.sh

set -a
source ~/Skillbuilder-Script/.env

if [ -n "$1" ]; then
  echo "parameter에 설정된 버전으로 배포합니다"
  FRONT_VERSION=$1
  SERVER_VERSION=$1
  DEPLOY_VERSION=$1
else
  echo ".env 파일에 저장된 버전으로 배포합니다"
fi

echo -e "\n"
echo "FRONT_VERSION : $FRONT_VERSION"
echo "SERVER_VERSION : $SERVER_VERSION"
echo "DEPLOY_VERSION : $DEPLOY_VERSION"
echo -e "\n"

docker stop apibuilder-front apibuilder-server apibuilder-deploy
docker rm apibuilder-front apibuilder-server apibuilder-deploy
docker network create apibuilder-network
docker-compose -f ~/Skillbuilder-Script/customer/docker-compose.yml up -d

pull.sh

코드예제pull.sh

set -a
source ~/Skillbuilder-Script/.env

if [ -n "$1" ]; then
  echo "parameter에 설정된 버전으로 pull합니다"
  FRONT_VERSION=$1
  SERVER_VERSION=$1
  DEPLOY_VERSION=$1
else
  echo ".env 파일에 저장된 버전으로 pull합니다"
fi

echo -e "\n"
echo "FRONT_VERSION : $FRONT_VERSION"
echo "SERVER_VERSION : $SERVER_VERSION"
echo "DEPLOY_VERSION : $DEPLOY_VERSION"
echo -e "\n"

docker pull kepsol/apibuilder-front:$FRONT_VERSION
docker pull kepsol/apibuilder-server:$SERVER_VERSION
docker pull kepsol/apibuilder-deploy:$DEPLOY_VERSION

entrypoint.sh

코드예제entrypoint.sh

ROOT_DIR=/usr/share/nginx/html/spa

echo "API_SERVER_URI : ${API_SERVER_URI}"
for file in $ROOT_DIR/js/*.js* $ROOT_DIR/index.html;
do
  echo "Processing $file";
  sed -i -e "s,http://skillbuilder-server-kep.devel.kakao.com,${API_SERVER_URI},g" $file
done

서비스 실행

고객사 환경에 따라 .env 파일을 알맞게 수정 후, 서비스 실행 명령어를 순서대로 실행합니다.

코드예제서비스 실행

$) ./pull.sh
$) ./start.sh

Skill Builder 업데이트

Skill Builder의 업데이트 방법은 다음과 같습니다.

Docker를 사용할 경우

패치 버전은 Docker Image 태그를 통해 신규 버전을 제공하는 방식이며, 업데이트 이전 버전은 별도 관리됩니다.

업데이트 방법

  1. .env 파일을 열고 다음의 3개 항목의 버전 정보를 신규 버전으로 수정합니다.

    코드예제버전 정보 수정

    
    export FRONT_VERSION=신규버전
    export SERVER_VERSION=신규버전
    export DEPLOY_VERSION=신규버전
    
    

  2. 다음의 서비스 실행 명령어를 순서대로 실행합니다.

    코드예제서비스 실행

    $) ./pull.sh
    $) ./start.sh
    

이 문서가 만족스러운 이유를 알려주세요.
이 문서에 아쉬운 점을 알려주세요.
평가해주셔서 감사합니다.

더 자세한 의견은 documentation@kakaoenterprise.com 으로 제보해주세요.