Files
wace_plm/start-docker-linux.sh

299 lines
7.3 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
# ==============================================================================
2025-08-30 01:33:34 +09:00
# PLM ILSHIN Docker 실행 스크립트 (Linux용)
# ==============================================================================
set -e # 오류 발생 시 스크립트 종료
# 색상 코드 정의
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 로그 함수
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
log_step() {
echo -e "${BLUE}[STEP]${NC} $1"
}
# 도움말 함수
show_help() {
cat << EOF
WACE PLM Docker 실행 스크립트 (Linux용)
사용법: $0 [OPTION]
옵션:
2025-08-30 01:33:34 +09:00
-e, --env ENV 환경 설정 (dev|prod) [기본값: dev]
-c, --clean Docker 시스템 정리 실행
-r, --restart 컨테이너 재시작 (중지 후 시작)
-s, --stop 컨테이너 중지
-l, --logs 컨테이너 로그 확인
-h, --help 도움말 출력
예시:
$0 # 개발환경 실행
$0 -e dev # 개발환경 실행
$0 -e prod # 운영환경 실행
$0 -e dev -c # 개발환경 실행 (Docker 정리 포함)
$0 -s # 컨테이너 중지
$0 -l # 로그 확인
EOF
}
# 시스템 체크
check_system() {
log_step "시스템 환경 체크 중..."
# OS 확인
if [[ "$(uname -s)" != "Linux" ]]; then
log_error "이 스크립트는 Linux 환경에서만 실행됩니다."
log_error "현재 OS: $(uname -s)"
exit 1
fi
# Docker 설치 확인
if ! command -v docker &> /dev/null; then
log_error "Docker가 설치되지 않았습니다."
log_error "Docker 설치 후 다시 시도하세요."
exit 1
fi
# Docker Compose 설치 확인
if ! command -v docker-compose &> /dev/null; then
log_error "Docker Compose가 설치되지 않았습니다."
log_error "Docker Compose 설치 후 다시 시도하세요."
exit 1
fi
# Docker 서비스 상태 확인 (WSL2 + Docker Desktop 환경)
if ! docker info &> /dev/null; then
log_warn "Docker 서비스가 실행되지 않았습니다."
log_warn "Windows에서 Docker Desktop을 시작해주세요."
exit 1
fi
log_info "시스템 환경 체크 완료"
}
# 환경 변수 로드
load_env_vars() {
local env_file=".env.$1"
if [ -f "$env_file" ]; then
log_info "환경 변수 로드 중: $env_file"
set -a
source "$env_file"
set +a
export NODE_ENV="$1"
else
log_error "환경 변수 파일을 찾을 수 없습니다: $env_file"
exit 1
fi
}
# Docker 시스템 정리
clean_docker() {
log_step "Docker 시스템 정리 중..."
# 사용하지 않는 컨테이너, 이미지, 볼륨 정리
docker system prune -af
docker image prune -af
docker volume prune -af
log_info "Docker 시스템 정리 완료"
}
# 컨테이너 중지
stop_containers() {
log_step "컨테이너 중지 중..."
if [ "$ENVIRONMENT" = "prod" ]; then
docker-compose -f docker-compose.prod.yml down
else
docker-compose -f docker-compose.dev.yml down
fi
log_info "컨테이너 중지 완료"
}
# 컨테이너 시작
start_containers() {
local compose_file
if [ "$ENVIRONMENT" = "prod" ]; then
compose_file="docker-compose.prod.yml"
log_step "운영환경 컨테이너 시작 중..."
# 운영환경의 경우 Git 업데이트
if [ -d ".git" ]; then
log_info "Git 리포지토리 업데이트 중..."
git reset --hard
git checkout main
if ! git fetch origin; then
log_error "Git fetch 실패"
exit 1
fi
if ! git reset --hard origin/main; then
log_error "Git reset 실패"
exit 1
fi
log_info "Git 업데이트 완료"
fi
else
compose_file="docker-compose.dev.yml"
log_step "개발환경 컨테이너 시작 중..."
fi
# 컨테이너 빌드 및 시작
docker-compose -f "$compose_file" up --build --force-recreate -d
log_info "컨테이너 시작 완료"
}
# 컨테이너 상태 확인
check_status() {
log_step "컨테이너 상태 확인 중..."
if [ "$ENVIRONMENT" = "prod" ]; then
docker-compose -f docker-compose.prod.yml ps
else
docker-compose -f docker-compose.dev.yml ps
fi
}
# 로그 확인
show_logs() {
log_step "컨테이너 로그 확인 중..."
if [ "$ENVIRONMENT" = "prod" ]; then
docker-compose -f docker-compose.prod.yml logs -f
else
docker-compose -f docker-compose.dev.yml logs -f
fi
}
# 메인 실행 함수
main() {
local ENVIRONMENT="dev"
local CLEAN_DOCKER=false
local RESTART=false
local STOP_ONLY=false
local SHOW_LOGS=false
# 인자 파싱
while [[ $# -gt 0 ]]; do
case $1 in
-e|--env)
ENVIRONMENT="$2"
shift 2
;;
-c|--clean)
CLEAN_DOCKER=true
shift
;;
-r|--restart)
RESTART=true
shift
;;
-s|--stop)
STOP_ONLY=true
shift
;;
-l|--logs)
SHOW_LOGS=true
shift
;;
-h|--help)
show_help
exit 0
;;
*)
log_error "알 수 없는 옵션: $1"
show_help
exit 1
;;
esac
done
# 환경 검증
2025-08-30 01:33:34 +09:00
if [[ "$ENVIRONMENT" != "dev" && "$ENVIRONMENT" != "prod" ]]; then
log_error "유효하지 않은 환경: $ENVIRONMENT (dev 또는 prod만 허용)"
exit 1
fi
2025-08-30 01:33:34 +09:00
log_info "PLM ILSHIN Docker 실행 스크립트 시작"
log_info "환경: $ENVIRONMENT"
# 시스템 체크
check_system
# 환경 변수 로드
if [ "$ENVIRONMENT" = "prod" ]; then
load_env_vars "production"
else
load_env_vars "development"
fi
# 로그만 확인하는 경우
if [ "$SHOW_LOGS" = true ]; then
show_logs
exit 0
fi
# 컨테이너 중지만 하는 경우
if [ "$STOP_ONLY" = true ]; then
stop_containers
exit 0
fi
# 재시작 또는 일반 시작
if [ "$RESTART" = true ]; then
stop_containers
fi
# Docker 정리
if [ "$CLEAN_DOCKER" = true ]; then
clean_docker
fi
# 컨테이너 시작
start_containers
# 상태 확인
check_status
2025-08-30 01:33:34 +09:00
log_info "PLM ILSHIN Docker 실행 완료!"
log_info "애플리케이션 접속:"
if [ "$ENVIRONMENT" = "prod" ]; then
2025-08-30 01:33:34 +09:00
log_info " - https://ilshin.esgrin.com"
log_info " - https://autoclave.co.kr"
else
log_info " - http://localhost:8090"
fi
log_info "로그 확인: $0 -l"
log_info "컨테이너 중지: $0 -s"
}
# 스크립트 실행
main "$@"