mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-26 19:04:36 +08:00
85 lines
2.5 KiB
Docker
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}
|