QualityDocD is packaged as a multi-container system split across three Docker Compose files. This separation lets you start or restart each layer independently — helpful during development when you need to rebuild application containers without touching your databases.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/juescoryisus/QualityDocD/llms.txt
Use this file to discover all available pages before exploring further.
docker-compose.infra.yml owns the three databases and their named volumes; docker-compose.apps.yml builds and runs the four application services; and docker-compose.portal.yml isolates the PHP portal so it can be deployed or restarted on its own. All seven containers share a single bridge network called qualitydoc_net, which is created by the infra compose file and referenced as external by the other two.
Prerequisites
Before running any compose command, make sure the following are in place:Docker Desktop (or Engine + Compose)
Docker Desktop v4.x or later on Windows/macOS. On Linux, install Docker Engine plus the Compose plugin (
docker compose v2).Available RAM
At least 4 GB of RAM allocated to Docker. SQL Server 2022 alone requires 2 GB; the remaining services add another 1–1.5 GB under load.
PowerShell 7+ (Windows, optional)
Required only if you want to use
setup.ps1. Non-Windows users can run the equivalent docker compose commands directly..env file
Copy
.env.example to .env and edit secrets before starting any container. See the Configuration page for every variable.The Three Compose Files
docker-compose.infra.yml
Infrastructure layer. Runs SQL Server 2022 (
qualitydoc_sqlserver:1433), PostgreSQL 16 (qualitydoc_postgres:5432), and MongoDB 7 (qualitydoc_mongodb:27017). Creates the three named volumes (sqlserver_data, postgres_data, mongodb_data) and the qualitydoc_net bridge network. Each engine has a Docker health check.docker-compose.apps.yml
Application layer. Builds and runs the .NET app (
qualitydoc_app:5001), Node.js API (qualitydoc_node_api:5000), Search Service (qualitydoc_search:3001), and PHP portal (qualitydoc_php:8080). Declares qualitydoc_net as an external network — infra must already be up.docker-compose.portal.yml
Standalone portal. Runs only the PHP portal container on port 8080. Use this when you want to restart or redeploy the portal without touching the backend services.
Container Reference
| Container name | Compose file | Image / Build | Host port | Internal port |
|---|---|---|---|---|
qualitydoc_sqlserver | infra | mcr.microsoft.com/mssql/server:2022-latest | 1433 | 1433 |
qualitydoc_postgres | infra | postgres:16-alpine | 5432 | 5432 |
qualitydoc_mongodb | infra | mongo:7 | 27017 | 27017 |
qualitydoc_app | apps | ./QualityDocD/Dockerfile | 5001 | 5000 |
qualitydoc_node_api | apps | ./node-api/Dockerfile | 5000 | 5000 |
qualitydoc_search | apps | ./search-service/Dockerfile | 3001 | 3001 |
qualitydoc_php | apps / portal | ./php-portal/Dockerfile | 8080 | 80 |
Named Volumes
| Volume name | Database | Mount path inside container |
|---|---|---|
sqlserver_data | SQL Server | /var/opt/mssql |
postgres_data | PostgreSQL | /var/lib/postgresql/data |
mongodb_data | MongoDB | /data/db |
Named volumes persist across container restarts and
docker compose down commands. Your data survives unless you explicitly pass -v to down. See Reset Data below.Full Deployment
Create and configure the .env file
.env in your editor and replace the placeholder passwords and secrets. At minimum, change SQLSERVER_SA_PASSWORD, PG_PASSWORD, MONGO_PASSWORD, and SESSION_SECRET before any internet-facing deployment.See Configuration for the full variable reference.Start all services
Run everything with one command using
setup.ps1 on Windows, or fire the three compose commands manually on any platform.setup.ps1 -Mode All starts infra first, then polls each database container’s health status before bringing up the apps layer. It also opens QualityDocD.csproj in Visual Studio after startup (pass -SkipVS to suppress this).Wait for database health checks
The databases need a moment to initialize before the application layer can connect. Docker’s built-in health checks report readiness:
Check health status at any time:
| Database | Start delay | Check interval | Ready signal |
|---|---|---|---|
| SQL Server 2022 | 30 s | 15 s (8 retries) | sqlcmd SELECT 1 exits 0 |
| PostgreSQL 16 | 10 s | 10 s (5 retries) | pg_isready exits 0 |
| MongoDB 7 | 20 s | 15 s (5 retries) | mongosh db.adminCommand('ping').ok returns 1 |
Verify first-run migrations and seed data
The .NET application (Default test users seeded on first start:
qualitydoc_app) calls MigrateAsync() on startup. This:- Runs EF Core migrations to create the
QualityDocDBschema in SQL Server andqualitydoc_audittables in PostgreSQL - Seeds default users into SQL Server on first start
| Username | Password | Role |
|---|---|---|
admin | Admin123! | Admin |
gerente | Gerente123! | Manager |
revisor1 | Revisor123! | Reviewer |
revisor2 | Revisor123! | Reviewer |
editor | Editor123! | Editor |
viewer | Viewer123! | Viewer |
Open the application
Once all containers show healthy status, visit:
| Module | URL |
|---|---|
| .NET Document Management | http://localhost:5001 |
| PHP Audit Portal | http://localhost:8080 |
| Search Service (API) | http://localhost:3001 |
| Node.js API (internal) | http://localhost:5000 |
setup.ps1 Modes
setup.ps1 accepts a -Mode parameter to start only the layer you need. All modes automatically copy .env.example to .env if no .env file exists yet.
| Mode | What starts |
|---|---|
-Mode All (default) | Infra → Apps → Portal, with health-check polling between layers |
-Mode Infra | SQL Server, PostgreSQL, MongoDB only |
-Mode Apps | .NET app, Node.js API, Search Service, PHP portal |
-Mode Portal | PHP portal only |