인프라 환경 구축
Skill Builder 구동을 위해 필요한 하드웨어 서버 또는 VM(Virtual Machine, 가상 머신) 구성은 다음과 같습니다. 이때 하드웨어 서버 또는 VM은 반드시 최소 사양을 만족해야 합니다.
표인프라 환경 구축구분 | 구성 |
---|---|
서버 구성 | - Docker Image Server - Docker Container Server - Reverse Proxy Server |
Docker Image Server
Docker Image Server는 Builder Server와 Skill Server로 구성되며, 웹 페이지에서 Skill을 편집하고 구동 서버에 Skill을 배포하는 데 필요합니다.
표Docker Image Server
- Builder Server에 속하는 Builder Web Server, Builder Back-end Server 그리고 Builder Database Server는 하나의 물리적 서버에서 같이 구동이 가능합니다.
- Builder Server에서 Skill Server로 Skill을 배포하기 위해 서로 양방향 통신이 가능해야 합니다.
분류 | 서버 | 개수 | 설명 |
---|---|---|---|
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 Server와 Skill Server로 구성되며, 다운로드받은 Docker Image를 구동하는 서버로 사용되고 있습니다.
표Docker Container Server
- Builder Server에 속하는 Builder Web Server, Builder Back-end Server 그리고 Builder Database Server는 하나의 물리적 서버에서 같이 구동이 가능합니다.
- Builder Server에서 Skill Server로 Skill을 배포하기 위해 서로 양방향 통신이 가능해야 합니다.
분류 | 서버 | 개수 | 설명 |
---|---|---|---|
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의 설정 및 사용자 Skill 편집 데이터일 뿐, 업무에 관련된 데이터는 저장이 되지 않습니다. 데이터베이스 내 데이터는 로컬 서버에 저장됩니다.
필수 프로그램 설치
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를 실행 시킬 서버에 다음의 다섯 개 파일을 준비한 후, 각 파일을 ~/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 태그를 통해 신규 버전을 제공하는 방식이며, 업데이트 이전 버전은 별도 관리됩니다.
업데이트 방법
-
.env 파일을 열고 다음의 세 개 항목의 버전 정보를 신규 버전으로 수정합니다.
코드예제버전 정보 수정
export FRONT_VERSION=신규버전 export SERVER_VERSION=신규버전 export DEPLOY_VERSION=신규버전
-
터미널에서 다음의 서비스 실행 명령어를 순서대로 실행합니다.
코드예제서비스 실행
./pull.sh ./start.sh