Set up docker and docker-compose for SSR

This commit is contained in:
Jan Tuomi
2018-08-19 14:19:22 +03:00
parent 05006c15e0
commit 5afeff03dd
6 changed files with 161 additions and 27 deletions
+7 -5
View File
@@ -1,9 +1,11 @@
FROM node FROM node:alpine
RUN apk add --no-cache libpng-dev gcc make g++ zlib-dev bash lcms2-dev autoconf automake libtool nasm
WORKDIR /app WORKDIR /app
ADD . /app/ COPY package.json package-lock.json ./
RUN apt-get update
RUN apt-get install nasm
RUN npm ci RUN npm ci
COPY . ./
EXPOSE 3000
CMD ["npm", "start"] CMD ["npm", "start"]
EXPOSE 8080
+2 -2
View File
@@ -23,7 +23,7 @@ Minimal starter kit with hot module replacement (HMR) for rapid development.
`npm start` `npm start`
* Build app continously (HMR enabled) * Build app continously (HMR enabled)
* App served @ `http://localhost:8080` * App served @ `http://localhost:3000`
### Create new component ### Create new component
@@ -44,7 +44,7 @@ Minimal starter kit with hot module replacement (HMR) for rapid development.
Command | Description Command | Description
--- | --- --- | ---
`npm run start-dev` | Build app continously (HMR enabled) and serve @ `http://localhost:8080` `npm run start-dev` | Build app continously (HMR enabled) and serve @ `http://localhost:3000`
`npm run start-prod` | Build app once (HMR disabled) and serve @ `http://localhost:3000` `npm run start-prod` | Build app once (HMR disabled) and serve @ `http://localhost:3000`
`npm run build` | Build app to `/dist/` `npm run build` | Build app to `/dist/`
`npm run test` | Run e2e and unit tests `npm run test` | Run e2e and unit tests
+2 -2
View File
@@ -11,7 +11,7 @@ module.exports = function (env, argv) {
base.mode = "development"; base.mode = "development";
base.entry = [ base.entry = [
"react-hot-loader/patch", // Activate HMR for React "react-hot-loader/patch", // Activate HMR for React
"webpack-dev-server/client?http://0.0.0.0:8080", // Bundle the client for webpack-dev-server and connect to the provided endpoint "webpack-dev-server/client?http://0.0.0.0:3000", // Bundle the client for webpack-dev-server and connect to the provided endpoint
"webpack/hot/only-dev-server", // Bundle the client for hot reloading, only- means to only hot reload for successful updates "webpack/hot/only-dev-server", // Bundle the client for hot reloading, only- means to only hot reload for successful updates
"./index.tsx" // The entry point of our app "./index.tsx" // The entry point of our app
]; ];
@@ -19,7 +19,7 @@ module.exports = function (env, argv) {
hot: true, // Enable HMR on the server hot: true, // Enable HMR on the server
historyApiFallback: true, historyApiFallback: true,
host: '0.0.0.0', host: '0.0.0.0',
port: '8080', port: '3000',
allowedHosts: [ allowedHosts: [
'.sik.party', '.sik.party',
'.sahkoinsinoorikilta.fi', '.sahkoinsinoorikilta.fi',
+9
View File
@@ -0,0 +1,9 @@
version: '3'
services:
frontend:
build: .
image: git.sahkoinsinoorikilta.fi:4567/vtmk/web2.0-frontend-prod
ports:
- "3000:3000"
command: npm run start-prod
+2 -2
View File
@@ -1,8 +1,8 @@
version: '3' version: '3'
services: services:
web-frontend: frontend:
build: . build: .
image: git.sahkoinsinoorikilta.fi:4567/vtmk/web2.0-frontend image: git.sahkoinsinoorikilta.fi:4567/vtmk/web2.0-frontend
ports: ports:
- "3000:8080" - "3000:3000"
+138 -15
View File
@@ -2781,6 +2781,12 @@
"map-obj": "^1.0.0" "map-obj": "^1.0.0"
} }
}, },
"camelize": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz",
"integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=",
"dev": true
},
"caniuse-api": { "caniuse-api": {
"version": "1.6.1", "version": "1.6.1",
"resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
@@ -3456,25 +3462,25 @@
}, },
"dependencies": { "dependencies": {
"mime-db": { "mime-db": {
"version": "1.34.0", "version": "1.35.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.34.0.tgz", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
"integrity": "sha1-RS0Oz/XDA0am3B5kseruDTcZ/5o=", "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==",
"dev": true "dev": true
} }
} }
}, },
"compression": { "compression": {
"version": "1.7.2", "version": "1.7.3",
"resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz",
"integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==",
"dev": true, "dev": true,
"requires": { "requires": {
"accepts": "~1.3.4", "accepts": "~1.3.5",
"bytes": "3.0.0", "bytes": "3.0.0",
"compressible": "~2.0.13", "compressible": "~2.0.14",
"debug": "2.6.9", "debug": "2.6.9",
"on-headers": "~1.0.1", "on-headers": "~1.0.1",
"safe-buffer": "5.1.1", "safe-buffer": "5.1.2",
"vary": "~1.1.2" "vary": "~1.1.2"
}, },
"dependencies": { "dependencies": {
@@ -3486,12 +3492,6 @@
"requires": { "requires": {
"ms": "2.0.0" "ms": "2.0.0"
} }
},
"safe-buffer": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
"dev": true
} }
} }
}, },
@@ -3598,6 +3598,12 @@
"integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
"dev": true "dev": true
}, },
"content-security-policy-builder": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.0.0.tgz",
"integrity": "sha512-j+Nhmj1yfZAikJLImCvPJFE29x/UuBi+/MWqggGGc515JKaZrjuei2RhULJmy0MsstW3E3htl002bwmBNMKr7w==",
"dev": true
},
"content-type": { "content-type": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
@@ -4011,6 +4017,12 @@
"assert-plus": "^1.0.0" "assert-plus": "^1.0.0"
} }
}, },
"dasherize": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz",
"integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=",
"dev": true
},
"date-now": { "date-now": {
"version": "0.1.4", "version": "0.1.4",
"resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
@@ -4424,6 +4436,12 @@
"safe-buffer": "^5.0.1" "safe-buffer": "^5.0.1"
} }
}, },
"dns-prefetch-control": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz",
"integrity": "sha1-YN20V3dOF48flBXwyrsOhbCzALI=",
"dev": true
},
"dns-txt": { "dns-txt": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
@@ -4505,6 +4523,12 @@
"domelementtype": "1" "domelementtype": "1"
} }
}, },
"dont-sniff-mimetype": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz",
"integrity": "sha1-WTKJDcn04vGeXrAqIAJuXl78j1g=",
"dev": true
},
"dot-case": { "dot-case": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz",
@@ -5109,6 +5133,12 @@
"homedir-polyfill": "^1.0.1" "homedir-polyfill": "^1.0.1"
} }
}, },
"expect-ct": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.1.1.tgz",
"integrity": "sha512-ngXzTfoRGG7fYens3/RMb6yYoVLvLMfmsSllP/mZPxNHgFq41TmPSLF/nLY7fwoclI2vElvAmILFWGUYqdjfCg==",
"dev": true
},
"express": { "express": {
"version": "4.16.3", "version": "4.16.3",
"resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz",
@@ -5905,6 +5935,12 @@
"map-cache": "^0.2.2" "map-cache": "^0.2.2"
} }
}, },
"frameguard": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.0.0.tgz",
"integrity": "sha1-e8rUae57lukdEs6zlZx4I1qScuk=",
"dev": true
},
"fresh": { "fresh": {
"version": "0.5.2", "version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
@@ -7530,6 +7566,51 @@
"upper-case": "^1.1.3" "upper-case": "^1.1.3"
} }
}, },
"helmet": {
"version": "3.13.0",
"resolved": "https://registry.npmjs.org/helmet/-/helmet-3.13.0.tgz",
"integrity": "sha512-rCYnlbOBkeP6fCo4sXZNu91vIAWlbVgolwnUANtnzPANRf2kJZ2a6yjRnCqG23Tyl2/ExvJ8bDg4xUdNCIWnrw==",
"dev": true,
"requires": {
"dns-prefetch-control": "0.1.0",
"dont-sniff-mimetype": "1.0.0",
"expect-ct": "0.1.1",
"frameguard": "3.0.0",
"helmet-crossdomain": "0.3.0",
"helmet-csp": "2.7.1",
"hide-powered-by": "1.0.0",
"hpkp": "2.0.0",
"hsts": "2.1.0",
"ienoopen": "1.0.0",
"nocache": "2.0.0",
"referrer-policy": "1.1.0",
"x-xss-protection": "1.1.0"
}
},
"helmet-crossdomain": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/helmet-crossdomain/-/helmet-crossdomain-0.3.0.tgz",
"integrity": "sha512-YiXhj0E35nC4Na5EPE4mTfoXMf9JTGpN4OtB4aLqShKuH9d2HNaJX5MQoglO6STVka0uMsHyG5lCut5Kzsy7Lg==",
"dev": true
},
"helmet-csp": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.7.1.tgz",
"integrity": "sha512-sCHwywg4daQ2mY0YYwXSZRsgcCeerUwxMwNixGA7aMLkVmPTYBl7gJoZDHOZyXkqPrtuDT3s2B1A+RLI7WxSdQ==",
"dev": true,
"requires": {
"camelize": "1.0.0",
"content-security-policy-builder": "2.0.0",
"dasherize": "2.0.0",
"platform": "1.3.5"
}
},
"hide-powered-by": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.0.0.tgz",
"integrity": "sha1-SoWtZYgfYoV/xwr3F0oRhNzM4ys=",
"dev": true
},
"highlight-es": { "highlight-es": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/highlight-es/-/highlight-es-1.0.3.tgz", "resolved": "https://registry.npmjs.org/highlight-es/-/highlight-es-1.0.3.tgz",
@@ -7622,6 +7703,18 @@
"wbuf": "^1.1.0" "wbuf": "^1.1.0"
} }
}, },
"hpkp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz",
"integrity": "sha1-EOFCJk52IVpdMMROxD3mTe5tFnI=",
"dev": true
},
"hsts": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/hsts/-/hsts-2.1.0.tgz",
"integrity": "sha512-zXhh/DqgrTXJ7erTN6Fh5k/xjMhDGXCqdYN3wvxUvGUQvnxcFfUd8E+6vLg/nk3ss1TYMb+DhRl25fYABioTvA==",
"dev": true
},
"html-comment-regex": { "html-comment-regex": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz",
@@ -7883,6 +7976,12 @@
"integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==",
"dev": true "dev": true
}, },
"ienoopen": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.0.0.tgz",
"integrity": "sha1-NGpCj0dKrI9QzzeE6i0PFvYr2ms=",
"dev": true
},
"iferr": { "iferr": {
"version": "0.1.5", "version": "0.1.5",
"resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
@@ -10408,6 +10507,12 @@
"lower-case": "^1.1.1" "lower-case": "^1.1.1"
} }
}, },
"nocache": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz",
"integrity": "sha1-ICtIAhoMTL3i34DeFaF0Q8i0OYA=",
"dev": true
},
"node-fetch": { "node-fetch": {
"version": "1.7.3", "version": "1.7.3",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
@@ -11837,6 +11942,12 @@
"find-up": "^2.1.0" "find-up": "^2.1.0"
} }
}, },
"platform": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz",
"integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==",
"dev": true
},
"please-upgrade-node": { "please-upgrade-node": {
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.0.2.tgz", "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.0.2.tgz",
@@ -13759,6 +13870,12 @@
} }
} }
}, },
"referrer-policy": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.1.0.tgz",
"integrity": "sha1-NXdOtzW/UPtsB46DM0tHI1AgfXk=",
"dev": true
},
"regenerate": { "regenerate": {
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
@@ -18399,6 +18516,12 @@
"integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=",
"dev": true "dev": true
}, },
"x-xss-protection": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.1.0.tgz",
"integrity": "sha512-rx3GzJlgEeZ08MIcDsU2vY2B1QEriUKJTSiNHHUIem6eg9pzVOr2TL3Y4Pd6TMAM5D5azGjcxqI62piITBDHVg==",
"dev": true
},
"xdg-basedir": { "xdg-basedir": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",