|
@@ -1,18 +1,40 @@
|
|
|
ARG DENO_IMAGE=denoland/deno:alpine-1.34.2
|
|
ARG DENO_IMAGE=denoland/deno:alpine-1.34.2
|
|
|
-FROM ${DENO_IMAGE}
|
|
|
|
|
|
|
+ARG DENO_DIR=/deno_dir
|
|
|
|
|
|
|
|
-EXPOSE 1993
|
|
|
|
|
|
|
+# Build stage
|
|
|
|
|
+FROM ${DENO_IMAGE} as builder
|
|
|
|
|
|
|
|
WORKDIR /app
|
|
WORKDIR /app
|
|
|
|
|
|
|
|
-USER deno
|
|
|
|
|
|
|
+# Set DENO_DIR to a known location
|
|
|
|
|
+ENV DENO_DIR=${DENO_DIR}
|
|
|
|
|
|
|
|
|
|
+# Cache dependencies
|
|
|
COPY deno.jsonc deno.lock ./
|
|
COPY deno.jsonc deno.lock ./
|
|
|
-
|
|
|
|
|
COPY src/deps.ts ./src/
|
|
COPY src/deps.ts ./src/
|
|
|
RUN deno cache ./src/deps.ts
|
|
RUN deno cache ./src/deps.ts
|
|
|
|
|
|
|
|
|
|
+# Build application
|
|
|
COPY . .
|
|
COPY . .
|
|
|
RUN deno cache ./src/main.ts
|
|
RUN deno cache ./src/main.ts
|
|
|
|
|
|
|
|
|
|
+# Runtime stage
|
|
|
|
|
+FROM ${DENO_IMAGE}
|
|
|
|
|
+
|
|
|
|
|
+EXPOSE 1993
|
|
|
|
|
+
|
|
|
|
|
+WORKDIR /app
|
|
|
|
|
+
|
|
|
|
|
+# Set DENO_DIR to the same location as in the build stage
|
|
|
|
|
+ENV DENO_DIR=${DENO_DIR}
|
|
|
|
|
+
|
|
|
|
|
+# Copy from build stage
|
|
|
|
|
+COPY --from=builder /app .
|
|
|
|
|
+COPY --from=builder ${DENO_DIR} ${DENO_DIR}
|
|
|
|
|
+
|
|
|
|
|
+# Change ownership to deno user
|
|
|
|
|
+RUN chown -R deno:deno /app ${DENO_DIR}
|
|
|
|
|
+
|
|
|
|
|
+USER deno
|
|
|
|
|
+
|
|
|
CMD ["run", "--allow-net", "--allow-read", "--allow-env", "./src/main.ts"]
|
|
CMD ["run", "--allow-net", "--allow-read", "--allow-env", "./src/main.ts"]
|