# Vexplor 온프레미스(공장) 배포 가이드 ## 개요 이 가이드는 Vexplor를 **공장 내부 서버(온프레미스)**에 배포하는 방법을 설명합니다. **Watchtower**를 사용하여 Harbor에 새 이미지가 푸시되면 **자동으로 업데이트**됩니다. --- ## 사전 요구사항 ### 서버 요구사항 | 항목 | 최소 사양 | 권장 사양 | | :--- | :--- | :--- | | OS | Ubuntu 20.04+ | Ubuntu 22.04 LTS | | CPU | 4 Core | 8 Core | | RAM | 8 GB | 16 GB | | Disk | 50 GB | 100 GB SSD | | Network | Harbor 접근 가능 | - | ### 필수 소프트웨어 ```bash # Docker 설치 확인 docker --version # 20.10 이상 # Docker Compose 설치 확인 docker compose version # v2.0 이상 ``` --- ## 1단계: 초기 설정 ### 1.1 배포 폴더 생성 ```bash # 배포 폴더 생성 sudo mkdir -p /opt/vexplor cd /opt/vexplor # 파일 복사 (또는 git clone) # deploy/onpremise/ 폴더의 내용을 복사 ``` ### 1.2 환경 변수 설정 ```bash # 예제 파일 복사 cp env.example .env # 편집 nano .env ``` **필수 수정 항목:** ```bash # 서버 IP (이 서버의 실제 IP) SERVER_IP=192.168.0.100 # 회사 코드 COMPANY_CODE=SPIFOX # DB 비밀번호 (강력한 비밀번호 설정) DB_PASSWORD=MySecurePassword123! # JWT 시크릿 (32자 이상) JWT_SECRET=your-super-secret-jwt-key-minimum-32-chars # Harbor 인증 정보 HARBOR_USER=your_username HARBOR_PASSWORD=your_password ``` ### 1.3 Harbor 레지스트리 로그인 Watchtower가 이미지를 당겨올 수 있도록 Docker 로그인이 필요합니다. ```bash # Harbor 로그인 docker login harbor.wace.me # Username: (입력) # Password: (입력) # 로그인 성공 확인 cat ~/.docker/config.json ``` --- ## 2단계: 서비스 실행 ### 2.1 서비스 시작 ```bash cd /opt/vexplor # 이미지 다운로드 & 실행 docker compose up -d # 상태 확인 docker compose ps ``` ### 2.2 정상 동작 확인 ```bash # 모든 컨테이너 Running 상태 확인 docker compose ps # 로그 확인 docker compose logs -f # 개별 서비스 로그 docker compose logs -f backend docker compose logs -f frontend docker compose logs -f watchtower ``` ### 2.3 웹 접속 테스트 ``` 프론트엔드: http://SERVER_IP:80 백엔드 API: http://SERVER_IP:3001/health ``` --- ## 3단계: 자동 업데이트 확인 ### Watchtower 동작 확인 ```bash # Watchtower 로그 확인 docker compose logs -f watchtower ``` **정상 로그 예시:** ``` watchtower | time="2024-12-28T10:00:00+09:00" level=info msg="Checking for updates..." watchtower | time="2024-12-28T10:00:05+09:00" level=info msg="Found new image harbor.wace.me/vexplor/vexplor-backend:latest" watchtower | time="2024-12-28T10:00:10+09:00" level=info msg="Stopping container vexplor-backend" watchtower | time="2024-12-28T10:00:15+09:00" level=info msg="Starting container vexplor-backend" ``` ### 업데이트 주기 변경 ```bash # .env 파일에서 변경 UPDATE_INTERVAL=3600 # 1시간마다 확인 # 변경 후 watchtower 재시작 docker compose restart watchtower ``` --- ## 운영 가이드 ### 서비스 관리 명령어 ```bash # 모든 서비스 상태 확인 docker compose ps # 모든 서비스 중지 docker compose stop # 모든 서비스 시작 docker compose start # 모든 서비스 재시작 docker compose restart # 모든 서비스 삭제 (데이터 유지) docker compose down # 모든 서비스 삭제 + 볼륨 삭제 (주의: 데이터 삭제됨!) docker compose down -v ``` ### 로그 확인 ```bash # 전체 로그 (실시간) docker compose logs -f # 특정 서비스 로그 docker compose logs -f backend docker compose logs -f frontend docker compose logs -f database # 최근 100줄만 docker compose logs --tail=100 backend ``` ### 수동 업데이트 (긴급 시) 자동 업데이트를 기다리지 않고 즉시 업데이트하려면: ```bash # 최신 이미지 다운로드 docker compose pull # 재시작 docker compose up -d ``` ### 특정 버전으로 롤백 ```bash # .env 파일에서 버전 지정 IMAGE_TAG=v1.0.0 # 재시작 docker compose up -d ``` --- ## 백업 가이드 ### DB 백업 ```bash # 백업 디렉토리 생성 mkdir -p /opt/vexplor/backups # PostgreSQL 백업 docker compose exec database pg_dump -U vexplor vexplor > /opt/vexplor/backups/backup_$(date +%Y%m%d_%H%M%S).sql ``` ### 업로드 파일 백업 ```bash # 볼륨 위치 확인 docker volume inspect vexplor_backend_uploads # 또는 직접 복사 docker cp vexplor-backend:/app/uploads /opt/vexplor/backups/uploads_$(date +%Y%m%d) ``` ### 자동 백업 스크립트 (Cron) ```bash # crontab 편집 crontab -e # 매일 새벽 3시 DB 백업 0 3 * * * docker compose -f /opt/vexplor/docker-compose.yml exec -T database pg_dump -U vexplor vexplor > /opt/vexplor/backups/backup_$(date +\%Y\%m\%d).sql ``` --- ## 문제 해결 ### 컨테이너가 시작되지 않음 ```bash # 로그 확인 docker compose logs backend # 일반적인 원인: # 1. 환경 변수 누락 → .env 파일 확인 # 2. 포트 충돌 → netstat -tlnp | grep 3001 # 3. 메모리 부족 → free -h ``` ### DB 연결 실패 ```bash # DB 컨테이너 상태 확인 docker compose logs database # DB 직접 접속 테스트 docker compose exec database psql -U vexplor -d vexplor -c "SELECT 1" ``` ### Watchtower가 업데이트하지 않음 ```bash # Watchtower 로그 확인 docker compose logs watchtower # Harbor 인증 확인 docker pull harbor.wace.me/vexplor/vexplor-backend:latest # 라벨 확인 (라벨이 있는 컨테이너만 업데이트) docker inspect vexplor-backend | grep watchtower ``` ### 디스크 공간 부족 ```bash # 사용하지 않는 이미지/컨테이너 정리 docker system prune -a # 오래된 로그 정리 docker compose logs --tail=0 backend # 로그 초기화 ``` --- ## 보안 권장사항 1. **방화벽 설정**: 필요한 포트(80, 3001)만 개방 2. **SSL/TLS**: Nginx 리버스 프록시 + Let's Encrypt 적용 권장 3. **정기 백업**: 최소 주 1회 DB 백업 4. **로그 모니터링**: 비정상 접근 감시 --- ## 연락처 배포 관련 문의: [담당자 이메일]