services: frontend: image: docker.io/library/nginx:1.27-alpine container_name: lift-frontend restart: unless-stopped depends_on: - backend ports: - "8080:80" volumes: - ./public:/usr/share/nginx/html:ro - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro backend: image: docker.io/library/node:22-alpine container_name: lift-backend restart: unless-stopped depends_on: - postgres working_dir: /app environment: PORT: 3000 JWT_SECRET: elevator-manager-secret DATABASE_URL: postgresql://lift_admin:lift_secret@postgres:5432/lift_manager command: sh -c "npm ci --omit=dev && npm start" volumes: - ./package.json:/app/package.json:ro - ./package-lock.json:/app/package-lock.json:ro - ./server.js:/app/server.js:ro - ./public:/app/public:ro - ./data:/app/data - ./uploads:/app/uploads postgres: image: docker.io/library/postgres:16-alpine container_name: lift-postgres restart: unless-stopped environment: POSTGRES_DB: lift_manager POSTGRES_USER: lift_admin POSTGRES_PASSWORD: lift_secret ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data adminer: image: adminer restart: always ports: - 8090:8080 volumes: postgres_data: