Deployment
Instruction
EC2 혹은 Lightsail 등으로 이용 가능한 Ubuntu 서버가 필요합니다.
원활한 설치를 위해 서버 기본 상태에서 시작하는 것을 권장합니다.
TOOLIV Community Edition 서버 사양은 다음과 같습니다.
최소한 아래 명시 사양 이상의 서버를 사용해서 설치할 것을 권장합니다.
Memory 16GB
4 vCPUs (4 코어)
Storage(EBS Volume) 10GB 이상
Prerequisites
원활한 설치와 설정을 위해 root 권한으로 진행합니다.
sudo suubuntu 에서 설치 가능한 패키지 리스트를 업데이트합니다.
apt updateTOOLIV 배포에 필요한 여러 패키지를 설치합니다.
vim 에디터 설치
파일을 수정하기 위해 vim을 설치합니다.
apt install -y vimgit 설치
TOOLIV Github를 클론 받기 위해 설치합니다.
apt install gitnodejs 설치
client 프로젝트 빌드를 위해 nodejs 및 npm을 설치합니다.
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
apt-get install -y nodejsNGINX 설치
리버스 프록시 NGINX 서버를 설치합니다.
apt install -y nginxNGINX 설정 파일을 letsencrypt - certbot 에서 자동 설정할 수 있도록 구동시킵니다.
service nginx startTOOLIV은 React client, Spring Boot Server, OpenVidu, redis 및 NGINX를 사용하므로
아래 항목들에 대한 인바운드 규칙을 설정해줍니다.
TCP
UDP
22
80
443
3000
3478
3478
8443
40000 - 57000
40000 - 57000
57001 - 65535
57001 - 65535
Install Certbot
Certbot 설치를 위해 snap을 이용하여 core를 설치합니다. core는 snap 최신 버전을 유지하기 위해 설치합니다.
snap install core
snap refresh core만약 기존에 Certbot이 설치되어 있다면 Certbot을 삭제합니다.
apt remove certbotsnap을 이용하여 Certbot을 설치합니다.
snap install --classic certbotCertbot 명령을 로컬에서 실행할 수 있도록 연결시켜줍니다.
ln -s /snap/bin/certbot /usr/bin/certbot아래 명령어를 실행하여 Certbot을 이용해 SSL 인증서를 받아온 후, Certbot이 NGINX를 설정합니다.
certbot --nginx서버 환경에 맞도록 NGINX를 설정합니다.
vim ${path}/etc/nginx/sites-available/default아래 내용은 참고할 만한 예시입니다. ( etc/nginx/sites-available/default - 443 server 블록 )
포트 번호는 그대로 이용하는 것을 권장합니다.
location / {
proxy_pass http://도메인:클라이언트 컨테이너 포트(ex: 3000);
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /api/ {
proxy_pass https://도메인:서버 컨테이너 포트(ex: 8443);
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /chatting/ {
proxy_pass https://도메인:서버 컨테이너 포트(ex: 8443);
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /openvidu/ {
proxy_pass https://도메인:오픈비두 HTTPS 포트(ex: 4443);
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
발급받은 SSL을 서버에 적용하기 위해 tooliv.p12 파일을 export 합니다.
openssl pkcs12 -export -in ${path}/etc/letsencrypt/live/{도메인}/cert.pem -inkey ${path}/etc/letsencrypt/live/{도메인}/privkey.pem -out tooliv.p12 -CAfile ${path}/etc/letsencrypt/live/{도메인}/chain.pem -caname root추가로 비밀번호 입력하는 창이 나면 tooliv.p12 키에 대한 비밀번호를 입력합니다.
Clone Github repository
Github Tooliv repogitory에서 오픈소스 코드를 clone 받아옵니다. ( home/ubuntu 경로에서 실행 )
git clone https://github.com/TOOLIV/Tooliv.gitserver 프로젝트 폴더 내에 있는 tooliv.p12 파일을 삭제합니다.
rm -rf ${path}/home/ubuntu/Tooliv/server/src/main/resources/keystore/tooliv.p12생성한 tooliv.p12 파일을 프로젝트 내 폴더로 복사합니다.
cp ${path}/home/ubuntu/tooliv.p12 ${path}/home/ubuntu/Tooliv/server/src/main/resources/keystoreExecute Shell script
TOOLIV 배포에 필요한 패키지를 자동으로 설치하고, 필요한 Docker 볼륨과 네트워크를
편리하게 생성하기 위해 shell script 파일을 home/ubuntu 경로로 가져옵니다.
cp ${path}/home/ubuntu/Tooliv/tooliv-install.sh ${path}/home/ubuntutooliv-install.sh 파일에 실행 권한을 부여합니다.
chmod 755 ${path}/home/ubuntu/tooliv-install.shtooliv-install.sh 파일을 실행하여 패키지 설치 및 환경설정을 자동으로 실행합니다.
${path}/home/ubuntu/tooliv-install.sh설치 항목
OpenJDK 8
Gradle 7.4
Docker
Docker-compose
실행 내용
docker | tooliv-network 생성
docker | tooliv-volume 생성
docker | tooliv-db-volume 생성
Configure Gradle
Gradle의 bin 디렉토리를 포함하도록 PATH 환경변수를 설정합니다.
gradle.sh 파일을 생성합니다.
vim ${path}/etc/profile.d/gradle.shgradle.sh 내부에 아래 내용을 입력합니다.
export GRADLE_HOME=/opt/gradle/latest
export PATH=${GRADLE_HOME}/bin:${PATH}생성한 gradle.sh 파일에 실행 권한을 부여합니다.
chmod +x ${path}/etc/profile.d/gradle.sh명령어를 입력하여 환경변수를 로딩합니다.
. ${path}/etc/profile.d/gradle.shInstall Redis
아래 명령어를 통해redis-container를 구동시킵니다.
( 예시 명령어 그대로 입력해서 포트 번호를 동일하게 실행하는 것을 권장합니다. )
docker run --network tooliv-network -d --name redis-container -p 6380:6380 -dit --restart unless-stopped redisredis-container host 정보를 확인하기 위해 tooliv-network 정보를 조회합니다.
docker inspect tooliv-network 
Install OpenVidu
OpenVidu 설치 위해 /opt 폴더로 이동합니다.
cd ${path}/opt아래 명령어를 실행하면 OpenVidu가 다운로드되고 설치 스크립트가 동작합니다.
openvidu 폴더에 필요한 모든 파일이 다운로드됩니다.
curl https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/install_openvidu_latest.sh | bashopenvidu 폴더로 이동합니다.
cd openviduOpenVidu 내부적으로도 NGINX를 사용하고 있기 때문에 충돌을 방지하기 위해서 NGINX 실행을 멈춥니다.
service nginx stopOpenVidu 초기 설정을 위해 환경변수를 다음과 같이 수정합니다.
vim .env환경변수 속성
DOMAIN_OR_PUBLIC_IP: 도메인네임 또는 Public IP를 작성합니다.OPENVIDU_SECRET: OpenVidu 서버에 연결하기 위해 사용됩니다. (TOOLIV작성)CERTIFICATE_TYPE: letsencrypt로 설정하여 유효한 인증서를 자동 생성합니다.LETSENCRYPT_EMAIL: 이메일을 입력합니다.
# Domain name. If you do not have one, the public IP of the machine.
# For example: 198.51.100.1, or openvidu.example.com
DOMAIN_OR_PUBLIC_IP={도메인}
OPENVIDU_SECRET=TOOLIV
CERTIFICATE_TYPE=letsencrypt
LETSENCRYPT_EMAIL={이메일}
HTTP_PORT=80
HTTPS_PORT=443
속성 값을를 모두 입력하였으면 vim 창을 저장 종료합니다. (esc + : wq!)
OpenVidu를 start하여 초기 설정을 완료합니다.
./openvidu start실제 TOOLIV 서비스에서 사용할 PORT 번호를 OpenVidu 환경 변수에 다시 매핑합니다.
vim .envHTTP_PORT, HTTPS_PORT 2가지 속성 값을 변경합니다.
( 가능한 동일한 설치 환경을 구성하기 위해 예시대로 작성하는 것을 권장합니다. )
# Domain name. If you do not have one, the public IP of the machine.
# For example: 198.51.100.1, or openvidu.example.com
DOMAIN_OR_PUBLIC_IP={도메인}
OPENVIDU_SECRET=TOOLIV
CERTIFICATE_TYPE=letsencrypt
LETSENCRYPT_EMAIL={이메일}
HTTP_PORT=4442
HTTPS_PORT=4443
변경을 완료했으면 OpenVidu 설정을 마치고 다시 구동시킵니다.
./openvidu restart 이제 OpenVidu 설치 및 설정이 끝났습니다.
OpenVidu 작업을 위해 종료했던 NGINX를 다시 구동시키고, 홈 디렉토리로 이동합니다.
service nginx start
cd ${path}/home/ubuntuInstall MySQL and Create Database
TOOLIV Server를 이용하기 위해서는 MySQL 데이터베이스가 필요합니다. 사용자의 환설정에 맞게 5.7 버전을 설정하고 컨테이너로 구동시킵니다.
아래 예시는 toolv-db-volume 을 사용하여 tooliv-db 라는 이름으로 컨테이너를 구동시키고 tooliv_db 스키마를 생성하는 예시 명령어입니다.
docker run --network tooliv-network -v tooliv-db-volume:/var/lib/mysql --name tooliv-db -e MYSQL_ROOT_PASSWORD={패스워드} -e TZ=Asia/Seoul -d mysql:5.7
docker exec -it tooliv-db bash
mysql -u root -p
패스워드 입력
create database if not exists tooliv_db collate utf8mb4_general_ci;Build And Run Project
clone 받은 client 프로젝트를 Docker Image 빌드합니다.
Docker Image : tooliv-client:lts
cd ${path}/home/ubuntu/Tooliv/client
docker build -t tooliv-client:lts .Install Certbot 과정 중 NGINX에서 설정한 대로 client 컨테이너를 해당 포트 번호로 실행합니다.
가이드대로 진행을 했다면 포트 번호 3000을 그대로 실행하면 됩니다.
docker run --network tooliv-network --name tooliv-client -p 3000:3000 -d tooliv-client:lts clone 받은 server 프로젝트를 Docker Image 빌드합니다.
Docker Image : tooliv-server:lts
cd ../server
gradle wrapper clean build -x test
docker build -t tooliv-server:lts .위에서 빌드한 Docker Image를 이용하여 client server 컨테이너를 구동시킵니다.
사진 및 파일을 저장하는 AWS S3 Bucket은 별도의 설정을 하지 않는 경우, Tolliv Bucket을 사용하게 됩니다. 파일을 기업에서 별도로 관리하고 싶은 경우에는 자체 AWS S3 Bucket을 생성하고 access_key, secret_key, bucket_name, aws_region 정보를 기입하여 사용할 수 있습니다.
환경변수 속성
db_container_name: tooliv-db (별도로 설했다면 해당 database 컨테이너명)db_schema_name: tooliv_db (별도로 설정했다면 해당 database명)database_username: root (다 계정을 추가했다면 root 혹은 해당 username)database_password: 패스워드aws_accesskey: S3 Bucket 생성 시 발급된 access keyaws_secret_key: S3 Bucket 생성 시 발급된 secret keybucket_name: S3 Bucket 명aws_region: S3 Bucket region (예시: ap-northeast-2)ssl_key_password: letsencrypt certbot 을 이용하여 생성한 SSL 비밀번호redis-container_host: Install Redis 과정에 확인한 redis-container host IPredis-container_port: 6379 (별도로 설정했다면 해당 port)
docker container run --network tooliv-network --name tooliv-server
-e JAVA_TOOL_OPTIONS="-Dspring.profiles.active=prod"
-e "SPRING.DATASOURCE.URL=jdbc:mysql://{db_container_name}/{db_schema_name}?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=true"
-e "SPRING.DATASOURCE.HIKARI.USERNAME={database_username}"
-e "SPRING.DATASOURCE.HIKARI.PASSWORD={database_password}"
-e "CLOUD.AWS.CREDENTIALS.ACCESSKEY={aws_access_key}"
-e "CLOUD.AWS.CREDENTIALS.SECRETKEY={aws_secret_key}"
-e "CLOUD.AWS.S3.BUCKET={bucket_name}"
-e "CLOUD.AWS.region.static={aws_region}"
-e "SERVER.SSL.KSY-STORE-PASSWORD={ssl_key_password}"
-e "SPRING.REDIS.HOST={redis-container_host}"
-e "SPRING.REDIS.PORT={redis-container_port}"
-p 8443:8443 -d tooliv-server:ltsReady To Use
정상적으로 설치를 완료했으면 관리자 계정으로 접속해서 TOOLIV을 이용할 수 있습니다.
관리자 계정은 최초 1회 자동으로 생성해드리고 있으니, 접속 후 비밀번호를 변경하고 이용 부탁드립니다.
Last updated