1. 项目概述
在CentOS 7.9系统上部署OpenStack Train版本的Dashboard组件——Horizon,是构建私有云平台的关键一步。Horizon作为OpenStack的官方Web界面,为用户提供了直观的图形化操作方式,极大降低了云平台的管理门槛。
我曾在多个企业级OpenStack部署项目中负责Horizon组件的安装与调优工作。根据实际经验,在CentOS 7.9环境下部署Train版本的Horizon时,需要特别注意软件包依赖关系、配置文件参数调优以及与各核心服务(Keystone、Nova等)的集成验证。本文将详细记录从零开始部署Horizon的全过程,包含多个实际项目中验证过的优化参数和避坑技巧。
2. 环境准备与依赖安装
2.1 基础系统配置
在开始部署前,需确保系统满足以下条件:
- 已安装干净的CentOS 7.9最小化系统
- 网络配置正确(能访问外部软件源)
- 已配置OpenStack Train基础环境(Keystone、Nova等核心服务)
首先更新系统并安装EPEL源:
bash复制yum update -y
yum install -y epel-release
2.2 安装Horizon依赖包
Horizon依赖的软件包较多,建议分批次安装以避免依赖冲突:
bash复制yum install -y openstack-dashboard httpd mod_wsgi memcached python-memcached
注意:Train版本特别要求mod_wsgi版本需≥4.5.9,可通过
mod_wsgi -v验证。若版本过低,需从源码编译安装。
3. Horizon核心配置详解
3.1 主配置文件修改
编辑/etc/openstack-dashboard/local_settings文件,关键配置如下:
python复制# 允许访问的主机列表(根据实际IP修改)
ALLOWED_HOSTS = ['controller.example.com', '192.168.1.10', 'localhost']
# 配置Memcached会话存储
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
# 配置OpenStack Keystone认证
OPENSTACK_HOST = "controller"
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
3.2 时区与语言设置
针对中文用户,建议添加以下配置:
python复制TIME_ZONE = "Asia/Shanghai"
LANGUAGE_CODE = "zh-hans"
USE_I18N = True
USE_L10N = True
USE_TZ = True
4. Web服务器集成与优化
4.1 Apache配置调整
编辑/etc/httpd/conf.d/openstack-dashboard.conf,增加以下优化参数:
apache复制WSGIApplicationGroup %{GLOBAL}
WSGIDaemonProcess dashboard user=apache group=apache processes=3 threads=10
WSGIProcessGroup dashboard
4.2 静态文件收集与权限设置
执行静态文件收集命令:
bash复制openstack-dashboard-manage collectstatic --noinput
openstack-dashboard-manage compress --force
chown -R apache:apache /usr/share/openstack-dashboard/static
5. 服务启动与验证
5.1 启动相关服务
bash复制systemctl enable httpd memcached
systemctl restart httpd memcached
5.2 访问验证
通过浏览器访问http://<controller-ip>/dashboard,应看到登录界面。使用Keystone中创建的管理员账号登录后,可查看各服务状态。
6. 高级配置与问题排查
6.1 多域支持配置
如需支持Keystone的多域功能,需添加:
python复制OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'
6.2 常见问题解决
问题1:登录后页面空白
- 检查Memcached服务状态
- 查看
/var/log/httpd/error_log中的Django错误信息 - 确认
SESSION_ENGINE配置为django.contrib.sessions.backends.cache
问题2:静态文件加载失败
- 重新执行
collectstatic和compress命令 - 检查
/usr/share/openstack-dashboard/static目录权限
7. 性能优化建议
根据实际项目经验,推荐以下优化措施:
-
调整WSGI参数:
- 根据服务器CPU核心数设置
processes(建议为核心数的1.5倍) threads数量建议设置在10-20之间
- 根据服务器CPU核心数设置
-
启用Gzip压缩:
在Apache配置中添加:apache复制<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/css application/javascript </IfModule> -
缓存优化:
python复制SESSION_COOKIE_AGE = 1800 # 会话超时时间(秒) SESSION_SAVE_EVERY_REQUEST = True
8. 安全加固措施
8.1 HTTPS配置
强烈建议配置HTTPS访问,示例配置:
apache复制<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/dashboard.crt
SSLCertificateKeyFile /etc/pki/tls/private/dashboard.key
# 其他配置保持不变
</VirtualHost>
8.2 安全头设置
在local_settings中添加:
python复制SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_BROWSER_XSS_FILTER = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
X_FRAME_OPTIONS = 'DENY'
9. 日常维护技巧
-
日志分析:
- Horizon日志:
/var/log/httpd/dashboard_error.log - Django调试日志可通过
DEBUG = True临时开启(生产环境务必关闭)
- Horizon日志:
-
版本升级检查:
bash复制
yum check-update openstack-dashboard -
备份策略:
- 配置文件备份:
/etc/openstack-dashboard/local_settings - 自定义模板备份:
/usr/share/openstack-dashboard/openstack_dashboard/templates
- 配置文件备份:
10. 扩展功能实现
10.1 自定义Dashboard
在/usr/share/openstack-dashboard/openstack_dashboard/enabled/目录下添加自定义面板:
python复制# 示例:创建监控面板
from django.utils.translation import ugettext_lazy as _
import horizon
class Monitoring(horizon.Panel):
name = _("System Monitoring")
slug = "monitoring"
permissions = ('openstack.roles.admin',)
horizon.dashboard.get_dashboard('admin').register(Monitoring)
10.2 主题定制
-
创建主题目录:
bash复制mkdir -p /usr/share/openstack-dashboard/static/themes/custom -
继承默认主题并覆盖样式:
css复制/* custom/css/styles.css */ .navbar-brand { background: url(../img/logo.png) no-repeat; padding-left: 50px; } -
在
local_settings中指定主题:python复制CUSTOM_THEME_PATH = 'themes/custom'
经过以上步骤,一个功能完整、性能优化的OpenStack Horizon Dashboard已在CentOS 7.9系统上部署完成。在实际生产环境中,建议根据业务需求进一步调整界面元素和权限控制。我在多个金融行业客户部署中发现,合理的面板布局和权限划分能显著提升运维效率。
