From 18e35f2ba908bef5b3bda7c27a79cb0af4e261dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Thu, 21 Sep 2023 03:01:47 +0200 Subject: [PATCH] Added docker image build script (#245) * Added docker image build script * Changed to alpine docker and expose port 9180 * Use multi-stage build --------- Co-authored-by: = <=> Co-authored-by: Jeff <42182408+jeffvli@users.noreply.github.com> --- Dockerfile | 17 +++++++++++++++++ nginx.conf | 20 ++++++++++++++++++++ package.json | 1 + 3 files changed, 38 insertions(+) create mode 100644 Dockerfile create mode 100644 nginx.conf diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..b5a50cf7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +# --- Builder stage +FROM node:18-alpine as builder +WORKDIR /app +COPY . /app + +# Scripts include electron-specific dependencies, which we don't need +RUN npm install --legacy-peer-deps --ignore-scripts +RUN npm run build:web + +# --- Production stage +FROM nginx:alpine-slim + +COPY --from=builder /app/release/app/dist/web /usr/share/nginx/html +COPY nginx.conf /etc/nginx/conf.d/default.conf + +EXPOSE 9180 +CMD ["nginx", "-g", "daemon off;"] diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 00000000..3b6a38ba --- /dev/null +++ b/nginx.conf @@ -0,0 +1,20 @@ +server { + listen 9180; + sendfile on; + default_type application/octet-stream; + + gzip on; + gzip_http_version 1.1; + gzip_disable "MSIE [1-6]\."; + gzip_min_length 256; + gzip_vary on; + gzip_proxied expired no-cache no-store private auth; + gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript; + gzip_comp_level 9; + + root /usr/share/nginx/html; + + location / { + try_files $uri $uri/ /index.html =404; + } +} \ No newline at end of file diff --git a/package.json b/package.json index 6433dbee..7ef8cbf1 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "build:remote": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.remote.prod.ts", "build:renderer": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.renderer.prod.ts", "build:web": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.web.prod.ts", + "build:docker": "npm run build:web && docker build -t jeffvli/feishin .", "rebuild": "electron-rebuild --parallel --types prod,dev,optional --module-dir release/app", "lint": "concurrently \"npm run lint:code\" \"npm run lint:styles\"", "lint:code": "cross-env NODE_ENV=development eslint . --ext .js,.jsx,.ts,.tsx --fix",