- Add Docker Compose configurations for dev, prod, and standalone environments - Add database initialization scripts (init-db.sh, init-db-docker.sh) - Add enhanced start-docker-linux.sh with DB init support - Add comprehensive database initialization guide - Support for automatic dbexport.pgsql import on first run - Include safety checks for production environment
84 lines
3.3 KiB
Bash
84 lines
3.3 KiB
Bash
#!/bin/bash
|
|
|
|
# Docker를 사용한 데이터베이스 초기화 스크립트
|
|
# 사용법: ./init-db-docker.sh [DB_HOST] [DB_PORT] [DB_NAME] [DB_USER] [DB_PASSWORD]
|
|
|
|
set -e
|
|
|
|
# 기본값 설정
|
|
DB_HOST=${1:-"211.115.91.141"}
|
|
DB_PORT=${2:-"11132"}
|
|
DB_NAME=${3:-"waceplm"}
|
|
DB_USER=${4:-"postgres"}
|
|
DB_PASSWORD=${5:-"waceplm0909!!"}
|
|
|
|
echo "=== Docker를 사용한 WACE PLM 데이터베이스 초기화 ==="
|
|
echo "DB 호스트: $DB_HOST"
|
|
echo "DB 포트: $DB_PORT"
|
|
echo "DB 이름: $DB_NAME"
|
|
echo "DB 사용자: $DB_USER"
|
|
echo "=================================================="
|
|
|
|
# Docker 설치 확인
|
|
if ! command -v docker &> /dev/null; then
|
|
echo "Docker가 설치되어 있지 않습니다."
|
|
exit 1
|
|
fi
|
|
|
|
# 현재 디렉토리 확인
|
|
if [ ! -f "db/dbexport.pgsql" ]; then
|
|
echo "db/dbexport.pgsql 파일을 찾을 수 없습니다."
|
|
echo "프로젝트 루트 디렉토리에서 실행해주세요."
|
|
exit 1
|
|
fi
|
|
|
|
# PostgreSQL 클라이언트 컨테이너를 사용하여 연결 테스트
|
|
echo "데이터베이스 연결 테스트 중..."
|
|
if ! docker run --rm postgres:16-alpine psql "postgresql://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME" -c "SELECT 1;" > /dev/null 2>&1; then
|
|
echo "데이터베이스 연결에 실패했습니다."
|
|
echo "연결 정보를 확인해주세요."
|
|
exit 1
|
|
fi
|
|
|
|
echo "데이터베이스 연결 성공!"
|
|
|
|
# 백업 생성
|
|
BACKUP_FILE="backup_$(date +%Y%m%d_%H%M%S).sql"
|
|
echo "기존 데이터 백업 생성 중: $BACKUP_FILE"
|
|
docker run --rm -v "$(pwd):/workspace" postgres:16-alpine pg_dump "postgresql://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME" > $BACKUP_FILE 2>/dev/null || echo "백업 생성 실패 (기존 데이터가 없을 수 있습니다)"
|
|
|
|
# 역할 생성
|
|
echo "데이터베이스 역할 생성 중..."
|
|
docker run --rm postgres:16-alpine psql "postgresql://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME" -c "CREATE ROLE IF NOT EXISTS pro_search; CREATE ROLE IF NOT EXISTS search_user;" || echo "역할 생성 실패 (이미 존재할 수 있습니다)"
|
|
|
|
# 데이터베이스 임포트
|
|
echo "데이터베이스 임포트 시작..."
|
|
echo "파일 크기: $(du -h db/dbexport.pgsql | cut -f1)"
|
|
echo "대용량 파일 처리 중... (시간이 오래 걸릴 수 있습니다)"
|
|
|
|
# Docker 볼륨 마운트를 사용하여 SQL 파일 임포트
|
|
docker run --rm -v "$(pwd)/db:/db" postgres:16-alpine psql "postgresql://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME" -v ON_ERROR_STOP=1 -f /db/dbexport.pgsql
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "데이터베이스 임포트 완료!"
|
|
else
|
|
echo "데이터베이스 임포트 실패!"
|
|
echo "백업 파일을 사용하여 복원할 수 있습니다: $BACKUP_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
# 임포트 검증
|
|
echo "임포트 검증 중..."
|
|
TABLE_COUNT=$(docker run --rm postgres:16-alpine psql "postgresql://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME" -t -c "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public';" | tr -d ' ')
|
|
echo "생성된 테이블 수: $TABLE_COUNT"
|
|
|
|
if [ "$TABLE_COUNT" -gt 0 ]; then
|
|
echo "데이터베이스 초기화가 성공적으로 완료되었습니다!"
|
|
echo "백업 파일: $BACKUP_FILE"
|
|
else
|
|
echo "데이터베이스 초기화에 문제가 있을 수 있습니다."
|
|
echo "테이블이 생성되지 않았습니다."
|
|
fi
|
|
|
|
echo "=== 초기화 완료 ==="
|