66 lines
1.8 KiB
Docker
66 lines
1.8 KiB
Docker
|
# Use the bufbuild/buf image for extracting the buf command binary
|
||
|
FROM bufbuild/buf:latest as buf
|
||
|
# Use the official Node.js image as the base image for building the api/account/portal
|
||
|
FROM node:20-alpine as nodejs-builder
|
||
|
|
||
|
# Set the working directory
|
||
|
WORKDIR /portal
|
||
|
|
||
|
# Clone the repository with submodules
|
||
|
RUN apk add --no-cache git \
|
||
|
&& git clone --recurse-submodules https://git.lumeweb.com/LumeWeb/portal.git -b develop .
|
||
|
|
||
|
# Set the working directory
|
||
|
WORKDIR /portal/api/account/app
|
||
|
|
||
|
# Build the dashboard
|
||
|
RUN npm ci && npm run build
|
||
|
|
||
|
# Use the official Go image as the base image for the final Go build
|
||
|
FROM golang:1.21.6-alpine as go-builder
|
||
|
|
||
|
# Set the working directory
|
||
|
WORKDIR /portal
|
||
|
|
||
|
# Build the Go application with configurable tags
|
||
|
ARG BUILD_TAGS
|
||
|
RUN apk add --no-cache git && git clone --recurse-submodules https://git.lumeweb.com/LumeWeb/portal.git -b develop .
|
||
|
|
||
|
# Copy the built dashboard from the nodejs-builder stage
|
||
|
COPY --from=nodejs-builder /portal/api/account/app/build/client /portal/api/account/app/build/client
|
||
|
# Copy buf from the buf stage
|
||
|
COPY --from=buf /usr/local/bin/buf /usr/local/bin/buf
|
||
|
|
||
|
# Install the necessary dependencies
|
||
|
RUN apk add bash gcc curl musl-dev
|
||
|
|
||
|
# Install the necessary dependencies
|
||
|
RUN curl -sSf https://sh.rustup.rs | bash -s -- -y
|
||
|
|
||
|
# Set the necessary environment variables
|
||
|
ENV PATH="/root/.cargo/bin:${PATH}"
|
||
|
|
||
|
## Build the Go application
|
||
|
RUN go mod download
|
||
|
|
||
|
## Build the Go application
|
||
|
RUN go generate ./...
|
||
|
|
||
|
## Build the Go application
|
||
|
RUN go build -tags "${BUILD_TAGS}" -gcflags="all=-N -l" -o portal ./cmd/portal
|
||
|
|
||
|
# Use a lightweight base image for the final stage
|
||
|
FROM alpine:latest
|
||
|
|
||
|
# Set the working directory
|
||
|
WORKDIR /portal
|
||
|
|
||
|
# Copy the built binary from the go-builder stage
|
||
|
COPY --from=go-builder /portal/portal .
|
||
|
|
||
|
# Expose the necessary port(s)
|
||
|
EXPOSE 8080
|
||
|
|
||
|
# Run the application
|
||
|
CMD ["./portal"]
|