From 8b489d50f78ab3034a815566095b6d63d1bc4584 Mon Sep 17 00:00:00 2001 From: mgrimace <55518507+mgrimace@users.noreply.github.com> Date: Thu, 17 Oct 2024 15:46:54 -0400 Subject: [PATCH] Dockerfile refactoring (#167) * Docker updates and maintenance - Update run_daily.sh to use compose.yaml env var overrides if present on scheduled jobs, not just first run. Defaults back to config.json values if no override specified. - update sample compose.yaml with volume mapping to keep config.json, accounts.json, and sessions folder persistent on local machine (e.g., to keep data persistent through updates). * Refactored dockerfile Combining various steps to reduce layers. Should improve build time and image size. --- Dockerfile | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/Dockerfile b/Dockerfile index 65254e0..00bf4a5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,14 +4,11 @@ FROM node:18 # Set the working directory in the container WORKDIR /usr/src/microsoft-rewards-script -# Install jq, cron, and gettext-base -RUN apt-get update && apt-get install -y jq cron gettext-base - -# Copy all files to the working directory -COPY . . - -# Install dependencies including Playwright -RUN apt-get install -y \ +# Install jq, cron, gettext-base, Playwright dependencies +RUN apt-get update && apt-get install -y \ + jq \ + cron \ + gettext-base \ xvfb \ libgbm-dev \ libnss3 \ @@ -19,16 +16,20 @@ RUN apt-get install -y \ libxss1 \ libatk-bridge2.0-0 \ libgtk-3-0 \ + tzdata \ && rm -rf /var/lib/apt/lists/* +# Copy all files to the working directory +COPY . . + # Install application dependencies -RUN npm install - -# Ensure correct permissions for node_modules -RUN chmod -R 755 /usr/src/microsoft-rewards-script/node_modules - -# Install Playwright Chromium directly from local node_modules -RUN ./node_modules/.bin/playwright install chromium +RUN npm install && \ + # Ensure correct permissions for node_modules + chmod -R 755 /usr/src/microsoft-rewards-script/node_modules && \ + # Install Playwright Chromium directly from local node_modules + ./node_modules/.bin/playwright install chromium && \ + # Ensure correct permissions for the working directory + chmod -R 755 /usr/src/microsoft-rewards-script # Build the script RUN npm run build @@ -39,8 +40,11 @@ COPY src/crontab.template /etc/cron.d/microsoft-rewards-cron.template # Create the log file to be able to run tail RUN touch /var/log/cron.log -# Ensure correct permissions for the working directory -RUN chmod -R 755 /usr/src/microsoft-rewards-script - # Define the command to run your application with cron optionally -CMD sh -c 'node src/updateConfig.js && echo "$TZ" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata && if [ "$RUN_ON_START" = "true" ]; then npm start; fi && envsubst < /etc/cron.d/microsoft-rewards-cron.template > /etc/cron.d/microsoft-rewards-cron && crontab /etc/cron.d/microsoft-rewards-cron && cron && tail -f /var/log/cron.log' +CMD ["sh", "-c", "node src/updateConfig.js && \ + echo \"$TZ\" > /etc/timezone && \ + dpkg-reconfigure -f noninteractive tzdata && \ + if [ \"$RUN_ON_START\" = \"true\" ]; then npm start; fi && \ + envsubst < /etc/cron.d/microsoft-rewards-cron.template > /etc/cron.d/microsoft-rewards-cron && \ + crontab /etc/cron.d/microsoft-rewards-cron && \ + cron && tail -f /var/log/cron.log"]