Horizon service

Horizon is the default dashboard / UI for Openstack

https://docs.openstack.org/horizon/2025.1/install/install-ubuntu.html

Install and configure package

sudo apt install openstack-dashboard

/etc/openstack-dashboard/local_settings.py

OPENSTACK_HOST = "<SERVERNAME>"
OPENSTACK_KEYSTONE_URL = "http://%s:5000/identity/v3" % OPENSTACK_HOST #Add port
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 3,
}
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
OPENSTACK_NEUTRON_NETWORK = {
    ...
    'enable_router': False,
    'enable_quotas': False,
    'enable_ipv6': False,
    'enable_distributed_router': False,
    'enable_ha_router': False,
    'enable_fip_topology_check': False,
}

ALLOWED_HOSTS = ['<FQDN1>', '<FQDN1>'] #Note that Allowed hosts might be present in the Ubuntu section, do not change this
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.PyMemcacheCache',
         'LOCATION': 'controller:11211',
    }
}

Verify the following in /etc/apache2/conf-available/openstack-dashboard.conf

WSGIApplicationGroup %{GLOBAL}

Reload apache

sudo systemctl reload apache2.service

Verify

Go to the http://FQDN/horizon and check if the login appears

In my case it did not

Horizon error

What I've found in two different installs this has been because of missing or invalid template and/or static cache. To rebuild it

sudo rm -rf /var/lib/openstack-dashboard/* 
sudo rm -rf /var/lib/horizon/* 
sudo python3 /usr/share/openstack-dashboard/manage.py collectstatic --noinput
sudo python3 /usr/share/openstack-dashboard/manage.py compress
sudo systemctl restart apache2

We might also need to reset the owner of the files in openstack-dashboard

sudo chown -R horizon:horizon /var/lib/openstack-dashboard/

Now the dashboard should load

Horizon dashboard loads