From a174e19e69b93083915d3f5557d07032aaebfddb Mon Sep 17 00:00:00 2001 From: JadeKim042386 Date: Wed, 28 Aug 2024 01:08:19 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20Docker=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC=20=EB=B0=8F=20=EC=84=A4=EC=A0=95=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20-=20=EA=B0=9C=EB=B0=9C=20=ED=99=98=EA=B2=BD?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=82=AC=EC=9A=A9=ED=95=A0=20Docker=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=ED=8C=8C=EC=9D=BC=EB=93=A4=EC=9D=84=20doc?= =?UTF-8?q?ker=20=EB=94=94=EB=A0=89=ED=86=A0=EB=A6=AC=EC=97=90=20=EC=A0=95?= =?UTF-8?q?=EB=A6=AC=20-=20db,=20redis,=20rabbitmq,=20nginx,=20api,=20recs?= =?UTF-8?q?ys=20=EB=AA=A8=EB=91=90=20=EB=B0=B0=ED=8F=AC=EB=90=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=EB=A5=BC=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EC=97=AC=20=EC=BB=A8=ED=85=8C=EC=9D=B4=EB=84=88?= =?UTF-8?q?=EB=A5=BC=20=EC=8B=A4=ED=96=89=ED=95=98=EB=8A=94=20docker-compo?= =?UTF-8?q?se.yml=EB=A5=BC=20=EB=94=B0=EB=A1=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 134 ++++++++++++++++++ Dockerfile => docker/api/Dockerfile | 4 +- .../database}/mariadb/Dockerfile | 0 .../database}/mariadb/conf.d/my.cnf | 0 .../mariadb/initdb.d/create_table.sql | 0 .../mariadb/initdb.d/insert_data.sql | 0 .../database}/redis/Dockerfile | 0 .../database}/redis/redis.conf | 0 {database => docker}/docker-compose-db.yml | 12 +- .../docker-compose-local.yml | 16 ++- {nginx => docker/nginx}/Dockerfile | 0 {nginx => docker/nginx}/default.conf | 0 {rabbitmq => docker/rabbitmq}/Dockerfile | 0 13 files changed, 152 insertions(+), 14 deletions(-) create mode 100644 docker-compose.yml rename Dockerfile => docker/api/Dockerfile (68%) rename {database => docker/database}/mariadb/Dockerfile (100%) rename {database => docker/database}/mariadb/conf.d/my.cnf (100%) rename {database => docker/database}/mariadb/initdb.d/create_table.sql (100%) rename {database => docker/database}/mariadb/initdb.d/insert_data.sql (100%) rename {database => docker/database}/redis/Dockerfile (100%) rename {database => docker/database}/redis/redis.conf (100%) rename {database => docker}/docker-compose-db.yml (72%) rename docker-compose-local.yml => docker/docker-compose-local.yml (90%) rename {nginx => docker/nginx}/Dockerfile (100%) rename {nginx => docker/nginx}/default.conf (100%) rename {rabbitmq => docker/rabbitmq}/Dockerfile (100%) diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..4c99eb01 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,134 @@ +services: + fresh-trash-database: + container_name: fresh-trash-database + cpus: 1 + mem_limit: 1g + healthcheck: + test: ["CMD", "mysqladmin", "ping", "--password=$MARIADB_ROOT_PASSWORD"] + interval: 40s # healthcheck 실행 간격 + timeout: 30s # healthcheck 완료되기 기다리는 시간 + retries: 3 # healthcheck 실패한 후 재시도할 횟수 + start_period: 60s # 초기화 시간 (안정적으로 실행되기까지 대기하는 시간) + image: jade0423786/fresh-trash-database:${DB_VERSION} + environment: + - MARIADB_DATABASE=fresh_trash + - MARIADB_USER=${SPRING_DATASOURCE_USER} + - MARIADB_PASSWORD=${SPRING_DATASOURCE_PASSWORD} + - MARIADB_ROOT_PASSWORD=${SPRING_DATASOURCE_ROOT_PASSWORD} + volumes: + - ./docker/database/mariadb/conf.d:/etc/mysql + - ./docker/database/mariadb/initdb.d:/docker-entrypoint-initdb.d + ports: + - "3307:3307" + networks: + - docker_app + fresh-trash-redis: + container_name: fresh-trash-redis + cpus: 1 + mem_limit: 500m + image: jade0423786/fresh-trash-redis:${REDIS_VERSION} + ports: + - "6379:6379" + networks: + - docker_app + fresh-trash-rabbitmq: + container_name: fresh-trash-rabbitmq + cpus: 1 + mem_limit: 1g + healthcheck: + # https://www.rabbitmq.com/docs/monitoring#health-checks + test: rabbitmq-diagnostics -q ping + interval: 40s # healthcheck 실행 간격 + timeout: 30s # healthcheck 완료되기 기다리는 시간 + retries: 3 # healthcheck 실패한 후 재시도할 횟수 + start_period: 60s # 초기화 시간 (안정적으로 실행되기까지 대기하는 시간) + image: jade0423786/fresh-trash-rabbitmq:${RABBITMQ_VERSION} + environment: + - RABBITMQ_DEFAULT_USER=${AMQP_USER} + - RABBITMQ_DEFAULT_PASS=${AMQP_PASS} + ports: + - "15672:15672" + - "61613:61613" + - "5672:5672" + networks: + - docker_app + fresh-trash-nginx: + container_name: fresh-trash-nginx + image: jade0423786/fresh-trash-nginx:${NGINX_VERSION} + cpus: 1 + mem_limit: 1g + depends_on: + - fresh-trash-api + ports: + - "80:80" + extra_hosts: + - "host.docker.internal:host-gateway" + networks: + - docker_app + fresh-trash-api: + image: jade0423786/fresh-trash-api:${API_VERSION} + container_name: fresh-trash-api + cpus: 2 + mem_limit: 4g + depends_on: + fresh-trash-rabbitmq: + condition: service_healthy + fresh-trash-database: + condition: service_healthy + environment: + - DB_URL=${DB_URL} + - DB_USERNAME=${DB_USERNAME} + - DB_PASSWORD=${DB_PASSWORD} + - LOCAL_FILE_ABS_PATH=${LOCAL_FILE_ABS_PATH} + - TOKEN_SECRET_KEY=${TOKEN_SECRET_KEY} + - TOKEN_ACCESS_EXPIRED_MS=${TOKEN_ACCESS_EXPIRED_MS} + - GOOGLE_OAUTH_CLIENT_ID=${GOOGLE_OAUTH_CLIENT_ID} + - GOOGLE_OAUTH_CLIENT_SECRET=${GOOGLE_OAUTH_CLIENT_SECRET} + - NAVER_OAUTH_CLIENT_ID=${NAVER_OAUTH_CLIENT_ID} + - NAVER_OAUTH_CLIENT_SECRET=${NAVER_OAUTH_CLIENT_SECRET} + - KAKAO_OAUTH_CLIENT_ID=${KAKAO_OAUTH_CLIENT_ID} + - KAKAO_OAUTH_CLIENT_SECRET=${KAKAO_OAUTH_CLIENT_SECRET} + - S3_BUCKET_NAME=${S3_BUCKET_NAME} + - S3_ACCESS_KEY=${S3_ACCESS_KEY} + - S3_SECRET_KEY=${S3_SECRET_KEY} + - AMQP_HOST=${AMQP_HOST} + - AMQP_PORT=${AMQP_PORT} + - AMQP_USER=${AMQP_USER} + - AMQP_PASS=${AMQP_PASS} + - REDIS_HOST=${REDIS_HOST} + - REDIS_PORT=${REDIS_PORT} + - OAUTH2_REDIRECT_URI=${OAUTH2_REDIRECT_URI} + - MAIL_USERNAME=${MAIL_USERNAME} + - MAIL_PASSWORD=${MAIL_PASSWORD} + - API_KEY=${API_KEY} + - WEBHOOK_SLACK_URL=${WEBHOOK_SLACK_URL} + - REC_SYS_HOST=${REC_SYS_HOST} + - PROFILE_ENDPOINT=${PROFILE_ENDPOINT} + - REC_PRODUCT_PURCHASE=${REC_PRODUCT_PURCHASE} + - REC_AUCTION_PURCHASE=${REC_AUCTION_PURCHASE} + - RECOMMEND_PRODUCT=${RECOMMEND_PRODUCT} + - RECOMMEND_AUCTION=${RECOMMEND_AUCTION} + - REC_LIMIT=${REC_LIMIT} + ports: + - "8080:8080" + - "8090:8090" + networks: + - docker_app + fresh-trash-recsys: + image: jade0423786/fresh-trash-recsys:${RECSYS_VERSION} + container_name: fresh-trash-recsys + cpus: 1 + mem_limit: 1g + depends_on: + fresh-trash-database: + condition: service_healthy + ports: + - "9080:9080" + networks: + - docker_app + +networks: + docker_app: + driver: bridge + + diff --git a/Dockerfile b/docker/api/Dockerfile similarity index 68% rename from Dockerfile rename to docker/api/Dockerfile index 9e516667..63f6441e 100644 --- a/Dockerfile +++ b/docker/api/Dockerfile @@ -1,5 +1,7 @@ FROM amazoncorretto:17 RUN mkdir -p deploy/imgs WORKDIR /deploy -COPY ./build/libs/fresh-trash-backend-1.1.2.jar api.jar + +ARG API_VERSION +COPY ./build/libs/fresh-trash-backend-${API_VERSION}.jar api.jar ENTRYPOINT ["java", "-jar", "/deploy/api.jar", "--spring.profiles.active=local", "--logging.level.root=error"] diff --git a/database/mariadb/Dockerfile b/docker/database/mariadb/Dockerfile similarity index 100% rename from database/mariadb/Dockerfile rename to docker/database/mariadb/Dockerfile diff --git a/database/mariadb/conf.d/my.cnf b/docker/database/mariadb/conf.d/my.cnf similarity index 100% rename from database/mariadb/conf.d/my.cnf rename to docker/database/mariadb/conf.d/my.cnf diff --git a/database/mariadb/initdb.d/create_table.sql b/docker/database/mariadb/initdb.d/create_table.sql similarity index 100% rename from database/mariadb/initdb.d/create_table.sql rename to docker/database/mariadb/initdb.d/create_table.sql diff --git a/database/mariadb/initdb.d/insert_data.sql b/docker/database/mariadb/initdb.d/insert_data.sql similarity index 100% rename from database/mariadb/initdb.d/insert_data.sql rename to docker/database/mariadb/initdb.d/insert_data.sql diff --git a/database/redis/Dockerfile b/docker/database/redis/Dockerfile similarity index 100% rename from database/redis/Dockerfile rename to docker/database/redis/Dockerfile diff --git a/database/redis/redis.conf b/docker/database/redis/redis.conf similarity index 100% rename from database/redis/redis.conf rename to docker/database/redis/redis.conf diff --git a/database/docker-compose-db.yml b/docker/docker-compose-db.yml similarity index 72% rename from database/docker-compose-db.yml rename to docker/docker-compose-db.yml index ba73458c..6dfc2fa1 100644 --- a/database/docker-compose-db.yml +++ b/docker/docker-compose-db.yml @@ -3,18 +3,18 @@ services: container_name: fresh-trash-database build: dockerfile: Dockerfile - context: ./mariadb + context: database/mariadb cpus: 1 mem_limit: 1g - image: fresh-trash-database:0.0.1 + image: fresh-trash-database:${DB_VERSION} environment: - MARIADB_DATABASE=fresh_trash - MARIADB_USER=${SPRING_DATASOURCE_USER} - MARIADB_PASSWORD=${SPRING_DATASOURCE_PASSWORD} - MARIADB_ROOT_PASSWORD=${SPRING_DATASOURCE_ROOT_PASSWORD} volumes: - - ./mariadb/conf.d:/etc/mysql - - ./mariadb/initdb.d:/docker-entrypoint-initdb.d + - ./database/mariadb/conf.d:/etc/mysql + - ./database/mariadb/initdb.d:/docker-entrypoint-initdb.d ports: - "3307:3307" networks: @@ -23,10 +23,10 @@ services: container_name: fresh-trash-redis build: dockerfile: Dockerfile - context: ./redis + context: database/redis cpus: 1 mem_limit: 500m - image: fresh-trash-redis:0.0.1 + image: fresh-trash-redis:${REDIS_VERSION} ports: - "6379:6379" networks: diff --git a/docker-compose-local.yml b/docker/docker-compose-local.yml similarity index 90% rename from docker-compose-local.yml rename to docker/docker-compose-local.yml index 7e492502..dac63d19 100644 --- a/docker-compose-local.yml +++ b/docker/docker-compose-local.yml @@ -3,7 +3,7 @@ services: container_name: fresh-trash-rabbitmq build: dockerfile: Dockerfile - context: ./rabbitmq + context: rabbitmq cpus: 1 mem_limit: 1g healthcheck: @@ -13,7 +13,7 @@ services: timeout: 30s # healthcheck 완료되기 기다리는 시간 retries: 3 # healthcheck 실패한 후 재시도할 횟수 start_period: 60s # 초기화 시간 (안정적으로 실행되기까지 대기하는 시간) - image: fresh-trash-rabbitmq:0.0.1 + image: fresh-trash-rabbitmq:${RABBITMQ_VERSION} environment: - RABBITMQ_DEFAULT_USER=${AMQP_USER} - RABBITMQ_DEFAULT_PASS=${AMQP_PASS} @@ -25,10 +25,10 @@ services: - docker_app fresh-trash-nginx: container_name: fresh-trash-nginx - image: fresh-trash-nginx:0.0.1 + image: fresh-trash-nginx:${NGINX_VERSION} build: dockerfile: Dockerfile - context: ./nginx + context: nginx cpus: 1 mem_limit: 1g depends_on: @@ -40,11 +40,13 @@ services: networks: - docker_app fresh-trash-api: - image: fresh-trash-api:1.0.0 + image: fresh-trash-api:${API_VERSION} container_name: fresh-trash-api build: - dockerfile: Dockerfile - context: ./ + dockerfile: docker/api/Dockerfile + context: ../ + args: + - API_VERSION=${API_VERSION} cpus: 2 mem_limit: 4g depends_on: diff --git a/nginx/Dockerfile b/docker/nginx/Dockerfile similarity index 100% rename from nginx/Dockerfile rename to docker/nginx/Dockerfile diff --git a/nginx/default.conf b/docker/nginx/default.conf similarity index 100% rename from nginx/default.conf rename to docker/nginx/default.conf diff --git a/rabbitmq/Dockerfile b/docker/rabbitmq/Dockerfile similarity index 100% rename from rabbitmq/Dockerfile rename to docker/rabbitmq/Dockerfile