Docker configure
This commit is contained in:
38
docker/Debug.Dockerfile
Normal file
38
docker/Debug.Dockerfile
Normal 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
44
docker/Dockerfile
Normal 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
86
docker/docker-compose.yml
Normal 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
|
||||
8
docker/docker-entrypoint.sh
Normal file
8
docker/docker-entrypoint.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
# Создаём директорию Mnesia, если не существует
|
||||
mkdir -p ${MNESIA_DIR}
|
||||
|
||||
# Запускаем приложение
|
||||
exec /app/bin/eventhub foreground
|
||||
Reference in New Issue
Block a user