Files
hyperswitch/Dockerfile

85 lines
2.5 KiB
Docker

FROM rust:bookworm as builder
ARG EXTRA_FEATURES=""
ARG VERSION_FEATURE_SET="v1"
RUN apt-get update \
&& apt-get install -y libpq-dev libssl-dev pkg-config protobuf-compiler
# Copying codebase from current dir to /router dir
# and creating a fresh build
WORKDIR /router
# Disable incremental compilation.
#
# Incremental compilation is useful as part of an edit-build-test-edit cycle,
# as it lets the compiler avoid recompiling code that hasn't changed. However,
# on CI, we're not making small edits; we're almost always building the entire
# project from scratch. Thus, incremental compilation on CI actually
# introduces *additional* overhead to support making future builds
# faster...but no future builds will ever occur in any given CI environment.
#
# See https://matklad.github.io/2021/09/04/fast-rust-builds.html#ci-workflow
# for details.
ENV CARGO_INCREMENTAL=0
# Allow more retries for network requests in cargo (downloading crates) and
# rustup (installing toolchains). This should help to reduce flaky CI failures
# from transient network timeouts or other issues.
ENV CARGO_NET_RETRY=10
ENV RUSTUP_MAX_RETRIES=10
# Don't emit giant backtraces in the CI logs.
ENV RUST_BACKTRACE="short"
COPY . .
RUN cargo build \
--release \
--no-default-features \
--features release \
--features ${VERSION_FEATURE_SET} \
${EXTRA_FEATURES}
FROM debian:bookworm
# Placing config and binary executable in different directories
ARG CONFIG_DIR=/local/config
ARG BIN_DIR=/local/bin
# Copy this required fields config file
COPY --from=builder /router/config/payment_required_fields_v2.toml ${CONFIG_DIR}/payment_required_fields_v2.toml
# RUN_ENV decides the corresponding config file to be used
ARG RUN_ENV=sandbox
# args for deciding the executable to export. three binaries:
# 1. BINARY=router - for main application
# 2. BINARY=scheduler, SCHEDULER_FLOW=consumer - part of process tracker
# 3. BINARY=scheduler, SCHEDULER_FLOW=producer - part of process tracker
ARG BINARY=router
ARG SCHEDULER_FLOW=consumer
RUN apt-get update \
&& apt-get install -y ca-certificates tzdata libpq-dev curl procps
EXPOSE 8080
ENV TZ=Etc/UTC \
RUN_ENV=${RUN_ENV} \
CONFIG_DIR=${CONFIG_DIR} \
SCHEDULER_FLOW=${SCHEDULER_FLOW} \
BINARY=${BINARY} \
RUST_MIN_STACK=4194304
RUN mkdir -p ${BIN_DIR}
COPY --from=builder /router/target/release/${BINARY} ${BIN_DIR}/${BINARY}
# Create the 'app' user and group
RUN useradd --user-group --system --no-create-home --no-log-init app
USER app:app
WORKDIR ${BIN_DIR}
CMD ./${BINARY}