diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9b94b34 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,145 @@ +# Dependencies +node_modules/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +bun.sum + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage/ +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +jspm_packages/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +public + +# Vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# IDE and editor files +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# Git +.git +.gitignore + +# Docker +Dockerfile* +.dockerignore + +# Documentation +README.md +docs/ + +# Test files +test/ +tests/ +*.test.js +*.test.ts +*.spec.js +*.spec.ts + +# Development files +CLAUDE.md +devenv.* +*.log + +# Runtime cookies/config +cookies/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..315c900 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +# Use the official Bun base image +FROM oven/bun:latest AS base + +# Set the working directory +WORKDIR /app + +# Copy package files +COPY package.json bun.lock* ./ + +# Install dependencies +RUN bun install --frozen-lockfile + +# Copy source code +COPY src ./src +COPY tsconfig.json ./ + +# Build the application for production +RUN bun build ./src/index.ts --outdir ./dist --minify + +# Multi-stage build - runtime stage +FROM oven/bun:latest AS runtime + +WORKDIR /app + +# Copy the built application from the base stage +COPY --from=base /app/dist/ ./ + +# Expose the port the app runs on +EXPOSE 3000 + +# Start the application +CMD ["bun", "index.js"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..df87ee8 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +services: + marketplace-scraper: + build: . + ports: + - "4005:4005" + environment: + - NODE_ENV=production + - PORT=4005 + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:4005/api/status"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 5s + restart: unless-stopped