Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions Dockerfile-elixir-example
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
FROM elixir:1.15-alpine AS builder

ENV MIX_ENV=prod

WORKDIR /app

RUN apk add --no-cache --update git build-base ca-certificates zstd

RUN mkdir config
COPY config/ ./config
COPY spawn_sdk/ ./spawn_sdk
COPY spawn_statestores/ ./spawn_statestores
COPY lib/ ./lib
COPY priv/ ./priv
COPY mix.exs .
COPY mix.lock .

RUN mix local.rebar --force \
&& mix local.hex --force \
&& mix deps.get \
&& mix release.init

RUN echo "-name spawn_sdk_elixir@${HOSTNAME}" >> ./rel/vm.args.eex \
&& echo "-setcookie ${RELEASE_COOKIE}" >> ./rel/vm.args.eex

RUN cd spawn_sdk/spawn_sdk_example \
&& mix deps.get \
&& mix release spawn_sdk_example

# ---- Application Stage ----
FROM alpine:3.17.3
RUN apk add --no-cache --update zstd ncurses-libs libstdc++ libgcc libcrypto1.1

WORKDIR /app
RUN chown nobody /app

# Set runner ENV
ENV MIX_ENV=prod
ENV HOME=/app

COPY --from=builder --chown=nobody:root /app/_build/${MIX_ENV}/rel/bakeware/ ./

RUN mkdir -p /app/.cache/bakeware/ && chmod 777 /app/.cache/bakeware/
RUN touch /.erlang.cookie && chmod 777 /.erlang.cookie
RUN touch /app/.erlang.cookie && chmod 777 /app/.erlang.cookie

USER nobody

ENTRYPOINT ["./spawn_sdk_example", "start"]
45 changes: 45 additions & 0 deletions Dockerfile-initializer
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
FROM elixir:1.15-alpine AS builder

ENV MIX_ENV=prod

WORKDIR /app

RUN apk add --no-cache --update git build-base ca-certificates zstd gcc pkgconfig openssl-dev

COPY spawn_initializer/ .

RUN mix local.rebar --force \
&& mix local.hex --force \
&& mix deps.get \
&& mix release.init

# This will be the basename of node
ENV RELEASE_NAME="spawn_initializer"

# Disable Erlang Dist
ENV RELEASE_DISTRIBUTION=none

RUN mix deps.get \
&& mix release spawn_initializer

# ---- Application Stage ----
FROM alpine:3.20

RUN apk add --no-cache --update zstd ncurses-libs libstdc++ libgcc

WORKDIR /app
RUN chown nobody /app

# Set runner ENV
ENV MIX_ENV=prod
ENV HOME=/app

COPY --from=builder --chown=nobody:root /app/_build/${MIX_ENV}/rel/bakeware/ ./

RUN mkdir -p /app/.cache/bakeware/ && chmod 777 /app/.cache/bakeware/
RUN touch /.erlang.cookie && chmod 777 /.erlang.cookie
RUN touch /app/.erlang.cookie && chmod 777 /app/.erlang.cookie

USER nobody

ENTRYPOINT ["./spawn_initializer"]
60 changes: 60 additions & 0 deletions Dockerfile-operator
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
FROM elixir:1.15-alpine AS builder

ENV MIX_ENV=prod

WORKDIR /app

RUN apk add --no-cache --update git build-base ca-certificates zstd gcc pkgconfig openssl-dev

RUN mkdir config
COPY config/ ./config
COPY spawn_operator/ ./spawn_operator
COPY spawn_statestores/ ./spawn_statestores
COPY lib/ ./lib
COPY priv/ ./priv
COPY mix.exs .
COPY mix.lock .

RUN mix local.rebar --force \
&& mix local.hex --force \
&& mix deps.get \
&& mix release.init

ENV RELEASE_DISTRIBUTION="name"

# Overriden at runtime
ENV POD_IP="127.0.0.1"

# This will be the basename of node
ENV RELEASE_NAME="spawn_operator"

# This will be the full nodename
ENV RELEASE_NODE="${RELEASE_NAME}@${POD_IP}"

RUN echo "-setcookie ${RELEASE_COOKIE}" >> ./rel/vm.args.eex

RUN cd spawn_operator/spawn_operator \
&& mix deps.get \
&& mix release spawn_operator

# ---- Application Stage ----
FROM alpine:3.20

RUN apk add --no-cache --update zstd ncurses-libs libstdc++ libgcc

WORKDIR /app
RUN chown nobody /app

# Set runner ENV
ENV MIX_ENV=prod
ENV HOME=/app

COPY --from=builder --chown=nobody:root /app/spawn_operator/spawn_operator/_build/${MIX_ENV}/rel/bakeware/ ./

RUN mkdir -p /app/.cache/bakeware/ && chmod 777 /app/.cache/bakeware/
RUN touch /.erlang.cookie && chmod 777 /.erlang.cookie
RUN touch /app/.erlang.cookie && chmod 777 /app/.erlang.cookie

USER nobody

ENTRYPOINT [ "./spawn_operator", "start" ]
64 changes: 64 additions & 0 deletions Dockerfile-proxy
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
FROM elixir:1.15-alpine AS builder

ENV MIX_ENV=prod

WORKDIR /app

RUN apk add --no-cache --update git build-base ca-certificates zstd gcc pkgconfig openssl-dev

RUN mkdir config
COPY config/ ./config
COPY spawn_proxy/ ./spawn_proxy
COPY lib/ ./lib
COPY spawn_statestores/ ./spawn_statestores
COPY priv/ ./priv
COPY mix.exs .
COPY mix.lock .

RUN mix local.rebar --force \
&& mix local.hex --force \
&& mix deps.get \
&& mix release.init

ENV RELEASE_DISTRIBUTION="name"

# Overriden at runtime
ENV POD_IP="127.0.0.1"

# This will be the basename of node
ENV RELEASE_NAME="proxy"

# This will be the full nodename
ENV RELEASE_NODE="${RELEASE_NAME}@${POD_IP}"

#RUN echo "-setcookie ${RELEASE_COOKIE}" >> ./priv/rel/vm.args.eex

RUN cd spawn_proxy/proxy \
&& mix deps.get \
&& mix release proxy

# ---- Application Stage ----
FROM alpine:3.20

RUN apk add --no-cache --update zstd ncurses-libs libstdc++ libgcc protobuf

WORKDIR /app
RUN chown nobody /app

# Set runner ENV
ENV MIX_ENV=prod
ENV HOME=/app

COPY rel/overlays/mtls.ssl.conf .
COPY --from=builder --chown=nobody:root /app/_build/${MIX_ENV}/rel/proxy ./

RUN mkdir -p /app/.cache/bakeware/ && chmod 777 /app/.cache/bakeware/
RUN mkdir -p /app/priv/generated_modules/ && chmod 777 /app/priv/generated_modules/
RUN mkdir /data/ && chmod 777 /data/
RUN touch /.erlang.cookie && chmod 777 /.erlang.cookie
RUN touch /app/.erlang.cookie && chmod 777 /app/.erlang.cookie

USER nobody

ENTRYPOINT ["/app/bin/proxy", "start"]

19 changes: 0 additions & 19 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -293,25 +293,6 @@ run-proxy-with-postgres:
SPAWN_STATESTORE_KEY=3Jnb0hZiHIzHTOih7t2cTEPEpY98Tu1wvQkPfq/XwqE= \
iex --name [email protected] -S mix

run-proxy-with-mariadb:
cd spawn_proxy/proxy && mix deps.get && \
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4317 \
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=grpc \
OTEL_EXPORTER_OTLP_TRACES_COMPRESSION=gzip \
SPAWN_PROXY_LOGGER_LEVEL=info \
PROXY_CLUSTER_STRATEGY=epmd \
SPAWN_USE_INTERNAL_NATS=false \
SPAWN_PUBSUB_ADAPTER=native \
PROXY_DATABASE_PORT=3307 \
PROXY_DATABASE_TYPE=mariadb \
PROXY_DATABASE_USERNAME=admin \
PROXY_DATABASE_SECRET=admin \
PROXY_DATABASE_POOL_SIZE=30 \
PROXY_HTTP_PORT=9001 \
USER_FUNCTION_PORT=8090 \
SPAWN_STATESTORE_KEY=3Jnb0hZiHIzHTOih7t2cTEPEpY98Tu1wvQkPfq/XwqE= \
iex --name [email protected] -S mix

run-proxy-local-nodejs-test:
ERL_ZFLAGS='-proto_dist inet_tls -ssl_dist_optfile rel/overlays/local-mtls.ssl.conf' \
cd spawn_proxy/proxy && mix deps.get && \
Expand Down
Loading
Loading