Here's an example with SSL enabled: mod_wsgi: #!/usr/bin/python2.7 import os import sys
from oslo_utils import encodeutils # XXX reduce dependencies from glance.cmd.api import main import glance_store from oslo_config import cfg from oslo_log import log as logging import oslo_messaging import osprofiler.notifier import osprofiler.web import threading from glance.common import config from glance.common import exception from glance.common import wsgi from glance import notifier CONF = cfg.CONF CONF.import_group("profiler", "glance.common.wsgi") logging.register_options(CONF) def fail(e): global KNOWN_EXCEPTIONS return_code = KNOWN_EXCEPTIONS.index(type(e)) + 1 sys.stderr.write("ERROR: %s\n" % encodeutils.exception_to_unicode(e)) sys.exit(return_code) if __name__ == "__main__": sys.exit(main()) else: KNOWN_EXCEPTIONS = (RuntimeError, exception.WorkerCreationFailure, glance_store.exceptions.BadStoreConfiguration) try: config_files = cfg.find_config_files(project='glance', prog='glance-api') config.parse_args(default_config_files=config_files) config.set_config_defaults() logging.setup(CONF, 'glance') # XXX notifier.set_defaults() """Initialize glance store.""" glance_store.register_opts(CONF) glance_store.create_stores(CONF) glance_store.verify_default_store() if cfg.CONF.profiler.enabled: _notifier = osprofiler.notifier.create("Messaging", oslo_messaging, {}, notifier.get_transport(), "glance", "api", cfg.CONF.bind_host) osprofiler.notifier.set(_notifier) osprofiler.web.enable(cfg.CONF.profiler.hmac_keys) else: osprofiler.web.disable() application = None app_lock = threading.Lock() with app_lock: if application is None: application = config.load_paste_app('glance-api') except KNOWN_EXCEPTIONS as e: fail(e) ----- import os from subprocess import CalledProcessError, check_call, Popen import sys def httpd(cmd): cmd = ['/usr/apache2/2.4/bin/httpd', '-f', '/var/lib/glance/api-httpd.conf', '-k', cmd] try: Popen(cmd, stdout=sys.stdout, stderr=sys.stderr) except CalledProcessError as err: print >> sys.stderr, 'Error executing %s: %s' % (cmd, err) sys.exit(1) sys.exit(0) def start(): httpd('start') def stop(): httpd('stop') def restart(): httpd('restart') ---- ServerRoot "/usr/apache2/2.4" LoadModule authn_file_module libexec/mod_authn_file.so LoadModule authn_core_module libexec/mod_authn_core.so LoadModule authz_host_module libexec/mod_authz_host.so LoadModule authz_groupfile_module libexec/mod_authz_groupfile.so LoadModule authz_user_module libexec/mod_authz_user.so LoadModule authz_core_module libexec/mod_authz_core.so LoadModule access_compat_module libexec/mod_access_compat.so LoadModule auth_basic_module libexec/mod_auth_basic.so LoadModule reqtimeout_module libexec/mod_reqtimeout.so LoadModule filter_module libexec/mod_filter.so LoadModule log_config_module libexec/mod_log_config.so LoadModule env_module libexec/mod_env.so LoadModule headers_module libexec/mod_headers.so LoadModule version_module libexec/mod_version.so LoadModule slotmem_shm_module libexec/mod_slotmem_shm.so <IfDefine prefork> LoadModule mpm_prefork_module libexec/mod_mpm_prefork.so </IfDefine> <IfDefine worker> LoadModule mpm_worker_module libexec/mod_mpm_worker.so </IfDefine> <IfDefine !prefork> <IfDefine !worker> LoadModule mpm_event_module libexec/mod_mpm_event.so </IfDefine> </IfDefine> LoadModule unixd_module libexec/mod_unixd.so LoadModule status_module libexec/mod_status.so LoadModule alias_module libexec/mod_alias.so LoadModule wsgi_module libexec/mod_wsgi-2.7.so LoadModule ssl_module libexec/mod_ssl.so <IfModule unixd_module> User glance Group glance </IfModule> PidFile /var/lib/glance/glance-api.httpd.pid ServerName XXX Listen 9292 ErrorLogFormat "%{cu}t %M" ErrorLog "/var/log/glance/glance-api_error.log" LogLevel warn <IfModule log_config_module> LogFormat "%h %u %t \"%r\" %p %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined </IfModule> CustomLog /var/log/glance/glance-api_access.log combined # Limit request up to 5GB <Directory /usr/lib/python2.7/vendor-packages/glance/common> Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted LimitRequestBody 5368709122 </Directory> WSGISocketPrefix /var/run/glance-api_wsgi_ # Enable Chunks Requests Glance requires it <VirtualHost *:9292> SSLEngine On # Disable the known insecure SSLv3 protocol SSLProtocol all -SSLv3 SSLCertificateFile /etc/glance/ssl/public/server-cert-fchain.pem SSLCACertificateFile /etc/certs/ca-certificates.crt SSLCertificateKeyFile /etc/glance/ssl/private/server-key.pem WSGIChunkedRequest On WSGIDaemonProcess glance-api processes=2 threads=1 user=glance group=glance display-name=%{GROUP} WSGIProcessGroup glance-api WSGIScriptAlias / /usr/lib/glance/glance-api WSGIApplicationGroup %{GLOBAL} #WSGIPassAuthorization On <IfVersion >= 2.4> ErrorLogFormat "%{cu}t %M" </IfVersion> </VirtualHost> On Thu, Aug 18, 2016 at 2:07 PM, Matthew Thode <prometheanf...@gentoo.org> wrote: > On 08/17/2016 03:52 PM, Nick Papadonis wrote: > > Comments > > > > > > Glance worked for me in Mitaka. I had to specify 'chunked transfers' > > and increase the size limit to 5GB. I had to pull some of the WSGI > > source from glance and alter it slightly to call from Apache. > > > > I saw that Nova claims mod_wsgi is 'experimental'. Interested in it's > > really experimental or folks use it in production. > > > > Nick > > I haven't found any docs on getting mod_wsgi working for glance do you > happen to have a link? > > -- > -- Matthew Thode (prometheanfire) > > > __________________________________________________________________________ > OpenStack Development Mailing List (not for usage questions) > Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev > >
__________________________________________________________________________ OpenStack Development Mailing List (not for usage questions) Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev