Installation
Prerequisites
Section titled “Prerequisites”- Docker: Docker Engine 20+ and Docker Compose v2 (for containerized deployment)
- Bare Metal: Linux amd64, SQLite or PostgreSQL, optional systemd for service management
Quick Start (Docker)
Section titled “Quick Start (Docker)”# 1. Get the Docker imagedocker load -i license-server.tar# ordocker pull git.prd.embidio.de/hive/license-server:v1.0.0
# 2. Configurecat > .env <<EOFLICENSE_JWT_SECRET=$(openssl rand -base64 32)EOF
# 3. Rundocker compose -f deployment/docker-compose.yml up -d
# 4. Open http://localhost:5656Docker Compose Profiles
Section titled “Docker Compose Profiles”| File | Use Case | Database |
|---|---|---|
docker-compose.yml | Standard deployment | SQLite (default) or PostgreSQL |
docker-compose.full.yml | Full stack with monitoring | PostgreSQL + Prometheus + Grafana + Loki |
docker-compose.customer.yml | Customer deployment package | SQLite + optional monitoring |
docker-compose.dev.yml | Development | SQLite |
Standard Deployment (SQLite)
Section titled “Standard Deployment (SQLite)”cd deployment
# Create .env filecat > .env <<EOFLICENSE_JWT_SECRET=$(openssl rand -base64 32)LICENSE_LOGGING_LEVEL=infoTZ=Europe/BerlinEOF
# Startdocker compose up -d
# Verifydocker compose pscurl http://localhost:5656/healthStandard Deployment (PostgreSQL)
Section titled “Standard Deployment (PostgreSQL)”cd deployment
cat > .env <<EOFLICENSE_JWT_SECRET=$(openssl rand -base64 32)LICENSE_DATABASE_DRIVER=postgresLICENSE_DATABASE_PASSWORD=$(openssl rand -base64 24)LICENSE_LOGGING_LEVEL=infoTZ=Europe/BerlinEOF
# Start with PostgreSQL profiledocker compose --profile postgres up -dFull Stack with Monitoring
Section titled “Full Stack with Monitoring”Includes PostgreSQL, Prometheus, Grafana, Loki, Promtail, AlertManager, cAdvisor, and Node Exporter.
cd deployment
cat > .env.full <<EOFLICENSE_JWT_SECRET=$(openssl rand -base64 32)LICENSE_DATABASE_PASSWORD=$(openssl rand -base64 24)GF_SECURITY_ADMIN_PASSWORD=changemeEOF
docker compose -f docker-compose.full.yml --env-file .env.full up -dServices:
| Service | Port | Description |
|---|---|---|
| License Server | 5656 (HTTP), 50090 (gRPC) | Main application |
| PostgreSQL | 5432 | Database |
| Prometheus | 9091 | Metrics collection |
| Grafana | 3000 | Dashboards |
| Loki | 3100 | Log aggregation |
| AlertManager | 9093 | Alert routing |
| cAdvisor | 8081 | Container metrics |
| Node Exporter | 9100 | Host metrics |
Binary Installation
Section titled “Binary Installation”Prerequisites
Section titled “Prerequisites”- Linux (amd64)
- SQLite or PostgreSQL
- (Optional) systemd for service management
Installation Steps
Section titled “Installation Steps”# 1. Extract the release packagetar xzf license-server-v1.0.0-linux-amd64.tar.gzcd license-server
# 2. Create config./license-server config init --output config.yaml
# 3. Edit config.yaml with your settings# At minimum, set jwt.secret
# 4. Run migrations./license-server migrate up
# 5. Create initial admin./license-server seed
# 6. Start the server./license-server servesystemd Service
Section titled “systemd Service”Create /etc/systemd/system/license-server.service:
[Unit]Description=License ServerAfter=network.targetWants=network-online.target
[Service]Type=simpleUser=license-serverGroup=license-serverWorkingDirectory=/opt/license-serverExecStart=/opt/license-server/license-server serveRestart=on-failureRestartSec=5
# EnvironmentEnvironment=LICENSE_JWT_SECRET=your-secret-hereEnvironment=LICENSE_LOGGING_LEVEL=infoEnvironment=LICENSE_LOGGING_FORMAT=json
# Security hardeningNoNewPrivileges=trueProtectSystem=strictProtectHome=trueReadWritePaths=/opt/license-server/data /opt/license-server/backupsPrivateTmp=true
[Install]WantedBy=multi-user.target# Create service usersudo useradd -r -s /sbin/nologin license-server
# Set permissionssudo chown -R license-server:license-server /opt/license-server
# Enable and startsudo systemctl daemon-reloadsudo systemctl enable license-serversudo systemctl start license-server
# Check statussudo systemctl status license-serversudo journalctl -u license-server -fDirectory Layout
Section titled “Directory Layout”/opt/license-server/├── license-server # Binary├── config.yaml # Configuration├── server.license # Server license file├── data/│ ├── license.db # SQLite database│ └── keys/ # Signing keys│ └── server/│ ├── signing.key│ └── signing.pub├── backups/ # Database backups└── uploads/ # Avatar images, logosHealth Check
Section titled “Health Check”After installation, verify the server is running:
curl http://localhost:5656/healthReturns 200 OK when the server is ready to accept requests.
Next Steps
Section titled “Next Steps”Once the server is running, head to First Steps to create your admin account and issue your first license.