diff --git a/graphfx-ui/Dockerfile b/graphfx-ui/Dockerfile new file mode 100644 index 0000000..a93e230 --- /dev/null +++ b/graphfx-ui/Dockerfile @@ -0,0 +1,19 @@ +# syntax=docker/dockerfile:1 + +FROM node:24-alpine AS build +WORKDIR /app + +COPY package*.json ./ +RUN npm ci + +COPY . . +RUN npm run build + +FROM nginx:1.27-alpine AS runtime +COPY nginx.conf /etc/nginx/conf.d/default.conf +COPY --from=build /app/dist /usr/share/nginx/html + +EXPOSE 80 + +HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ + CMD wget -qO- http://127.0.0.1/ >/dev/null || exit 1 diff --git a/graphfx-ui/docker-compose.yml b/graphfx-ui/docker-compose.yml new file mode 100644 index 0000000..6673f4e --- /dev/null +++ b/graphfx-ui/docker-compose.yml @@ -0,0 +1,15 @@ +services: + graphfx-ui: + build: + context: . + image: graphfx-ui:local + container_name: graphfx-ui + restart: unless-stopped + ports: + - "18081:80" + healthcheck: + test: ["CMD", "wget", "-qO-", "http://127.0.0.1/"] + interval: 30s + timeout: 3s + retries: 3 + start_period: 5s diff --git a/graphfx-ui/nginx.conf b/graphfx-ui/nginx.conf new file mode 100644 index 0000000..3b8eae2 --- /dev/null +++ b/graphfx-ui/nginx.conf @@ -0,0 +1,16 @@ +server { + listen 80; + server_name _; + + root /usr/share/nginx/html; + index index.html; + + location / { + try_files $uri $uri/ /index.html; + } + + location ~* \.(?:js|css|svg|png|jpg|jpeg|gif|ico|woff2?)$ { + try_files $uri =404; + add_header Cache-Control "public, max-age=31536000, immutable"; + } +}