How to Install the Service Catalog Demo
This guide walks you through installing the Service Catalog demo, which demonstrates how to build a self-service portal on top of Infrahub's source of truth system. By the end of this guide, you'll have a working environment where users can request network services through a web interface.
Need help or have questions? Join our Discord community for support!https://discord.gg/opsmillWhat you'll achieve
After completing this installation:
- Infrahub instance running with network infrastructure data
- Service Catalog portal accessible for requesting services
- Demo data loaded including locations, devices, and network resources
- Git integration configured for infrastructure as code workflows
Prerequisites
Before you get started, make sure you have these tools installed:
Required software
-
🐳 Docker: Container runtime for running Infrahub and its dependencies
- Docker Desktop for local development
- Or Docker Engine on a Linux VM for server deployments
- Minimum 4GB RAM allocated to Docker
-
🐍 Poetry: Python dependency management tool
- Install via the official installation guide
- Used to manage Python packages and virtual environments
- Version 1.2.0 or higher recommended
System requirements
- Operating System: macOS, Linux, or Windows with WSL2
- Memory: At least 8GB RAM (16GB recommended)
- Storage: 10GB free disk space
- Network: Internet connection for downloading dependencies
Installation steps
Step 1: Clone the repository
First, download the demo code from GitHub. This repository contains all the necessary configuration files, schemas, and demo data.
git clone https://github.com/opsmill/infrahub-demo-service-catalog.git
cd infrahub-demo-service-catalog
The repository includes:
- Infrahub schemas defining the data models for network infrastructure
- Demo data with sample locations, devices, and network resources
- Service Catalog application built with Streamlit
- Docker configuration for running all components
Step 2: Configure environment variables
Set up the connection details for Infrahub. These variables tell the Service Catalog application how to communicate with the Infrahub API.
export INFRAHUB_ADDRESS="http://localhost:8000"
export INFRAHUB_API_TOKEN="06438eb2-8019-4776-878c-0941b1f1d1ec"
Understanding the variables
-
INFRAHUB_ADDRESS
: The URL where Infrahub's API is accessible- Default uses
localhost:8000
for local development - Change this if running Infrahub on a different host or port
- Default uses
-
INFRAHUB_API_TOKEN
: Authentication token for API access- The demo uses a pre-configured token for convenience
- In production, use secure token generation and storage
Step 3: Install Python dependencies
Use Poetry to create a virtual environment and install all required Python packages.
poetry install
This command:
- Creates an isolated Python virtual environment
- Installs the Infrahub SDK for API interactions
- Installs Streamlit for the web portal interface
- Sets up development tools (pytest, ruff, mypy)
Poetry automatically manages virtual environments. All subsequent commands should be run with poetry run
prefix to ensure they use the correct environment.
Step 4: Start the application stack
Launch Infrahub and the Service Catalog using Docker Compose. This single command starts multiple services.
poetry run invoke start
The invoke start
command is a wrapper that:
- Ensures the correct Docker Compose configuration is used
- Mounts the
service_catalog
module into the Infrahub container - Starts both Infrahub and the Streamlit application
- Sets up networking between containers
What gets started
This command launches:
- Infrahub Core: The main application server (port 8000)
- PostgreSQL: Database for storing infrastructure data
- Redis: Cache and message broker
- RabbitMQ: Task queue for asynchronous operations
- Service Catalog: Streamlit web portal (port 8501)
Step 5: Configure Git integration
Connect the demo repository to Infrahub for infrastructure as code workflows.
poetry run infrahubctl repository add --ref main --read-only infrahub-demo https://github.com/opsmill/infrahub-demo-service-catalog.git
Why Git integration?
This connection enables:
- Generator Scripts: Python code that automates service provisioning
- Configuration Templates: Jinja2 templates for device configurations
- Schema: Track changes to data models over time
- Objects and data: Infrastructure changes through pull requests
The --read-only
flag means:
- Infrahub can fetch and execute code from the repository
- Changes in Infrahub won't be pushed back to Git
- Perfect for demo environments and testing
For production, you'd typically use bidirectional sync to enable full GitOps workflows.
This imports:
- Locations: Sites like Atlanta, Dallas, Denver, and Seattle
- Devices: Core switches, edge routers, and customer equipment
- Network Resources: VLAN pools, IP prefix pools
- Templates: Device configurations and service definitions
The schema uses a hierarchical structure:
- Locations contain devices
- Devices have interfaces and connections
- Services allocate resources from pools
- Everything is version-controlled and auditable
Verify your installation
Confirm everything is working by accessing both interfaces:
Infrahub web UI
- URL: http://localhost:8000
- Username:
admin
- Password:
infrahub
- What to Check:
- Navigate to the Schema page to see loaded models
- Check the Objects page to verify demo data is present
- Confirm the repository appears under Repositories
Service catalog portal
- URL: http://localhost:8501
- What to Check:
- Home page displays available services
- Service request forms are accessible
- No connection errors appear
Troubleshooting common issues
Services won't start
- Ensure Docker is running and has sufficient resources
- Check for port conflicts (8000, 8501, 5432, 6379)
- Run
poetry run invoke destroy
thenpoetry run invoke start
to reset
Schema load fails
- Wait for Infrahub to fully start (check logs with
docker compose logs infrahub
) - Retry the schema load command after 30 seconds
Can't access web interfaces
- Verify environment variables are set correctly
- Check firewall rules if running on a remote server
- Ensure all containers are running:
docker compose ps
Next steps
Now that your environment is running:
- For Users: Follow the user walkthrough to learn how to request services
- For Developers: Check the developer walkthrough to understand the architecture
- Explore Further: Browse the Infrahub UI to understand the data model and relationships