Sign inSign up

eloydsdlh/apartments-compose:latest

Manifest digest

sha256:524388853f18bbb88db9c9629442cbd001bfcbb24ff68d646067184d6eac92ea

Last pushed

5 months by eloydsdlh

Type

Compose

Manifest digest

sha256:524388853f18bbb88db9c9629442cbd001bfcbb24ff68d646067184d6eac92ea

Compose file content


services:
  # BBDD MySQL for users
  mysql-users:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-password}
      MYSQL_DATABASE: ${MYSQL_USERS_DB:-usersdb}
      MYSQL_USER: ${MYSQL_USER:-user}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-password}
    volumes:
      - mysql_users_data:/var/lib/mysql
    networks:
      - app-network
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u${MYSQL_USER:-user}", "-p${MYSQL_PASSWORD:-password}"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s

  # BBDD MySQL for apartments
  mysql-apartments:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-password}
      MYSQL_DATABASE: ${MYSQL_APARTMENTS_DB:-apartmentsdb}
      MYSQL_USER: ${MYSQL_USER:-user}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-password}
    volumes:
      - mysql_apartments_data:/var/lib/mysql
    networks:
      - app-network
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u${MYSQL_USER:-user}", "-p${MYSQL_PASSWORD:-password}"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s

  # BBDD MySQL for bookings
  mysql-bookings:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-password}
      MYSQL_DATABASE: ${MYSQL_BOOKINGS_DB:-bookingsdb}
      MYSQL_USER: ${MYSQL_USER:-user}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-password}
    volumes:
      - mysql_bookings_data:/var/lib/mysql
    networks:
      - app-network
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u${MYSQL_USER:-user}", "-p${MYSQL_PASSWORD:-password}"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s

  # BBDD MySQL for reviews
  mysql-reviews:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-password}
      MYSQL_DATABASE: ${MYSQL_BOOKINGS_DB:-reviewsdb}
      MYSQL_USER: ${MYSQL_USER:-user}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-password}
    ports:
      - "3304:3306"
    volumes:
      - mysql_reviews_data:/var/lib/mysql
    networks:
      - app-network
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u${MYSQL_USER:-user}", "-p${MYSQL_PASSWORD:-password}"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s  

  # MinIO for file storage
  minio:
    container_name: minio
    image: minio/minio:latest
    command: server /data --console-address ":9001"
    restart: always
    environment:
      MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin}
      MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin}
    ports:
      - "9000:9000"
      - "9001:9001"  # MinIO Console
    volumes:
      - minio_data:/data
    networks:
      - app-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 20s

  # MinIO config
  mc:
    image: minio/mc:latest
    depends_on:
      minio:
        condition: service_healthy
    entrypoint: >
      /bin/sh -c "
        sleep 5 &&
        mc alias set local http://minio:9000 ${MINIO_ROOT_USER:-minioadmin} ${MINIO_ROOT_PASSWORD:-minioadmin} &&
        mc mb -p local/${MINIO_BUCKET:-apartments-images} || true &&
        mc anonymous set public local/${MINIO_BUCKET:-apartments-images}
        exit 0
      "
    networks:
      - app-network

  # Jaeger for distributed traceability
  jaeger:
    image: jaegertracing/all-in-one:latest
    restart: always
    ports:
      - "16686:16686"  # UI of Jaeger
      - "4318:4318"    # OTLP HTTP
    environment:
      COLLECTOR_OTLP_ENABLED: "true"
    networks:
      - app-network

  # Main application (Backend + Frontend)
  app:
    image: eloydsdlh/apartments-app:1.0
    pull_policy: always
    restart: always
    ports:
      - "443:443"
      - "8761:8761"  # Eureka Server
    environment:
      # General config
      JAVA_OPTS: "-Xmx1024m -Xms512m"
      SPRING_PROFILES_ACTIVE: ${SPRING_PROFILE:-prod}
      
      # BBDD - Users
      USER_DB_URL: jdbc:mysql://mysql-users:3306/${MYSQL_USERS_DB:-usersdb}
      USER_DB_USERNAME: ${MYSQL_USER:-user}
      USER_DB_PASSWORD: ${MYSQL_PASSWORD:-password}
      MYSQL_USERS_DB: ${MYSQL_USERS_DB:-usersdb}
      MYSQL_USER: ${MYSQL_USER:-user}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-password}
      
      # BBDD - Apartments
      APARTMENT_DB_URL: jdbc:mysql://mysql-apartments:3306/${MYSQL_APARTMENTS_DB:-apartmentsdb}
      APARTMENT_DB_USERNAME: ${MYSQL_USER:-user}
      APARTMENT_DB_PASSWORD: ${MYSQL_PASSWORD:-password}
      MYSQL_APARTMENTS_DB: ${MYSQL_APARTMENTS_DB:-apartmentsdb}
      
      # BBDD - Bookings
      BOOKING_DB_URL: jdbc:mysql://mysql-bookings:3306/${MYSQL_BOOKINGS_DB:-bookingsdb}
      BOOKING_DB_USERNAME: ${MYSQL_USER:-user}
      BOOKING_DB_PASSWORD: ${MYSQL_PASSWORD:-password}
      MYSQL_BOOKINGS_DB: ${MYSQL_BOOKINGS_DB:-bookingsdb}

      # BBDD - Reviews
      REVIEW_DB_URL: jdbc:mysql://mysql-reviews:3306/${MYSQL_REVIEWS_DB:-reviewsdb}
      REVIEW_DB_USERNAME: ${MYSQL_USER:-user}
      REVIEW_DB_PASSWORD: ${MYSQL_PASSWORD:-password}
      MYSQL_REVIEWS_DB: ${MYSQL_REVIEWS_DB:-reviewsdb}
      
      # MinIO
      MINIO_URL: http://minio:9000
      MINIO_EXTERNAL_URL: ${MINIO_EXTERNAL_URL:-https://localhost:443/minio}
      MINIO_ACCESS_KEY: ${MINIO_ROOT_USER:-minioadmin}
      MINIO_SECRET_KEY: ${MINIO_ROOT_PASSWORD:-minioadmin}
      MINIO_BUCKET: ${MINIO_BUCKET:-apartments-images}
      
      # JWT
      JWT_SECRET: ${JWT_SECRET:-Xv5s7JxGg9YhQwD8M1lA0VhG7yJrL6hE9F1N8KxV2bW3ZpQxUsyR7Cj4KsE8YfHd}
      
      # SSL/HTTPS
      SERVER_SSL_KEY_STORE: ${SSL_KEY_STORE:-classpath:keystore.p12}
      SERVER_SSL_KEY_STORE_PASSWORD: ${SSL_KEY_STORE_PASSWORD:-changeit}
      SERVER_SSL_KEY_STORE_TYPE: ${SSL_KEY_STORE_TYPE:-PKCS12}
      SERVER_SSL_KEY_ALIAS: ${SSL_KEY_ALIAS:-apartments}
      
      # Jaeger/OTLP
      OTLP_ENDPOINT: http://jaeger:4318

      # Email configuration
      MAIL_USERNAME: ${MAIL_USERNAME}
      MAIL_PASSWORD: ${MAIL_PASSWORD}
      
    depends_on:
      mysql-users:
        condition: service_healthy
      mysql-apartments:
        condition: service_healthy
      mysql-bookings:
        condition: service_healthy
      mysql-reviews:
          condition: service_healthy
      minio:
        condition: service_healthy
      jaeger:
        condition: service_started
    networks:
      - app-network
    healthcheck:
      test: ["CMD", "curl", "-fk", "https://localhost:443/actuator/health"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 90s

volumes:
  mysql_users_data:
    driver: local
  mysql_apartments_data:
    driver: local
  mysql_bookings_data:
    driver: local
  mysql_reviews_data:
    driver: local
  minio_data:
    driver: local

networks:
  app-network:
    driver: bridge

Docker commands

docker compose -f oci://eloydsdlh/apartments-compose:latest up

Use the above command to pull and run the Compose file. Learn more.

Images used

Image + 1 more

MySQL is a widely used, open-source relational database management system (RDBMS).


Pulls

1B+

Stars

16185

Last Updated

4 days

Image

Single image that runs all of Jaeger backend components and UI in one container


Pulls

500M+

Stars

185

Last Updated

10 months

Image + 1 more


Pulls

2.7K

Stars

0

Last Updated

4 months