Skip to main content

Deployment Overview

Deployment components

The full production stack consists of six Docker containers coordinated by Docker Compose:

ContainerImageResponsibility
makerlab-postgrespostgres:16MakerLab domain database
makerlab-apiBuilt from apps/api/DockerfileFastAPI backend
makerlab-webBuilt from apps/web/DockerfileNext.js web frontend
snipeit-dbmariadb:11.4Snipe-IT internal database
snipeitsnipe/snipe-it:v8.3.6Inventory management system
makerlab-nginxnginx:alpineReverse proxy, TLS, routing, auth gate

All containers communicate on a private Docker bridge network (backend). Only Nginx is exposed to the internet (ports 80 and 443).


High-level deployment steps

  1. Clone the repository on the server.
  2. Configure environment files (.env.postgres, .env.snipeit, apps/api/.env).
  3. Place TLS certificates in infra/nginx/certs/.
  4. Set deployment URL parameters in infra/docker/docker-compose.yml.
  5. Start the stack with docker compose up -d --build.
  6. Bootstrap Snipe-IT with the bootstrap script.
  7. Configure Snipe-IT status labels.
  8. (Optional) Run the data migration.
  9. Verify all services are accessible.

Detailed steps

For a complete step-by-step deployment procedure, see:


URL configuration

The stack supports deployment under a path prefix (e.g., /new) or at the root path (no prefix). All path-related variables are centralized in the x-deployment anchor block at the top of docker-compose.yml. Changing the base path requires rebuilding the containers.


Updating the deployment

To deploy a new version:

git pull
docker compose -f infra/docker/docker-compose.yml up -d --build
warning

Rebuilding is required after any change to environment variables that are baked into the Next.js build at compile time (NEXT_PUBLIC_* variables).