summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryyamashita <yyamashita@mosquit.one>2026-05-08 00:06:36 +0900
committeryyamashita <yyamashita@mosquit.one>2026-05-08 00:06:36 +0900
commit8f64dcc0e4e389903e6a7198d0a2b11498fcd948 (patch)
tree645ea500111b383d5bd180a000b397414238d594
parent529b4038b38cecab6601ed5bed2d340834358f45 (diff)
Add scraper service to docker-compose with 6-hourly cron
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-rw-r--r--Dockerfile17
-rw-r--r--docker-compose.yml17
2 files changed, 32 insertions, 2 deletions
diff --git a/Dockerfile b/Dockerfile
index 64f51e2..9977bbe 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -9,7 +9,7 @@ COPY --from=deps /app/node_modules /app/node_modules
WORKDIR /app
RUN npm run build
-FROM node:20-slim
+FROM node:20-slim AS app
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
@@ -18,3 +18,18 @@ RUN npx playwright install chromium --with-deps
RUN mkdir -p /app/data
EXPOSE 3000
CMD ["npm", "start"]
+
+FROM node:20-slim AS scraper
+WORKDIR /app
+COPY package.json package-lock.json ./
+RUN npm ci --omit=dev && npm install tsx
+COPY --from=build /app/build ./build
+COPY scripts ./scripts
+COPY app ./app
+COPY tsconfig.json ./
+RUN npx playwright install chromium --with-deps
+RUN apt-get update && apt-get install -y cron && rm -rf /var/lib/apt/lists/*
+RUN echo '0 */6 * * * root cd /app && DB_PATH=/app/data/events.db node --import tsx/esm scripts/scrape.ts >> /app/data/scraper.log 2>&1' > /etc/cron.d/scraper \
+ && chmod 0644 /etc/cron.d/scraper
+RUN mkdir -p /app/data
+CMD ["cron", "-f"]
diff --git a/docker-compose.yml b/docker-compose.yml
index 69feee9..ad50b60 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,6 +1,8 @@
services:
app:
- build: .
+ build:
+ context: .
+ target: app
expose:
- "3000"
volumes:
@@ -10,6 +12,19 @@ services:
- DB_PATH=/app/data/events.db
restart: unless-stopped
+ scraper:
+ build:
+ context: .
+ target: scraper
+ volumes:
+ - ./data:/app/data
+ environment:
+ - NODE_ENV=production
+ - DB_PATH=/app/data/events.db
+ depends_on:
+ - app
+ restart: unless-stopped
+
caddy:
image: caddy:2-alpine
ports: