fix(ui): fix layout alignment in AcceptModal and MilestoneRow
This commit is contained in:
+15
-52
@@ -1,7 +1,6 @@
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:18
|
||||
container_name: procurement-postgres
|
||||
|
||||
environment:
|
||||
POSTGRES_DB: procurement
|
||||
@@ -9,7 +8,7 @@ services:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
|
||||
ports:
|
||||
- "5433:5432"
|
||||
- "5435:5432"
|
||||
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql
|
||||
@@ -24,24 +23,13 @@ services:
|
||||
|
||||
restart: unless-stopped
|
||||
|
||||
# ==========================================================================
|
||||
# Traefik v3 — public reverse proxy (replaces nginx as the edge)
|
||||
# App is served on http://localhost (port 80) instead of :3000.
|
||||
# Production: see docker-compose.prod.yml (real domains + HTTPS via
|
||||
# Let's Encrypt, HTTP→HTTPS redirect).
|
||||
# ==========================================================================
|
||||
traefik:
|
||||
# v3.6+ required: Traefik ≤3.3 fails against Docker Engine 29.x
|
||||
# ("Error response from daemon" — Docker API version mismatch).
|
||||
image: traefik:v3.6
|
||||
container_name: procurement-traefik
|
||||
restart: unless-stopped
|
||||
command:
|
||||
- --providers.docker=true
|
||||
- --providers.docker.exposedbydefault=false
|
||||
# Containers are on several networks; Traefik must use the dedicated
|
||||
# proxy network IP (otherwise it may pick the default-network IP → 504).
|
||||
- --providers.docker.network=traefik_network
|
||||
- --providers.docker.network=erp_production_network
|
||||
- --providers.file.filename=/etc/traefik/dynamic.yml
|
||||
- --entrypoints.web.address=:80
|
||||
- --entrypoints.websecure.address=:443
|
||||
@@ -51,11 +39,9 @@ services:
|
||||
- --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web
|
||||
- --log.level=INFO
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
- "8084:80"
|
||||
- "8445:443"
|
||||
volumes:
|
||||
# NOTE: mounted read-write — Docker Desktop rejects read-only
|
||||
# /var/run/docker.sock mounts ("Error response from daemon").
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- ./infra/traefik-dynamic.yml:/etc/traefik/dynamic.yml:ro
|
||||
- traefik_certs:/certs
|
||||
@@ -64,7 +50,6 @@ services:
|
||||
|
||||
minio:
|
||||
image: minio/minio:latest
|
||||
container_name: procurement-minio
|
||||
|
||||
command: server /data --console-address ":9001"
|
||||
|
||||
@@ -73,20 +58,18 @@ services:
|
||||
MINIO_ROOT_PASSWORD: minioadmin
|
||||
|
||||
ports:
|
||||
- "9000:9000" # S3 API
|
||||
- "9001:9001" # Web console
|
||||
- "9004:9000" # S3 API
|
||||
- "9005:9001" # Web console
|
||||
|
||||
volumes:
|
||||
- minio_data:/data
|
||||
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
# S3 API
|
||||
- traefik.http.routers.minio-api.rule=Host(`${S3_HOST:-s3.localhost}`)
|
||||
- traefik.http.routers.minio-api.entrypoints=web
|
||||
- traefik.http.routers.minio-api.service=minio-api-svc
|
||||
- traefik.http.services.minio-api-svc.loadbalancer.server.port=9000
|
||||
# Web console
|
||||
- traefik.http.routers.minio-console.rule=Host(`${STORAGE_HOST:-storage.localhost}`)
|
||||
- traefik.http.routers.minio-console.entrypoints=web
|
||||
- traefik.http.routers.minio-console.service=minio-console-svc
|
||||
@@ -98,11 +81,8 @@ services:
|
||||
|
||||
restart: unless-stopped
|
||||
|
||||
# MinIO Client (mc): waits for the server, creates the bucket, exits.
|
||||
# Use for ad-hoc ops too: docker compose run --rm minio-init ...
|
||||
minio-init:
|
||||
image: minio/mc:latest
|
||||
container_name: procurement-minio-init
|
||||
|
||||
depends_on:
|
||||
minio:
|
||||
@@ -125,20 +105,8 @@ services:
|
||||
|
||||
restart: "no"
|
||||
|
||||
# ==========================================================================
|
||||
# v2.6 — Casdoor (OIDC identity provider)
|
||||
# Console: http://localhost:8080 (admin / 123)
|
||||
# Application "inventory-app" (org "inventory", client inventory-app-client)
|
||||
# is created by backend/tools/seed_casdoor.py — run it once after the
|
||||
# first boot:
|
||||
# docker compose run --rm -e CASDOOR_BASE=http://casdoor:8000 api python tools/seed_casdoor.py
|
||||
#
|
||||
# Casdoor uses the SAME postgres instance as the app (database `casdoor`,
|
||||
# created by sql/02-casdoor-db.sql on a fresh volume).
|
||||
# ==========================================================================
|
||||
casdoor:
|
||||
image: casbin/casdoor:latest
|
||||
container_name: procurement-casdoor
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
@@ -147,9 +115,9 @@ services:
|
||||
driverName: postgres
|
||||
dataSourceName: "user=casdoor password=casdoor host=postgres port=5432 sslmode=disable dbname=casdoor"
|
||||
dbName: casdoor
|
||||
origin: "http://localhost:8080"
|
||||
origin: "http://localhost:8083"
|
||||
ports:
|
||||
- "8080:8000"
|
||||
- "8083:8000"
|
||||
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
@@ -167,7 +135,6 @@ services:
|
||||
build:
|
||||
context: ./backend
|
||||
dockerfile: Dockerfile
|
||||
container_name: procurement-api
|
||||
|
||||
environment:
|
||||
PROCUREMENT_DATABASE_URL: postgresql+asyncpg://postgres:postgres@postgres:5432/procurement
|
||||
@@ -176,21 +143,18 @@ services:
|
||||
PROCUREMENT_MINIO_SECRET_KEY: minioadmin
|
||||
PROCUREMENT_MINIO_BUCKET: procurement-files
|
||||
PROCUREMENT_MINIO_SECURE: "false"
|
||||
# Casdoor: endpoint is the in-network service URL; the issuer must match
|
||||
# the origin Casdoor advertises to browsers (its OIDC discovery doc).
|
||||
PROCUREMENT_CASDOOR_ENDPOINT: http://casdoor:8000
|
||||
PROCUREMENT_CASDOOR_ISSUER: http://localhost:8080
|
||||
PROCUREMENT_CASDOOR_ISSUER: http://localhost:8083
|
||||
PROCUREMENT_CASDOOR_CLIENT_ID: inventory-app-client
|
||||
PROCUREMENT_CASDOOR_CLIENT_SECRET: inventory-app-secret-2026
|
||||
PROCUREMENT_CASDOOR_ORGANIZATION: inventory
|
||||
PROCUREMENT_CASDOOR_APP_NAME: inventory-app
|
||||
PROCUREMENT_CASDOOR_AUDIENCE: inventory-app-client
|
||||
# Console admin used by POST /users/sync (identity mirroring).
|
||||
PROCUREMENT_CASDOOR_ADMIN_USER: admin
|
||||
PROCUREMENT_CASDOOR_ADMIN_PASSWORD: "123"
|
||||
|
||||
ports:
|
||||
- "8000:8000"
|
||||
- "8001:8000"
|
||||
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
@@ -214,9 +178,10 @@ services:
|
||||
build:
|
||||
context: ./frontend
|
||||
args:
|
||||
# Developer Mode panel on the login page — set false for production.
|
||||
DEV_LOGIN_ENABLED: ${DEV_LOGIN_ENABLED:-true}
|
||||
container_name: procurement-frontend
|
||||
|
||||
ports:
|
||||
- "8085:80"
|
||||
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
@@ -234,13 +199,11 @@ services:
|
||||
restart: unless-stopped
|
||||
|
||||
networks:
|
||||
# شبکهی عمومی: فقط ترافیک و سرویسهای عمومی. postgres روی شبکهی
|
||||
# پیشفرض میماند و از بیرون قابل دسترسی نیست.
|
||||
traefik_network:
|
||||
name: traefik_network
|
||||
name: erp_production_network
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
minio_data:
|
||||
traefik_certs:
|
||||
traefik_certs:
|
||||
Reference in New Issue
Block a user