Skip to content

Installation

  • Docker: Docker Engine 20+ and Docker Compose v2 (for containerized deployment)
  • Bare Metal: Linux amd64, SQLite or PostgreSQL, optional systemd for service management

Terminal window
# 1. Get the Docker image
docker load -i license-server.tar
# or
docker pull git.prd.embidio.de/hive/license-server:v1.0.0
# 2. Configure
cat > .env <<EOF
LICENSE_JWT_SECRET=$(openssl rand -base64 32)
EOF
# 3. Run
docker compose -f deployment/docker-compose.yml up -d
# 4. Open http://localhost:5656

FileUse CaseDatabase
docker-compose.ymlStandard deploymentSQLite (default) or PostgreSQL
docker-compose.full.ymlFull stack with monitoringPostgreSQL + Prometheus + Grafana + Loki
docker-compose.customer.ymlCustomer deployment packageSQLite + optional monitoring
docker-compose.dev.ymlDevelopmentSQLite
Terminal window
cd deployment
# Create .env file
cat > .env <<EOF
LICENSE_JWT_SECRET=$(openssl rand -base64 32)
LICENSE_LOGGING_LEVEL=info
TZ=Europe/Berlin
EOF
# Start
docker compose up -d
# Verify
docker compose ps
curl http://localhost:5656/health
Terminal window
cd deployment
cat > .env <<EOF
LICENSE_JWT_SECRET=$(openssl rand -base64 32)
LICENSE_DATABASE_DRIVER=postgres
LICENSE_DATABASE_PASSWORD=$(openssl rand -base64 24)
LICENSE_LOGGING_LEVEL=info
TZ=Europe/Berlin
EOF
# Start with PostgreSQL profile
docker compose --profile postgres up -d

Includes PostgreSQL, Prometheus, Grafana, Loki, Promtail, AlertManager, cAdvisor, and Node Exporter.

Terminal window
cd deployment
cat > .env.full <<EOF
LICENSE_JWT_SECRET=$(openssl rand -base64 32)
LICENSE_DATABASE_PASSWORD=$(openssl rand -base64 24)
GF_SECURITY_ADMIN_PASSWORD=changeme
EOF
docker compose -f docker-compose.full.yml --env-file .env.full up -d

Services:

ServicePortDescription
License Server5656 (HTTP), 50090 (gRPC)Main application
PostgreSQL5432Database
Prometheus9091Metrics collection
Grafana3000Dashboards
Loki3100Log aggregation
AlertManager9093Alert routing
cAdvisor8081Container metrics
Node Exporter9100Host metrics

  • Linux (amd64)
  • SQLite or PostgreSQL
  • (Optional) systemd for service management
Terminal window
# 1. Extract the release package
tar xzf license-server-v1.0.0-linux-amd64.tar.gz
cd 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 serve

Create /etc/systemd/system/license-server.service:

[Unit]
Description=License Server
After=network.target
Wants=network-online.target
[Service]
Type=simple
User=license-server
Group=license-server
WorkingDirectory=/opt/license-server
ExecStart=/opt/license-server/license-server serve
Restart=on-failure
RestartSec=5
# Environment
Environment=LICENSE_JWT_SECRET=your-secret-here
Environment=LICENSE_LOGGING_LEVEL=info
Environment=LICENSE_LOGGING_FORMAT=json
# Security hardening
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/license-server/data /opt/license-server/backups
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Terminal window
# Create service user
sudo useradd -r -s /sbin/nologin license-server
# Set permissions
sudo chown -R license-server:license-server /opt/license-server
# Enable and start
sudo systemctl daemon-reload
sudo systemctl enable license-server
sudo systemctl start license-server
# Check status
sudo systemctl status license-server
sudo journalctl -u license-server -f
/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, logos

After installation, verify the server is running:

Terminal window
curl http://localhost:5656/health

Returns 200 OK when the server is ready to accept requests.

Once the server is running, head to First Steps to create your admin account and issue your first license.