반응형

개요

 

docker-compose.yml 파일에서 postgresql 도 같이 묶어서 개발 환경을 손쉽게 구축하기 쉽게 구현하였지만, 실제 프로덕션 환경에서는 외부에 존재하는 postgresql에 접근해야 한다.

이에 따라, 로컬에서도 외부 postgresql에 접근하여 테스트가 가능하게 하고, prod env를 따로 설정하여 배포를 손쉽게 처리하기 위하여 Enviroment 관리를 진행한다.

 

Environment 종류

 

기본 설정된 Env 파일들은 다음과 같습니다.
해당 파일들은 ignore 대상이며, git repository 에서 변수로 관리 됩니다.

  • .env
  • .env.dev
  • .env.local
  • .env.prod

 

사용 Environment 변경

 

기본적으로 아무런 옵션을 주지 않으면 .env 파일을 Enviroment 로 처리합니다.

docker-compose up 시 env file 변경에는 --env-file 옵션을 사용 합니다.

php artisan 시 env file 변경에는 -env 옵션을 사용 합니다.

# docker compose env file change sample
$ docker-compose --env-file .env.prod up

# php artisan env file change sample
$ php artisan migrate:fresh --seed -env=prod

 

docker-compose-prod.yml

 

마지막으로, prod 용 docker compose 파일을 생성하고 pgsql 부분을 제거 합니다.

생성된 compose 파일은 다음과 같은 명령어로 실행 됩니다.

bash
$ docker compose -f docker-compose-prod.yml up

 

bash
services: laravel.prod: build: context: ./vendor/laravel/sail/runtimes/8.2 dockerfile: Dockerfile args: WWWGROUP: '${WWWGROUP}' image: sail-8.2/app extra_hosts: - 'host.docker.internal:host-gateway' ports: - '${APP_PORT:-80}:80' - '${VITE_PORT:-5173}:${VITE_PORT:-5173}' environment: WWWUSER: '${WWWUSER}' LARAVEL_SAIL: 1 XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}' XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}' IGNITION_LOCAL_SITES_PATH: '${PWD}' volumes: - '.:/var/www/html' networks: - sail graphql-engine: image: hasura/graphql-engine:v2.35.0 ports: - '8080:8080' restart: always environment: ## postgres database to store Hasura metadata HASURA_GRAPHQL_METADATA_DATABASE_URL: postgres://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT:-5432}/${DB_DATABASE} HASURA_GRAPHQL_DATABASE_URL: postgres://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT:-5432}/${DB_DATABASE} ## enable the console served by server HASURA_GRAPHQL_ENABLE_CONSOLE: 'true' # set to "false" to disable console ## enable debugging mode. It is recommended to disable this in production HASURA_GRAPHQL_DEV_MODE: 'true' HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log ## uncomment next line to set an admin secret # HASURA_GRAPHQL_ADMIN_SECRET: ${HASURA_GRAPHQL_ADMIN_SECRET} # HASURA_GRAPHQL_UNAUTHORIZED_ROLE: public volumes: - './hasura/metadata:/hasura-metadata' networks: - sail networks: sail: driver: bridge volumes: sail-pgsql: driver: local

 

반응형