enterprise_assest_managemen.../docker-compose.yml

169 lines
3.9 KiB
YAML

# docker-compose.yml
version: '3.8'
services:
# PostgreSQL Database
postgres:
image: postgres:15
container_name: asset_mgmt_db
environment:
POSTGRES_DB: asset_management
POSTGRES_USER: directus
POSTGRES_PASSWORD: directus123
volumes:
- postgres_data:/var/lib/postgresql/data
- ./schema/init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- '5432:5432'
networks:
- asset_network
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U directus']
interval: 30s
timeout: 10s
retries: 3
# Redis for caching and sessions
redis:
image: redis:7-alpine
container_name: asset_mgmt_redis
volumes:
- redis_data:/data
ports:
- '6379:6379'
networks:
- asset_network
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 30s
timeout: 10s
retries: 3
# Directus Backend
directus:
image: directus/directus:11.5.1
container_name: asset_mgmt_backend
ports:
- '8055:8055'
volumes:
- directus_uploads:/directus/uploads
- directus_extensions:/directus/extensions
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
environment:
KEY: 'asset-mgmt-random-key-change-in-production'
SECRET: 'asset-mgmt-random-secret-change-in-production'
# Database
DB_CLIENT: 'pg'
DB_HOST: 'postgres'
DB_PORT: '5432'
DB_DATABASE: 'asset_management'
DB_USER: 'directus'
DB_PASSWORD: 'directus123'
# Cache & Session
CACHE_ENABLED: 'true'
CACHE_STORE: 'redis'
REDIS: 'redis://redis:6379'
SESSION_STORE: 'redis'
SESSION_REDIS: 'redis://redis:6379'
# CORS
CORS_ENABLED: 'true'
CORS_ORIGIN: 'http://localhost:3000,http://localhost:5173'
# Admin
ADMIN_EMAIL: 'admin@assetmanagement.com'
ADMIN_PASSWORD: 'AssetAdmin2024!'
# Email (configure for production)
EMAIL_FROM: 'noreply@assetmanagement.com'
EMAIL_TRANSPORT: 'smtp'
EMAIL_SMTP_HOST: 'smtp.gmail.com'
EMAIL_SMTP_PORT: '587'
EMAIL_SMTP_USER: ''
EMAIL_SMTP_PASSWORD: ''
# Rate Limiting
RATE_LIMITER_ENABLED: 'true'
RATE_LIMITER_STORE: 'redis'
RATE_LIMITER_REDIS: 'redis://redis:6379'
networks:
- asset_network
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:8055/server/health']
interval: 30s
timeout: 10s
retries: 3
# Custom Node API
node_api:
build:
context: ./node_api
dockerfile: Dockerfile
container_name: asset_mgmt_node_api
ports:
- '3001:3001'
depends_on:
postgres:
condition: service_healthy
directus:
condition: service_healthy
networks:
- asset_network
environment:
NODE_ENV: production
PORT: 3001
DB_HOST: postgres
DB_PORT: 5432
DB_NAME: asset_management
DB_USER: directus
DB_PASSWORD: directus123
DIRECTUS_URL: http://directus:8055
CORS_ORIGIN: http://localhost:3000,http://localhost:5173
RATE_LIMIT_WINDOW_MS: 900000
RATE_LIMIT_MAX_REQUESTS: 100
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:3001/health']
interval: 30s
timeout: 10s
retries: 3
# Frontend (Vue 3 + Vuetify) - Will be built later
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
target: production
container_name: asset_mgmt_frontend
ports:
- '3000:80'
depends_on:
directus:
condition: service_healthy
node_api:
condition: service_healthy
networks:
- asset_network
environment:
- NODE_ENV=production
volumes:
postgres_data:
driver: local
redis_data:
driver: local
directus_uploads:
driver: local
directus_extensions:
driver: local
networks:
asset_network:
driver: bridge