From 47e4f6cd7eaf170f444f618b62c2bf1256ca890f Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Sat, 12 Dec 2020 12:29:14 +0100 Subject: [PATCH 01/14] basic build works --- ormconfig.js | 16 ++++++++++++++++ ormconfig.ts | 13 ------------- tsconfig.json | 2 +- 3 files changed, 17 insertions(+), 14 deletions(-) create mode 100644 ormconfig.js delete mode 100644 ormconfig.ts diff --git a/ormconfig.js b/ormconfig.js new file mode 100644 index 0000000..0cb8778 --- /dev/null +++ b/ormconfig.js @@ -0,0 +1,16 @@ +const dotenv = require('dotenv'); +dotenv.config(); +// +const SOURCE_PATH = process.env.NODE_ENV === 'production' ? 'dist' : 'src'; +module.exports = { + type: process.env.DB_TYPE, + host: process.env.DB_HOST, + port: process.env.DB_PORT, + username: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, + // entities: ["src/**/entities/*.ts"], + entities: [ `${SOURCE_PATH}/**/entities/*{.ts,.js}` ], + seeds: [ `${SOURCE_PATH}/**/seeds/*{.ts,.js}` ] + // seeds: ['src/seeds/*.ts'], +}; diff --git a/ormconfig.ts b/ormconfig.ts deleted file mode 100644 index aa5f916..0000000 --- a/ormconfig.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { config } from 'dotenv'; -config(); - -export default { - type: process.env.DB_TYPE, - host: process.env.DB_HOST, - port: process.env.DB_PORT, - username: process.env.DB_USER, - password: process.env.DB_PASSWORD, - database: process.env.DB_NAME, - entities: ["src/models/entities/*.ts"], - seeds: ['src/seeds/*.ts'], -}; diff --git a/tsconfig.json b/tsconfig.json index dfd4d15..b28ff11 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,7 @@ "target": "ES2020", "module": "commonjs", "rootDir": "./src", - "outDir": "./build", + "outDir": "./dist", "esModuleInterop": true, "strict": false, "experimentalDecorators": true, From a1e3289a88a61ee0bf574f5c674ee4ea6c06a9f8 Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Sat, 12 Dec 2020 12:39:53 +0100 Subject: [PATCH 02/14] =?UTF-8?q?=F0=9F=90=9E=20fixed=20app.ts=20for=20pro?= =?UTF-8?q?duction=20use?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref #24 --- src/app.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app.ts b/src/app.ts index 588d6a1..9adc9b3 100644 --- a/src/app.ts +++ b/src/app.ts @@ -6,13 +6,14 @@ import { config, e as errors } from './config'; import loaders from "./loaders/index"; import { ErrorHandler } from './middlewares/ErrorHandler'; +const CONTROLLERS_FILE_EXTENSION = process.env.NODE_ENV === 'production' ? 'js' : 'ts'; const app = createExpressServer({ authorizationChecker: authchecker, middlewares: [ErrorHandler], development: config.development, cors: true, routePrefix: "/api", - controllers: [__dirname + "/controllers/*.ts"], + controllers: [`${__dirname}/controllers/*.${CONTROLLERS_FILE_EXTENSION}`], }); async function main() { From 5ccdfe154025fde523fe30986df9ab38a4c87893 Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Sat, 12 Dec 2020 13:04:20 +0100 Subject: [PATCH 03/14] package.json - drop nodemon delay ref #24 --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 6715b59..2fb4e19 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,6 @@ "ignore": [ "src/tests/*", "docs/*" - ], - "delay": "2500" + ] } } \ No newline at end of file From b8aebc14e837868516a4fbac7bab1cef3b33c754 Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Sat, 12 Dec 2020 13:04:37 +0100 Subject: [PATCH 04/14] =?UTF-8?q?=F0=9F=90=B3=20working=20Dockerfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref #24 --- Dockerfile | 27 +++++++++++++++++++++++---- docker-compose.yml | 36 ++++++++++++++++++++++-------------- 2 files changed, 45 insertions(+), 18 deletions(-) diff --git a/Dockerfile b/Dockerfile index 089c4de..e246ca6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,25 @@ -FROM node:alpine +# FROM node:alpine +# WORKDIR /app +# COPY ./package.json ./ +# RUN yarn +# COPY ./ ./ +# ENTRYPOINT [ "yarn","dev" ] + +# Typescript Build +FROM node:14 WORKDIR /app -COPY ./package.json ./ +COPY package.json ./ RUN yarn -COPY ./ ./ -ENTRYPOINT [ "yarn","dev" ] \ No newline at end of file +COPY tsconfig.json ormconfig.js ./ +COPY src ./src +RUN yarn build +# module install +# final +FROM node:14 +COPY package.json ormconfig.js ./ +COPY --from=0 /app/dist dist +# RUN npm i pm2 -g +RUN npm i --production +RUN npm i sqlite3 +# CMD ["pm2-runtime","app.js"] +ENTRYPOINT ["node","dist/app.js"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 7ca0bb8..bcb856b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,18 +6,26 @@ services: - 4010:4010 environment: APP_PORT: 4010 - DB_TYPE: postgres - DB_HOST: backend_db - DB_PORT: 5432 - DB_USER: lfk - DB_PASSWORD: changeme - DB_NAME: lfk + DB_TYPE: sqlite + DB_HOST: bla + DB_PORT: bla + DB_USER: bla + DB_PASSWORD: bla + DB_NAME: dev.sqlite NODE_ENV: production - backend_db: - image: postgres:11-alpine - environment: - POSTGRES_DB: lfk - POSTGRES_PASSWORD: changeme - POSTGRES_USER: lfk - ports: - - 5432:5432 \ No newline at end of file + # APP_PORT: 4010 + # DB_TYPE: postgres + # DB_HOST: backend_db + # DB_PORT: 5432 + # DB_USER: lfk + # DB_PASSWORD: changeme + # DB_NAME: lfk + # NODE_ENV: production + # backend_db: + # image: postgres:11-alpine + # environment: + # POSTGRES_DB: lfk + # POSTGRES_PASSWORD: changeme + # POSTGRES_USER: lfk + # ports: + # - 5432:5432 From 8bcaf710ad580d78a254dc89060f30c0395bbdf2 Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Sat, 12 Dec 2020 13:14:38 +0100 Subject: [PATCH 05/14] integrate pm2 process manager to keep the app up and running ref #24 --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index e246ca6..053018b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,8 +18,8 @@ RUN yarn build FROM node:14 COPY package.json ormconfig.js ./ COPY --from=0 /app/dist dist -# RUN npm i pm2 -g RUN npm i --production RUN npm i sqlite3 -# CMD ["pm2-runtime","app.js"] -ENTRYPOINT ["node","dist/app.js"] \ No newline at end of file +RUN npm i pm2 -g +ENTRYPOINT ["pm2-runtime","dist/app.js"] +# ENTRYPOINT ["node","dist/app.js"] \ No newline at end of file From 95f40a9c287745dc7ccffc792f8880ff17cbc515 Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Sat, 12 Dec 2020 13:15:10 +0100 Subject: [PATCH 06/14] =?UTF-8?q?=F0=9F=A9=BA=E2=9D=A4=F0=9F=90=B3=20Docke?= =?UTF-8?q?r=20healthcheck?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref #24 --- Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Dockerfile b/Dockerfile index 053018b..9f8ce72 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,5 +21,8 @@ COPY --from=0 /app/dist dist RUN npm i --production RUN npm i sqlite3 RUN npm i pm2 -g + +HEALTHCHECK CMD curl --fail http://localhost:4010 || exit 1 + ENTRYPOINT ["pm2-runtime","dist/app.js"] # ENTRYPOINT ["node","dist/app.js"] \ No newline at end of file From bcb266e29bee1a7fd0f978c5b9e3c5c7795d79fe Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Sat, 12 Dec 2020 13:24:18 +0100 Subject: [PATCH 07/14] move to node:14.15.1-alpine3.12 ref #24 --- Dockerfile | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9f8ce72..dc8adb5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,5 @@ -# FROM node:alpine -# WORKDIR /app -# COPY ./package.json ./ -# RUN yarn -# COPY ./ ./ -# ENTRYPOINT [ "yarn","dev" ] - # Typescript Build -FROM node:14 +FROM node:14.15.1-alpine3.12 WORKDIR /app COPY package.json ./ RUN yarn @@ -15,9 +8,10 @@ COPY src ./src RUN yarn build # module install # final -FROM node:14 +FROM node:14.15.1-alpine3.12 COPY package.json ormconfig.js ./ COPY --from=0 /app/dist dist +# RUN npm install -g npm@7.1.2 RUN npm i --production RUN npm i sqlite3 RUN npm i pm2 -g From a7e27c6f6cf20c268a81d41cedfd8e81421fff21 Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Sat, 12 Dec 2020 13:27:57 +0100 Subject: [PATCH 08/14] drop unused packages ref #24 --- package.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/package.json b/package.json index 2fb4e19..76f4cc5 100644 --- a/package.json +++ b/package.json @@ -31,9 +31,7 @@ "cors": "^2.8.5", "dotenv": "^8.2.0", "express": "^4.17.1", - "helmet": "^4.2.0", "jsonwebtoken": "^8.5.1", - "multer": "^1.4.2", "mysql": "^2.18.1", "pg": "^8.5.1", "reflect-metadata": "^0.1.13", @@ -47,16 +45,13 @@ }, "devDependencies": { "@types/cors": "^2.8.8", - "@types/dotenv": "^8.2.0", "@types/express": "^4.17.9", "@types/jest": "^26.0.16", "@types/jsonwebtoken": "^8.5.0", - "@types/multer": "^1.4.4", "@types/node": "^14.14.9", "@types/swagger-ui-express": "^4.1.2", "@types/uuid": "^8.3.0", "axios": "^0.21.0", - "dotenv-safe": "^8.2.0", "jest": "^26.6.3", "nodemon": "^2.0.6", "sqlite3": "^5.0.0", From e3980096e279fa3d884a3688663d7e934f290b32 Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Sat, 12 Dec 2020 17:48:02 +0100 Subject: [PATCH 09/14] =?UTF-8?q?=F0=9F=9A=A7=20move=20sqlite=20to=20to=20?= =?UTF-8?q?production?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref #24 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 76f4cc5..e660e94 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "typeorm": "^0.2.29", "typeorm-routing-controllers-extensions": "^0.2.0", "typeorm-seeding": "^1.6.1", + "sqlite3": "^5.0.0", "uuid": "^8.3.1" }, "devDependencies": { @@ -54,7 +55,6 @@ "axios": "^0.21.0", "jest": "^26.6.3", "nodemon": "^2.0.6", - "sqlite3": "^5.0.0", "start-server-and-test": "^1.11.6", "ts-jest": "^26.4.4", "ts-node": "^9.0.0", From c391201570aae13dd494a6d8fa1d28bd69dea06b Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Sat, 12 Dec 2020 17:48:32 +0100 Subject: [PATCH 10/14] =?UTF-8?q?=F0=9F=90=B3=20optimize=20Dockerfile=20in?= =?UTF-8?q?=20speed=20and=20size=20(pnpm=20+=20layers)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref #24 --- Dockerfile | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/Dockerfile b/Dockerfile index dc8adb5..fe4793a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,21 +2,15 @@ FROM node:14.15.1-alpine3.12 WORKDIR /app COPY package.json ./ -RUN yarn +RUN npm i -g pnpm +RUN pnpm i COPY tsconfig.json ormconfig.js ./ COPY src ./src -RUN yarn build -# module install -# final +RUN pnpm run build +# final image FROM node:14.15.1-alpine3.12 COPY package.json ormconfig.js ./ +RUN npm i -g pnpm +RUN pnpm i --prod COPY --from=0 /app/dist dist -# RUN npm install -g npm@7.1.2 -RUN npm i --production -RUN npm i sqlite3 -RUN npm i pm2 -g - -HEALTHCHECK CMD curl --fail http://localhost:4010 || exit 1 - -ENTRYPOINT ["pm2-runtime","dist/app.js"] -# ENTRYPOINT ["node","dist/app.js"] \ No newline at end of file +ENTRYPOINT ["node", "dist/app.js"] \ No newline at end of file From 359e9559269ff34d91a42905280faa658afb5de9 Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Sat, 12 Dec 2020 17:48:45 +0100 Subject: [PATCH 11/14] =?UTF-8?q?=F0=9F=9A=80=20CI/CD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref #24 --- .drone.yml | 56 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/.drone.yml b/.drone.yml index 6cc56aa..21c50a2 100644 --- a/.drone.yml +++ b/.drone.yml @@ -4,17 +4,49 @@ name: tests:latest clone: disable: true steps: -- name: checkout pr - image: alpine/git - commands: - - git clone $DRONE_REMOTE_URL . - - git checkout $DRONE_SOURCE_BRANCH - - mv .env.ci .env -- name: run tests - image: node:alpine - commands: - - yarn - - yarn test:ci + - name: checkout pr + image: alpine/git + commands: + - git clone $DRONE_REMOTE_URL . + - git checkout $DRONE_SOURCE_BRANCH + - mv .env.ci .env + - name: run tests + image: node:alpine + commands: + - yarn + - yarn test:ci + - name: build edge + image: plugins/docker + depends_on: [clone] + settings: + username: + from_secret: DOCKER_REGISTRY_USER + password: + from_secret: DOCKER_REGISTRY_PASSWORD + repo: registry.odit.services/lfk/backend + tags: + - edge + registry: registry.odit.services + when: + branch: + - main + event: + - push + - name: build latest + image: plugins/docker + depends_on: [clone] + settings: + username: + from_secret: DOCKER_REGISTRY_USER + password: + from_secret: DOCKER_REGISTRY_PASSWORD + repo: registry.odit.services/lfk/backend + tags: + - latest + registry: registry.odit.services + when: + event: + - tag trigger: event: - - pull_request \ No newline at end of file + - pull_request From a1c37511646bee7b626bc934f28bc655e1005dca Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Sat, 12 Dec 2020 18:13:23 +0100 Subject: [PATCH 12/14] =?UTF-8?q?=F0=9F=9A=80=20CI=20build=20on=20feature?= =?UTF-8?q?=20branch=20tags?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref #24 --- .drone.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.drone.yml b/.drone.yml index 21c50a2..b88bdb1 100644 --- a/.drone.yml +++ b/.drone.yml @@ -47,6 +47,25 @@ steps: when: event: - tag + - name: build featurebranch + image: plugins/docker + depends_on: [clone] + settings: + username: + from_secret: DOCKER_REGISTRY_USER + password: + from_secret: DOCKER_REGISTRY_PASSWORD + auto_tag: true + auto_tag_suffix: drone_autobuild + repo: registry.odit.services/lfk/backend + tags: + - featurebranch + registry: registry.odit.services + when: + branch: + - feature/* + event: + - tag trigger: event: - pull_request From 40fb081332d4e24f222eee986d78ac3d85acd5c9 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sat, 12 Dec 2020 19:37:21 +0100 Subject: [PATCH 13/14] Cleaned up the pipelines ref #24 --- .drone.yml | 63 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 17 deletions(-) diff --git a/.drone.yml b/.drone.yml index b88bdb1..8bc071a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,6 +1,6 @@ --- kind: pipeline -name: tests:latest +name: tests:node_latest clone: disable: true steps: @@ -15,7 +15,17 @@ steps: commands: - yarn - yarn test:ci - - name: build edge +trigger: + event: + - pull_request + +--- +kind: pipeline +type: docker +name: build:dev + +steps: + - name: build featurebranch image: plugins/docker depends_on: [clone] settings: @@ -25,14 +35,27 @@ steps: from_secret: DOCKER_REGISTRY_PASSWORD repo: registry.odit.services/lfk/backend tags: - - edge + - dev registry: registry.odit.services when: branch: - - main + - dev event: - push - - name: build latest + +trigger: + branch: + - dev + event: + - push + +--- +kind: pipeline +type: docker +name: build:latest + +steps: + - name: build featurebranch image: plugins/docker depends_on: [clone] settings: @@ -44,9 +67,19 @@ steps: tags: - latest registry: registry.odit.services - when: - event: - - tag + +trigger: + branch: + - main + event: + - push + +--- +kind: pipeline +type: docker +name: build:tags + +steps: - name: build featurebranch image: plugins/docker depends_on: [clone] @@ -55,17 +88,13 @@ steps: from_secret: DOCKER_REGISTRY_USER password: from_secret: DOCKER_REGISTRY_PASSWORD - auto_tag: true - auto_tag_suffix: drone_autobuild repo: registry.odit.services/lfk/backend tags: - - featurebranch + - $DRONE_TAG registry: registry.odit.services - when: - branch: - - feature/* - event: - - tag + trigger: + branch: + - main event: - - pull_request + - tag \ No newline at end of file From c321da613a4cdb87fd2df14c1f4c245e4228870a Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sat, 12 Dec 2020 20:01:26 +0100 Subject: [PATCH 14/14] Switched env to dev for tests(ci) ref #24 --- .env.ci | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.ci b/.env.ci index 6103f14..d96e21a 100644 --- a/.env.ci +++ b/.env.ci @@ -5,4 +5,4 @@ DB_PORT=unused DB_USER=unused DB_PASSWORD=bla DB_NAME=./test.sqlite -NODE_ENV=production \ No newline at end of file +NODE_ENV=dev \ No newline at end of file