[파일 목록] - 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>
55 lines
2.8 KiB
Docker
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"]
|