敏感性資料,如資料庫帳號密碼、key等通常不會寫死在程式碼裡,獨立出來一個config檔,在Docker裡,可以利用environment來設定這些敏感資料,environment變數只有在build階段存在。
PostgreSQL image可以指定Password環境變數,
version: '3'
services:
db:
image: 'postgres:latest'
environment:
POSTGRES_PASSWORD: secret
nest-app: # nestjs app name
restart: always
build:
context: .
dockerfile: Dockerfile.dev
ports:
- '8080:3000'
volumes:
- /usr/nestapp/node_modules
- /gitrepo/iron-nest/src:/usr/nestapp/src
- /gitrepo/iron-nest/test:/usr/nestapp/test
environment:
- DBUSER=postgres
- DBPW=secret
- DBHOST=db
- DBPORT=5432
depends_on:
- db
而對於node.js應用程式而言,環境變數可以用process.env.變數名稱 存取到
在main.ts中
import { AppModule } from './app.module';
import { Logger } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
Logger.log(`PostgreSQL Host: ${process.env.DBHOST}`);
Logger.log(`PostgreSQL User: ${process.env.DBUSER}`);
Logger.log(`PostgreSQL PW: ${process.env.DBPW}`);
Logger.log(`PostgreSQL Port: ${process.env.DBPORT}`);
}
bootstrap();
docker-compose up --build
nodejs應用程式可以讀取docker-compose所設定的環境變數