1- FROM golang:alpine AS builder
1+ FROM ubuntu:noble AS awslc- builder
22
3- ENV DATAPLANE_MINOR 3.0.16
4- ENV DATAPLANE_V2_MINOR 2.9.20
5- ENV DATAPLANE_URL https://github.com/haproxytech/dataplaneapi.git
6-
7- RUN apk add --no-cache ca-certificates git make && \
8- git clone "${DATAPLANE_URL}" "${GOPATH}/src/github.com/haproxytech/dataplaneapi" && \
9- cd "${GOPATH}/src/github.com/haproxytech/dataplaneapi" && \
10- git checkout "v${DATAPLANE_MINOR}" && \
11- make build && cp build/dataplaneapi /dataplaneapi && \
12- make clean && \
13- git checkout "v${DATAPLANE_V2_MINOR}" && \
14- make build && cp build/dataplaneapi /dataplaneapi-v2
3+ ENV AWSLC_URL https://github.com/aws/aws-lc.git
4+ ENV AWSLC_TAG v1.65.1
5+
6+ ENV DEBIAN_FRONTEND noninteractive
7+
8+ RUN apt-get update && \
9+ apt-get install -y --no-install-recommends build-essential ca-certificates git cmake ninja-build golang && \
10+ git clone --depth 1 --branch "${AWSLC_TAG}" "${AWSLC_URL}" /tmp/aws-lc && \
11+ mkdir /tmp/aws-lc/build && \
12+ cd /tmp/aws-lc/build && \
13+ cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/opt/aws-lc -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON .. && \
14+ ninja install && \
15+ rm -rf /tmp/aws-lc
16+
17+ FROM ubuntu:noble AS hapce-builder
18+
19+ ENV HAPROXY_BRANCH 3.0
20+ ENV HAPROXY_MINOR 3.0.12
21+ ENV HAPROXY_SHA256 cd2bade59a7e2d61f2d62be7c6c4cfc0e2b3a90431023720cae7c43843b0570b
22+ ENV HAPROXY_SRC_URL http://www.haproxy.org/download
23+
24+ COPY --from=awslc-builder /opt/aws-lc /opt/aws-lc
25+
26+ ENV DEBIAN_FRONTEND noninteractive
27+
28+ RUN apt-get update && \
29+ apt-get install -y --no-install-recommends procps libssl3t64 zlib1g "libpcre2-*" liblua5.4-0 libatomic1 tar curl socat ca-certificates libjemalloc2 && \
30+ apt-get install -y --no-install-recommends gcc make libc6-dev libssl-dev libpcre3-dev zlib1g-dev liblua5.4-dev libjemalloc-dev && \
31+ c_rehash && \
32+ curl -sfSL "${HAPROXY_SRC_URL}/${HAPROXY_BRANCH}/src/haproxy-${HAPROXY_MINOR}.tar.gz" -o haproxy.tar.gz && \
33+ echo "$HAPROXY_SHA256 *haproxy.tar.gz" | sha256sum -c - && \
34+ mkdir -p /tmp/haproxy && \
35+ tar -xzf haproxy.tar.gz -C /tmp/haproxy --strip-components=1 && \
36+ rm -f haproxy.tar.gz && \
37+ make -C /tmp/haproxy -j"$(nproc)" TARGET=linux-glibc CPU=generic USE_PCRE2=1 USE_PCRE2_JIT=1 \
38+ USE_TFO=1 USE_LINUX_TPROXY=1 USE_LUA=1 USE_GETADDRINFO=1 \
39+ USE_PROMEX=1 USE_SLZ=1 \
40+ USE_OPENSSL_AWSLC=1 USE_PTHREAD_EMULATION=1 \
41+ SSL_INC=/opt/aws-lc/include SSL_LIB=/opt/aws-lc/lib USE_QUIC=1 \
42+ LDFLAGS="-L/opt/aws-lc/lib -Wl,-rpath,/opt/aws-lc/lib" \
43+ ADDLIB=-ljemalloc \
44+ all && \
45+ make -C /tmp/haproxy TARGET=linux-glibc install-bin
1546
1647FROM ubuntu:noble
1748
@@ -31,45 +62,54 @@ ENV HAPROXY_SRC_URL http://www.haproxy.org/download
3162ENV HAPROXY_UID haproxy
3263ENV HAPROXY_GID haproxy
3364
65+ ENV DATAPLANE_MINOR 3.0.16
66+ ENV DATAPLANE_URL https://github.com/haproxytech/dataplaneapi/releases/download
67+
3468ENV DEBIAN_FRONTEND noninteractive
3569
36- COPY --from=builder /dataplaneapi /usr/local/bin/dataplaneapi
37- COPY --from=builder /dataplaneapi-v2 /usr/local/bin/dataplaneapi-v2
70+ ARG TARGETPLATFORM
71+
72+ COPY --from=awslc-builder /opt/aws-lc /opt/aws-lc
73+ COPY --from=hapce-builder /usr/local/sbin/haproxy /usr/local/sbin/haproxy
74+ COPY --from=hapce-builder /tmp/haproxy/examples/errorfiles/ /usr/local/etc/haproxy/errors
3875
3976RUN apt-get update && \
4077 apt-get install -y --no-install-recommends procps libssl3t64 zlib1g "libpcre2-*" liblua5.4-0 libatomic1 tar curl socat ca-certificates libjemalloc2 && \
41- apt-get install -y --no-install-recommends gcc make libc6-dev libssl-dev libpcre3-dev zlib1g-dev liblua5.4-dev libjemalloc-dev && \
42- curl -sfSL "${HAPROXY_SRC_URL}/${HAPROXY_BRANCH}/src/haproxy-${HAPROXY_MINOR}.tar.gz" -o haproxy.tar.gz && \
43- echo "$HAPROXY_SHA256 *haproxy.tar.gz" | sha256sum -c - && \
78+ c_rehash && \
4479 groupadd "$HAPROXY_GID" && \
4580 useradd -g "$HAPROXY_GID" "$HAPROXY_UID" && \
46- mkdir -p /tmp/haproxy && \
47- tar -xzf haproxy.tar.gz -C /tmp/haproxy --strip-components=1 && \
48- rm -f haproxy.tar.gz && \
49- make -C /tmp/haproxy -j"$(nproc)" TARGET=linux-glibc CPU=generic USE_PCRE2=1 USE_PCRE2_JIT=1 \
50- USE_TFO=1 USE_LINUX_TPROXY=1 USE_LUA=1 USE_GETADDRINFO=1 \
51- USE_PROMEX=1 USE_SLZ=1 \
52- USE_OPENSSL=1 USE_PTHREAD_EMULATION=1 \
53- USE_QUIC=1 USE_QUIC_OPENSSL_COMPAT=1 \
54- ADDLIB=-ljemalloc \
55- all && \
56- make -C /tmp/haproxy TARGET=linux-glibc install-bin install-man && \
81+ chmod +x /usr/local/sbin/haproxy && \
5782 ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy && \
5883 mkdir -p /var/lib/haproxy && \
5984 chown "$HAPROXY_UID:$HAPROXY_GID" /var/lib/haproxy && \
6085 mkdir -p /usr/local/etc/haproxy && \
6186 ln -s /usr/local/etc/haproxy /etc/haproxy && \
62- cp -R /tmp/haproxy/examples/errorfiles /usr/local/etc/haproxy/errors && \
63- rm -rf /tmp/haproxy && \
64- apt-get purge -y --auto-remove gcc make libc6-dev libssl-dev libpcre2-dev zlib1g-dev liblua5.4-dev libjemalloc-dev && \
65- apt-get clean && \
66- rm -rf /var/lib/apt/lists/* && \
87+ case "${TARGETPLATFORM}" in \
88+ "linux/arm64" ) API_ARCH=arm64 ;; \
89+ "linux/amd64" ) API_ARCH=x86_64 ;; \
90+ "linux/arm/v6" ) API_ARCH=arm ;; \
91+ "linux/arm/v7" ) API_ARCH=arm ;; \
92+ *) echo "ARG TARGETPLATFORM undeclared" >&2 && exit 1 ;; \
93+ esac && \
94+ curl -sfSL "${DATAPLANE_URL}/v${DATAPLANE_MINOR}/dataplaneapi_${DATAPLANE_MINOR}_linux_${API_ARCH}.tar.gz" -o dataplaneapi.tar.gz && \
95+ mkdir -p /tmp/dataplaneapi && \
96+ tar -xzf dataplaneapi.tar.gz -C /tmp/dataplaneapi && \
97+ rm -f dataplaneapi.tar.gz && \
98+ cp /tmp/dataplaneapi/dataplaneapi /usr/local/bin/dataplaneapi && \
6799 chmod +x /usr/local/bin/dataplaneapi && \
68- ln -s /usr/local/bin/dataplaneapi /usr/bin/dataplaneapi && \
69- chmod +x /usr/local/bin/dataplaneapi-v2 && \
70- ln -s /usr/local/bin/dataplaneapi-v2 /usr/bin/dataplaneapi-v2 && \
71100 touch /usr/local/etc/haproxy/dataplaneapi.yml && \
72- chown "$HAPROXY_UID:$HAPROXY_GID" /usr/local/etc/haproxy/dataplaneapi.yml
101+ chown "$HAPROXY_UID:$HAPROXY_GID" /usr/local/etc/haproxy/dataplaneapi.yml && \
102+ mkdir -p /usr/local/var/lib/dataplaneapi && \
103+ chown "$HAPROXY_UID:$HAPROXY_GID" /usr/local/var/lib/dataplaneapi && \
104+ ln -s /usr/local/var/lib/dataplaneapi /var/lib/dataplaneapi && \
105+ rm -rf /tmp/dataplaneapi && \
106+ apt-get clean && \
107+ rm -rf /var/lib/apt/lists/* && \
108+ echo "/opt/aws-lc/lib" > /etc/ld.so.conf.d/awslc.conf && \
109+ mkdir -p /opt/aws-lc/ssl && \
110+ rm -rf /opt/aws-lc/ssl/certs && \
111+ ln -s /etc/ssl/certs /opt/aws-lc/ssl/certs && \
112+ ldconfig
73113
74114COPY haproxy.cfg /usr/local/etc/haproxy
75115COPY docker-entrypoint.sh /
0 commit comments