Single Node Install on CentOS

Note

Appliance Package links are available at https://morpheushub.com in the downloads section.

Quick Install

  1. Install the Appliance package and run sudo morpheus-ctl reconfigure.

That is it. After the reconfigure completes, Morpheus will start and be available at https://your_machine_name in a minute or few.

Step-by-step Install Instructions

  1. Ensure the Morpheus Appliance host meets the minimum Requirements

  2. Download the target version .rpm package for installation in a directory of your choosing. The package can be removed after successful installation.

    wget https://downloads.morpheusdata.com/path/to/morpheus-appliance-$version.rpm
    
  3. Validate the package checksum matches source checksums. For example:

    sha256sum morpheus-appliance-$version.rpm
    
  4. Next install the rpm package

    sudo rpm -ihv morpheus-appliance-x.x.x-1.x86_64.rpm
    
  5. By default the appliance_url uses the machines hostname, ie https://your_machine_name. The default url can be changed by editing /etc/morpheus/morpheus.rb and changing the value of appliance_url. Additional Appliance configuration options are available below.

    Appliance Configuration Options Click to Expand/Hide

    Morpheus allows for additional advanced customizations for system managed services within the morpheus.rb file located in /etc/morpheus/morpheus.rb. Below is a list of the supported items available in the morpheus.rb file.

    Note

    Service configuration settings are not applicable for externalized services such as external mysql/percona, elasticsearch or rabbitmq clusters. Only connection settings are applicable for external services. Additionally, to configure Morpheus to utilize alternate ports for SSL, you may have to take additional configuration steps. If simply appending a port to your appliance_url value doesn’t work, consult the related article in our KnowledgeBase.

    app['encrypted_key_suffix'] = 'suffix'
    appliance_url 'https://morpheus.appliance-url.com'
      # Appending alternate port to appliance_url is supported. ie 'https://morpheus.appliance-url.com:8443'
      # The appliance_url cannot exceed 64 characters
      # The appliance_url must not contain a trailing `/`.
    
    elasticsearch['enable'] = true
    elasticsearch['es_hosts'] = {'127.0.0.1' => 9200}
    elasticsearch['host'] = "127.0.0.1"
    elasticsearch['use_tls'] = false
    elasticsearch['auth_user'] = 'morpheus-es-user'
    elasticsearch['auth_password'] = 'xxxxxxxxxxxxxxxx'
    # Valid for Internal/System elasticsearch service only
    elasticsearch['log_dir'] = '/var/log/morpheus/elasticsearch'
    elasticsearch['memory_alloc_arena_max'] = 2
    elasticsearch['memory_map_max'] = 65536
    elasticsearch['memory_map_threshold'] = 131072
    elasticsearch['memory_top_pad'] = 131072
    elasticsearch['memory_trim_threshold'] = 131072
    elasticsearch['open_files'] = 204800
    
    guacd['guacamole_enabled'] = false
    guacd['guacamole_enabled'] = false
    
    logging['svlogd_num'] = 30 # keep 30 rotated log files
    logging['svlogd_size'] = 209715200 # 200 MB in bytes
    logging['svlogd_timeout'] = 86400 # rotate after 24 hours in seconds
    
    mysql['enable'] = true
    mysql['host'] = {'127.0.0.1' => 3306}
    mysql['morpheus_db_user'] = 'morpheus-db-user'
    mysql['morpheus_db'] = 'xxxxxxxxxxxxxxxx'
    mysql['mysql_url_overide'] = 'jdbc:mysql://10.30.20.10:3306,10.30.20.11:3306,10.30.20.12:3306/morpheusdb?autoReconnect=true&useUnicode=true&characterEncoding=utf8&failOverReadOnly=false&useSSL=false'
    # Valid for Internal/System mysql service only
    mysql['tmp_dir'] = '/tmp/mysql'
    mysql['log_dir'] = '/var/log/morpheus/mysql'
    mysql['max_active'] = 100 # The combined value off all app node max_active values must be lower than max_connections setting in mysql
    mysql['max_allowed_packet'] = 67108864
    mysql['max_connections'] = 151
    
    nginx['cache_max_size'] = '5000m'
    nginx['enable'] = true
    nginx['loading_pages']['failure_page_h1'] = 'Morpheus Server Error'
    nginx['loading_pages']['failure_page_h2'] = 'Please contact your system administrator for assistance.'
    nginx['loading_pages']['failure_page_title'] = 'Morpheus Server Error'
    nginx['loading_pages']['iteration_time'] = 10000 # milliseconds
    nginx['loading_pages']['loading_page_h1'] = 'Morpheus is Loading...'
    nginx['loading_pages']['loading_page_h2'] = 'please wait'
    nginx['loading_pages']['loading_page_title'] = 'Morpheus Loading'
    nginx['loading_pages']['max_loops'] = 60 # seconds
    nginx['loading_pages']['timeout_page'] = '/timeout.html'
    nginx['loading_pages']['timout_page_h1'] = 'Timeout waiting for Morpheus to load, click below to try again.'
    nginx['loading_pages']['timout_page_title'] = 'Morpheus timeout, please try again...'
    nginx['ssl_ciphers'] = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"
    nginx['ssl_company_name'] = "Morpheus, LLC"
    nginx['ssl_country_name'] = "US"
    nginx['ssl_email_address'] = "[email protected]"
    nginx['ssl_locality_name'] = "San Mateo"
    nginx['ssl_organizational_unit_name'] = "DevOps"
    nginx['ssl_protocols'] = "TLSv1 TLSv1.1 TLSv1.2"
    nginx['ssl_session_cache'] = "builtin:1000  shared:SSL:10m"
    nginx['ssl_session_timeout'] = "5m"
    nginx['ssl_state_name'] = "CA"
    nginx['worker_connections'] = 10240
    nginx['workers'] = integer calculated from number of cpus
    nginx['log_format_name'] = 'custom'
    nginx['log_format'] = '\'$remote_addr - $remote_user [$time_local] "$request" \' \'$status $body_bytes_sent "$http_referer" \' \'"$http_user_agent" "$http_x_forwarded_for" \' \'rt=$request_time uct="$upstream_connect_time" uht="$upstream_header_time" urt="$upstream_response_time"\';'
    
    rabbitmq['enable'] = true
    rabbitmq['host'] = '127.0.0.1'
    rabbitmq['port'] = '5672'
    rabbitmq['queue_user'] = 'morpheus-rmq-user'
    rabbitmq['queue_user_password'] = 'xxxxxxxxxxxxxxxx'
    rabbitmq['vhost'] = 'morpheus'
    # Valid for Internal/System rabbitmq service only
    rabbitmq['heartbeat'] = nil
    rabbitmq['log_dir'] = '/var/log/morpheus/rabbitmq'
    rabbitmq['nodename'] = '[email protected]'
    rabbitmq['port'] = '5672'
    rabbitmq['use_tls'] = false
    
    repo['repo_host_url'] = 'https://downloads.morpheusdata.com'
    
    ui['http_client_connect_timeout'] = 10000  #in seconds
    ui['http_client_connect_timeout'] = 600000 #in seconds
    ui['kerberos_config'] = nil
    ui['kerberos_login_config'] = nil
    ui['log_dir'] = '/var/log/morpheus/morpheus-ui'
    ui['max_memory_mb'] = nil
    ui['memory_alloc_arena_max'] = 2
    ui['memory_map_max'] = 65536
    ui['memory_map_threshold'] = 131072
    ui['memory_top_pad'] = 131072
    ui['memory_trim_threshold'] = 131072
    ui['vm_images_cdn_url'] = 'https://morpheus-images.morpheusdata.com'
    
  6. After all configuration options have been set, run:

    sudo morpheus-ctl reconfigure
    

    Note

    Configuration options can be updated after the initial reconfigure by editing /etc/morpheus/morpheus.rb and running sudo morpheus-ctl reconfigure again. Appliance and other services may need to be restarted depending on configuration changes.

  7. Once the installation is complete the morpheus-ui service will automatically start up and be available shortly. To mointor the ui startup process, run morpheus-ctl tail morpheus-ui and look for the ascii logo accompanied by the install version and start time:

    timestamp:    __  ___              __
    timestamp:   /  |/  /__  _______  / /  ___ __ _____
    timestamp:  / /|_/ / _ \/ __/ _ \/ _ \/ -_) // (_-<
    timestamp: /_/  /_/\___/_/ / .__/_//_/\__/\_,_/___/
    timestamp: ****************************************
    timestamp:   Version: |morphver|
    timestamp:   Start Time: xxx xxx xxx 00:00:00 UTC 2021
    timestamp: ****************************************
    

There are additional install settings that can be viewed in the Additional Configuration Options section.

Once the browser is pointed to the appliance a first time setup wizard will be presented. Please follow the on screen instructions by creating the master account. From there you will be presented with the license settings page where a license can be applied for use (if a license is required you may request one or purchase one by contacting your sales representative).

More details on setting up infrastructure can be found throughout this guide.

Tip

If any issues occur it may be prudent to check the morpheus log for details at /var/log/morpheus/morpheus-ui/current.