# Dockerfile для Phantom Protocol
# Многоэтапная сборка для оптимизации размера образа

# Этап 1: Сборка
FROM ubuntu:22.04 AS builder

# Метаданные образа
LABEL maintainer="Phantom Protocol Modernization Team"
LABEL description="Phantom Protocol - Anonymous Network Communication System"
LABEL version="2025-modernized"

# Установка переменных окружения для неинтерактивной установки
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC

# Установка зависимостей для сборки
RUN apt-get update && apt-get install -y \
    build-essential \
    gcc \
    make \
    libssl-dev \
    libxml2-dev \
    pkg-config \
    protobuf-c-compiler \
    libprotobuf-c-dev \
    git \
    && rm -rf /var/lib/apt/lists/*

# Создание рабочей директории
WORKDIR /build

# Копирование исходного кода
COPY . .

# Генерация protobuf файлов
WORKDIR /build/protos
RUN chmod +x generate_protos.sh && ./generate_protos.sh

# Сборка проекта
WORKDIR /build/src
RUN make clean && make phantomd

# Этап 2: Рабочий образ
FROM ubuntu:22.04 AS runtime

# Установка переменных окружения
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC

# Установка только необходимых runtime зависимостей
RUN apt-get update && apt-get install -y \
    libssl3 \
    libxml2 \
    libprotobuf-c1 \
    iproute2 \
    iptables \
    net-tools \
    iputils-ping \
    curl \
    && rm -rf /var/lib/apt/lists/*

# Создание пользователя phantom для безопасности
RUN groupadd -r phantom && useradd -r -g phantom -d /home/phantom -s /bin/bash phantom

# Создание необходимых директорий
RUN mkdir -p /home/phantom/{config,logs,data,keys} \
    && chown -R phantom:phantom /home/phantom

# Копирование собранных бинарных файлов
COPY --from=builder /build/src/phantomd /usr/local/bin/
COPY --from=builder /build/src/test/*.conf /home/phantom/config/

# Копирование скриптов запуска
COPY docker/entrypoint.sh /usr/local/bin/
COPY docker/generate-config.sh /usr/local/bin/
COPY docker/healthcheck.sh /usr/local/bin/

# Установка прав на выполнение
RUN chmod +x /usr/local/bin/entrypoint.sh \
    && chmod +x /usr/local/bin/generate-config.sh \
    && chmod +x /usr/local/bin/healthcheck.sh

# Переключение на пользователя phantom
USER phantom
WORKDIR /home/phantom

# Открытие портов
# 8080 - основной порт Phantom Protocol
# 8081 - порт для Kademlia DHT
EXPOSE 8080 8081

# Настройка health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
    CMD /usr/local/bin/healthcheck.sh

# Точка входа
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]

# Команда по умолчанию
CMD ["phantomd"]

