zioinfo-mail/Dockerfile
DESKTOP-TKLFCPR\ython eea643ce40 feat(docker): Docker 컨테이너 환경 구성
[파일 목록]
- Dockerfile: GUARDiA ITSM Python 3.11-slim 이미지
  - 비루트(guardia) 계정 실행
  - 헬스체크 내장
- docker-compose.yml: 개발/테스트 풀스택
  - guardia-itsm, nginx, postgres:15, redis:7, ollama/ollama, tomcat:9
  - Ollama 모델은 볼륨 마운트 (이미지 외부)
- docker-compose.prod.yml: 운영 환경 오버라이드
  - 외부 포트 차단, 호스트 경로 마운트
- docker-compose.gpu.yml: NVIDIA GPU 오버라이드
- docker-start.sh: dev|prod|gpu 모드 빠른 시작
- .dockerignore: 보안 파일(.env, *.db) 제외
- docker/nginx/guardia.conf: 리버스 프록시 설정
- docker/tomcat/tomcat-users.xml: opsagent 계정 설정

[폐쇄망 패키지]
- setup/docker_package.sh: 인터넷 서버에서 모든 이미지를 tar.gz로 패키징
- setup/docker_load.sh: 폐쇄망에서 tar.gz 로드 + 즉시 시작 옵션

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 19:08:52 +09:00

55 lines
2.8 KiB
Docker

# ============================================================
# GUARDiA ITSM — Production Dockerfile
# Base: Python 3.11-slim
# Port: 8001
# ============================================================
FROM python:3.11-slim AS base
LABEL maintainer="GUARDiA Team"
LABEL description="GUARDiA ITSM — AI 기반 레거시 인프라 자율 운영 플랫폼"
# ── 시스템 의존성 ──────────────────────────────────────────
RUN apt-get update && apt-get install -y --no-install-recommends \
curl wget git \
libpq-dev gcc \
&& rm -rf /var/lib/apt/lists/*
# ── 비루트 실행 계정 ───────────────────────────────────────
RUN groupadd -r guardia && useradd -r -g guardia -d /app guardia
# ── 작업 디렉토리 ─────────────────────────────────────────
WORKDIR /app
# ── Python 의존성 (레이어 캐싱 최적화) ─────────────────────
COPY itsm/requirements.txt .
RUN pip install --no-cache-dir --upgrade pip \
&& pip install --no-cache-dir -r requirements.txt
# ── 애플리케이션 소스 복사 ───────────────────────────────
COPY itsm/ .
# ── 업로드/데이터 디렉토리 ──────────────────────────────
RUN mkdir -p uploads/sr_files uploads/workspaces \
&& chown -R guardia:guardia /app
# ── 환경 기본값 ──────────────────────────────────────────
ENV PYTHONUNBUFFERED=1 \
PYTHONIOENCODING=utf-8 \
PYTHONDONTWRITEBYTECODE=1 \
DATABASE_URL="sqlite+aiosqlite:///./guardia_itsm.db" \
OLLAMA_BASE_URL="http://ollama:11434"
# ── 포트 노출 ────────────────────────────────────────────
EXPOSE 8001
# ── 비루트 전환 ─────────────────────────────────────────
USER guardia
# ── 헬스체크 ─────────────────────────────────────────────
HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \
CMD curl -sf http://localhost:8001/ || exit 1
# ── 엔트리포인트 ─────────────────────────────────────────
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8001", "--workers", "4"]