|
1 | | -ARG PLATFORM |
2 | | -ARG GOOS |
3 | | -ARG GOARCH |
| 1 | +ARG PLATFORM=linux/arm64 |
4 | 2 |
|
5 | | -FROM --platform=$PLATFORM golang:1.24.3 AS builder |
| 3 | +FROM --platform=$PLATFORM debian:12-slim AS base |
| 4 | + |
| 5 | +RUN apt-get update \ |
| 6 | + && apt-get install -y --no-install-recommends \ |
| 7 | + curl ca-certificates \ |
| 8 | + postgresql-client \ |
| 9 | + gcc g++ libc6-dev \ |
| 10 | + && rm -rf /var/lib/apt/lists/* |
| 11 | + |
| 12 | +RUN adduser --disabled-login app |
6 | 13 |
|
7 | 14 | WORKDIR /app |
8 | 15 |
|
9 | | -COPY src/go.mod src/go.sum ./ |
10 | | -RUN go mod download |
| 16 | +# Install Java and Trino |
11 | 17 |
|
12 | | -COPY src/ . |
13 | | -RUN CGO_ENABLED=1 GOOS=$GOOS GOARCH=$GOARCH go build -o /app/bemidb |
| 18 | +ENV JAVA_HOME /opt/jdk-24 |
| 19 | +ENV PATH $JAVA_HOME/bin:$PATH |
14 | 20 |
|
15 | | -################################################################################ |
| 21 | +RUN \ |
| 22 | + ARCH=$(dpkg --print-architecture) && case "$ARCH" in \ |
| 23 | + "amd64") \ |
| 24 | + JDK_URL="https://download.oracle.com/java/24/archive/jdk-24.0.1_linux-x64_bin.tar.gz"; \ |
| 25 | + ;; \ |
| 26 | + "arm64") \ |
| 27 | + JDK_URL="https://download.oracle.com/java/24/archive/jdk-24.0.1_linux-aarch64_bin.tar.gz"; \ |
| 28 | + ;; \ |
| 29 | + *) \ |
| 30 | + echo "Unsupported architecture: $ARCH"; \ |
| 31 | + exit 1; \ |
| 32 | + ;; \ |
| 33 | + esac \ |
| 34 | + && curl -L "$JDK_URL" -o jdk.tar.gz \ |
| 35 | + && tar -xzf jdk.tar.gz \ |
| 36 | + && rm jdk.tar.gz \ |
| 37 | + && mkdir -p /opt \ |
| 38 | + && mv jdk-24.0.1 /opt/jdk-24 \ |
| 39 | + \ |
| 40 | + && curl -L https://repo1.maven.org/maven2/io/trino/trino-server/476/trino-server-476.tar.gz -o trino-server-476.tar.gz \ |
| 41 | + && tar -xzf trino-server-476.tar.gz \ |
| 42 | + && rm trino-server-476.tar.gz \ |
| 43 | + && mv trino-server-476 /app/trino \ |
| 44 | + && mkdir -p /data/trino \ |
| 45 | + && chown -R "app:app" /app/trino /data/trino |
16 | 46 |
|
17 | | -FROM --platform=$PLATFORM debian:bookworm-slim |
| 47 | +# Set up Trino |
18 | 48 |
|
19 | | -WORKDIR /app |
| 49 | +HEALTHCHECK --interval=10s --timeout=5s --start-period=10s \ |
| 50 | + CMD /app/trino/bin/health-check.sh |
| 51 | + |
| 52 | +COPY --chown=app:app docker/trino/etc /etc/trino |
| 53 | +COPY --chown=app:app docker/trino/bin /app/trino/bin |
| 54 | +COPY --chown=app:app docker/trino/configure.sql /app/trino/ |
| 55 | + |
| 56 | +# Set up syncers and server ######################################################################## |
| 57 | + |
| 58 | +FROM base AS compile |
| 59 | + |
| 60 | +# Install Go |
| 61 | + |
| 62 | +ENV GOROOT /usr/local/go |
| 63 | +ENV GOPATH /go |
| 64 | +ENV PATH $GOPATH/bin:$GOROOT/bin:$PATH |
| 65 | + |
| 66 | +RUN \ |
| 67 | + ARCH=$(dpkg --print-architecture) \ |
| 68 | + && curl -L "https://go.dev/dl/go1.24.4.linux-$ARCH.tar.gz" -o go.tar.gz \ |
| 69 | + && tar -C /usr/local -xzf go.tar.gz \ |
| 70 | + && rm go.tar.gz \ |
| 71 | + && mkdir -p "$GOPATH/src" "$GOPATH/bin" \ |
| 72 | + && chmod -R 777 "$GOPATH" |
| 73 | + |
| 74 | +# Compile syncers and server |
| 75 | + |
| 76 | +COPY --chown=app:app src/syncer-common/go.mod src/syncer-common/go.sum /app/src/syncer-common/ |
| 77 | +RUN cd /app/src/syncer-common && go mod download |
| 78 | + |
| 79 | +COPY --chown=app:app src/syncer-postgres/go.mod src/syncer-postgres/go.sum /app/src/syncer-postgres/ |
| 80 | +RUN cd /app/src/syncer-postgres && go mod download |
| 81 | + |
| 82 | +COPY --chown=app:app src/syncer-amplitude/go.mod src/syncer-amplitude/go.sum /app/src/syncer-amplitude/ |
| 83 | +RUN cd /app/src/syncer-amplitude && go mod download |
| 84 | + |
| 85 | +COPY --chown=app:app src/server/go.mod src/server/go.sum /app/src/server/ |
| 86 | +RUN cd /app/src/server && go mod download |
| 87 | + |
| 88 | +COPY --chown=app:app src/syncer-common /app/src/syncer-common |
| 89 | +COPY --chown=app:app src/syncer-postgres /app/src/syncer-postgres |
| 90 | +COPY --chown=app:app src/syncer-amplitude /app/src/syncer-amplitude |
| 91 | +COPY --chown=app:app src/server /app/src/server |
| 92 | + |
| 93 | +RUN ARCH=$(dpkg --print-architecture) \ |
| 94 | + && cd /app/src/syncer-postgres && CGO_ENABLED=1 GOOS=linux GOARCH=$ARCH go build -o /app/bin/syncer-postgres \ |
| 95 | + && cd /app/src/syncer-amplitude && CGO_ENABLED=1 GOOS=linux GOARCH=$ARCH go build -o /app/bin/syncer-amplitude \ |
| 96 | + && cd /app/src/server && CGO_ENABLED=1 GOOS=linux GOARCH=$ARCH go build -o /app/bin/server |
| 97 | + |
| 98 | +# Prepare final image ############################################################################## |
| 99 | + |
| 100 | +FROM base AS final |
| 101 | + |
| 102 | +COPY --chown=app:app --from=compile /app/bin/syncer-postgres /app/bin/syncer-amplitude /app/bin/server /app/bin/ |
| 103 | +COPY --chown=app:app docker/bin /app/bin/ |
20 | 104 |
|
21 | | -COPY --from=builder /app/bemidb /app/bemidb |
| 105 | +USER app |
22 | 106 |
|
23 | | -ENTRYPOINT ["/app/bemidb"] |
| 107 | +ENTRYPOINT ["/app/bin/run.sh"] |
0 commit comments