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