🔥

Apache Jena Fuseki

Ubuntu Server 24.04 LTS · TDB2 · SPARQL 1.1

High-performance RDF triplestore ready to deploy on Microsoft Azure. SPARQL 1.1 endpoint operational from first boot, with Shiro authentication and Makefile automation included.

🏗 Deployment Environment

ComponentValue
Operating SystemUbuntu Server 24.04 LTS
RDF EngineApache Jena Fuseki with TDB2 backend
Web AccessFuseki Web interface — port 3030
SecurityRole-based authentication via Apache Shiro
Provisioningcloud-init — automatic configuration on first boot
Recommended VMsB1ms, D2s_v3, E4s_v3 (Azure)
AutomationMakefile included for service deployment and Shiro security

✨ Key Features

🔗 Full SPARQL 1.1

SPARQL 1.1 Query, Update and Graph Store Protocol endpoint operational from first boot.

🗄 Persistent TDB2 Storage

Persistent on-disk RDF datasets via TDB2 — or in-memory for test environments.

🔐 Shiro Authentication

Fine-grained role-based access control (admin, read, write) via Apache Shiro.

⚙️ Automation Makefile

systemd service deployment, Shiro password management and remote restart in a single command.

☁️ Azure Optimized

Pre-configured image for common Azure SKUs — up and running in under 5 minutes from the Marketplace.

📦 cloud-init included

Automatic provisioning from first boot — no manual configuration required.

🚀 Quick Start

Follow these steps to deploy Fuseki from Azure Marketplace and access it.

1. Deploy from Azure Marketplace

Click Deploy Now on the Marketplace offer page to create the VM.

⚠️ Required: Provide Custom Data before creating the VM

The VM image follows Azure Marketplace security policy 200.3.3.8 — the fuseki system user cannot be pre-created in the image. It must be initialized at first boot via Custom Data (cloud-init). Without this, Fuseki will not start.

Azure Portal: In the Advanced tab → Custom data field, paste:

#cloud-config
runcmd:
  - useradd -r -s /bin/false fuseki
  - chown -R fuseki:fuseki /data/fuseki
  - chown -R fuseki:fuseki /opt/fuseki
  - systemctl daemon-reload
  - systemctl enable fuseki
  - systemctl start fuseki
  - echo "Fuseki first boot setup complete" >> /var/log/fuseki-firstboot.log

Azure CLI:

az vm create \
  --resource-group <your-rg> \
  --name <your-vm-name> \
  --image <marketplace-image-urn> \
  --custom-data fuseki-first-boot.yaml \
  ...

1b. Open port 3030 in the Network Security Group

After VM creation, allow inbound traffic on port 3030:

az vm open-port \
  --resource-group <your-rg> \
  --name <your-vm-name> \
  --port 3030 \
  --priority 1001

Or via the Azure Portal: VM → Networking → Add inbound port rule → Port 3030, TCP.

2. Access the Web interface

http://<your-vm-ip>:3030

3. Deploy the systemd service via Makefile

# Deploy the service to the remote VM
make service-deploy HOST=<vm-ip> SERVICE_FILE=fuseki-d2s-v3.service

# Enable and start the service
make service-enable HOST=<vm-ip>
make service-start  HOST=<vm-ip>

3. Secure with Shiro

# Generate hashed Shiro credentials
make shiro-generate

# Deploy the Shiro configuration to the VM
make shiro-deploy-hashed HOST=<vm-ip>

📚 Documentation