# Stage 1: Build and configure environment FROM ubuntu:bionic AS build # Install necessary packages and dependencies RUN apt-get update && \ apt-get install -y \ xvfb \ nginx \ libxcursor1 \ bash && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # Create necessary directories with appropriate permissions RUN mkdir -p /app/build /var/log/nginx /var/lib/nginx /var/cache/nginx /usr/share/nginx/html /usr/share/nginx/html-page && \ chown -R www-data:www-data /var/log/nginx /var/lib/nginx /var/cache/nginx /usr/share/nginx/html /usr/share/nginx/html-page # Copy backend server files and Nginx configuration COPY build/ /app/build/ COPY etc/nginx/nginx.conf /etc/nginx/nginx.conf COPY etc/nginx/conf.d /etc/nginx/conf.d COPY webgl-build /usr/share/nginx/html COPY html-page /usr/share/nginx/html-page # Copy and configure custom entrypoint script COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh # Stage 2: Runtime FROM nginx:alpine # Copy the Nginx configuration and application from the build stage COPY --from=build /etc/nginx/nginx.conf /etc/nginx/nginx.conf COPY --from=build /etc/nginx/conf.d /etc/nginx/conf.d COPY --from=build /usr/share/nginx/html /usr/share/nginx/html COPY --from=build /usr/share/nginx/html-page /usr/share/nginx/html-page COPY --from=build /app/build /app/build COPY --from=build /entrypoint.sh /entrypoint.sh # Ensure the correct permissions for directories RUN mkdir -p /var/log/nginx /var/lib/nginx /var/cache/nginx && \ chown -R www-data:www-data /var/log/nginx /var/lib/nginx /var/cache/nginx # Expose necessary ports EXPOSE 80 7777/udp 7778/tcp 7860 # Set the entrypoint to start the backend server and Nginx ENTRYPOINT ["/entrypoint.sh"]