日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2024/8/26 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Horizon组件安装详解 - 远程连接OpenStack服务 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概述

Horizon是OpenStack中提供可視化管理(Dashboard)的組件,使用的Python的Web開發(fā)框架Django開發(fā),使得Horizon本身代碼結構較為簡單,但是,內部數(shù)據(jù)流比較復雜。

本文主要目的是記錄如何去遠程部署一個Horizon組件(Horizon后臺通過OpenStack提供的不同的Client訪問服務接口),有助于之后考慮在Horizon上進行二次開發(fā)。

注意:本文實測的版本是 horizon-newton版本,其他版本可能存在不同問題,僅供參考。此外,服務器使用的是Ubuntu14.04。
易讀的版本(帶目錄),可以訪問我的Github地址:hoizon_install

第一步 初始化環(huán)境

  • 安裝Linux環(huán)境
# 注意pip最好用最新的版本,舊版不支持Python約束文件參數(shù) # 參照官網(wǎng)升級https://pip.pypa.io/en/stable/installing/ sudo apt-get install git python-pip sudo pip install python-dev # 構建python虛擬運行環(huán)境 sudo pip install virutalenv
  • 下載源碼
# 首先拉下Horizon的代碼 git clone https://git.openstack.org/openstack/horizon # 因為,實驗環(huán)境是Newton版本,所以,需要將版本回退,查看版本號 git tag # 回退任意版本的commit git revert <commit>

第二步 安裝horizon依賴包

這一步是主要出問題的一步,因為在 Newton 版本下,目錄提供 requirement.txt 是版本是有問題的,直接通過pip工具下載,運行會報錯,至于問題在什么地方,請繼續(xù)往下看。

此外,最新的文檔中提供用tox工具的安裝,配置虛擬環(huán)境,非常簡單,但是,運行newton版本時候還是出錯,這里暫時不深究這個。而,在 Newton 版本下的 tools 目錄下,提供了install_venv.py的腳本工具安裝,同樣非常方便,但是,本人嘗試過,直接運行同樣存在依賴包版本的問題。

其實,看一下腳本,究其根本而言,原理都是配置一個 Python 虛擬環(huán)境,然后在虛擬環(huán)境中安裝依賴包,配置運行環(huán)境變量,然后運行網(wǎng)站。所以,本文就從基礎一步一步配置,讓讀者了解清楚原理。

  • 安裝虛擬運行環(huán)境
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 <constraints-file>

第三步 配置local_settings文件

//從模板創(chuàng)建配置文件。 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服務,以實現(xiàn)驗證。

第四步 翻譯

如果需要中文支持,那么需要通過gettext工具提供編譯不同語言支持。

sudo apt-get install gettext ./manage.py compilemessages

第五步 靜態(tài)資源設置

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

./manage.py collectstatic ./manage.py compress

第六步 Session存儲

Horizon使用Django's session framework控制會話數(shù)據(jù)。可以通過多種方式后端提供支持。通過在local_setting.py文件中,對SESSION_ENGINE設置。

  • Memcached.
  • Database.
  • Cached Database
  • 如果實驗環(huán)境,可以進行簡單配置,使用本地內存:

    SESSION_ENGINE = 'django.contrib.sessions.backends.cache' CACHES = { 'default':{ 'BACKEND':'django.core.cache.backends.locmem.LocMemCache', }, }

    具體可參考 Openstack Manul install

    第七步 部署Apache2服務器

    可以通過兩種方式運行Horizon組件:

  • 通過Django的manage.py工具;
  • 直接運行Apache2服務器。
  • Runserver

    正常的Django,可以通過manage.py這個工具包運行網(wǎng)站。

    ./manage.py runserver <ip>:<port>

    Apache2

    • 安裝依賴包
    sudo apt-get install apache2 libapache2-mod-wsgi
    • 生成一個WSGI文件
    ./manage.py make_web_conf --wsgi
    • 在apache2服務器下配置horizon網(wǎng)站
    ./manage.py make_web_conf --apache > /etc/apache2/sites-available/horizon.conf
    • 配置apache2服務器監(jiān)聽端口。(apache 配置監(jiān)聽對應自定義端口 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 <module> [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權限問題

    運行網(wǎng)站的用戶需要對于.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 <module> [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 <module> [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 <module> [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給棄用了。

    靜態(tài)資源打包出錯

    • 出錯
    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: <NamespaceAdapterExtension>, <DjangoExtension>, <CompassExtension> 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

    • Openstack Manul install
    • Horizon Is Easy, Horizon Is Complex

    轉載于:https://www.cnblogs.com/zhengruin/p/7886095.html

    總結

    以上是生活随笔為你收集整理的Horizon组件安装详解 - 远程连接OpenStack服务的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。