概述

Horizon是OpenStack中提供可视化管理(Dashboard)的组件,使用的Python的Web开发框架Django开发,使得Horizon本身代码结构较为简单,但是,内部数据流比较复杂。

本文主要目的是记录如何去远程部署一个Horizon组件(Horizon后台通过OpenStack提供的不同的Client访问服务接口),有助于之后考虑在Horizon上进行二次开发。

注意:本文实测的版本是 horizon-newton版本,其他版本可能存在不同问题,仅供参考。此外,服务器使用的是Ubuntu14.04。

易读的版本(带目录),可以访问我的Github地址:hoizon_install

第一步 初始化环境

安装Linux环境

# 注意pip最好用最新的版本,旧版不支持Python约束文件参数

# 参照官网升级https://pip.pypa.io/en/stable/installing/

sudo apt-get install git python-pip

sudo pip install python-dev

# 构建python虚拟运行环境

sudo pip install virutalenv

下载源码

# 首先拉下Horizon的代码

git clone https://git.openstack.org/openstack/horizon

# 因为,实验环境是Newton版本,所以,需要将版本回退,查看版本号

git tag

# 回退任意版本的commit

git revert

第二步 安装horizon依赖包

这一步是主要出问题的一步,因为在 Newton 版本下,目录提供 requirement.txt 是版本是有问题的,直接通过pip工具下载,运行会报错,至于问题在什么地方,请继续往下看。

此外,最新的文档中提供用tox工具的安装,配置虚拟环境,非常简单,但是,运行newton版本时候还是出错,这里暂时不深究这个。而,在 Newton 版本下的 tools 目录下,提供了install_venv.py的脚本工具安装,同样非常方便,但是,本人尝试过,直接运行同样存在依赖包版本的问题。

其实,看一下脚本,究其根本而言,原理都是配置一个 Python 虚拟环境,然后在虚拟环境中安装依赖包,配置运行环境变量,然后运行网站。所以,本文就从基础一步一步配置,让读者了解清楚原理。

安装虚拟运行环境

cd horizon/

virtualenv .venv

soucre .venv/bin/activate

# 安装需要的依赖包

pip install -Ur test-requirements.txt && pip install -Ur requirements.txt

# 检查约束,openstack提供对于newton版本的依赖约束

# https://github.com/openstack/requirements/blob/stable/newton/upper-constraints.txt

pip install -c

第三步 配置local_settings文件

//从模板创建配置文件。

cp openstack_dashboard/local/local_settings.py.example openstack_dashboard/local/local_settings.py

修改配置文件的如下属性:

DEBUG = False/True(日志输出水平)

ALLOWED_HOSTS = ['*',](限制远端访问)

OPENSTACK_HOST = "xxx.xxx.xxx.xxx"(访问OPENSTAKC服务的IP地址)

Horizon组件需要能够通过这个IP访问OPENSTACK的keystone服务,以实现验证。

第四步 翻译

如果需要中文支持,那么需要通过gettext工具提供编译不同语言支持。

sudo apt-get install gettext

./manage.py compilemessages

第五步 静态资源设置

需要事先在local_setting.py文件中设置COMPRESS_OFFLINE = True。

./manage.py collectstatic

./manage.py compress

第六步 Session存储

Horizon使用Django's session framework控制会话数据。可以通过多种方式后端提供支持。通过在local_setting.py文件中,对SESSION_ENGINE设置。

Memcached.

Database.

Cached Database

如果实验环境,可以进行简单配置,使用本地内存:

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

CACHES = {

'default':{

'BACKEND':'django.core.cache.backends.locmem.LocMemCache',

},

}

第七步 部署Apache2服务器

可以通过两种方式运行Horizon组件:

通过Django的manage.py工具;

直接运行Apache2服务器。

Runserver

正常的Django,可以通过manage.py这个工具包运行网站。

./manage.py runserver :

Apache2

安装依赖包

sudo apt-get install apache2 libapache2-mod-wsgi

生成一个WSGI文件

./manage.py make_web_conf --wsgi

在apache2服务器下配置horizon网站

./manage.py make_web_conf --apache > /etc/apache2/sites-available/horizon.conf

配置apache2服务器监听端口。(apache 配置监听对应自定义端口 ports.conf)

运行apache2服务器

sudo a2ensite horizon

sudo service apache2 restart

此处只是简单提供一个部署步骤,更多配置参考Reference。

Bug记录

import base模块出错

出错

Mon Nov 13 08:11:22.273662 2017] [:error] [pid 39513:tid 139788644116224] [remote 192.168.0.199:61715] File "/home/XXX/workspace/python/horizon-newton/openstack_dashboard/api/__init__.py", line 34, in

[Mon Nov 13 08:11:22.273672 2017] [:error] [pid 39513:tid 139788644116224] [remote 192.168.0.199:61715] from openstack_dashboard.base import *

[Mon Nov 13 08:11:22.273695 2017] [:error] [pid 39513:tid 139788644116224] [remote 192.168.0.199:61715] ImportError: No module named base

解决方案

# 修改源码 openstack_dashboard/api/__init__.py

# before,记得将ALL变量也注释掉

from openstack_dashboard.api import base

from openstack_dashboard.api import ceilometer

from openstack_dashboard.api import cinder

from openstack_dashboard.api import fwaas

from openstack_dashboard.api import glance

from openstack_dashboard.api import heat

from openstack_dashboard.api import keystone

from openstack_dashboard.api import lbaas

from openstack_dashboard.api import network

from openstack_dashboard.api import neutron

from openstack_dashboard.api import nova

from openstack_dashboard.api import swift

from openstack_dashboard.api import vpn

# after

import base

from openstack_dashboard.api.ceilometer import *

from openstack_dashboard.api.cinder import *

from openstack_dashboard.api.fwaas import *

from openstack_dashboard.api.glance import *

from openstack_dashboard.api.heat import *

from openstack_dashboard.api.keystone import *

from openstack_dashboard.api.lbaas import *

from openstack_dashboard.api.network import *

from openstack_dashboard.api.neutron import *

from openstack_dashboard.api.nova import *

from openstack_dashboard.api.swift import *

from openstack_dashboard.api.vpn import *

secret_key_stone权限问题

运行网站的用户需要对于.secret_key_store文件拥有写的权限。

出错

IOError: [Errno 13] Permission denied: '/home/winston/workspace/python/horizon-newton/openstack_dashboard/local/.secret_key_store'

解决方案:修改.secret_key_store权限。

nova_client找不到security_group

出错

[Mon Nov 13 08:15:02.238413 2017] [:error] [pid 40074:tid 139788761728768] [remote 192.168.0.199:62739] from openstack_dashboard.api import rest

[Mon Nov 13 08:15:02.238418 2017] [:error] [pid 40074:tid 139788761728768] [remote 192.168.0.199:62739] File "/home/winston/workspace/python/horizon-newton/openstack_dashboard/api/__init__.py", line 36, in

[Mon Nov 13 08:15:02.238427 2017] [:error] [pid 40074:tid 139788761728768] [remote 192.168.0.199:62739] from openstack_dashboard.api.cinder import *

[Mon Nov 13 08:15:02.238431 2017] [:error] [pid 40074:tid 139788761728768] [remote 192.168.0.199:62739] File "/home/winston/workspace/python/horizon-newton/openstack_dashboard/api/cinder.py", line 38, in

[Mon Nov 13 08:15:02.238439 2017] [:error] [pid 40074:tid 139788761728768] [remote 192.168.0.199:62739] from openstack_dashboard.api import nova

[Mon Nov 13 08:15:02.238444 2017] [:error] [pid 40074:tid 139788761728768] [remote 192.168.0.199:62739] File "/home/winston/workspace/python/horizon-newton/openstack_dashboard/api/nova.py", line 34, in

[Mon Nov 13 08:15:02.238452 2017] [:error] [pid 40074:tid 139788761728768] [remote 192.168.0.199:62739] from novaclient.v2 import security_group_rules as nova_rules

[Mon Nov 13 08:15:02.238470 2017] [:error] [pid 40074:tid 139788761728768] [remote 192.168.0.199:62739] ImportError: cannot import name security_group_rules

解决方案:将nova-client版本改为2.29.0(可能其他版本支持,但是,方便起见,将其回退到最早的版本),要求的最低版本,最新版本将security_group_rules给弃用了。

静态资源打包出错

出错

CommandError: An error occurred during rendering /home/winston/workspace/python/horizon-newton/openstack_dashboard/templates/_stylesheets.html: Couldn't find anything to import: /horizon/lib/roboto_fontface/css/roboto-fontface.scss

Extensions: , ,

Search path:

on line 16 of themes/material/bootstrap/_styles.scss

imported from line 16 of themes/material/_styles.scss

imported from line 1 of u'string:c61b5d22d54bf56c:\n // My Themes\n@import "/themes/material/variables";\n\n// Horizon\n@import "/dashboard/scss/horizon'

解决方案

sudo pip install -U "XStatic-roboto-fontface===0.4.3.2"

# output

Installing collected packages: XStatic-roboto-fontface

Found existing installation: XStatic-roboto-fontface 0.5.0.0

Uninstalling XStatic-roboto-fontface-0.5.0.0:

Successfully uninstalled XStatic-roboto-fontface-0.5.0.0

Successfully installed XStatic-roboto-fontface-0.4.3.2

Reference

horizon服务主要模块_Horizon组件安装详解 - 远程连接OpenStack服务相关推荐

  1. Horizon组件安装详解 - 远程连接OpenStack服务

    概述 Horizon是OpenStack中提供可视化管理(Dashboard)的组件,使用的Python的Web开发框架Django开发,使得Horizon本身代码结构较为简单,但是,内部数据流比较复 ...

  2. 《力荐收藏》Hadoop全套组件安装详解——带你走进大数据的深渊

    目录 Hadoop部署 部署组件 一.VMware部署安装 二.Ubuntu18.04.5版本的部署安装 ​ 三.安装VMware Tools 四.配置ssh免密登陆 五.Java环境安装 Hadoo ...

  3. CenterOS 服务器之MySQL卸载与安装,并远程连接

    目录 一.彻底卸载 MySQL(不保留数据) 二.安装 MySQL 一.彻底卸载 MySQL(不保留数据) 若之前装过MySQL,需先删除再进行安装: 查找已经安装的mysql: rpm -qa | ...

  4. mysql 远程 2003_详解远程连接Mysql数据库的问题(ERROR 2003 (HY000))

    在我们用客户端及其远程连接服务器Mysql数据库的过程中,容易出现下面问题: 问题代码代码ERROR 2003 (HY000): Can't connect to MySQL server on '1 ...

  5. python中label有什么用_对Python中TKinter模块中的Label组件实例详解

    Python2.7.4 OS-W7x86 1. 简介 Label用于在指定的窗口中显示文本和图像.最终呈现出的Label是由背景和前景叠加构成的内容. Label组件定义函数:Label(master ...

  6. OpenStack Redhat部署安装详解

    [资料] 社区OpenStack Queens版本部署安装详解 KeyStone配置详细解释 openstack之keystone部署 照着官网来安装openstack pike之创建并启动insta ...

  7. Oracle 11g R2+RAC+ASM+redhat安装详解1

    Oracle RAC是Oracle Real Application Cluster的简写,官方中文文档一般翻译为"真正应用集群",它一般有两台或者两台以上同构计算机及共享存储设备 ...

  8. LYNC 中文版安装详解

    LYNC 中文版安装详解-第一部分 LYNC 2010 中文版已经发布有几天了,现在发布中文版的一些安装图解和大家共同探讨一下LYNC 2010的安装部署流程.CTO_LiuJinFeng 和一些热心 ...

  9. linux下weblogic版本,Linux下weblogic10.3.6(jar)版本安装详解

    一.安装前的准备 安装weblogic是需要JDK环境的,虽然weblogic有自带的JDK,但是我一般是自己选择JDK进行安装,如果你要自行安装,可以参考我的另一篇博客 https://www.cn ...

最新文章

  1. python 12 socket 编程
  2. java二柱子_japonensisjava导航
  3. 【python】python redis的安装与使用
  4. Restful API 中的错误处理方案
  5. 在jboss上部署web应用
  6. cassandra hbase_弥补MySQL和Redis短板:看HBase怎么确保高可用
  7. 欧姆龙OMRON PLC程序,威纶触摸屏螺丝机 配方程序。 用ST语言编写程序+威纶触摸屏程序
  8. python二进制转十进制代码_代码将二进制转换为十进制
  9. Apache解析漏洞
  10. 少年三国志服务器关闭注册,少年三国志2服务器关闭注册 怎么登陆到老区
  11. Homebrew进阶使用教程(二)-用一个命令行天气客户端构建自己的仓库
  12. 验证方法学覆盖率(一):代码覆盖率
  13. ios手机号和邮箱(支付宝账号)脱敏
  14. STM32F407ZG定时器
  15. windows上配置TensorRT yolov5 -6.0部署 tensorrtx视频流推理
  16. RESTful源码学习笔记之RPC和 RESTful 什么区别
  17. nvm环境安装和 node 的基本使用
  18. python:拼多多订单接口api
  19. easypoi教程_Easypoi的使用
  20. Windows10安装ObjectARX 2021 Wizard无法创建项目的解决方案

热门文章

  1. 使用Compose实现淘票票选择电影座位的效果
  2. 华硕灵焕3装鸿蒙系统,EMUI 10系统公布、鸿蒙OS 1.0现身,华为隐藏实力终于要爆发了...
  3. 【项目总结】雪球爬虫完结(附Snowball模块代码)
  4. 爬取迷你mp4各个电影信息
  5. 云南去年有望实现151万贫困人口净脱贫
  6. [vue] 11. pixiJS整合vue初体验
  7. 【互联网的恩怨情仇】盘点2015年互联网十大撕逼事件
  8. 如何利用Framework模型生成IQD文件
  9. 4.集成学习之0.Voting
  10. android音乐播放器的历史,基于Android音乐播放器的研究