diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..b5d239d --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +node_modules +dist +npm-debug.log +.git +.gitignore +.env +*.md +.DS_Store diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6de0ba4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM node:18-alpine + +WORKDIR /app + +# Dependencies installieren +COPY package*.json ./ +RUN npm ci --only=production + +# Source kopieren und builden +COPY tsconfig.json ./ +COPY src ./src +RUN npm run build + +# Aufräumen - nur dist und node_modules behalten +RUN rm -rf src tsconfig.json + +# Port freigeben +EXPOSE 3000 + +# Healthcheck +HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1 + +# Starten +CMD ["node", "dist/index.js"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f37077a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,18 @@ +services: + qr-invoice: + build: . + container_name: qr-invoice-service + ports: + - "3050:3000" + environment: + - NODE_ENV=production + - PORT=3000 + - HOST=0.0.0.0 + - LOG_LEVEL=info + restart: unless-stopped + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/health"] + interval: 30s + timeout: 3s + retries: 3 + start_period: 5s