Skip to main content

Enonic XP

Headless CMS platform for content management and delivery, used by Norwegian organizations (NAV, Gjensidige, Helsedirektoratet).

CategoryIntegration
Deploy./uis deploy enonic
Undeploy./uis undeploy enonic
Verify./uis verify enonic
Depends onNothing (embedded storage)
Imageenonic/xp:7.16.2-ubuntu (pinned)
Default namespaceenonic

What It Does

Enonic XP provides a complete CMS platform with:

  • Content Studio — editorial UI for content management
  • Headless APIs — GraphQL and REST content delivery
  • Embedded storage — built-in Elasticsearch and NoSQL (no external database needed)
  • App ecosystem — composable architecture with installable apps
  • Management API — port 4848 for admin operations and CI/CD integration

Deploy

# Deploy Enonic XP (no dependencies needed)
./uis deploy enonic

Access at http://enonic.localhost. On first visit, Enonic shows a welcome page — click "Log in as Guest" to access the admin console as Super User (the label is misleading — it grants full admin access, not guest access). Do not click "create an Admin User" unless you want to create an additional admin account.

Password for API/CLI access: ./uis secrets show DEFAULT_ADMIN_PASSWORD (user: su).

Verify

# Run all 6 E2E tests
./uis verify enonic

# Manual checks
kubectl get pods -n enonic
curl http://enonic.localhost

Configuration

Enonic XP configuration is in manifests/085-enonic-config.yaml. Key settings:

SettingValueNotes
Imageenonic/xp:7.16.2-ubuntuPinned version
StorageEmbeddedNo external database needed
JVM heap512m–1g~30% of container memory limit
CPU request500mDev-appropriate
Memory request1GiDev-appropriate
Web port8080Content Studio, admin, APIs
Management port4848Admin operations (internal only)
Stats port2609Health checks, metrics (internal only)

Admin Credentials

Enonic XP uses su as the superuser account. The password is set via xp.suPassword in $XP_HOME/config/system.properties (Enonic does not support environment variables for the su password). The StatefulSet entrypoint injects the password from the ENONIC_ADMIN_PASSWORD secret into system.properties before XP starts.

Secrets

VariableSourcePurpose
ENONIC_ADMIN_PASSWORDDEFAULT_ADMIN_PASSWORDSuperuser password (user: su)

Key Files

FilePurpose
manifests/085-enonic-config.yamlConfigMap (JVM settings)
manifests/085-enonic-statefulset.yamlStatefulSet + Service + PVC + ServiceAccount
manifests/085-enonic-ingressroute.yamlTraefik IngressRoute
ansible/playbooks/085-setup-enonic.ymlDeployment playbook
ansible/playbooks/085-remove-enonic.ymlRemoval playbook
ansible/playbooks/085-test-enonic.ymlE2E verification (6 tests)

Undeploy

./uis undeploy enonic

Note: All PVC data (content, indexes, blobstore) is deleted on undeploy.

Troubleshooting

Pod won't start (OOM or Java errors):

kubectl describe pod -n enonic -l app=enonic-xp
kubectl logs -n enonic -l app=enonic-xp --tail=50

Health check failing:

# Check statistics endpoint (no auth needed)
kubectl exec -n enonic enonic-xp-0 -- curl -s http://localhost:2609/health
kubectl exec -n enonic enonic-xp-0 -- curl -s http://localhost:2609/ready

Authentication failed:

# Check credentials in secrets
kubectl get secret urbalurba-secrets -n enonic -o jsonpath='{.data.ENONIC_ADMIN_PASSWORD}' | base64 -d
# Test management API
kubectl exec -n enonic enonic-xp-0 -- curl -s -u su:<password> http://localhost:4848/repo/list

Learn More