services: mongodb: container_name: freeleaps2-mongodb-alpha image: mongo:latest profiles: [ alpha ] restart: always ports: - ${MONGODB_PORT}:${MONGODB_PORT} volumes: - freeleaps2-mongodb-data:/data/db networks: - freeleaps2-network rabbitmq: container_name: freeleaps2-rabbitmq image: rabbitmq:3.13 profiles: [ alpha, rabbitmq ] restart: always ports: - ${RABBITMQ_PORT}:${RABBITMQ_PORT} - ${RABBITMQ_PORT_1}:${RABBITMQ_PORT_1} volumes: - freeleaps2-rabbitmq-data:/var/lib/rabbitmq networks: - freeleaps2-network frontend: container_name: freeleaps2-frontend build: context: ${FRONTEND_HOME} args: CONTAINER_APP_ROOT: ${CONTAINER_APP_ROOT} FRONTEND_PORT: ${FRONTEND_PORT} profiles: [ prod, alpha ] restart: always ports: - ${FRONTEND_PORT}:${FRONTEND_PORT} depends_on: - backend networks: - freeleaps2-network chat: container_name: freeleaps-chat build: context: ${CHAT_HOME} args: CONTAINER_APP_ROOT: ${CONTAINER_APP_ROOT} profiles: [ prod, alpha ] restart: always ports: - ${CHAT_PORT}:${CHAT_PORT} environment: - MONGODB_URI=${MONGODB_URI} - MONGODB_NAME=freeleaps2 - RABBITMQ_HOST=${RABBITMQ_HOSTNAME} - RABBITMQ_PORT=${RABBITMQ_PORT} - TZ=Asia/Shanghai command: # Use a conditional check for RabbitMQ in alpha profile - /bin/sh - -c - | if [[ \"${RABBITMQ_HOST}\" == 'freeleaps2-rabbitmq' ]]; then while ! nc -z freeleaps2-rabbitmq ${RABBITMQ_PORT}; do echo "Waiting for RabbitMQ to start..." sleep 1 done echo "RabbitMQ started" fi uvicorn main:app --host=0.0.0.0 --port=${CHAT_PORT} --workers 4 --timeout-keep-alive 120 --log-level info networks: - freeleaps2-network backend: container_name: freeleaps2-backend build: context: ${BACKEND_HOME} args: CONTAINER_APP_ROOT: ${CONTAINER_APP_ROOT} profiles: [ prod, alpha ] restart: always environment: - CERT_PATH=/app/certs - EMAIL_FROM=${EMAIL_FROM} - MONGODB_URI=${MONGODB_URI} - MONGODB_NAME=freeleaps2 - STRIPE_API_KEY=${STRIPE_API_KEY} - STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET} - STRIPE_ACCOUNT_WEBHOOK_SECRET=${STRIPE_ACCOUNT_WEBHOOK_SECRET} - SITE_URL_ROOT=${SITE_URL_ROOT} - JWT_SECRET_KEY=${JWT_SECRET_KEY} - FREELEAPS_CHAT_ENDPOINT=${FREELEAPS_CHAT_ENDPOINT} - RABBITMQ_HOST=${RABBITMQ_HOSTNAME} - RABBITMQ_PORT=${RABBITMQ_PORT} - LOG_BASE_PATH=${LOG_BASE_PATH} - BACKEND_LOG_FILE_NAME=${BACKEND_LOG_FILE_NAME} - APPLICATION_ACTIVITY_LOG=${APPLICATION_ACTIVITY_LOG} - USER_ACTIVITY_LOG=${USER_ACTIVITY_LOG} - BACKEND_PORT=${BACKEND_PORT} - FREELEAPS_ENV=${FREELEAPS_ENV} - FREELEAPS_DEVSVC_ENDPOINT=${FREELEAPS_DEVSVC_ENDPOINT} - FREELEAPS_CONTENT_ENDPOINT=${FREELEAPS_CONTENT_ENDPOINT} - FREELEAPS_PAYMENT_ENDPOINT=${FREELEAPS_PAYMENT_ENDPOINT} - FREELEAPS_CENTRAL_STORAGE_ENDPOINT=${FREELEAPS_CENTRAL_STORAGE_ENDPOINT} - FREELEAPS_AUTHENTICATION_ENDPOINT=${FREELEAPS_AUTHENTICATION_ENDPOINT} - CERT_PATH=${CERT_PATH} - KAFKA_SERVER_URL=${KAFKA_SERVER_URL} ports: - ${BACKEND_PORT}:${BACKEND_PORT} command: # Use a conditional check for RabbitMQ in alpha profile - /bin/sh - -c - | if [[ \"${RABBITMQ_HOST}\" == 'freeleaps2-rabbitmq' ]]; then while ! nc -z freeleaps2-rabbitmq ${RABBITMQ_PORT}; do echo "Waiting for RabbitMQ to start..." sleep 1 done echo "RabbitMQ started" fi uvicorn freeleaps.webapi.main:app --host=0.0.0.0 --port=${BACKEND_PORT} --workers 4 --timeout-keep-alive 120 --log-level info networks: - freeleaps2-network volumes: - /secure/certs:/app/certs - type: bind source: $DOCKER_BACKEND_LOG_HOME target: $LOG_BASE_PATH volumes: freeleaps2-mongodb-data: freeleaps2-rabbitmq-data: networks: freeleaps2-network: driver: bridge