MySQL, Redis, MongoDB 설치하기

Sei Kim·2024년 1월 27일
0

AWS EC2

목록 보기
5/8
post-thumbnail

들어가며


Wondoo 프로젝트를 진행하고 있는데 사용하는 데이터베이스의 종류가 매우 많습니다.
기본적인 데이터를 위해서 MySQL 과 캐싱 및 토큰 관리를 위한 Redis, 비 정규화된 데이터를 관리하기 위해서 MongoDB를 사용할 예정입니다.

그래서 위의 데이터베이스들을 AWS EC2 환경에서 동작시키도록 할 예정입니다.

데이터베이스들을 한번에 관리하기 위해서 docker-compose로 구동시킬 것 입니다.

0. docker-compose 설치


sudo apt  install docker-compose

만약 docker-compose가 설치되어 있지 않다면 해당 명령어를 사용하여 설치합니다.

1. MySQL


먼저 정규화된 데이터를 관리하기 위해 사용하는 데이터베이스는 MySQL로 선정하였습니다.

해당 데이터베이스를 docker-compose 파일에 작성해보도록 하겠습니다.

1.1. docker-compsoe


먼저 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 로 옮겨서 저장하도록 하겠습니다.

1.2. volume 폴더 생성


데이터를 유지하기 위해서 아래 사진과 같은 경로에 폴더를 만들어 연결시키도록 하겠습니다.

1.3. .env 작성


docker-compose 파일에서 환경변수를 사용하기 위해서 .env 파일을 생성합니다.

2. Redis


캐싱과 토큰 관리를 위해서 redis를 선정하였습니다.

2.1. docker-compose


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 과 함께 작성하도록 합니다.

2.2. volume 폴더 생성


redis 도 동일하게 데이터를 저장하기 위한 폴더를 생성합니다.

2.3. .env 작성


3. MongoDB


비 정규화된 데이터를 다루기위해서 MongoDB를 선택하였습니다.

3.1. docker-compose


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를 위한 설정을 작성하였습니다.

3.2. volume 폴더 생성


3.3. .evn 작성


4. 실행


이제 정상적으로 실행하기 위해 docker-compose.yml 파일이 있는 곳 에서 아래와 같은 명령어를 실행합니다.

docker-compose up -d

정상적으로 실행중인 것을 확인할 수 있습니다.

5. docker-compose.yml 정리


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

5.1. .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=

Ref


0개의 댓글