安装openstack仪表盘Dashboard
一、仪表盘服务horizon的介绍
Dashboard(horizon)是一个web接口,使得云平台管理员以及用户可以管理不同的Openstack资源以及服务。这个部署示例使用的是 Apache Web 服务器。
它是使用python django框架开发的,它没有自己的数据库,web页面展示,全程依赖调用其他服务的api。
二、安装和配置Dashboard
在计算节点进行安装配置(在计算节点和控制节点都行),keystone安装在控制节点,也用Apache,horizon也是使用Apache,一旦Apache配置错误,重启Apache,horizon和keystone都挂了。没有自己数据库,web页面展示,全程依赖调用其他服务的api
1. 安装软件包
[root@computer1 ~]# yum install openstack-dashboard python-memcached -y
2. 编辑文件 /etc/openstack-dashboard/local_settings 并完成如下动作
[root@computer1 ~]# cp /etc/openstack-dashboard/local_settings{,.bak} [root@computer1 ~]# grep -Ev "^$|#" /etc/openstack-dashboard/local_settings.bak >/etc/openstack-dashboard/local_settings [root@computer1 ~]# cat /etc/openstack-dashboard/local_settings import os from django.utils.translation import ugettext_lazy as _ from openstack_dashboard import exceptions from openstack_dashboard.settings import HORIZON_CONFIG DEBUG = False TEMPLATE_DEBUG = DEBUG WEBROOT = '/dashboard/' ALLOWED_HOSTS = ['horizon.example.com', 'localhost'] LOCAL_PATH = '/tmp' SECRET_KEY='719d36f09122f749bd0f' CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', }, } EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' OPENSTACK_HOST = "127.0.0.1" OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_HOST OPENSTACK_KEYSTONE_DEFAULT_ROLE = "_member_" OPENSTACK_KEYSTONE_BACKEND = { 'name': 'native', 'can_edit_user': True, 'can_edit_group': True, 'can_edit_project': True, 'can_edit_domain': True, 'can_edit_role': True, } OPENSTACK_HYPERVISOR_FEATURES = { 'can_set_mount_point': False, 'can_set_password': False, 'requires_keypair': False, } OPENSTACK_CINDER_FEATURES = { 'enable_backup': False, } OPENSTACK_NEUTRON_NETWORK = { 'enable_router': True, 'enable_quotas': True, 'enable_ipv6': True, 'enable_distributed_router': False, 'enable_ha_router': False, 'enable_lb': True, 'enable_firewall': True, 'enable_vpn': True, 'enable_fip_topology_check': True, 'default_ipv4_subnet_pool_label': None, 'default_ipv6_subnet_pool_label': None, 'profile_support': None, 'supported_provider_types': ['*'], 'supported_vnic_types': ['*'], } OPENSTACK_HEAT_STACK = { 'enable_user_pass': True, } IMAGE_CUSTOM_PROPERTY_TITLES = { "architecture": _("Architecture"), "kernel_id": _("Kernel ID"), "ramdisk_id": _("Ramdisk ID"), "image_state": _("Euca2ools state"), "project_id": _("Project ID"), "image_type": _("Image Type"), } IMAGE_RESERVED_CUSTOM_PROPERTIES = [] API_RESULT_LIMIT = 1000 API_RESULT_PAGE_SIZE = 20 SWIFT_FILE_TRANSFER_CHUNK_SIZE = 512 * 1024 DROPDOWN_MAX_ITEMS = 30 TIME_ZONE = "UTC" POLICY_FILES_PATH = '/etc/openstack-dashboard' LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'null': { 'level': 'DEBUG', 'class': 'logging.NullHandler', }, 'console': { 'level': 'INFO', 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['null'], 'propagate': False, }, 'requests': { 'handlers': ['null'], 'propagate': False, }, 'horizon': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'openstack_dashboard': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'novaclient': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'cinderclient': { '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, }, 'heatclient': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'ceilometerclient': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'swiftclient': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'openstack_auth': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'nose.plugins.manager': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'django': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'iso8601': { 'handlers': ['null'], 'propagate': False, }, 'scss': { 'handlers': ['null'], 'propagate': False, }, }, } 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', }, } REST_API_REQUIRED_SETTINGS = ['OPENSTACK_HYPERVISOR_FEATURES', 'LAUNCH_INSTANCE_DEFAULTS']
允许所有主机访问仪表板
配置 memcached 会话存储服务
启用第3版认证API
启用对域的支持
配置API版本
通过仪表盘创建用户时的默认域配置为 default
通过仪表盘创建的用户默认角色配置为 user
如果您选择网络参数1,禁用支持3层网络服务
可以选择性地配置时区
[root@computer1 ~]# vim /etc/openstack-dashboard/local_settings [root@computer1 ~]# cat /etc/openstack-dashboard/local_settings import os from django.utils.translation import ugettext_lazy as _ from openstack_dashboard import exceptions from openstack_dashboard.settings import HORIZON_CONFIG DEBUG = False TEMPLATE_DEBUG = DEBUG WEBROOT = '/dashboard/' ALLOWED_HOSTS = ['*', ] LOCAL_PATH = '/tmp' SECRET_KEY='719d36f09122f749bd0f' SESSION_ENGINE = 'django.contrib.sessions.backends.cache' CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'controller:11211', }, } EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' 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" OPENSTACK_API_VERSIONS = { "identity": 3, "image": 2, "volume": 2, } OPENSTACK_KEYSTONE_BACKEND = { 'name': 'native', 'can_edit_user': True, 'can_edit_group': True, 'can_edit_project': True, 'can_edit_domain': True, 'can_edit_role': True, } OPENSTACK_HYPERVISOR_FEATURES = { 'can_set_mount_point': False, 'can_set_password': False, 'requires_keypair': False, } OPENSTACK_CINDER_FEATURES = { 'enable_backup': False, } OPENSTACK_NEUTRON_NETWORK = { 'enable_router': False, 'enable_quotas': False, 'enable_ipv6': False, 'enable_distributed_router': False, 'enable_ha_router': False, 'enable_lb': False, 'enable_firewall': False, 'enable_vpn': False, 'enable_fip_topology_check': True, 'default_ipv4_subnet_pool_label': None, 'default_ipv6_subnet_pool_label': None, 'profile_support': None, 'supported_provider_types': ['*'], 'supported_vnic_types': ['*'], } OPENSTACK_HEAT_STACK = { 'enable_user_pass': True, } IMAGE_CUSTOM_PROPERTY_TITLES = { "architecture": _("Architecture"), "kernel_id": _("Kernel ID"), "ramdisk_id": _("Ramdisk ID"), "image_state": _("Euca2ools state"), "project_id": _("Project ID"), "image_type": _("Image Type"), } IMAGE_RESERVED_CUSTOM_PROPERTIES = [] API_RESULT_LIMIT = 1000 API_RESULT_PAGE_SIZE = 20 SWIFT_FILE_TRANSFER_CHUNK_SIZE = 512 * 1024 DROPDOWN_MAX_ITEMS = 30 TIME_ZONE = "Asia/Shanghai" POLICY_FILES_PATH = '/etc/openstack-dashboard' LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'null': { 'level': 'DEBUG', 'class': 'logging.NullHandler', }, 'console': { 'level': 'INFO', 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['null'], 'propagate': False, }, 'requests': { 'handlers': ['null'], 'propagate': False, }, 'horizon': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'openstack_dashboard': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'novaclient': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'cinderclient': { '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, }, 'heatclient': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'ceilometerclient': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'swiftclient': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'openstack_auth': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'nose.plugins.manager': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'django': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'iso8601': { 'handlers': ['null'], 'propagate': False, }, 'scss': { 'handlers': ['null'], 'propagate': False, }, }, } 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', }, } REST_API_REQUIRED_SETTINGS = ['OPENSTACK_HYPERVISOR_FEATURES', 'LAUNCH_INSTANCE_DEFAULTS']
3.完成安装
启动web服务器
[root@computer1 ~]# systemctl start httpd.service
[root@computer1 ~]# systemctl status httpd.service ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/httpd.service.d └─openstack-dashboard.conf Active: active (running) since Sun 2020-11-15 21:35:47 CST; 3min 5s ago Docs: man:httpd(8) man:apachectl(8) Process: 3806 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS) Process: 3827 ExecStartPre=/usr/bin/python /usr/share/openstack-dashboard/manage.py compress --force (code=exited, status=0/SUCCESS) Process: 3810 ExecStartPre=/usr/bin/python /usr/share/openstack-dashboard/manage.py collectstatic --noinput --clear (code=exited, status=0/SUCCESS) Main PID: 3848 (httpd) Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec" Tasks: 24 CGroup: /system.slice/httpd.service ├─3848 /usr/sbin/httpd -DFOREGROUND ├─3850 /usr/sbin/httpd -DFOREGROUND ├─3851 /usr/sbin/httpd -DFOREGROUND ├─3852 /usr/sbin/httpd -DFOREGROUND ├─3853 /usr/sbin/httpd -DFOREGROUND ├─3854 /usr/sbin/httpd -DFOREGROUND └─3855 /usr/sbin/httpd -DFOREGROUND Nov 15 21:35:28 computer1 python[3810]: Deleting 'themes/default/horizon/_styles.scss' Nov 15 21:35:28 computer1 python[3810]: Deleting 'themes/default/horizon/_variables.scss' Nov 15 21:35:28 computer1 python[3810]: Deleting 'themes/default/horizon/components/_breadcrumb_header.scss' Nov 15 21:35:28 computer1 python[3810]: Deleting 'themes/default/horizon/components/_context_selection.scss' Nov 15 21:35:28 computer1 python[3810]: Deleting 'themes/default/horizon/components/_login.scss' Nov 15 21:35:28 computer1 python[3810]: Deleting 'themes/default/horizon/components/_messages.scss' Nov 15 21:35:28 computer1 python[3810]: Deleting 'themes/default/horizon/components/_navbar.scss' Nov 15 21:35:28 computer1 python[3810]: Deleting 'themes/default/horizon/components/_pie_charts.scss' Nov 15 21:35:28 computer1 python[3810]: Deleting 'themes/default/horizon/components/_quota.scss' Nov 15 21:35:47 computer1 systemd[1]: Started The Apache HTTP Server. [root@computer1 ~]# lsof -i:80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 3848 root 4u IPv6 45527 0t0 TCP *:http (LISTEN) httpd 3851 apache 4u IPv6 45527 0t0 TCP *:http (LISTEN) httpd 3852 apache 4u IPv6 45527 0t0 TCP *:http (LISTEN) httpd 3853 apache 4u IPv6 45527 0t0 TCP *:http (LISTEN) httpd 3854 apache 4u IPv6 45527 0t0 TCP *:http (LISTEN) httpd 3855 apache 4u IPv6 45527 0t0 TCP *:http (LISTEN)
三、验证操作
在浏览器中输入 http://10.0.0.12/dashboard访问仪表盘
查看httpd错误日志
cat /var/log/httpd/error_log
......
[Sun Nov 15 21:57:03.302758 2020] [:error] [pid 4599] [remote 10.0.0.253:20] self._do_open() [Sun Nov 15 21:57:03.302767 2020] [:error] [pid 4599] [remote 10.0.0.253:20] File "/usr/lib/python2.7/site-packages/fasteners/process_lock.py", line 123, in _do_open [Sun Nov 15 21:57:03.302783 2020] [:error] [pid 4599] [remote 10.0.0.253:20] self.lockfile = open(self.path, 'a') [Sun Nov 15 21:57:03.302808 2020] [:error] [pid 4599] [remote 10.0.0.253:20] IOError: [Errno 13] Permission denied: '/usr/share/openstack-dashboard/openstack_dashboard/local/_usr_share_openstack-dashboard_openstack_dashboard_local_.secret_key_store.lock'
[root@computer1 ~]# cat /var/log/httpd/error_log [Thu Nov 19 21:42:28.585997 2020] [suexec:notice] [pid 6104] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe12:ea79. Set the 'ServerName' directive globally to suppress this message [Thu Nov 19 21:42:28.856196 2020] [auth_digest:notice] [pid 6104] AH01757: generating secret for digest authentication ... [Thu Nov 19 21:42:28.856922 2020] [lbmethod_heartbeat:notice] [pid 6104] AH02282: No slotmem from mod_heartmonitor [Thu Nov 19 21:42:28.869737 2020] [mpm_prefork:notice] [pid 6104] AH00163: Apache/2.4.6 (CentOS) mod_wsgi/3.4 Python/2.7.5 configured -- resuming normal operations [Thu Nov 19 21:42:28.869771 2020] [core:notice] [pid 6104] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND' [Thu Nov 19 21:44:49.556652 2020] [core:error] [pid 6108] [client 10.0.0.12:42766] Script timed out before returning headers: django.wsgi [Thu Nov 19 21:45:06.613380 2020] [core:error] [pid 6110] [client 10.0.0.253:59725] Script timed out before returning headers: django.wsgi
解决办法:
[root@computer1 ~]# chown -R apache:apache /usr/share/openstack-dashboard/
在/etc/httpd/conf.d/openstack-dashboard.conf添加一行WSGIApplicationGroup %{GLOBAL}
[root@computer1 ~]# cp /etc/httpd/conf.d/openstack-dashboard.conf{,.bak} [root@computer1 ~]# vim /etc/httpd/conf.d/openstack-dashboard.conf [root@computer1 ~]# cat /etc/httpd/conf.d/openstack-dashboard.conf WSGIDaemonProcess dashboard WSGIProcessGroup dashboard WSGISocketPrefix run/wsgi WSGIApplicationGroup %{GLOBAL} WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi Alias /dashboard/static /usr/share/openstack-dashboard/static <Directory /usr/share/openstack-dashboard/openstack_dashboard/wsgi> Options All AllowOverride All Require all granted </Directory> <Directory /usr/share/openstack-dashboard/static> Options All AllowOverride All Require all granted </Directory>
[root@computer1 ~]# vim /etc/httpd/conf/httpd.conf [root@computer1 ~]# grep ServerName /etc/httpd/conf/httpd.conf # ServerName gives the name and port that the server uses to identify itself. ServerName localhost:80
重启web服务器
[root@computer1 ~]# systemctl restart httpd.service [root@computer1 ~]# systemctl status httpd.service ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/httpd.service.d └─openstack-dashboard.conf Active: active (running) since Sun 2020-11-15 22:30:40 CST; 20s ago Docs: man:httpd(8) man:apachectl(8) Process: 5691 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS) Process: 5713 ExecStartPre=/usr/bin/python /usr/share/openstack-dashboard/manage.py compress --force (code=exited, status=0/SUCCESS) Process: 5696 ExecStartPre=/usr/bin/python /usr/share/openstack-dashboard/manage.py collectstatic --noinput --clear (code=exited, status=0/SUCCESS) Main PID: 5734 (httpd) Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec" Tasks: 24 CGroup: /system.slice/httpd.service ├─5734 /usr/sbin/httpd -DFOREGROUND ├─5736 /usr/sbin/httpd -DFOREGROUND ├─5737 /usr/sbin/httpd -DFOREGROUND ├─5738 /usr/sbin/httpd -DFOREGROUND ├─5739 /usr/sbin/httpd -DFOREGROUND ├─5740 /usr/sbin/httpd -DFOREGROUND └─5741 /usr/sbin/httpd -DFOREGROUND Nov 15 22:30:16 computer1 python[5696]: Deleting 'themes/default/horizon/_styles.scss' Nov 15 22:30:16 computer1 python[5696]: Deleting 'themes/default/horizon/_variables.scss' Nov 15 22:30:16 computer1 python[5696]: Deleting 'themes/default/horizon/components/_breadcrumb_header.scss' Nov 15 22:30:16 computer1 python[5696]: Deleting 'themes/default/horizon/components/_context_selection.scss' Nov 15 22:30:16 computer1 python[5696]: Deleting 'themes/default/horizon/components/_login.scss' Nov 15 22:30:16 computer1 python[5696]: Deleting 'themes/default/horizon/components/_messages.scss' Nov 15 22:30:16 computer1 python[5696]: Deleting 'themes/default/horizon/components/_navbar.scss' Nov 15 22:30:16 computer1 python[5696]: Deleting 'themes/default/horizon/components/_pie_charts.scss' Nov 15 22:30:16 computer1 python[5696]: Deleting 'themes/default/horizon/components/_quota.scss' Nov 15 22:30:40 computer1 systemd[1]: Started The Apache HTTP Server.
再次访问http://10.0.0.12/dashboard/正常
验证使用 admin 用户凭证和``default``域凭证