[ English | Indonesia | Esperanto | فارسی | English (United Kingdom) | 한국어 (대한민국) | русский | 中文 (简体, 中国) | português (Brasil) | français | नेपाली | español | Deutsch ]

داشبورد را سفارشی سازی و پیکربندی کنید

پس از نصب داشبورد، می‌توانید ظاهر و حس آن را متناسب با نیازهای محیط، پروژه یا کسب و کار خود سفارشی کنید.

همچنین می‌توانید داشبورد را برای استقرار امن HTTPS یا استقرار HTTP پیکربندی کنید. نصب استاندارد OpenStack از یک کانال HTTP رمزگذاری نشده استفاده می‌کند، اما می‌توانید پشتیبانی SSL را برای داشبورد فعال کنید.

برای اطلاعات بیشتر در مورد پیکربندی HTTPS یا HTTP، به پیکربندی داشبورد مراجعه کنید.

داشبورد را سفارشی‌سازی کنید.

داشبورد اپن‌استک روی اوبونتو به صورت پیش فرض بسته (پکیج) openstack-dashboard-ubuntu-theme را نصب می‌کند. اگر نمی‌خواهید از این تم استفاده کنید، آن را به همراه وابستگی‌هایش حذف کنید.

# apt-get remove --auto-remove openstack-dashboard-ubuntu-theme

توجه

این راهنما بر روی فایل local_settings.py` تمرکز دارد.

محتوای داشبورد زیر می‌تواند متناسب با نیازهای شما سفارشی‌سازی شود:

  • لوگو

  • رنگ‌های سایت

  • عنوان HTML

  • لینک لوگو

  • لینک (URL) راهنما

رنگ‌ لوگو و سایت

  1. دو فایل لوگوی PNG با پس‌زمینه شفاف با اندازه‌های زیر ایجاد کنید:

    • صفحه ورود: ۳۶۵ در ۵۰

    • بنر صفحه ورود: 216 در 35

  2. تصاویر جدید خود را در /usr/share/openstack-dashboard/openstack_dashboard/static/dashboard/img/ آپلود کنید.

  3. یک فایل CSS در مسیر /usr/share/openstack-dashboard/openstack_dashboard/static/dashboard/scss/ ایجاد کنید.

  4. رنگ‌ها و نام فایل‌های تصویر را به صورت مناسب تغییر دهید. مطمئن شوید که مسیرهای دایرکتوری نسبی یکسان هستند. فایل نمونه زیر نحوه سفارشی‌سازی فایل CSS شما را نشان می‌دهد:

    /*
    * New theme colors for dashboard that override the defaults:
    *  dark blue: #355796 / rgb(53, 87, 150)
    *  light blue: #BAD3E1 / rgb(186, 211, 225)
    *
    * By Preston Lee <plee@tgen.org>
    */
    h1.brand {
    background: #355796 repeat-x top left;
    border-bottom: 2px solid #BAD3E1;
    }
    h1.brand a {
    background: url(../img/my_cloud_logo_small.png) top left no-repeat;
    }
    #splash .login {
    background: #355796 url(../img/my_cloud_logo_medium.png) no-repeat center 35px;
    }
    #splash .login .modal-header {
    border-top: 1px solid #BAD3E1;
    }
    .btn-primary {
    background-image: none !important;
    background-color: #355796 !important;
    border: none !important;
    box-shadow: none;
    }
    .btn-primary:hover,
    .btn-primary:active {
    border: none;
    box-shadow: none;
    background-color: #BAD3E1 !important;
    text-decoration: none;
    }
    
  5. قالب HTML زیر را در ویرایشگر دلخواه خود باز کنید:

    /usr/share/openstack-dashboard/openstack_dashboard/templates/_stylesheets.html
    
  6. یک خط برای اضافه کردن فایل style sheet جدید ایجاد شده اضافه کنید. برای مثال، فایل custom.css:

    <link href='{{ STATIC_URL }}bootstrap/css/bootstrap.min.css' media='screen' rel='stylesheet' />
    <link href='{{ STATIC_URL }}dashboard/css/{% choose_css %}' media='screen' rel='stylesheet' />
    <link href='{{ STATIC_URL }}dashboard/css/custom.css' media='screen' rel='stylesheet' />
    
  7. سرویس آپاچی را مجدداً راه‌اندازی کنید.

  8. برای مشاهده تغییرات، داشبورد خود را مجدداً بارگذاری کنید. در صورت لزوم، به عقب برگردید و فایل CSS خود را مطابق با آن تغییر دهید.

عنوان HTML

  1. عنوان HTML را که در بالای پنجره مرورگر ظاهر می‌شود، با اضافه کردن خط زیر به local_settings.py` تنظیم کنید:

    SITE_BRANDING = "Example, Inc. Cloud"
    
  2. برای اعمال این تغییر، آپاچی را مجدداً راه‌اندازی کنید.

لینک (URL) راهنما

  1. به طور پیش‌فرض، آدرس اینترنتی راهنما به آدرس https://docs.openstack.org اشاره می‌کند. برای تغییر این مورد، ویژگی زیر را در local_settings.py ویرایش کنید:

    HORIZON_CONFIG["help_url"] = "http://openstack.mycompany.org"
    
  2. برای اعمال این تغییر، آپاچی را مجدداً راه‌اندازی کنید.

پیکربندی داشبورد

بخش بعدی در مورد پیکربندی داشبورد برای استقرار امن HTTPS یا استقرار HTTP، از مثال‌های ملموس برای اطمینان از واضح بودن روش استفاده می‌کند. با این حال، مسیر فایل بسته به توزیع متفاوت است. در صورت نیاز، می‌توانید اندازه پنجره VNC را نیز در داشبورد پیکربندی کنید.

پیکربندی داشبورد برای HTTP

شما می‌توانید داشبورد را برای یک استقرار ساده HTTP پیکربندی کنید. نصب استاندارد از یک کانال HTTP رمزگذاری نشده استفاده می‌کند.

  1. میزبان (host) سرویس Identity خود را در فایل local_settings.py با تنظیم OPENSTACK_HOST` مشخص کنید.

    مثال زیر این تنظیم را نشان می‌دهد:

    import os
    
    from django.utils.translation import gettext_lazy as _
    
    DEBUG = False
    TEMPLATE_DEBUG = DEBUG
    PROD = True
    
    SITE_BRANDING = 'OpenStack Dashboard'
    
    # Ubuntu-specific: Enables an extra panel in the 'Settings' section
    # that easily generates a Juju environments.yaml for download,
    # preconfigured with endpoints and credentials required for bootstrap
    # and service deployment.
    ENABLE_JUJU_PANEL = True
    
    # Note: You should change this value
    SECRET_KEY = 'elj1IWiLoWHgryYxFT6j7cM5fGOOxWY0'
    
    # Specify a regular expression to validate user passwords.
    # HORIZON_CONFIG = {
    #     "password_validator": {
    #         "regex": '.*',
    #         "help_text": _("Your password does not meet the requirements.")
    #     }
    # }
    
    LOCAL_PATH = os.path.dirname(os.path.abspath(__file__))
    
    CACHES = {
        'default': {
            'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION' : '127.0.0.1:11211'
        }
    }
    
    # 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!'
    
    # For multiple regions uncomment this configuration, and add (endpoint, title).
    # AVAILABLE_REGIONS = [
    #     ('http://cluster1.example.com/identity/v3', 'cluster1'),
    #     ('http://cluster2.example.com/identity/v3', 'cluster2'),
    # ]
    
    OPENSTACK_HOST = "127.0.0.1"
    OPENSTACK_KEYSTONE_URL = "http://%s/identity/v3" % OPENSTACK_HOST
    OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member"
    
    # The OPENSTACK_KEYSTONE_BACKEND settings can be used to identify the
    # capabilities of the auth backend for Keystone.
    # If Keystone has been configured to use LDAP as the auth backend then set
    # can_edit_user to False and name to 'ldap'.
    #
    # TODO(tres): Remove these once Keystone has an API to identify auth backend.
    OPENSTACK_KEYSTONE_BACKEND = {
        'name': 'native',
        'can_edit_user': True
    }
    
    # OPENSTACK_ENDPOINT_TYPE specifies the endpoint type to use for the endpoints
    # in the Keystone service catalog. Use this setting when Horizon is running
    # external to the OpenStack environment. The default is 'internalURL'.
    #OPENSTACK_ENDPOINT_TYPE = "publicURL"
    
    # The number of Swift containers and objects to display on a single page before
    # providing a paging element (a "more" link) to paginate results.
    API_RESULT_LIMIT = 1000
    
    # If you have external monitoring links, eg:
    # EXTERNAL_MONITORING = [
    #     ['Nagios','http://foo.com'],
    #     ['Ganglia','http://bar.com'],
    # ]
    
    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,
            'handlers': {
                'null': {
                    'level': 'DEBUG',
                    'class': 'logging.NullHandler',
                    },
                'console': {
                    # Set the level to "DEBUG" for verbose output logging.
                    'level': 'INFO',
                    'class': 'logging.StreamHandler',
                    },
                },
            'loggers': {
                # Logging from django.db.backends is VERY verbose, send to null
                # by default.
                'django.db.backends': {
                    'handlers': ['null'],
                    'propagate': False,
                    },
                'horizon': {
                    'handlers': ['console'],
                    'propagate': False,
                },
                'novaclient': {
                    'handlers': ['console'],
                    'propagate': False,
                },
                'keystoneclient': {
                    'handlers': ['console'],
                    'propagate': False,
                }
            }
    }
    

    پیکربندی کاتالوگ سرویس در سرویس Identity تعیین می‌کند که آیا یک سرویس در داشبورد نمایش داده شود یا خیر. برای مشاهده لیست کامل، به Settings Reference مراجعه کنید.

  2. سرور HTTP آپاچی را مجدداً راه‌اندازی کنید.

  3. سرویس memcached را مجدداً راه‌اندازی کنید.

پیکربندی داشبورد برای HTTPS

شما می‌توانید داشبورد را برای استقرار امن HTTPS پیکربندی کنید. در حالی که نصب استاندارد از یک کانال HTTP رمزگذاری نشده استفاده می‌کند، می‌توانید پشتیبانی SSL را برای داشبورد فعال کنید.

این مثال از دامنه‌ی http://openstack.example.com استفاده می‌کند. از دامنه‌ای استفاده کنید که با تنظیمات فعلی شما مطابقت داشته باشد.

  1. در فایل local_settings.py`، گزینه‌های زیر را به‌روزرسانی کنید:

    CSRF_COOKIE_SECURE = True
    SESSION_COOKIE_SECURE = True
    SESSION_COOKIE_HTTPONLY = True
    

    گزینه‌های دیگر نیاز به فعال بودن HTTPS دارند؛ این گزینه‌ها در برابر اسکریپت‌نویسی بین‌سایتی (Cross-site scripting) محافظت می‌کنند.

  2. فایل openstack-dashboard.conf` را مطابق آنچه در مثال بعد نشان داده شده است، ویرایش کنید:

    مثال قبل

    WSGIScriptAlias / /usr/share/openstack-dashboard/openstack_dashboard/wsgi.py
    WSGIDaemonProcess horizon user=www-data group=www-data processes=3 threads=10
    Alias /static /usr/share/openstack-dashboard/openstack_dashboard/static/
    <Location />
      <ifVersion >=2.4>
        Require all granted
      </ifVersion>
      <ifVersion <2.4>
        Order allow,deny
        Allow from all
      </ifVersion>
    </Location>
    

    مثال بعد از

    <VirtualHost *:80>
      ServerName openstack.example.com
      <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
      </IfModule>
      <IfModule !mod_rewrite.c>
        RedirectPermanent / https://openstack.example.com
      </IfModule>
    </VirtualHost>
    
    <VirtualHost *:443>
      ServerName openstack.example.com
    
      SSLEngine On
      # Remember to replace certificates and keys with valid paths in your environment
      SSLCertificateFile /etc/apache2/SSL/openstack.example.com.crt
      SSLCACertificateFile /etc/apache2/SSL/openstack.example.com.crt
      SSLCertificateKeyFile /etc/apache2/SSL/openstack.example.com.key
      SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
    
      # HTTP Strict Transport Security (HSTS) enforces that all communications
      # with a server go over SSL. This mitigates the threat from attacks such
      # as SSL-Strip which replaces links on the wire, stripping away https prefixes
      # and potentially allowing an attacker to view confidential information on the
      # wire
      Header add Strict-Transport-Security "max-age=15768000"
    
      WSGIScriptAlias / /usr/share/openstack-dashboard/openstack_dashboard/wsgi.py
      WSGIDaemonProcess horizon user=www-data group=www-data processes=3 threads=10
      Alias /static /usr/share/openstack-dashboard/openstack_dashboard/static/
      <Location />
        Options None
        AllowOverride None
        # For Apache http server 2.4 and later:
        <ifVersion >=2.4>
          Require all granted
        </ifVersion>
        # For Apache http server 2.2 and earlier:
        <ifVersion <2.4>
          Order allow,deny
          Allow from all
        </ifVersion>
      </Location>
    </VirtualHost>
    

    در این پیکربندی، سرور HTTP آپاچی به پورت ۴۴۳ گوش می‌دهد و تمام درخواست‌های غیرایمن را به پروتکل HTTPS هدایت می‌کند. بخش امن، کلید خصوصی، کلید عمومی و گواهی مورد استفاده را تعریف می‌کند.

  3. سرور HTTP آپاچی را مجدداً راه‌اندازی کنید.

  4. سرویس memcached را مجدداً راه‌اندازی کنید.

    اگر سعی کنید از طریق HTTP به داشبورد دسترسی پیدا کنید، مرورگر شما را به صفحه HTTPS هدایت می‌کند.

    توجه

    پیکربندی داشبورد برای HTTPS همچنین نیاز به فعال کردن SSL برای سرویس پروکسی noVNC دارد. در نود (گره) کنترلر، گزینه‌های اضافی زیر را به بخش [DEFAULT] از فایل /etc/nova/nova.conf اضافه کنید:

    [DEFAULT]
    # ...
    ssl_only = true
    cert = /etc/apache2/SSL/openstack.example.com.crt
    key = /etc/apache2/SSL/openstack.example.com.key
    

    در گره‌های محاسباتی (نودهای کامپیوت)، مطمئن شوید که گزینه nonvncproxy_base_url به یک URL با طرح HTTPS اشاره می‌کند:

    [DEFAULT]
    # ...
    novncproxy_base_url = https://controller:6080/vnc_auto.html