diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..958e139 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ + +FROM node:24-alpine AS production +ARG NODE_ENV=production +ENV NODE_ENV=${NODE_ENV} +#Install curl for healthcheck +RUN apk add -U tzdata +ENV TZ=Europe/Zurich +RUN cp /usr/share/zoneinfo/Europe/Zurich /etc/localtime +RUN apk add --no-cache tini curl +HEALTHCHECK CMD curl -f http://localhost:3000/api/health || exit 1 +WORKDIR /app +COPY package*.json ./ +RUN npm install --only=production +COPY . . +CMD ["node", "server.js"] + +# docker build -t pg-middle-api:1.0 . && docker tag pg-middle-api:1.0 docker.imep.net/pg-middle-api:1.0 && docker push docker.imep.net/pg-middle-api:1.0 + + diff --git a/package-lock.json b/package-lock.json index a541508..ab13169 100644 --- a/package-lock.json +++ b/package-lock.json @@ -598,9 +598,9 @@ } }, "node_modules/path-to-regexp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", "license": "MIT", "funding": { "type": "opencollective", @@ -749,9 +749,9 @@ } }, "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" diff --git a/stack.yml b/stack.yml new file mode 100644 index 0000000..7236039 --- /dev/null +++ b/stack.yml @@ -0,0 +1,41 @@ +version: '3.8' + +services: + pg-api: + image: docker.imep.net/pg-middle-api:1.0 + ports: + - 3133:3000 + environment: + - DEBUG=sample-express:* + networks: + - traefik-public + deploy: + labels: + - 'traefik.enable=true' + - 'traefik.http.routers.pg-api.rule=Host(`pg-api.dsaihost.com`)' + - 'traefik.http.routers.pg-api.middlewares=pg-api-stripprefix,pg-api-header' + - 'traefik.http.routers.pg-api.entrypoints=websecure' + - 'traefik.http.routers.pg-api.tls.certresolver=letsencryptresolver' + - 'traefik.http.services.pg-api.loadbalancer.server.port=3000' + - 'traefik.http.middlewares.pg-api-header.headers.accesscontrolallowmethods=GET,OPTIONS,PUT' + - 'traefik.http.middlewares.pg-api-header.headers.accesscontrolallowheaders=*' + - 'traefik.http.middlewares.pg-api-header.headers.accesscontrolalloworiginlist=*' + - 'traefik.http.middlewares.pg-api-header.headers.accesscontrolmaxage=100' + - 'traefik.http.middlewares.pg-api-header.headers.addvaryheader=true' + - 'traefik.http.middlewares.pg-api-header.headers.contentSecurityPolicy=default-src all dsaihost.com' + update_config: + order: start-first + failure_action: rollback + delay: 10s + rollback_config: + parallelism: 0 + order: stop-first + restart_policy: + condition: any + delay: 5s + max_attempts: 3 + window: 120s + +networks: + traefik-public: + external: true