Skip to content

Commit

Permalink
[ENHANCEMENT] Add MongoDB and Docker
Browse files Browse the repository at this point in the history
Add mongodb with docker-compose and change generate proto method for docker
  • Loading branch information
saefullohmaslul committed Mar 30, 2020
1 parent 393e16b commit e2fa39d
Show file tree
Hide file tree
Showing 15 changed files with 108 additions and 72 deletions.
5 changes: 5 additions & 0 deletions .docker/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

cp -r /cache/node_modules/. /app/node_modules/

exec npm-run-all generate:server server:dev
2 changes: 1 addition & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1 +1 @@
MONGO_URI=mongodb://root:developer@localhost:27017/microservices
MONGO_URI=mongodb://localhost:27017/microservices
23 changes: 23 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
FROM node:10-alpine

RUN mkdir -p /cache

WORKDIR /cache

COPY package*.json ./

RUN npm i
RUN npm i -g npm-run-all
RUN npm rebuild grpc --target_libc=musl --target_platform=linux

RUN mkdir -p /app

WORKDIR /app

COPY tsconfig.json ./
COPY . .

ENTRYPOINT ["sh", "/app/.docker/entrypoint.sh"]

EXPOSE 3000
EXPOSE 27017
30 changes: 30 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
version: '3'
services:
app_service:
image: node:11
container_name: microservices
build: .
depends_on:
- mongodb_container
env_file:
- .env
environment:
DB_HOST: localhost
volumes:
- .:/app
ports:
- 3000:3000
working_dir: /app/
network_mode: host
command: /app/.docker/entrypoint.sh
tty: true

mongodb_container:
image: mongo
ports:
- 27017:27017
volumes:
- mongodb_data_container:/data/db

volumes:
mongodb_data_container:
6 changes: 5 additions & 1 deletion microgen/generator/generator-database.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { readFileSync, writeFileSync } from "fs-extra"
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs-extra"
import { join } from 'path'
import capitalize from 'capitalize'

Expand Down Expand Up @@ -41,6 +41,10 @@ export default class GeneratorDatabase {
.replace('fields: string', interfaceFields)
.replace('schema: String', schemaFields)

if (!existsSync(join(SRC_PATH, 'database', 'models'))) {
mkdirSync(join(SRC_PATH, 'database', 'models'))
}

writeFileSync(join(SRC_PATH, 'database', 'models', `${parser.package}.model.ts`), generate)
})
}
Expand Down
7 changes: 5 additions & 2 deletions microgen/generator/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,13 @@ export default class Generator {
generateProto()
}

public proto() {
this.generatorGraphql.createProto()
this.generateProtoType()
}

public generate() {
try {
this.generatorGraphql.createProto()
this.generateProtoType()
this.generatorServer.createIndexServices()
this.generatorApp.generateApp()
this.generatorDatabase.model()
Expand Down
16 changes: 16 additions & 0 deletions microgen/proto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import Generator from './generator'
import GeneratorServer from './generator/generator-server'
import GenerateApp from './generator/generator-app'
import GeneratorDatabase from './generator/generator-database'
import GeneratorLatency from './generator/generator-latency'
import GeneratorGraphql from './generator/generator-graphql'

const generatorServer = new GeneratorServer()
const generatorApp = new GenerateApp()
const generatorDatabase = new GeneratorDatabase()
const generatorLatency = new GeneratorLatency()
const generatorGraphql = new GeneratorGraphql()

const generator = new Generator(generatorServer, generatorApp, generatorDatabase, generatorLatency, generatorGraphql)

generator.proto()
4 changes: 3 additions & 1 deletion microgen/src/app/config/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ export default {

},
db: {
uri: process.env.MONGO_URI
uri: process.env.MONGO_URI,
user: process.env.DB_USER,
pass: process.env.DB_PASS
}
}
11 changes: 8 additions & 3 deletions microgen/src/database/connection.database.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,20 @@ import { logger } from '@app/app/lib'

@injectable()
export default class MongoConnection {
private url: string = config.db.uri as string
private url: string
constructor() {
this.url = config.db.uri as string
}
public async createConnection() {
await mongoose
.connect(
this.url,
config.db.uri as string,
{
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true
useCreateIndex: true,
user: config.db.user as string,
pass: config.db.pass as string
}
)
logger.db(`Database Up!`)
Expand Down
20 changes: 0 additions & 20 deletions microgen/src/database/models/comment.model.ts

This file was deleted.

18 changes: 0 additions & 18 deletions microgen/src/database/models/post.model.ts

This file was deleted.

20 changes: 0 additions & 20 deletions microgen/src/database/models/user.model.ts

This file was deleted.

11 changes: 7 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,18 @@
"tsc": "tsc",
"build": "npm-run-all tsc copy",
"copy": "copyfiles -u 1 src/**/*.graphql dist",
"generate": "cross-env DEBUG=server* ts-node microgen",
"generate:server": "cross-env DEBUG=server* ts-node microgen",
"generate:proto": "cross-env DEBUG=server* ts-node microgen/proto.ts",
"clean:dist": "rimraf dist",
"clean:src": "rimraf src",
"server:dev": "cross-env DEBUG=server* NODE_ENV=development npm run start:watch",
"server:prod": "cross-env DEBUG=server* NODE_ENV=production npm-run-all clean:dist build clean:src start",
"server:docker": "docker-compose up --build",
"start": "node .",
"start:watch": "nodemon",
"start:dev": "npm-run-all generate server:dev",
"start:prod": "npm-run-all generate server:prod"
"start:dev": "npm-run-all generate:proto generate:server server:dev",
"start:prod": "npm-run-all generate:proto generate:server server:prod",
"start:docker": "npm-run-all generate:proto server:docker"
},
"_moduleAliases": {
"@app": "./dist"
Expand Down Expand Up @@ -74,4 +77,4 @@
"ts-node": "^8.8.1",
"typescript": "^3.8.3"
}
}
}
7 changes: 5 additions & 2 deletions scripts/generate-protoc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,22 @@ export const generateProto = () => {
}

const files = readdirSync(join(ROOT_DIR, 'schema'))

files.map(file => {
const FILE = file.split('.proto').join('')

if (!existsSync(join(PROTO_DEST, `${FILE}`))) {
mkdirSync(join(PROTO_DEST, `${FILE}`))
}
cp.execSync(`protoc-gen-grpc \
cp.execSync(`./scripts/protoc \
--plugin=protoc-gen-grpc=./node_modules/protoc-gen-grpc-ts/bin/grpc_node_plugin \
--js_out=import_style=commonjs,binary:${PROTO_DEST}/${FILE} \
--grpc_out=${PROTO_DEST}/${FILE} \
--proto_path ./schema \
${file}`)

cp.execSync(`protoc-gen-grpc-ts \
cp.execSync(`./scripts/protoc \
--plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts-plugin \
--ts_out=service=true:${PROTO_DEST}/${FILE} \
--proto_path ./schema \
${file}`)
Expand Down
Binary file added scripts/protoc
Binary file not shown.

0 comments on commit e2fa39d

Please sign in to comment.