Docker configure

This commit is contained in:
2026-04-23 21:02:58 +03:00
parent d87603595a
commit 341f40a02a
8 changed files with 248 additions and 11 deletions

38
docker/Debug.Dockerfile Normal file
View File

@@ -0,0 +1,38 @@
# ============================================================
# Одноэтапный Dockerfile (сборка и рантайм в одном образе)
# ============================================================
FROM erlang:28-alpine
# Устанавливаем инструменты для сборки и runtime-зависимости
RUN apk add --no-cache \
# для сборки
git curl make gcc musl-dev \
rust cargo openssl-dev libsodium-dev \
# для рантайма
openssl libstdc++ libgcc ncurses-libs
# Рабочая директория
WORKDIR /app
# Копируем конфигурацию и исходники
COPY rebar.config ./
COPY include/ include/
COPY src/ src/
COPY src/config/sys.config ./config/sys.config
# Собираем зависимости и релиз
RUN rebar3 get-deps && \
rebar3 as prod release
# Создаём директорию для данных
RUN mkdir -p /app/data && chmod 777 /app/data
# Настраиваем порты
EXPOSE 8080 8081 8445 8446
# Переменные окружения
ENV RELX_REPLACE_OS_VARS=true
ENV MNESIA_DIR=/app/data
# Запускаем приложение из собранного релиза
CMD ["/app/_build/prod/rel/eventhub/bin/eventhub", "foreground"]

44
docker/Dockerfile Normal file
View File

@@ -0,0 +1,44 @@
# ============================================================
# Этап 1: Сборка
# ============================================================
FROM erlang:28-alpine AS builder
RUN apk add --no-cache \
git curl make gcc musl-dev \
rust cargo openssl-dev libsodium-dev
WORKDIR /app
COPY rebar.config ./
RUN rebar3 lock || true
RUN rebar3 get-deps
COPY include/ include/
COPY src/ src/
# Копируем sys.config из src/config/ в config/
COPY src/config/sys.config ./config/sys.config
RUN rebar3 as prod release
RUN rebar3 as prod tar
RUN mkdir -p /app/release && \
tar -xzf _build/prod/rel/eventhub/eventhub-*.tar.gz -C /app/release
# ============================================================
# Этап 2: Финальный образ
# ============================================================
FROM alpine:3.20
RUN apk add --no-cache openssl libstdc++ libgcc ncurses-libs libsodium
COPY --from=builder /app/release /app
COPY --from=builder /usr/lib/libcrypto.* /usr/lib/
COPY --from=builder /usr/lib/libssl.* /usr/lib/
RUN mkdir -p /app/data && chmod 777 /app/data
WORKDIR /app
EXPOSE 8080 8081 8445 8446
ENV RELX_REPLACE_OS_VARS=true
ENV MNESIA_DIR=/app/data
CMD ["/app/bin/eventhub", "foreground"]

86
docker/docker-compose.yml Normal file
View File

@@ -0,0 +1,86 @@
version: '3.8'
services:
eventhub-node1:
build:
context: ..
dockerfile: docker/Dockerfile
container_name: eventhub-node1
ports:
- "8080:8080"
- "8081:8081"
- "8445:8445"
- "8446:8446"
environment:
- NODE_NAME=eventhub-node1@eventhub-node1
- HTTP_PORT=8080
- WS_PORT=8081
- ADMIN_HTTP_PORT=8445
- ADMIN_WS_PORT=8446
- MNESIA_DIR=/app/data
volumes:
- eventhub-node1-data:/app/data
networks:
- eventhub-net
restart: unless-stopped
eventhub-node2:
build:
context: ..
dockerfile: docker/Dockerfile
container_name: eventhub-node2
ports:
- "8082:8080"
- "8083:8081"
- "8447:8445"
- "8448:8446"
environment:
- NODE_NAME=eventhub-node2@eventhub-node2
- HTTP_PORT=8080
- WS_PORT=8081
- ADMIN_HTTP_PORT=8445
- ADMIN_WS_PORT=8446
- MNESIA_DIR=/app/data
- JOIN_NODES=eventhub-node1@eventhub-node1
volumes:
- eventhub-node2-data:/app/data
networks:
- eventhub-net
depends_on:
- eventhub-node1
restart: unless-stopped
eventhub-node3:
build:
context: ..
dockerfile: docker/Dockerfile
container_name: eventhub-node3
ports:
- "8084:8080"
- "8085:8081"
- "8449:8445"
- "8450:8446"
environment:
- NODE_NAME=eventhub-node3@eventhub-node3
- HTTP_PORT=8080
- WS_PORT=8081
- ADMIN_HTTP_PORT=8445
- ADMIN_WS_PORT=8446
- MNESIA_DIR=/app/data
- JOIN_NODES=eventhub-node1@eventhub-node1
volumes:
- eventhub-node3-data:/app/data
networks:
- eventhub-net
depends_on:
- eventhub-node1
restart: unless-stopped
volumes:
eventhub-node1-data:
eventhub-node2-data:
eventhub-node3-data:
networks:
eventhub-net:
driver: bridge

View File

@@ -0,0 +1,8 @@
#!/bin/sh
set -e
# Создаём директорию Mnesia, если не существует
mkdir -p ${MNESIA_DIR}
# Запускаем приложение
exec /app/bin/eventhub foreground