somnytoo 2.0.0

Binary protocol server for secure communications
Documentation
# ============================================================================
# Этап 1: Сборка (builder)
# ============================================================================
FROM rustlang/rust:nightly-alpine AS builder

# Устанавливаем системные зависимости для сборки
RUN apk add --no-cache \
    pkgconfig \
    openssl-dev \
    musl-dev \
    build-base

WORKDIR /app

# 1. Копируем файлы манифеста
COPY Cargo.toml Cargo.lock ./

# 2. Создаем фиктивный main.rs для кэширования зависимостей
RUN mkdir -p src && \
    echo "fn main() {}" > src/main.rs

# 3. Собираем зависимости (это закэшируется)
RUN cargo build --release

# 4. Теперь копируем реальные исходники
COPY src/ ./src/

# 5. Пересобираем с реальным кодом (touch гарантирует пересборку)
RUN touch src/main.rs && \
    cargo build --release

# 6. Удаляем debug символы для уменьшения размера
RUN strip target/release/somnytoo


# ============================================================================
# Этап 2: Финальный образ (runtime)
# ============================================================================
FROM alpine:3.19 AS runtime

# Устанавливаем ВСЕ необходимые зависимости для ЗАПУСКА
# Важно: здесь должны быть ВСЕ библиотеки, которые нужны вашему приложению
RUN apk add --no-cache \
    libgcc \
    libstdc++ \
    openssl \
    openssl-dev \
    ca-certificates \
    tzdata \
    && update-ca-certificates

# Создаем пользователя для безопасности
RUN addgroup -g 10001 -S app && \
    adduser -u 10001 -S app -G app

WORKDIR /home/app

# Копируем ТОЛЬКО бинарник из этапа сборки
COPY --from=builder /app/target/release/somnytoo ./somnytoo

# Настраиваем права
RUN chown -R app:app /home/app && \
    chmod +x ./somnytoo

# Переключаемся на непривилегированного пользователя
USER app

# Экспортируем порт
EXPOSE 8000

# Ключевой момент: запускаем приложение КАК ЕСТЬ
# Приложение должно само работать в бесконечном цикле
CMD ["./somnytoo"]