diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..d86f467 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +node_modules +.nuxt +.output diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..eb197c5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +FROM node:20-slim AS base + +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" + +RUN corepack enable + +COPY . /app +WORKDIR /app + +FROM base AS prod-deps +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile + +FROM base AS build +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile +RUN pnpm run build + +FROM base + +COPY --from=build /app/.output /app/.output + +EXPOSE 3000 +CMD ["node", ".output/server/index.mjs"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..999838e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,16 @@ +services: + simple-qr: + build: . + networks: + - web + labels: + - "traefik.enable=true" + - "traefik.http.routers.simple-qr.rule=Host(`simple-qr.com`)" + - "traefik.http.routers.simple-qr.service=simple-qr" + - "traefik.http.services.simple-qr.loadbalancer.server.port=3000" + - "traefik.http.routers.simple-qr.tls=true" + - "traefik.http.routers.simple-qr.tls.certResolver=myresolver" + +networks: + web: + external: true