169 lines
3.9 KiB
YAML
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
|