fix: upgrade Node 18 to 22 and fix Puppeteer compatibility

- Switch from Alpine to Debian slim for correct Chromium architecture
  (fixes ARM/Apple Silicon support)
- Upgrade Puppeteer 21 to 24, use system Chromium via PUPPETEER_EXECUTABLE_PATH
- Replace removed page.waitForTimeout() with setTimeout
- Set NODE_ENV=production in Dockerfile to prevent pino-pretty import
- Improve error logging with Pino's { err: error } pattern
- Add build: . to docker-compose for local development builds
This commit is contained in:
Samuel Enocsson
2026-03-19 23:03:27 +01:00
parent 0b55aeb632
commit d567c4bca9
8 changed files with 322 additions and 143 deletions
+3 -3
View File
@@ -81,7 +81,7 @@ router.post('/api/scrape-courses', async (req, res) => {
message: `Successfully scraped ${courses.length} courses`
});
} catch (error) {
logger.error('Error scraping courses:', error.message);
logger.error({ err: error }, 'Error scraping courses');
if (browser) {
try { await browser.close(); } catch (e) {}
}
@@ -230,7 +230,7 @@ router.post('/api/scrape-layouts/:courseId', async (req, res) => {
message: `Successfully scraped ${layouts.length} layouts and processed ${Object.keys(eventGroups).length} events for ${course.name}`
};
} catch (error) {
logger.error('Error scraping layouts:', error.message);
logger.error({ err: error }, 'Error scraping layouts');
if (browser) {
try { await browser.close(); } catch (e) {}
}
@@ -361,7 +361,7 @@ router.post('/api/scrape-event-results/:courseId', async (req, res) => {
message: `Processed ${Object.keys(eventGroups).length} events, updated ${savedCount} layouts`
});
} catch (error) {
logger.error('Error scraping event results:', error.message);
logger.error({ err: error }, 'Error scraping event results');
if (browser) {
try { await browser.close(); } catch (e) {}
}