Merge pull request 'feature/24-production_dockerfile' (#30) from feature/24-production_dockerfile into dev
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #30 closes #24
This commit is contained in:
commit
10dbd233a0
106
.drone.yml
106
.drone.yml
@ -1,20 +1,100 @@
|
|||||||
---
|
---
|
||||||
kind: pipeline
|
kind: pipeline
|
||||||
name: tests:latest
|
name: tests:node_latest
|
||||||
clone:
|
clone:
|
||||||
disable: true
|
disable: true
|
||||||
steps:
|
steps:
|
||||||
- name: checkout pr
|
- name: checkout pr
|
||||||
image: alpine/git
|
image: alpine/git
|
||||||
commands:
|
commands:
|
||||||
- git clone $DRONE_REMOTE_URL .
|
- git clone $DRONE_REMOTE_URL .
|
||||||
- git checkout $DRONE_SOURCE_BRANCH
|
- git checkout $DRONE_SOURCE_BRANCH
|
||||||
- mv .env.ci .env
|
- mv .env.ci .env
|
||||||
- name: run tests
|
- name: run tests
|
||||||
image: node:alpine
|
image: node:alpine
|
||||||
commands:
|
commands:
|
||||||
- yarn
|
- yarn
|
||||||
- yarn test:ci
|
- yarn test:ci
|
||||||
trigger:
|
trigger:
|
||||||
event:
|
event:
|
||||||
- pull_request
|
- pull_request
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: build:dev
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build featurebranch
|
||||||
|
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:
|
||||||
|
- dev
|
||||||
|
registry: registry.odit.services
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- dev
|
||||||
|
event:
|
||||||
|
- push
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- dev
|
||||||
|
event:
|
||||||
|
- push
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: build:latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build featurebranch
|
||||||
|
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
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- main
|
||||||
|
event:
|
||||||
|
- push
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: build:tags
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build featurebranch
|
||||||
|
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:
|
||||||
|
- $DRONE_TAG
|
||||||
|
registry: registry.odit.services
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- main
|
||||||
|
event:
|
||||||
|
- tag
|
2
.env.ci
2
.env.ci
@ -5,4 +5,4 @@ DB_PORT=unused
|
|||||||
DB_USER=unused
|
DB_USER=unused
|
||||||
DB_PASSWORD=bla
|
DB_PASSWORD=bla
|
||||||
DB_NAME=./test.sqlite
|
DB_NAME=./test.sqlite
|
||||||
NODE_ENV=production
|
NODE_ENV=dev
|
20
Dockerfile
20
Dockerfile
@ -1,6 +1,16 @@
|
|||||||
FROM node:alpine
|
# Typescript Build
|
||||||
|
FROM node:14.15.1-alpine3.12
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY ./package.json ./
|
COPY package.json ./
|
||||||
RUN yarn
|
RUN npm i -g pnpm
|
||||||
COPY ./ ./
|
RUN pnpm i
|
||||||
ENTRYPOINT [ "yarn","dev" ]
|
COPY tsconfig.json ormconfig.js ./
|
||||||
|
COPY src ./src
|
||||||
|
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
|
||||||
|
ENTRYPOINT ["node", "dist/app.js"]
|
@ -6,18 +6,26 @@ services:
|
|||||||
- 4010:4010
|
- 4010:4010
|
||||||
environment:
|
environment:
|
||||||
APP_PORT: 4010
|
APP_PORT: 4010
|
||||||
DB_TYPE: postgres
|
DB_TYPE: sqlite
|
||||||
DB_HOST: backend_db
|
DB_HOST: bla
|
||||||
DB_PORT: 5432
|
DB_PORT: bla
|
||||||
DB_USER: lfk
|
DB_USER: bla
|
||||||
DB_PASSWORD: changeme
|
DB_PASSWORD: bla
|
||||||
DB_NAME: lfk
|
DB_NAME: dev.sqlite
|
||||||
NODE_ENV: production
|
NODE_ENV: production
|
||||||
backend_db:
|
# APP_PORT: 4010
|
||||||
image: postgres:11-alpine
|
# DB_TYPE: postgres
|
||||||
environment:
|
# DB_HOST: backend_db
|
||||||
POSTGRES_DB: lfk
|
# DB_PORT: 5432
|
||||||
POSTGRES_PASSWORD: changeme
|
# DB_USER: lfk
|
||||||
POSTGRES_USER: lfk
|
# DB_PASSWORD: changeme
|
||||||
ports:
|
# DB_NAME: lfk
|
||||||
- 5432:5432
|
# NODE_ENV: production
|
||||||
|
# backend_db:
|
||||||
|
# image: postgres:11-alpine
|
||||||
|
# environment:
|
||||||
|
# POSTGRES_DB: lfk
|
||||||
|
# POSTGRES_PASSWORD: changeme
|
||||||
|
# POSTGRES_USER: lfk
|
||||||
|
# ports:
|
||||||
|
# - 5432:5432
|
||||||
|
16
ormconfig.js
Normal file
16
ormconfig.js
Normal file
@ -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'],
|
||||||
|
};
|
13
ormconfig.ts
13
ormconfig.ts
@ -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'],
|
|
||||||
};
|
|
10
package.json
10
package.json
@ -32,9 +32,7 @@
|
|||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"dotenv": "^8.2.0",
|
"dotenv": "^8.2.0",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"helmet": "^4.2.0",
|
|
||||||
"jsonwebtoken": "^8.5.1",
|
"jsonwebtoken": "^8.5.1",
|
||||||
"multer": "^1.4.2",
|
|
||||||
"mysql": "^2.18.1",
|
"mysql": "^2.18.1",
|
||||||
"pg": "^8.5.1",
|
"pg": "^8.5.1",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
@ -44,23 +42,20 @@
|
|||||||
"typeorm": "^0.2.29",
|
"typeorm": "^0.2.29",
|
||||||
"typeorm-routing-controllers-extensions": "^0.2.0",
|
"typeorm-routing-controllers-extensions": "^0.2.0",
|
||||||
"typeorm-seeding": "^1.6.1",
|
"typeorm-seeding": "^1.6.1",
|
||||||
|
"sqlite3": "^5.0.0",
|
||||||
"uuid": "^8.3.1"
|
"uuid": "^8.3.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/cors": "^2.8.8",
|
"@types/cors": "^2.8.8",
|
||||||
"@types/dotenv": "^8.2.0",
|
|
||||||
"@types/express": "^4.17.9",
|
"@types/express": "^4.17.9",
|
||||||
"@types/jest": "^26.0.16",
|
"@types/jest": "^26.0.16",
|
||||||
"@types/jsonwebtoken": "^8.5.0",
|
"@types/jsonwebtoken": "^8.5.0",
|
||||||
"@types/multer": "^1.4.4",
|
|
||||||
"@types/node": "^14.14.9",
|
"@types/node": "^14.14.9",
|
||||||
"@types/swagger-ui-express": "^4.1.2",
|
"@types/swagger-ui-express": "^4.1.2",
|
||||||
"@types/uuid": "^8.3.0",
|
"@types/uuid": "^8.3.0",
|
||||||
"axios": "^0.21.0",
|
"axios": "^0.21.0",
|
||||||
"dotenv-safe": "^8.2.0",
|
|
||||||
"jest": "^26.6.3",
|
"jest": "^26.6.3",
|
||||||
"nodemon": "^2.0.6",
|
"nodemon": "^2.0.6",
|
||||||
"sqlite3": "^5.0.0",
|
|
||||||
"start-server-and-test": "^1.11.6",
|
"start-server-and-test": "^1.11.6",
|
||||||
"ts-jest": "^26.4.4",
|
"ts-jest": "^26.4.4",
|
||||||
"ts-node": "^9.0.0",
|
"ts-node": "^9.0.0",
|
||||||
@ -80,7 +75,6 @@
|
|||||||
"ignore": [
|
"ignore": [
|
||||||
"src/tests/*",
|
"src/tests/*",
|
||||||
"docs/*"
|
"docs/*"
|
||||||
],
|
]
|
||||||
"delay": "2500"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,13 +6,14 @@ import { config, e as errors } from './config';
|
|||||||
import loaders from "./loaders/index";
|
import loaders from "./loaders/index";
|
||||||
import { ErrorHandler } from './middlewares/ErrorHandler';
|
import { ErrorHandler } from './middlewares/ErrorHandler';
|
||||||
|
|
||||||
|
const CONTROLLERS_FILE_EXTENSION = process.env.NODE_ENV === 'production' ? 'js' : 'ts';
|
||||||
const app = createExpressServer({
|
const app = createExpressServer({
|
||||||
authorizationChecker: authchecker,
|
authorizationChecker: authchecker,
|
||||||
middlewares: [ErrorHandler],
|
middlewares: [ErrorHandler],
|
||||||
development: config.development,
|
development: config.development,
|
||||||
cors: true,
|
cors: true,
|
||||||
routePrefix: "/api",
|
routePrefix: "/api",
|
||||||
controllers: [__dirname + "/controllers/*.ts"],
|
controllers: [`${__dirname}/controllers/*.${CONTROLLERS_FILE_EXTENSION}`],
|
||||||
});
|
});
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
"target": "ES2020",
|
"target": "ES2020",
|
||||||
"module": "commonjs",
|
"module": "commonjs",
|
||||||
"rootDir": "./src",
|
"rootDir": "./src",
|
||||||
"outDir": "./build",
|
"outDir": "./dist",
|
||||||
"esModuleInterop": true,
|
"esModuleInterop": true,
|
||||||
"strict": false,
|
"strict": false,
|
||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user