Docker Setup

Our project uses Docker and Docker Compose for containerization and orchestration. The setup consists of multiple services working together to provide a complete application stack.

Service Architecture

Core Services

Database (MariaDB)
  • Image: mariadb:11.4.4

  • Port: 3306

  • Persistent volume for data storage

  • Initialized with custom SQL script

Message Queue (RabbitMQ)
  • Image: rabbitmq:4.0.4-management-alpine

  • Ports: 5672 (AMQP), 15672 (Management UI)

  • Custom configuration via rabbitmq.conf

  • Health monitoring enabled

Server
  • Custom Golang-based API server

  • Port: 8080

  • Dependencies: MariaDB, RabbitMQ

  • Health endpoint monitoring

  • SSL certificate volume mount

Consumer Services

Action Consumer
  • Processes action events from RabbitMQ

  • Depends on server and message queue

  • Shares environment with main server

Reaction Consumer
  • Handles reaction events from RabbitMQ

  • Depends on server and message queue

  • Shares environment with main server

Client Services

Web Client
  • React-based frontend

  • Port: ${VITE_PORT} (default: 8081)

  • Nginx-based serving

  • Access to mobile builds for APK distribution

  • Health monitoring enabled

Mobile Client
  • Flutter-based mobile application

  • Builds Android APK

  • Shares build output with web client

  • No persistent runtime container

Volume Management

Persistent Volumes

  • mariadb_data: Database persistence

  • mobile_builds: APK distribution between containers

  • ssl: SSL certificates (read-only)

Environment Configuration

Each service uses dedicated .env files:

  • .env: Root environment variables

  • server/.env: Server-specific configuration

  • client_web/.env: Web client configuration

  • client_mobile/.env: Mobile client configuration

Deployment Profiles

The setup supports different deployment profiles:

server
  • MariaDB

  • RabbitMQ

  • Server + Consumers

  • Healthcheck container

web
  • Server profile services

  • Web client

  • Healthcheck container

mobile
  • Server profile services

  • Mobile client builder

  • Healthcheck container

full
  • All services

  • Complete healthcheck

Network Configuration

All services communicate through the area_network bridge network, providing isolated container communication.

Health Monitoring

Each major service includes health checks:

  • MariaDB: Database connection check

  • RabbitMQ: Management API check

  • Server: HTTP endpoint check

  • Web Client: HTTPS endpoint check

Usage

Basic Commands:

# Start all services
make start

# Start specific profile
make start-web
make start-mobile
make start-server

# Build services
make build

# Stop all services
make stop

# View logs
make logs

Access Points

  • Web Client: https://localhost:8081

  • API Server: http://localhost:8080

  • RabbitMQ UI: http://localhost:15672

  • Mobile APK: https://localhost:8081/mobile_builds/client.apk