14 KiB
| sidebar_label | sidebar_position |
|---|---|
| Customize and configure the Dashboard | 1 |
import CodeBlock from '@site/src/components/CodeBloack';
Customize and configure the Dashboard
You can also configure the Dashboard for a secure HTTPS deployment, or an HTTP deployment. The standard OpenStack installation uses a non-encrypted HTTP channel, but you can enable SSL support for the Dashboard.
For information on configuring HTTPS or HTTP, see Configure the Dashboard.
<CodeBlock code={# apt-get remove --auto-remove openstack-dashboard-ubuntu-theme } />
- Logo
- Site colors
- HTML title
- Logo link
- Help URL
- Create two PNG logo files with transparent backgrounds using the following sizes:
• Login screen: 365 x 50
• Logged in banner: 216 x 35 - Upload your new images to ***/usr/share/openstack-dashboard/openstack_dashboard/static/dashboard/img/***.
- Create a CSS style sheet in ***/usr/share/openstack-dashboard/openstack_dashboard/static/dashboard/scss/***.
- Change the colors and image file names as appropriate. Ensure the relative directory paths are the same. The following example file shows you how to customize your CSS file:
<CodeBlock code={`/*
- New theme colors for dashboard that override the defaults:
- dark blue: #355796 / rgb(53, 87, 150)
- light blue: #BAD3E1 / rgb(186, 211, 225)
- By Preston Lee plee@tgen.org
*/
h1.brand {
background: #355796 repeat-x top left;
border-bottom: 2px solid #BAD3E1;
}
h1.brand a {
background: url(../img/my_cloud_logo_small.png) top left no-repeat;
}
#splash .login {
background: #355796 url(../img/my_cloud_logo_medium.png) no-repeat center 35px;
}
#splash .login .modal-header {
border-top: 1px solid #BAD3E1;
}
.btn-primary {
background-image: none !important;
background-color: #355796 !important;
border: none !important;
box-shadow: none;
}
.btn-primary:hover,
.btn-primary:active {
border: none;
box-shadow: none;
background-color: #BAD3E1 !important;
text-decoration: none;
}
`} />
<CodeBlock code={/usr/share/openstack-dashboard/openstack_dashboard/templates/_stylesheets.html } />
<CodeBlock code={`
`} /><CodeBlock code={SITE_BRANDING = "Example, Inc. Cloud" } />
<CodeBlock code={SITE_BRANDING_LINK = "http://example.com" } />
<CodeBlock code={HORIZON_CONFIG["help_url"] = "http://openstack.mycompany.org" } />
The following example shows this setting:
<CodeBlock code={`import os
from django.utils.translation import gettext_lazy as _
DEBUG = False TEMPLATE_DEBUG = DEBUG PROD = True
SITE_BRANDING = 'OpenStack Dashboard'
Ubuntu-specific: Enables an extra panel in the 'Settings' section
that easily generates a Juju environments.yaml for download,
preconfigured with endpoints and credentials required for bootstrap
and service deployment.
ENABLE_JUJU_PANEL = True
Note: You should change this value
SECRET_KEY = 'elj1IWiLoWHgryYxFT6j7cM5fGOOxWY0'
Specify a regular expression to validate user passwords.
HORIZON_CONFIG = {
"password_validator": {
"regex": '.*',
"help_text": _("Your password does not meet the requirements.")
}
}
LOCAL_PATH = os.path.dirname(os.path.abspath(file))
CACHES = { 'default': { 'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION' : '127.0.0.1:11211' } }
Send email to the console by default
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
Or send them to /dev/null
#EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend'
Configure these for your outgoing email host
EMAIL_HOST = 'smtp.my-company.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = 'djangomail'
EMAIL_HOST_PASSWORD = 'top-secret!'
For multiple regions uncomment this configuration, and add (endpoint, title).
AVAILABLE_REGIONS = [
('http://cluster1.example.com/identity/v3', 'cluster1'),
('http://cluster2.example.com/identity/v3', 'cluster2'),
]
OPENSTACK_HOST = "127.0.0.1" OPENSTACK_KEYSTONE_URL = "http://%s/identity/v3" % OPENSTACK_HOST OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member"
The OPENSTACK_KEYSTONE_BACKEND settings can be used to identify the
capabilities of the auth backend for Keystone.
If Keystone has been configured to use LDAP as the auth backend then set
can_edit_user to False and name to 'ldap'.
TODO(tres): Remove these once Keystone has an API to identify auth backend.
OPENSTACK_KEYSTONE_BACKEND = { 'name': 'native', 'can_edit_user': True }
OPENSTACK_ENDPOINT_TYPE specifies the endpoint type to use for the endpoints
in the Keystone service catalog. Use this setting when Horizon is running
external to the OpenStack environment. The default is 'internalURL'.
#OPENSTACK_ENDPOINT_TYPE = "publicURL"
The number of Swift containers and objects to display on a single page before
providing a paging element (a "more" link) to paginate results.
API_RESULT_LIMIT = 1000
If you have external monitoring links, eg:
EXTERNAL_MONITORING = [
['Nagios','http://foo.com'],
['Ganglia','http://bar.com'],
]
LOGGING = {
'version': 1,
# When set to True this will disable all logging except
# for loggers specified in this configuration dictionary. Note that
# if nothing is specified here and disable_existing_loggers is True,
# django.db.backends will still log unless it is disabled explicitly.
'disable_existing_loggers': False,
'handlers': {
'null': {
'level': 'DEBUG',
'class': 'logging.NullHandler',
},
'console': {
# Set the level to "DEBUG" for verbose output logging.
'level': 'INFO',
'class': 'logging.StreamHandler',
},
},
'loggers': {
# Logging from django.db.backends is VERY verbose, send to null
# by default.
'django.db.backends': {
'handlers': ['null'],
'propagate': False,
},
'horizon': {
'handlers': ['console'],
'propagate': False,
},
'novaclient': {
'handlers': ['console'],
'propagate': False,
},
'keystoneclient': {
'handlers': ['console'],
'propagate': False,
}
}
}
`} />
This example uses the ***http://openstack.example.com*** domain. Use a domain that fits your current setup.
<CodeBlock code={CSRF_COOKIE_SECURE = True SESSION_COOKIE_SECURE = True SESSION_COOKIE_HTTPONLY = True } />
<CodeBlock code={WSGIScriptAlias / /usr/share/openstack-dashboard/openstack_dashboard/wsgi.py WSGIDaemonProcess horizon user=www-data group=www-data processes=3 threads=10 Alias /static /usr/share/openstack-dashboard/openstack_dashboard/static/ <Location /> <ifVersion >=2.4> Require all granted </ifVersion> <ifVersion <2.4> Order allow,deny Allow from all </ifVersion> </Location> } />
<CodeBlock code={`<VirtualHost :80> ServerName openstack.example.com RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.) https://%{HTTP_HOST}%{REQUEST_URI} <IfModule !mod_rewrite.c> RedirectPermanent / https://openstack.example.com
<VirtualHost *:443> ServerName openstack.example.com
SSLEngine On
Remember to replace certificates and keys with valid paths in your environment
SSLCertificateFile /etc/apache2/SSL/openstack.example.com.crt SSLCACertificateFile /etc/apache2/SSL/openstack.example.com.crt SSLCertificateKeyFile /etc/apache2/SSL/openstack.example.com.key SetEnvIf User-Agent ".MSIE." nokeepalive ssl-unclean-shutdown
HTTP Strict Transport Security (HSTS) enforces that all communications
with a server go over SSL. This mitigates the threat from attacks such
as SSL-Strip which replaces links on the wire, stripping away https prefixes
and potentially allowing an attacker to view confidential information on the
wire
Header add Strict-Transport-Security "max-age=15768000"
WSGIScriptAlias / /usr/share/openstack-dashboard/openstack_dashboard/wsgi.py WSGIDaemonProcess horizon user=www-data group=www-data processes=3 threads=10 Alias /static /usr/share/openstack-dashboard/openstack_dashboard/static/ Options None AllowOverride None # For Apache http server 2.4 and later: =2.4> Require all granted # For Apache http server 2.2 and earlier: <ifVersion <2.4> Order allow,deny Allow from all `} />
If you try to access the Dashboard through HTTP, the browser redirects you to the HTTPS page.
<CodeBlock code={`[DEFAULT]
...
ssl_only = true
cert = /etc/apache2/SSL/openstack.example.com.crt
key = /etc/apache2/SSL/openstack.example.com.key
`} />
<CodeBlock code={`[DEFAULT]
...
novncproxy_base_url = https://controller:6080/vnc_auto.html
`} />