mirror of
https://github.com/elyby/emails-renderer.git
synced 2024-12-21 20:59:44 +05:30
Add Docker configuration.
Implemented graceful stopping.
This commit is contained in:
parent
a772fb7542
commit
0d21dc8bf8
2
.dockerignore
Normal file
2
.dockerignore
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
node_modules
|
||||||
|
dist
|
29
.travis.yml
29
.travis.yml
@ -7,7 +7,28 @@ cache:
|
|||||||
directories:
|
directories:
|
||||||
- node_modules
|
- node_modules
|
||||||
|
|
||||||
script:
|
stages:
|
||||||
- yarn lint
|
- test
|
||||||
- yarn tsc
|
- name: deploy
|
||||||
- yarn build:quiet
|
if: branch = master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
include:
|
||||||
|
- stage: test
|
||||||
|
script:
|
||||||
|
- yarn lint
|
||||||
|
- yarn tsc
|
||||||
|
- yarn build:quiet
|
||||||
|
- stage: deploy
|
||||||
|
services:
|
||||||
|
- docker
|
||||||
|
before_script:
|
||||||
|
- docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
|
||||||
|
script:
|
||||||
|
- export DOCKER_TAG="${TRAVIS_TAG:-dev}"
|
||||||
|
- >
|
||||||
|
docker build
|
||||||
|
--target app
|
||||||
|
-t elyby/emails-renderer:$DOCKER_TAG
|
||||||
|
.
|
||||||
|
- docker push elyby/emails-renderer:$DOCKER_TAG
|
||||||
|
35
Dockerfile
Normal file
35
Dockerfile
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
FROM node:12.4.0-alpine AS build
|
||||||
|
|
||||||
|
RUN mkdir -p /build
|
||||||
|
WORKDIR /build
|
||||||
|
|
||||||
|
# Dependencies to build node-canvas
|
||||||
|
RUN apk add --no-cache build-base g++ python cairo-dev jpeg-dev pango-dev giflib-dev
|
||||||
|
|
||||||
|
COPY scripts /build/scripts
|
||||||
|
COPY webpack-utils /build/webpack-utils
|
||||||
|
COPY package.json /build/
|
||||||
|
COPY yarn.lock /build/
|
||||||
|
|
||||||
|
RUN yarn install
|
||||||
|
|
||||||
|
COPY . /build
|
||||||
|
|
||||||
|
RUN yarn build:quiet \
|
||||||
|
&& rm dist/*.html \
|
||||||
|
&& rm dist/stats.json
|
||||||
|
|
||||||
|
RUN yarn install --prod \
|
||||||
|
&& rm node_modules/.yarn-integrity
|
||||||
|
|
||||||
|
|
||||||
|
FROM node:12.4.0-alpine AS app
|
||||||
|
|
||||||
|
RUN mkdir -p /usr/src/app
|
||||||
|
WORKDIR /usr/src/app
|
||||||
|
EXPOSE 3000
|
||||||
|
|
||||||
|
COPY --from=build /build/node_modules /usr/src/app/node_modules
|
||||||
|
COPY --from=build /build/dist /usr/src/app/
|
||||||
|
|
||||||
|
CMD ["node", "/usr/src/app/app.js"]
|
@ -33,6 +33,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fastify": "^2.4.1",
|
"fastify": "^2.4.1",
|
||||||
|
"fastify-graceful-shutdown": "^2.0.1",
|
||||||
"fastify-static": "^2.4.0",
|
"fastify-static": "^2.4.0",
|
||||||
"react": "^16.8.4",
|
"react": "^16.8.4",
|
||||||
"react-dom": "^16.8.4",
|
"react-dom": "^16.8.4",
|
||||||
|
@ -1,20 +1,21 @@
|
|||||||
/* eslint-env node */
|
/* eslint-env node */
|
||||||
/* eslint-disable spaced-comment */
|
/* eslint-disable spaced-comment */
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import ReactDOMServer from 'react-dom/server';
|
||||||
|
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
import createFastify from 'fastify';
|
import createFastify from 'fastify';
|
||||||
|
// @ts-ignore
|
||||||
|
import fastifyGracefulShutdown from 'fastify-graceful-shutdown';
|
||||||
import fastifyStatic from 'fastify-static';
|
import fastifyStatic from 'fastify-static';
|
||||||
import { AddressInfo } from 'net';
|
|
||||||
|
|
||||||
import ReactDOMServer from 'react-dom/server';
|
|
||||||
import { Html } from 'components';
|
import { Html } from 'components';
|
||||||
import App, { Params } from 'App';
|
import App, { Params } from 'App';
|
||||||
|
|
||||||
const fastify = createFastify({
|
const fastify = createFastify({
|
||||||
logger: {
|
logger: {
|
||||||
level: 'warn',
|
level: 'info',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -27,6 +28,8 @@ interface GetTemplateUrlParams {
|
|||||||
template: string;
|
template: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fastify.register(fastifyGracefulShutdown);
|
||||||
|
|
||||||
fastify.register(fastifyStatic, {
|
fastify.register(fastifyStatic, {
|
||||||
root: path.join(__dirname, 'assets'),
|
root: path.join(__dirname, 'assets'),
|
||||||
prefix: '/assets/',
|
prefix: '/assets/',
|
||||||
@ -72,8 +75,7 @@ fastify.get<GetTemplateQueryParams, GetTemplateUrlParams>('/templates/:locale/:t
|
|||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
try {
|
try {
|
||||||
await fastify.listen(3000);
|
await fastify.listen(3000, '0.0.0.0');
|
||||||
fastify.log.info(`server listening on ${(fastify.server.address() as AddressInfo)!.port}`);
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
fastify.log.error(err);
|
fastify.log.error(err);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
|
22
yarn.lock
22
yarn.lock
@ -2731,11 +2731,11 @@ extend@~3.0.2:
|
|||||||
"extended-translations-loader@file:webpack-utils/extended-translations-loader":
|
"extended-translations-loader@file:webpack-utils/extended-translations-loader":
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@lesechos/image-size-loader" "file:../../.cache/yarn/v4/npm-extended-translations-loader-1.0.0-fe1c90c6-5a79-4e5e-8995-7c33cb1db7d9-1559762166005/node_modules/image-size-loader"
|
"@lesechos/image-size-loader" "file:../../.cache/yarn/v4/npm-extended-translations-loader-1.0.0-72c3a128-fbb9-4e3d-9a24-9f2972009e1b-1559771604821/node_modules/image-size-loader"
|
||||||
glob "^7.1.4"
|
glob "^7.1.4"
|
||||||
loader-utils "^1.2.3"
|
loader-utils "^1.2.3"
|
||||||
qs "^6.0.0"
|
qs "^6.0.0"
|
||||||
text2png-loader "file:../../.cache/yarn/v4/npm-extended-translations-loader-1.0.0-fe1c90c6-5a79-4e5e-8995-7c33cb1db7d9-1559762166005/node_modules/text2png-loader"
|
text2png-loader "file:../../.cache/yarn/v4/npm-extended-translations-loader-1.0.0-72c3a128-fbb9-4e3d-9a24-9f2972009e1b-1559771604821/node_modules/text2png-loader"
|
||||||
tmp "^0.0.33"
|
tmp "^0.0.33"
|
||||||
|
|
||||||
external-editor@^3.0.3:
|
external-editor@^3.0.3:
|
||||||
@ -2814,6 +2814,14 @@ fast-safe-stringify@^2.0.6:
|
|||||||
resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz#04b26106cc56681f51a044cfc0d76cf0008ac2c2"
|
resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz#04b26106cc56681f51a044cfc0d76cf0008ac2c2"
|
||||||
integrity sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==
|
integrity sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==
|
||||||
|
|
||||||
|
fastify-graceful-shutdown@^2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/fastify-graceful-shutdown/-/fastify-graceful-shutdown-2.0.1.tgz#2ed228dc8eb8b225cdff5ed5b714264462e64d38"
|
||||||
|
integrity sha512-7G+K5Iqo1VVPsykkn3yuXnZvwzAmdIOQWvHzfGZ7yJQW3y7DnHtbiVzLdYBMvbNHQf9nt4LN483heTzGaqz8LA==
|
||||||
|
dependencies:
|
||||||
|
fastify-plugin "^1.5.0"
|
||||||
|
fastparallel "^2.3.0"
|
||||||
|
|
||||||
fastify-plugin@^1.5.0:
|
fastify-plugin@^1.5.0:
|
||||||
version "1.6.0"
|
version "1.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-1.6.0.tgz#c8198b08608f20c502b5dad26b36e9ae27206d7c"
|
resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-1.6.0.tgz#c8198b08608f20c502b5dad26b36e9ae27206d7c"
|
||||||
@ -2851,6 +2859,14 @@ fastify@^2.4.1:
|
|||||||
secure-json-parse "^1.0.0"
|
secure-json-parse "^1.0.0"
|
||||||
tiny-lru "^6.0.1"
|
tiny-lru "^6.0.1"
|
||||||
|
|
||||||
|
fastparallel@^2.3.0:
|
||||||
|
version "2.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/fastparallel/-/fastparallel-2.3.0.tgz#1e709bfb6a03993f3857e3ce7f01311ce7602613"
|
||||||
|
integrity sha1-HnCb+2oDmT84V+POfwExHOdgJhM=
|
||||||
|
dependencies:
|
||||||
|
reusify "^1.0.0"
|
||||||
|
xtend "^4.0.1"
|
||||||
|
|
||||||
fastq@^1.6.0:
|
fastq@^1.6.0:
|
||||||
version "1.6.0"
|
version "1.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2"
|
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2"
|
||||||
@ -6803,7 +6819,7 @@ ws@^6.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
async-limiter "~1.0.0"
|
async-limiter "~1.0.0"
|
||||||
|
|
||||||
xtend@^4.0.0, xtend@~4.0.1:
|
xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
|
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
|
||||||
integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
|
integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
|
||||||
|
Loading…
Reference in New Issue
Block a user