mirror of
https://github.com/MrUnknownDE/utools.git
synced 2026-04-06 00:32:04 +02:00
72 lines
2.2 KiB
Docker
72 lines
2.2 KiB
Docker
# Stage 1: Build Dependencies
|
|
# Use an official Node.js runtime as a parent image
|
|
FROM node:18-alpine AS builder
|
|
|
|
WORKDIR /app
|
|
|
|
# Install OS dependencies needed for ping/traceroute
|
|
# Using apk add --no-cache reduces layer size
|
|
RUN apk add --no-cache iputils-ping traceroute
|
|
|
|
# Copy package.json and package-lock.json (or yarn.lock)
|
|
# Ensure these files include 'oui' as a dependency before building!
|
|
COPY package*.json ./
|
|
|
|
# Install app dependencies using npm ci for faster, reliable builds
|
|
# --only=production installs only production dependencies (including 'oui')
|
|
RUN npm ci --only=production
|
|
# REMOVED: RUN npm i oui (should be installed by npm ci now)
|
|
|
|
# Stage 2: Production Image
|
|
FROM node:18-alpine
|
|
|
|
WORKDIR /app
|
|
|
|
# Install only necessary OS dependencies again for the final image
|
|
RUN apk add --no-cache iputils-ping traceroute
|
|
|
|
# Copy dependencies from the builder stage
|
|
COPY --from=builder /app/node_modules ./node_modules
|
|
|
|
# Copy application code
|
|
COPY . .
|
|
|
|
# Copy MaxMind data (assuming it's in ./data)
|
|
# Ensure the 'data' directory exists in your project root
|
|
COPY ./data ./data
|
|
|
|
# Create a non-root user and group
|
|
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
|
|
# Optional: Change ownership of app files to the new user
|
|
# RUN chown -R appuser:appgroup /app
|
|
|
|
# Switch to the non-root user
|
|
USER appuser
|
|
|
|
# Make port specified in environment variable available to the world outside this container
|
|
# Default to 3000 if not specified
|
|
ARG PORT=3000
|
|
ENV PORT=${PORT}
|
|
EXPOSE ${PORT}
|
|
|
|
# Define environment variable for Node environment (important for Pino, Express etc.)
|
|
ENV NODE_ENV=production
|
|
# Define default Log Level if not set externally
|
|
ENV LOG_LEVEL=info
|
|
# Define default Ping Count if not set externally
|
|
ENV PING_COUNT=4
|
|
# Define paths to GeoIP DBs (can be overridden by external .env or docker run -e)
|
|
ENV GEOIP_CITY_DB=./data/GeoLite2-City.mmdb
|
|
ENV GEOIP_ASN_DB=./data/GeoLite2-ASN.mmdb
|
|
|
|
# Define build argument and environment variable for Git commit SHA
|
|
ARG GIT_COMMIT_SHA=unknown
|
|
ENV GIT_COMMIT_SHA=${GIT_COMMIT_SHA}
|
|
|
|
# Define build argument and environment variable for Sentry DSN
|
|
ARG SENTRY_DSN
|
|
ENV SENTRY_DSN=${SENTRY_DSN}
|
|
|
|
|
|
# Run the app when the container launches
|
|
CMD ["node", "server.js"] |