From a270964a50e4e8d5b2afb73bc1576d58f895c9e8 Mon Sep 17 00:00:00 2001 From: Hongbin Lu Date: Wed, 22 Feb 2017 17:30:43 -0600 Subject: [PATCH] Add wsgi script file and sample config In addition, the port of zun-api is inconsistent. The devstack script used 9517 and others used 9512. This commit changed to port 9517 in everywhere. Implements: blueprint deploy-zun-api-in-wsgi Change-Id: I08818e417945338d5de5de473f8adc9bf9d63bdc --- doc/source/dev/manual-devstack.rst | 6 ++-- doc/source/index.rst | 1 + doc/source/mod_wsgi.rst | 55 ++++++++++++++++++++++++++++++ etc/apache2/zun.conf | 40 ++++++++++++++++++++++ zun/api/app.wsgi | 24 +++++++++++++ zun/conf/api.py | 2 +- 6 files changed, 124 insertions(+), 4 deletions(-) create mode 100644 doc/source/mod_wsgi.rst create mode 100644 etc/apache2/zun.conf create mode 100644 zun/api/app.wsgi diff --git a/doc/source/dev/manual-devstack.rst b/doc/source/dev/manual-devstack.rst index cf07f069f..497d0e993 100644 --- a/doc/source/dev/manual-devstack.rst +++ b/doc/source/dev/manual-devstack.rst @@ -146,11 +146,11 @@ Configure the keystone endpoint:: --description="Zun Container Service" \ container openstack endpoint create --region RegionOne container public \ - http://127.0.0.1:9512/v1 + http://127.0.0.1:9517/v1 openstack endpoint create --region RegionOne container internal \ - http://127.0.0.1:9512/v1 + http://127.0.0.1:9517/v1 openstack endpoint create --region RegionOne container admin \ - http://127.0.0.1:9512/v1 + http://127.0.0.1:9517/v1 Start the API service in a new screen:: diff --git a/doc/source/index.rst b/doc/source/index.rst index 4010c1ecb..4f129d77e 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -28,6 +28,7 @@ Contents installation usage contributing + mod_wsgi Indices and tables ================== diff --git a/doc/source/mod_wsgi.rst b/doc/source/mod_wsgi.rst new file mode 100644 index 000000000..a5ac9febb --- /dev/null +++ b/doc/source/mod_wsgi.rst @@ -0,0 +1,55 @@ +.. + Licensed under the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. You may obtain + a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations + under the License. + +=================================== + Installing the API behind mod_wsgi +=================================== + +Zun comes with a few example files for configuring the API +service to run behind Apache with ``mod_wsgi``. + +app.wsgi +======== + +The file ``zun/api/app.wsgi`` sets up the V2 API WSGI +application. The file is installed with the rest of the zun +application code, and should not need to be modified. + +etc/apache2/zun.conf +====================== + +The ``etc/apache2/zun.conf`` file contains example settings that +work with a copy of zun installed via devstack. + +.. literalinclude:: ../../../etc/apache2/zun.conf + +1. On deb-based systems copy or symlink the file to + ``/etc/apache2/sites-available``. For rpm-based systems the file will go in + ``/etc/httpd/conf.d``. + +2. Modify the ``WSGIDaemonProcess`` directive to set the ``user`` and + ``group`` values to an appropriate user on your server. In many + installations ``zun`` will be correct. Modify the ``WSGIScriptAlias`` + directive to set the path of the wsgi script. If you are using devstack, + the value should be ``/opt/stack/zun/zun/api/app.wsgi``. In the + ``ErrorLog`` and ``CustomLog`` directives, replace ``%APACHE_NAME%`` with + ``apache2``. + +3. Enable the zun site. On deb-based systems:: + + $ a2ensite zun + $ service apache2 reload + + On rpm-based systems:: + + $ service httpd reload diff --git a/etc/apache2/zun.conf b/etc/apache2/zun.conf new file mode 100644 index 000000000..123a98ef9 --- /dev/null +++ b/etc/apache2/zun.conf @@ -0,0 +1,40 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +# This is an example Apache2 configuration file for using the +# zun API through mod_wsgi. + +# Note: If you are using a Debian-based system then the paths +# "/var/log/httpd" and "/var/run/httpd" will use "apache2" instead +# of "httpd". +# +# The number of processes and threads is an example only and should +# be adjusted according to local requirements. + +Listen 9517 + + + WSGIDaemonProcess zun-api user=%USER% group=%GROUP% processes=5 threads=1 display-name=%{GROUP} + WSGIScriptAlias / %PUBLICWSGI% + WSGIProcessGroup zun-api + + ErrorLog /var/log/%APACHE_NAME%/zun_error.log + LogLevel info + CustomLog /var/log/%APACHE_NAME%/zun_access.log combined + + + WSGIProcessGroup zun-api + WSGIApplicationGroup %{GLOBAL} + AllowOverride All + Require all granted + + diff --git a/zun/api/app.wsgi b/zun/api/app.wsgi new file mode 100644 index 000000000..30895e729 --- /dev/null +++ b/zun/api/app.wsgi @@ -0,0 +1,24 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +"""Use this file for deploying the API under mod_wsgi. +See http://pecan.readthedocs.org/en/latest/deployment.html for details. +""" + +import sys + +from zun.common import service +from zun.api import app + +# Initialize the oslo configuration library and logging +service.prepare_service(sys.argv) +application = app.load_app() diff --git a/zun/conf/api.py b/zun/conf/api.py index 3fcf83758..7d63a8df0 100644 --- a/zun/conf/api.py +++ b/zun/conf/api.py @@ -16,7 +16,7 @@ from zun.common.i18n import _ api_service_opts = [ cfg.PortOpt('port', - default=9512, + default=9517, help='The port for the zun API server.'), cfg.IPOpt('host_ip', default='127.0.0.1',