feat(docker): added in docker build stuff to run this in docker as well as windows service

This commit is contained in:
2026-01-13 17:05:23 -06:00
parent e6d996e40b
commit 780335d35c
5 changed files with 69 additions and 85 deletions

View File

@@ -1,4 +1,7 @@
node_modules
.git
.env
dist
Dockerfile
docker-compose.yml
docker-compose.yml
npm-debug.log

1
.gitignore vendored
View File

@@ -1,4 +1,5 @@
# ---> Node
testFiles
# Logs
logs
*.log

View File

@@ -1,23 +1,44 @@
FROM node:24.12-alpine
###########
# Stage 1 #
###########
# Build stage with all dependencies
FROM node:24.12-alpine as build
WORKDIR /app
# Copy package files
COPY package*.json ./
COPY . .
# Install production dependencies only
RUN npm ci
RUN npm build:app
RUN npm run build
# Copy built app from builder stage
COPY --from=builder /app/dist ./dist
###########
# Stage 2 #
###########
# Small final image with only whats needed to run
FROM node:24.12-alpine AS production
# Environment variables with defaults
ENV PORT=3000
ENV DB_USER=admin
ENV DB_PASSWORD=changeme
WORKDIR /app
# Copy package files first to install runtime deps
COPY package*.json ./
# curl install
RUN apk add --no-cache curl
# Only install production dependencies
RUN npm ci --omit=dev
COPY --from=build /app/dist ./dist
ENV RUNNING_IN_DOCKER=true
EXPOSE 3000
# start the app up
CMD ["npm", "run", "start:docker"]
CMD ["node", "dist/index.js"]
# Add health check
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
CMD curl -f http://localhost:3000/lst/api/stats || exit 1

View File

@@ -1,42 +0,0 @@
FROM node:24-alpine AS deps
WORKDIR /app
COPY package.json ./
RUN ls -la /app
#RUN mkdir frontend
#RUN mkdir lstDocs
#RUN mkdir controller
#COPY frontend/package*.json ./frontend
#COPY lstDocs/package*.json ./lstDocs
#COPY controller/index.html ./controller
RUN npm install
#RUN npm run install:front
#RUN npm run install:docs
# Build the Next.js app
FROM node:24-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
#COPY --from=deps /app/frontend/node_modules ./frontend/node_modules
#COPY --from=deps /app/lstDocs/node_modules ./lstDocs/node_modules
#COPY --from=deps /app/controller/index.html ./controller/index.html
#COPY . ./
RUN npm run build:app
#RUN npm run build:front
#RUN npm run build:docs
# Final stage
FROM node:24-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
#COPY --from=builder /app/frontend/dist ./frontend/dist
#COPY --from=builder /app/lstDocs/build ./lstDocs/build
#COPY --from=deps /app/controller/index.html ./controller/index.html
ENV NODE_ENV=production
ENV RUNNING_IN_DOCKER=true
ENV PORT=3000
EXPOSE 3000
CMD ["node", "dist/index.js"]

View File

@@ -6,44 +6,45 @@ services:
container_name: lst_app
ports:
#- "${VITE_PORT:-4200}:4200"
- "4000:4200"
- "3600:3000"
environment:
- NODE_ENV=development
# - DATABASE_HOST=host.docker.internal
# - DATABASE_PORT=${DATABASE_PORT}
# - DATABASE_USER=${DATABASE_USER}
# - DATABASE_PASSWORD=${DATABASE_PASSWORD}
# - DATABASE_DB=${DATABASE_DB}
- NODE_ENV=production
- LOG_LEVEL=info
- DATABASE_HOST=host.docker.internal
- DATABASE_PORT=5433
- DATABASE_USER=${DATABASE_USER}
- DATABASE_PASSWORD=${DATABASE_PASSWORD}
- DATABASE_DB=${DATABASE_DB}
- PROD_SERVER=${PROD_SERVER}
- PROD_PLANT_TOKEN=${PROD_PLANT_TOKEN}
- PROD_USER=${PROD_USER}
- PROD_PASSWORD=${PROD_PASSWORD}
# - BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET}
# - BETTER_AUTH_URL=${BETTER_AUTH_URL}
- BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET}
- BETTER_AUTH_URL=${URL}
restart: unless-stopped
# for all host including prod servers, plc's, printers, or other de
extra_hosts:
- "${PROD_SERVER}:${PROD_IP}"
# extra_hosts:
# - "${PROD_SERVER}:${PROD_IP}"
networks:
- default
- logisticsNetwork
- mlan1
networks:
logisticsNetwork:
driver: macvlan
driver_opts:
parent: eth0
ipam:
config:
- subnet: ${LOGISTICS_NETWORK}
gateway: ${LOGISTICS_GATEWAY}
# networks:
# - default
# - logisticsNetwork
# #- mlan1
# networks:
# logisticsNetwork:
# driver: macvlan
# driver_opts:
# parent: eth0
# ipam:
# config:
# - subnet: ${LOGISTICS_NETWORK}
# gateway: ${LOGISTICS_GATEWAY}
mlan1:
driver: macvlan
driver_opts:
parent: eth0
ipam:
config:
- subnet: ${MLAN1_NETWORK}
gateway: ${MLAN1_GATEWAY}
# mlan1:
# driver: macvlan
# driver_opts:
# parent: eth0
# ipam:
# config:
# - subnet: ${MLAN1_NETWORK}
# gateway: ${MLAN1_GATEWAY}