diff --git a/.gitignore b/.gitignore index 22f55ad..a60d5fd 100644 --- a/.gitignore +++ b/.gitignore @@ -32,4 +32,5 @@ lerna-debug.log* !.vscode/settings.json !.vscode/tasks.json !.vscode/launch.json -!.vscode/extensions.json \ No newline at end of file +!.vscode/extensions.json +.env diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..ad11c24 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,18 @@ +version: '3.8' +services: + db: + image: mysql:5.7.43 + cap_add: + - SYS_NICE + restart: always + environment: + - MYSQL_DATABASE=quotes + - MYSQL_ROOT_PASSWORD=mauFJcuf5dhRMQrjj + ports: + - '3306:3306' + volumes: + - db:/var/lib/mysql + # - ./db/init.sql:/docker-entrypoint-initdb.d/init.sql +volumes: + db: + driver: local \ No newline at end of file diff --git a/env_sample b/env_sample new file mode 100644 index 0000000..38cc56a --- /dev/null +++ b/env_sample @@ -0,0 +1,9 @@ +MYSQL_DATABASE= +MYSQL_HOST= +MYSQL_PORT=3306 +MYSQL_USER= +MYSQL_PASSWORD= +DATABASE_URL= +JWT_SECRET= + + diff --git a/package-lock.json b/package-lock.json index 72cb4b9..60cc65d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,6 +38,7 @@ "@types/supertest": "^2.0.11", "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", + "dotenv-cli": "^7.3.0", "eslint": "^8.0.1", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", @@ -3695,9 +3696,36 @@ } }, "node_modules/dotenv": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", - "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/dotenv-cli": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-7.3.0.tgz", + "integrity": "sha512-314CA4TyK34YEJ6ntBf80eUY+t1XaFLyem1k9P0sX1gn30qThZ5qZr/ZwE318gEnzyYP9yj9HJk6SqwE0upkfw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "dotenv": "^16.3.0", + "dotenv-expand": "^10.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "dotenv": "cli.js" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "dev": true, "engines": { "node": ">=12" } @@ -12368,9 +12396,27 @@ } }, "dotenv": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", - "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==" + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==" + }, + "dotenv-cli": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-7.3.0.tgz", + "integrity": "sha512-314CA4TyK34YEJ6ntBf80eUY+t1XaFLyem1k9P0sX1gn30qThZ5qZr/ZwE318gEnzyYP9yj9HJk6SqwE0upkfw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "dotenv": "^16.3.0", + "dotenv-expand": "^10.0.0", + "minimist": "^1.2.6" + } + }, + "dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "dev": true }, "ecdsa-sig-formatter": { "version": "1.0.11", diff --git a/package.json b/package.json index 9bce91e..55e78e5 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,8 @@ "prebuild": "rimraf dist", "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", - "start": "nest start", - "start:dev": "nest start --watch", + "start": "dotenv -e .env -- nest start", + "start:dev": "dotenv -e .env -- nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "node dist/main", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", @@ -50,6 +50,7 @@ "@types/supertest": "^2.0.11", "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", + "dotenv-cli": "^7.3.0", "eslint": "^8.0.1", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", diff --git a/src/app.module.ts b/src/app.module.ts index cdf9270..5d02780 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -6,19 +6,28 @@ import { User } from './user/entity/user.entity'; import { UserModule } from './user/user.module'; import { ProfileModule } from './profile/profile.module'; +const MYSQL_USER: string = process.env.MYSQL_USER; +const MYSQL_PASSWORD: string = process.env.MYSQL_PASSWORD; +const MYSQL_DATABASE: string = process.env.MYSQL_DATABASE; +const MYSQL_HOST: string = process.env.MYSQL_HOST; +const MYSQL_PORT: number = parseInt(process.env.MYSQL_PORT); + @Module({ controllers: [AppController], imports: [ UserModule, TypeOrmModule.forRoot({ type: 'mysql', - host: '127.0.0.1', - port: 3306, - username: 'root', - password: null, - database: 'nestjs', + host: MYSQL_HOST, + port: MYSQL_PORT, + username: MYSQL_USER, + password: MYSQL_PASSWORD, + database: MYSQL_DATABASE, entities: [User], synchronize: true, + ssl: { + rejectUnauthorized: true, + }, }), AuthModule, ProfileModule,