This series of articles will teach you how to build an OpenStack development environment from scratch across multiple OpenStack systems. The installation version of OpenStack used in the current tutorial is version 20 Train (version T for short). Release Note Train, Originally Released: 16 October, 2019 13 May, 2020 Victoria, Originally Released: 14 October, 2020

The nuggets community


OpenStack Ussuri offline Deployment: OpenStack Train Offline Deployment: OpenStack Ussuri Offline deployment

OpenStack Train Offline deployment | 0 Local offline deployment yum OpenStack Train offline deployment | 1 Controller node – Environment Preparation OpenStack Train Offline deployment | 2 Compute node – Environment Preparation OpenStack Train offline deployment | 3 controller nodes -Keystone authentication service component OpenStack Train offline deployment | 4 controller nodes -Glance image service component OpenStack Train offline deployment | 5 Controller nodes -Placement service component OpenStack Train Offline deployment | 6.1 Controller Node -Nova Computing service component OpenStack Train Offline deployment | 6.2 Compute Node -Nova Computing service Component OpenStack Train Offline deployment | 6.3 Controller Node -Nova Computing service component OpenStack Train Offline Deployment | 7.1 Controller Node -Neutron Network service Component OpenStack Train Offline Deployment | 7.2 Compute Node -Neutron Network service Component OpenStack Train deployment | 7.3 Controller Node -Neutron Service component OpenStack Train Deployment | 8 Controller Node -Horizon Service component OpenStack Train Deployment | 9 Start an OpenStack instance Train Offline deployment | 10 Controller node -Heat service component OpenStack Train Offline deployment | 11.1 Controller Node -Cinder Storage Service Component OpenStack Train Offline deployment | 11.2 Storage node -Cinder storage service component OpenStack Train Offline Deployment | 11.3 Controller Node -Cinder Storage Service Component OpenStack Train Offline Deployment | 11.4 Compute Node -Cinder Storage Service Component OpenStack Offline Deployment of Train | 11.5 Instance Using -Cinder storage service components


Gold Mining community: Customizing OpenStack Images | Customizing OpenStack images | Environment Preparation Customizing OpenStack images | Windows7 Customizing OpenStack images | Windows10 Customizing OpenStack images | Linux Customize an OpenStack image | Windows Server2019


CSDN

CSDN: OpenStack Ussuri Offline Installation and Deployment Series (full) OpenStack Train Offline Installation and Deployment Series (full) Looking forward to making progress together with you.


OpenStack Train Offline deployment | 8 Controller Node -Horizon service component

Official reference: OpenStack Official Installation Guide: Service components horizon-install horizon-install-rdo horizon-verify-rdo Blog: CentOS7 Installing OpenStack(Rocky version)-07 Install the Horizon service component (controller node Dashboard) OpenStack train-10. Install the Horizon service (compute node) OpenStack Train-11. Install the Horizon Service on a compute node.

1. Service Description

The project name for the OpenStack Dashboard service is Horizon. The only service required is the identity service Keystone, and the development language is Django, a Python Web framework. As of the Stein release, Horizon supports the following services:

  • Cinder: indicates block storage
  • Glance: Image management
  • Neutron: network
  • Nova: calculate
  • Swift: Object storage

If the keystone endpoint has been configured, Horizon detects the endpoint and automatically enables it. Horizon also supports many other OpenStack services through plug-ins.

The Ussuri distribution (the next release after Train) will use Django 2.2 as the primary Django release. Django 2.0 support will be removed.

Note: ① The dashboard service Horizon can be installed on compute Node (Compute01). The Apache is required to run the Horizon. To avoid affecting the Apache used by other services, such as Keystone, on the controller node, you can also install the Apache on the compute node. ② Before the installation, check whether the previously installed services are started properly.

③ This series of tutorials is installed on a controller node.

Install and configure dashboard software

yum install openstack-dashboard -y
Copy the code

3. Modify the configuration file

1.local_settings

/etc/openstack-dashboard/local_settings Check the following configurations

Methods a

In actual deployment, method 3 is used. In method 1, set the network-related configurations to True and False based on the actual situation.

vim /etc/openstack-dashboard/local_settings
Copy the code
ALLOWED_HOSTS = ['*', ] SESSION_ENGINE = 'django.contrib.sessions.backends.cache' OPENSTACK_API_VERSIONS = { "identity": 3, "image": 2, "volume": 2, } OPENSTACK_HOST = "controller" OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user" OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True OPENSTACK_KEYSTONE_DEFAULT_DOMAIN  = "default" CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'controller:11211', } } OPENSTACK_NEUTRON_NETWORK = { 'enable_router': False, 'enable_quotas': False, 'enable_distributed_router': False, 'enable_ha_router': False, 'enable_fip_topology_check': False, 'enable_lb': False, 'enable_firewall': False, 'enable_vpn': False, } TIME_ZONE = "Asia/Shanghai"Copy the code

Method 2

#The other waySed -i.bak '/^OPENSTACK_HOST/s#127.0.0.1#controller#' /etc/openstack-dashboard/local_settings sed -i '/^OPENSTACK_KEYSTONE_DEFAULT_ROLE/s#".*"#"user"#' /etc/openstack-dashboard/local_settings sed -i "/^ALLOWED_HOSTS/s#\[.*\]#['*']#" /etc/openstack-dashboard/local_settings sed -i '/^#SESSION_ENGINE/s/#//' /etc/openstack-dashboard/local_settings sed -i "/^SESSION_ENGINE/s#'.*'#'django.contrib.sessions.backends.cache'#" /etc/openstack-dashboard/local_settings OPENSTACK_KEYSTONE_BACKEND = { 215 'name': 'native', 216 'can_edit_user': True, 217 'can_edit_group': True, 218 'can_edit_project': True, 219 'can_edit_domain': True, 220 'can_edit_role': True, 221 }Copy the code

Note: Note some Python syntax formats.

Methods three

Write the configuration file, back up the original file, and replace it directly.

cp -a /etc/openstack-dashboard/local_settings{,.bak}
/bin/cp -rf  ./local_settings /etc/openstack-dashboard/local_settings

Copy the code

The file content is as follows

#
# -*- coding: utf-8 -*-

# ----------------------------------------------------------------------
# NOTE: The default values of the settings are defined in
# openstack_dashboard/defaults.py. Prevously most available settings
# were listed in this example file, but it is no longer true.
# For available settings, see openstack_dashboard/defaults.py and
# the horizon setting reference found at
# https://docs.openstack.org/horizon/latest/configuration/settings.html.
#
# Django related settings and HORIZON_CONFIG still exist here.
# Keep in my mind that they will be revisit in upcoming releases.
# ----------------------------------------------------------------------

import os

from django.utils.translation import ugettext_lazy as _


from openstack_dashboard.settings import HORIZON_CONFIG

DEBUG = False

# This setting controls whether or not compression is enabled. Disabling
# compression makes Horizon considerably slower, but makes it much easier
# to debug JS and CSS changes
#COMPRESS_ENABLED = not DEBUG

# This setting controls whether compression happens on the fly, or offline
# with `python manage.py compress`
# See https://django-compressor.readthedocs.io/en/latest/usage/#offline-compression
# for more information
#COMPRESS_OFFLINE = not DEBUG

# If horizon is running in production (DEBUG is False), set this
# with the list of host/domain names that the application can serve.
# For more information see:
# https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
#ALLOWED_HOSTS = ['horizon.example.com', 'localhost']
ALLOWED_HOSTS = ['*',]

# Set SSL proxy settings:
# Pass this header from the proxy after terminating the SSL,
# and don't forget to strip it from the client's request.
# For more information see:
# https://docs.djangoproject.com/en/dev/ref/settings/#secure-proxy-ssl-header
#SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

# If Horizon is being served through SSL, then uncomment the following two
# settings to better secure the cookies from security exploits
#CSRF_COOKIE_SECURE = True
#SESSION_COOKIE_SECURE = True

# If provided, a "Report Bug" link will be displayed in the site header
# which links to the value of this setting (ideally a URL containing
# information on how to report issues).
#HORIZON_CONFIG["bug_url"] = "http://bug-report.example.com"

# Show backdrop element outside the modal, do not close the modal
# after clicking on backdrop.
#HORIZON_CONFIG["modal_backdrop"] = "static"

# Specify a regular expression to validate user passwords.
#HORIZON_CONFIG["password_validator"] = {
#    "regex": '.*',
#    "help_text": _("Your password does not meet the requirements."),
#}

# Turn off browser autocompletion for forms including the login form and
# the database creation workflow if so desired.
#HORIZON_CONFIG["password_autocomplete"] = "off"

# Setting this to True will disable the reveal button for password fields,
# including on the login form.
#HORIZON_CONFIG["disable_password_reveal"] = False

LOCAL_PATH = '/tmp'

# Set custom secret key:
# You can either set it to a specific value or you can let horizon generate a
# default secret key that is unique on this machine, e.i. regardless of the
# amount of Python WSGI workers (if used behind Apache+mod_wsgi): However,
# there may be situations where you would want to set this explicitly, e.g.
# when multiple dashboard instances are distributed on different machines
# (usually behind a load-balancer). Either you have to make sure that a session
# gets all requests routed to the same dashboard instance or you set the same
# SECRET_KEY for all of them.
SECRET_KEY='3345bb8247a669fe58e2'

# We recommend you use memcached for development; otherwise after every reload
# of the django development server, you will have to login again. To use
# memcached set CACHES to something like below.
# For more information, see
# https://docs.djangoproject.com/en/1.11/topics/http/sessions/.
#CACHES = {
#    'default': {
#        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
#        'LOCATION': '127.0.0.1:11211',
#    },
#}
CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': 'controller:11211',
    }
}




# If you use ``tox -e runserver`` for developments,then configure
# SESSION_ENGINE to django.contrib.sessions.backends.signed_cookies
# as shown below:
#SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

# 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!'

#OPENSTACK_HOST = "127.0.0.1"
OPENSTACK_HOST = "controller"

#unchanged
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST

#add new
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
#add new
OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 3,
}

#unchanged
# The OPENSTACK_NEUTRON_NETWORK settings can be used to enable optional
# services provided by neutron. Options currently available are load
# balancer service, security groups, quotas, VPN service.
OPENSTACK_NEUTRON_NETWORK = {
    'enable_auto_allocated_network': False,
    'enable_distributed_router': False,
    'enable_fip_topology_check': True,
    'enable_ha_router': False,
    'enable_ipv6': True,
    # TODO(amotoki): Drop OPENSTACK_NEUTRON_NETWORK completely from here.
    # enable_quotas has the different default value here.
    'enable_quotas': True,
    'enable_rbac_policy': True,
    'enable_router': True,

    'default_dns_nameservers': [],
    'supported_provider_types': ['*'],
    'segmentation_id_range': {},
    'extra_provider_types': {},
    'supported_vnic_types': ['*'],
    'physical_networks': [],

}

# The timezone of the server. This should correspond with the timezone
# of your entire OpenStack installation, and hopefully be in UTC.
#TIME_ZONE = "UTC"
TIME_ZONE = "Asia/Shanghai"

# Change this patch to the appropriate list of tuples containing
# a key, label and static directory containing two files:
# _variables.scss and _styles.scss
#AVAILABLE_THEMES = [
#    ('default', 'Default', 'themes/default'),
#    ('material', 'Material', 'themes/material'),
#    ('example', 'Example', 'themes/example'),
#]

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,
    # If apache2 mod_wsgi is used to deploy OpenStack dashboard
    # timestamp is output by mod_wsgi. If WSGI framework you use does not
    # output timestamp for logging, add %(asctime)s in the following
    # format definitions.
    'formatters': {
        'console': {
            'format': '%(levelname)s %(name)s %(message)s'
        },
        'operation': {
            # The format of "%(message)s" is defined by
            # OPERATION_LOG_OPTIONS['format']
            'format': '%(message)s'
        },
    },
    'handlers': {
        'null': {
            'level': 'DEBUG',
            'class': 'logging.NullHandler',
        },
        'console': {
            # Set the level to "DEBUG" for verbose output logging.
            'level': 'DEBUG' if DEBUG else 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'console',
        },
        'operation': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'operation',
        },
    },
    'loggers': {
        'horizon': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'horizon.operation_log': {
            'handlers': ['operation'],
            'level': 'INFO',
            'propagate': False,
        },
        'openstack_dashboard': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'novaclient': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'cinderclient': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'keystoneauth': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'keystoneclient': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'glanceclient': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'neutronclient': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'swiftclient': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'oslo_policy': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'openstack_auth': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'django': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        # Logging from django.db.backends is VERY verbose, send to null
        # by default.
        'django.db.backends': {
            'handlers': ['null'],
            'propagate': False,
        },
        'requests': {
            'handlers': ['null'],
            'propagate': False,
        },
        'urllib3': {
            'handlers': ['null'],
            'propagate': False,
        },
        'chardet.charsetprober': {
            'handlers': ['null'],
            'propagate': False,
        },
        'iso8601': {
            'handlers': ['null'],
            'propagate': False,
        },
        'scss': {
            'handlers': ['null'],
            'propagate': False,
        },
    },
}

# 'direction' should not be specified for all_tcp/udp/icmp.
# It is specified in the form.
SECURITY_GROUP_RULES = {
    'all_tcp': {
        'name': _('All TCP'),
        'ip_protocol': 'tcp',
        'from_port': '1',
        'to_port': '65535',
    },
    'all_udp': {
        'name': _('All UDP'),
        'ip_protocol': 'udp',
        'from_port': '1',
        'to_port': '65535',
    },
    'all_icmp': {
        'name': _('All ICMP'),
        'ip_protocol': 'icmp',
        'from_port': '-1',
        'to_port': '-1',
    },
    'ssh': {
        'name': 'SSH',
        'ip_protocol': 'tcp',
        'from_port': '22',
        'to_port': '22',
    },
    'smtp': {
        'name': 'SMTP',
        'ip_protocol': 'tcp',
        'from_port': '25',
        'to_port': '25',
    },
    'dns': {
        'name': 'DNS',
        'ip_protocol': 'tcp',
        'from_port': '53',
        'to_port': '53',
    },
    'http': {
        'name': 'HTTP',
        'ip_protocol': 'tcp',
        'from_port': '80',
        'to_port': '80',
    },
    'pop3': {
        'name': 'POP3',
        'ip_protocol': 'tcp',
        'from_port': '110',
        'to_port': '110',
    },
    'imap': {
        'name': 'IMAP',
        'ip_protocol': 'tcp',
        'from_port': '143',
        'to_port': '143',
    },
    'ldap': {
        'name': 'LDAP',
        'ip_protocol': 'tcp',
        'from_port': '389',
        'to_port': '389',
    },
    'https': {
        'name': 'HTTPS',
        'ip_protocol': 'tcp',
        'from_port': '443',
        'to_port': '443',
    },
    'smtps': {
        'name': 'SMTPS',
        'ip_protocol': 'tcp',
        'from_port': '465',
        'to_port': '465',
    },
    'imaps': {
        'name': 'IMAPS',
        'ip_protocol': 'tcp',
        'from_port': '993',
        'to_port': '993',
    },
    'pop3s': {
        'name': 'POP3S',
        'ip_protocol': 'tcp',
        'from_port': '995',
        'to_port': '995',
    },
    'ms_sql': {
        'name': 'MS SQL',
        'ip_protocol': 'tcp',
        'from_port': '1433',
        'to_port': '1433',
    },
    'mysql': {
        'name': 'MYSQL',
        'ip_protocol': 'tcp',
        'from_port': '3306',
        'to_port': '3306',
    },
    'rdp': {
        'name': 'RDP',
        'ip_protocol': 'tcp',
        'from_port': '3389',
        'to_port': '3389',
    },
}

# Help URL can be made available for the client. To provide a help URL, edit the
# following attribute to the URL of your choice.
#HORIZON_CONFIG["help_url"] = "http://openstack.mycompany.org"

Copy the code

2.openstack-dashboard.conf

The/etc/HTTPD/conf. D/it – dashboard. Conf if there are no new added

vim /etc/httpd/conf.d/openstack-dashboard.conf
#add follow
WSGIApplicationGroup %{GLOBAL}
Copy the code

3. Restart the Apache service and session storage service

systemctl restart httpd.service memcached.service
systemctl status httpd.service memcached.service
#Since Dashboard works by deleting all files from the site and then copying them again, restarting HTTPD will take a while.  
Copy the code

4. Check whether the dashboard is available

Browser direct access: http://192.168.232.101 do not need to add dashboard after the address. Whether you need to enter domain default depends on the OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT content configured in the /etc/openstack-dashboard/local_settings file. User name: admin; Password: admin.

4. Dashboard access problems

At this time, although dashboard can be accessed and dashboard is not required to be entered in the URL, an error will be reported when the page cannot be opened during project management of the system.

1. To rebuild it – dashboard. Conf

The following is to rebuild and modify the configuration of openstack-dashboard.conf.

# sw 'Rebuild openstack-dashboard.conf'
cd /usr/share/openstack-dashboard
python manage.py make_web_conf --apache > /etc/httpd/conf.d/openstack-dashboard.conf

ln -s /etc/openstack-dashboard /usr/share/openstack-dashboard/openstack_dashboard/conf

cp -a /usr/share/openstack-dashboard/openstack_dashboard/defaults.py{,.bak}
cp -a /usr/share/openstack-dashboard/openstack_dashboard/test/settings.py{,.bak}
cp -a /usr/share/openstack-dashboard/static/dashboard/js/9937cc9f2cae.js{,.bak}

# sw 'Change WEBROOT'
#vim /usr/share/openstack-dashboard/openstack_dashboard/defaults.py
#line32
#WEBROOT = '/'  # from openstack_auth
sed -i "32c WEBROOT = '/dashboard'  # from openstack_auth" /usr/share/openstack-dashboard/openstack_dashboard/defaults.py

#vim /usr/share/openstack-dashboard/openstack_dashboard/test/settings.py
#line32
#WEBROOT = '/'
sed -i "32c WEBROOT = '/dashboard'" /usr/share/openstack-dashboard/openstack_dashboard/test/settings.py

#vim /usr/share/openstack-dashboard/static/dashboard/js/9937cc9f2cae.js
#line1
#var STATIC_URL="/dashboard/static/"; var WEBROOT="/"; / *!sed -i '1c var STATIC_URL="/dashboard/static/"; var WEBROOT="/dashboard/"; / *! ' /usr/share/openstack-dashboard/static/dashboard/js/9937cc9f2cae.js
# sw 'Configuration of /etc/httpd/conf.d/openstack-dashboard.conf'
cp -a  /etc/httpd/conf.d/openstack-dashboard.conf{,.bak}
#sed -in '3a WSGIApplicationGroup %{GLOBAL}' /etc/httpd/conf.d/openstack-dashboard.conf
sed -i '19c WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi' /etc/httpd/conf.d/openstack-dashboard.conf
sed -i '20c WSGIScriptAlias / /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi' /etc/httpd/conf.d/openstack-dashboard.conf
sed -i '25c Alias /dashboard/static /usr/share/openstack-dashboard/static' /etc/httpd/conf.d/openstack-dashboard.conf
Copy the code

2. Restart the Apache service and session storage service

systemctl restart httpd.service memcached.service
systemctl status httpd.service memcached.service

Copy the code
source /root/admin-openrc
openstack flavor create --id 0 --vcpus 1 --ram 256 --disk 0 1U256M0G
openstack flavor create --id 1 --vcpus 1 --ram 1024 --disk 0 1U1GM0G
openstack flavor list
Copy the code

At this point, you can access the echo ‘http://controller:80/dashboard’ echo ‘domain: the default’ echo ‘user name: admin’ echo “password:” ${ADMIN_PASS} “”

Five, the official steps to install the Train version, common problems

1. Reference links

Blog.csdn.net/weixin_2873…

www.cnblogs.com/omgasw/p/11…

Blog.51cto.com/11694088/24…

yinwucheng.com/?p=478

yinwucheng.com/?p=489

www.cnblogs.com/omgasw/p/12…

Blog.csdn.net/weixin_4275…

2. After accessing /dashboard, jump to /auth/login report 404 (the following two steps can solve the dashboard access 404 problem, please skip this step)

Solution: Rebuild the Dashboard configuration file of the Apache service

cd /usr/share/openstack-dashboard
python manage.py make_web_conf --apache > /etc/httpd/conf.d/openstack-dashboard.conf
Copy the code

3.. A permission error occurs when you log in to Dashboard

The solution is as follows: Create a soft link to the policy file (policy-. json)

ln -s /etc/openstack-dashboard /usr/share/openstack-dashboard/openstack_dashboard/conf
Copy the code

4. Projects, users, groups, and roles in identity management cannot be opened

Daemon process called ‘keystone-public’ cannot be factcheck.org by this WSGI application: /usr/bin/ keykeystone -wsgi-public /usr/bin/ keykeystone -wsgi-public /usr/bin/ keykeystone -wsgi-public /usr/bin/ keykeystone -wsgi-public /usr/bin/ keykeystone -wsgi-public /usr/bin/ keykeystone -wsgi-public /usr/bin/ keykeystone -wsgi-public

vim /usr/share/openstack-dashboard/openstack_dashboard/defaults.py
vim /usr/share/openstack-dashboard/openstack_dashboard/test/settings.py
vim /usr/share/openstack-dashboard/static/dashboard/js/9937cc9f2cae.js
Copy the code

The Apache service and session storage service are restarted

systemctl restart httpd.service memcached.service
systemctl status httpd.service memcached.service
Copy the code

Check whether the dashboard can be accessed using a browser: http://192.168.232.101 does not need to add a dashboard after the address. Whether you need to enter domain default depends on the OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT content configured in the /etc/openstack-dashboard/local_settings file. User name: admin; Password: admin.

Modify the WEBROOT


  737  2020/04/26-14:17:43 by root: vim /usr/share/openstack-dashboard/static/dashboard/js/9937cc9f2cae.js
  738  2020/04/26-14:18:18 by root: vim /usr/share/openstack-dashboard/static/dashboard/js/64d85423c263.js
  739  2020/04/26-14:18:29 by root: vim /usr/share/openstack-dashboard/static/dashboard/js/b5e88d434bd1.js
Copy the code

Modify the HTTPD

  741  2020/04/26-14:19:45 by root: vim /etc/httpd/conf.d/openstack-dashboard.conf
#    WSGIScriptAlias / /usr/share/openstack-dashboard/openstack_dashboard/wsgi.py
    WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi
    WSGIScriptAlias / /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi
#    Alias /static /usr/share/openstack-dashboard/static
     Alias /dashboard/static /usr/share/openstack-dashboard/static
Copy the code

Modify local_settings

749  2020/04/26-14:26:50 by root: vim /etc/openstack-dashboard/local_settings

Copy the code

The role configuration in is related to the establishment. 5. The project role name is changed to _member_ when Keystone is created