102 lines
3.0 KiB
Docker
102 lines
3.0 KiB
Docker
# 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"]
|
|
|