name: andon services: db: image: mcr.microsoft.com/mssql/server:2022-latest environment: ACCEPT_EULA: "Y" MSSQL_SA_PASSWORD: ${MSSQL_SA_PASSWORD:?set MSSQL_SA_PASSWORD di file .env} MSSQL_PID: Developer ports: - "1433:1433" volumes: - mssql-data:/var/opt/mssql healthcheck: # API menunggu kondisi ini. Tanpa healthcheck, api start lebih dulu, # gagal konek, lalu restart-loop selama SQL Server masih inisialisasi. test: [ "CMD-SHELL", "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P \"$$MSSQL_SA_PASSWORD\" -C -Q 'SELECT 1' || exit 1", ] interval: 10s timeout: 5s retries: 12 start_period: 30s api: build: context: ./SmartFactory.Api depends_on: db: condition: service_healthy environment: ASPNETCORE_ENVIRONMENT: Development ConnectionStrings__Default: "Server=db,1433;Database=SmartFactory;User Id=sa;Password=${MSSQL_SA_PASSWORD};TrustServerCertificate=True;MultipleActiveResultSets=True" # Nama variabel memakai __ sebagai pemisah section — itu konvensi # konfigurasi .NET untuk memetakan ke Jwt:SigningKey. Jwt__SigningKey: ${JWT_SIGNING_KEY:?set JWT_SIGNING_KEY di file .env, minimal 32 byte} Cors__AllowedOrigins__0: "http://localhost:3000" Simulator__Enabled: "true" # Akun dev bawaan. Ganti dengan sumber identitas sungguhan sebelum produksi. Auth__Users__0__Username: operator1 Auth__Users__0__PasswordHash: "pbkdf2:100000:8kN+gv8uYURVkGozQ2+EIA==:rSmBVvp1BoqSrlRVdDiteUDSFx1kU9z+EZh9TRmwJfY=" Auth__Users__0__Role: Operator Auth__Users__1__Username: supervisor1 Auth__Users__1__PasswordHash: "pbkdf2:100000:4B763E+p9x1vn9L7L/cscA==:Oq8ZKToEyYVM607DiZtWGghXjwHfdVJpSH3j2mrpgA0=" Auth__Users__1__Role: Supervisor ports: - "5131:8080" healthcheck: test: ["CMD-SHELL", "wget -qO- http://localhost:8080/health || exit 1"] interval: 10s timeout: 5s retries: 6 start_period: 20s ui: build: context: ./smart-factory-ui args: # Nilai ini di-inline ke bundel saat build, jadi harus alamat yang # dipakai BROWSER — bukan nama service internal Compose. NEXT_PUBLIC_API_BASE: http://localhost:5131 depends_on: api: condition: service_healthy ports: - "3000:3000" volumes: mssql-data: