This repository contains Docker-based configuration samples for running VeeCode DevPortal (a Backstage-based developer portal) with different integrations and authentication providers.
Each example is self-contained with all necessary configuration files. External settings like API keys, tokens, or certificates may be required depending on the integration.
- Docker and Docker Compose
- External service accounts and credentials (GitHub, Azure, Bitbucket, etc.) as needed
Each example typically contains:
docker-compose.yml- Starts DevPortal with required environment variablesdynamic-plugins.yaml- Enables/disables dynamic plugins for the exampleapp-config.yaml- DevPortal configuration overrides (optional)README.md- Setup instructions and prerequisites (optional)
| Example | Description |
|---|---|
| appstarter | Minimal starter configuration |
| github | GitHub OAuth authentication and integrations |
| azure | Azure DevOps authentication and integrations |
| bitbucket-cloud | Bitbucket Cloud (SaaS) integration |
| bitbucket-server | Bitbucket Server (self-hosted) integration |
| ldap | LDAP authentication and organization sync |
| jenkins | Jenkins CI/CD integration |
| sonarqube | SonarQube code quality integration |
| local-cluster | Local Kubernetes cluster integration |
| remote-cluster | Remote Kubernetes cluster integration |
| bancorocks | Sample organization catalog |
Check each example's README for specific setup instructions.
cd <example-directory>
docker compose up --no-log-prefixDevPortal will be available at http://localhost:7007.
Reload plugins without restarting the container:
docker compose exec devportal /app/install-dynamic-plugins.sh /app/dynamic-plugins-rootBackend API endpoints require authentication. Obtain a token and test endpoints:
# Get a Backstage user token via the guest provider
USER_TOKEN="$(curl -s -X POST http://localhost:7007/api/auth/guest/refresh \
-H 'Content-Type: application/json' -d '{}' | jq -r '.backstageIdentity.token')"
# List loaded dynamic plugins
curl -H "Authorization: Bearer $USER_TOKEN" \
http://localhost:7007/api/dynamic-plugins-info/loaded-plugins
# List catalog components
curl -H "Authorization: Bearer $USER_TOKEN" \
http://localhost:7007/api/catalog/entities\?filter\=kind\=Component
# List all scaffolder actions
curl -H "Authorization: Bearer $USER_TOKEN" \
http://localhost:7007/api/scaffolder/v2/actions
# Healthcheck (no auth required)
curl http://localhost:7007/healthcheck
# Version (no auth required)
curl http://localhost:7007/version# Token defined by backend.auth.externalAccess[0].options.token
NOTIFY_TOKEN="test-token"
curl -X POST http://localhost:7007/api/notifications/notifications \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $NOTIFY_TOKEN" \
-d '{
"recipients": { "type": "broadcast" },
"payload": {
"title": "Title of broadcast message",
"description": "The description of the message.",
"link": "http://example.com/link",
"severity": "high",
"topic": "general"
}
}'