FROM node:18-slim # Install ffmpeg, ca-certificates, and other useful tools for SSL support RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg curl ca-certificates wget unzip file && \ apt-get clean && rm -rf /var/lib/apt/lists/* # Rhubarb installation has been removed. USER node # The microsoft-cognitiveservices-speech-sdk will now be installed via package.json and npm ci # Diagnostic commands for the node user RUN echo "Running diagnostics as $(whoami)" RUN echo "PATH is: $PATH" # Removed: RUN which rhubarb || echo "rhubarb not found in PATH for node user during build" # Set environment variables ENV NODE_ENV=production ENV PORT=7860 # Create app directory and set it as working directory WORKDIR /home/node/app # Copy package.json and package-lock.json (or yarn.lock) first # This allows Docker to cache the npm install step if these files don't change COPY --chown=node:node backend/package.json backend/package-lock.json* ./ # If you use yarn, uncomment the next line and comment out the npm ci line # COPY --chown=node:node backend/package.json backend/yarn.lock ./ # Install dependencies # Using npm ci for cleaner installs if package-lock.json is present # RUN npm ci --only=production # Switching to npm install --omit=dev to resolve package-lock.json sync issues during Docker build. # Ideally, package-lock.json should be updated locally by running `npm install` in the backend directory and committing the result. RUN npm install --omit=dev # If you use yarn, uncomment the next line and comment out the npm ci line # RUN yarn install --production --frozen-lockfile # Copy the rest of the application files from the backend directory COPY --chown=node:node backend/ ./ # Create audios and public directories explicitly to avoid ENOENT errors RUN mkdir -p /home/node/app/audios /home/node/app/public # Optionally, create a placeholder index.html if no static files are copied # This prevents ENOENT errors when serving index.html RUN echo '

Placeholder for Virtual Girlfriend App

This is a placeholder page. Update with actual content if needed.

' > /home/node/app/public/index.html # Rhubarb download/installation section removed. # Expose the port the app runs on EXPOSE 7860 # Command to run the application CMD [ "node", "index.js" ]