Wondoo
프로젝트를 진행하고 있는데 사용하는 데이터베이스의 종류가 매우 많습니다.
기본적인 데이터를 위해서 MySQL
과 캐싱 및 토큰 관리를 위한 Redis
, 비 정규화된 데이터를 관리하기 위해서 MongoDB
를 사용할 예정입니다.
그래서 위의 데이터베이스들을 AWS EC2
환경에서 동작시키도록 할 예정입니다.
데이터베이스들을 한번에 관리하기 위해서 docker-compose
로 구동시킬 것 입니다.
sudo apt install docker-compose
만약 docker-compose
가 설치되어 있지 않다면 해당 명령어를 사용하여 설치합니다.
먼저 정규화된 데이터를 관리하기 위해 사용하는 데이터베이스는 MySQL
로 선정하였습니다.
해당 데이터베이스를 docker-compose
파일에 작성해보도록 하겠습니다.
먼저 docker-compose
파일을 관리하기 위한 폴더를 만들어보도록 하겠습니다.
해당 위치에서 진행하도록 하겠습니다.
편의성을 위해서 로컬 PC에서 VSCode
를 사용하여 작성한 뒤 vi
에디터를 사용하여 옮기도록 하겠습니다.
version: "3"
services:
mysql_container:
image: mysql
ports:
- ${MYSQL_BINDING_PORT}:3306
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- TZ=Asia/Seoul
volumes:
- ${MYSQL_DATA_PATH}:/var/lib/mysql
- ${MYSQL_CUSTOM_CONFIG_PATH}:/etc/mysql/conf.d
restart: on-failure
다음과 같이 작성하였고 해당 내용을 AWS EC2
로 옮겨서 저장하도록 하겠습니다.
데이터를 유지하기 위해서 아래 사진과 같은 경로에 폴더를 만들어 연결시키도록 하겠습니다.
.env
작성docker-compose
파일에서 환경변수를 사용하기 위해서 .env
파일을 생성합니다.
캐싱과 토큰 관리를 위해서 redis
를 선정하였습니다.
version: "3"
services:
mysql_container:
...
redis_container:
image: redis
ports:
- ${REDIS_BINDING_PORT}:6379
volumes:
- ${REDIS_DATA_PATH}:/data
- ${REDIS_CONFIG_PATH}:/usr/local/conf/redis.conf
restart: on-failure
mysql
과 함께 작성하도록 합니다.
redis 도 동일하게 데이터를 저장하기 위한 폴더를 생성합니다.
.env
작성비 정규화된 데이터를 다루기위해서 MongoDB
를 선택하였습니다.
version: "3"
services:
mysql_container:
...
redis_container:
...
mongodb_container:
container_name: mongodb_container
image: mongo
ports:
- ${MONGO_BINDING_PORT}:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}
- MONGO_INITDB_DATABASE=${MONGO_INITDB_DATABASE}
volumes:
- ${MONGO_DATA_PATH}:/data/db
mongodb_express_container:
image: mongo-express
container_name: mongodb_express_container
ports:
- ${MONGO_EXPRESS_BINDING_PORT}:8081
environment:
- ME_CONFIG_MONGODB_URL=mongodb://${MONGO_INITDB_ROOT_USERNAME}:${MONGO_INITDB_ROOT_PASSWORD}@${IP_ADDRESS}:${MONGO_BINDING_PORT}
- ME_CONFIG_BASICAUTH_USERNAME=${ME_CONFIG_BASICAUTH_USERNAME}
- ME_CONFIG_BASICAUTH_PASSWORD=${ME_CONFIG_BASICAUTH_PASSWORD}
depends_on:
- mongodb_container
mongodb
와 시각화를 위한 mongodb-express
를 위한 설정을 작성하였습니다.
.evn
작성이제 정상적으로 실행하기 위해 docker-compose.yml
파일이 있는 곳 에서 아래와 같은 명령어를 실행합니다.
docker-compose up -d
정상적으로 실행중인 것을 확인할 수 있습니다.
version: "3"
services:
mysql_container:
container_name: mysql_container
image: mysql
ports:
- ${MYSQL_BINDING_PORT}:3306
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- TZ=Asia/Seoul
volumes:
- ${MYSQL_DATA_PATH}:/var/lib/mysql
- ${MYSQL_CUSTOM_CONFIG_PATH}:/etc/mysql/conf.d
restart: on-failure
redis_container:
container_name: redis_container
image: redis
ports:
- ${REDIS_BINDING_PORT}:6379
volumes:
- ${REDIS_DATA_PATH}:/data
- ${REDIS_CONFIG_PATH}:/usr/local/conf/redis.conf
restart: on-failure
mongodb_container:
container_name: mongodb_container
image: mongo
ports:
- ${MONGO_BINDING_PORT}:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}
- MONGO_INITDB_DATABASE=${MONGO_INITDB_DATABASE}
volumes:
- ${MONGO_DATA_PATH}:/data/db
mongodb_express_container:
image: mongo-express
container_name: mongodb_express_container
ports:
- ${MONGO_EXPRESS_BINDING_PORT}:8081
environment:
- ME_CONFIG_MONGODB_URL=mongodb://${MONGO_INITDB_ROOT_USERNAME}:${MONGO_INITDB_ROOT_PASSWORD}@${IP_ADDRESS}:${MONGO_BINDING_PORT}
- ME_CONFIG_BASICAUTH_USERNAME=${ME_CONFIG_BASICAUTH_USERNAME}
- ME_CONFIG_BASICAUTH_PASSWORD=${ME_CONFIG_BASICAUTH_PASSWORD}
depends_on:
- mongodb_container
.env
.env
파일은 다음과 같습니다.
value에 필요한 값을 넣어주시면 됩니다.
#####
# MySQL
#####
MYSQL_BINDING_PORT=
MYSQL_ROOT_PASSWORD=
MYSQL_USER=
MYSQL_PASSWORD=
MYSQL_DATA_PATH=
MYSQL_CUSTOM_CONFIG_PATH=
#####
# Redis
#####
REDIS_BINDING_PORT=
REDIS_DATA_PATH=
REDIS_CONFIG_PATH=
#####
# MongoDB
#####
MONGO_BINDING_PORT=
MONGO_INITDB_ROOT_USERNAME=
MONGO_INITDB_ROOT_PASSWORD=
MONGO_INITDB_DATABASE=
MONGO_DATA_PATH=
#####
# MongoDB Express
#####
MONGO_EXPRESS_BINDING_PORT=
ME_CONFIG_BASICAUTH_USERNAME=
ME_CONFIG_BASICAUTH_PASSWORD=
IP_ADDRESS=