--- myst: html_meta: "description": "" "property=og:description": "" "property=og:title": "" "keywords": "" --- (prz-label)= # Deploying Plone with WSGI using zc.buildout, plone.recipe.zope2instance and Waitress The `plone.recipe.zope2instance` creates and configures a Zope instance in a buildout part. To provide a smooth transition to Plone 5.2 and WSGI it tries to guess sensible defaults. The goal in providing WSGI support in `plone.recipe.zope2instance` was to keep the buildout configuration close to the ZServer configuration. Many options formerly used for ZServer are working in pretty much the same way for WSGI. WSGI is the default in recent `plone.recipe.zope2instance` versions. It can be overridden by ZServer for Python 2. [Waitress](https://docs.pylonsproject.org/projects/waitress/en/stable) is the default WSGI server configured by `plone.recipe.zope2instance`. Waitress is a pure Python WSGI server implementation originating from the Pylons project. With this information in mind, creating a minimial WSGI buildout for Plone is fairly easy. A working example is contained in `basic.cfg` in the training buildout, here are the file contents: ```ini [buildout] extensions = mr.developer parts = instance extends = https://dist.plone.org/release/5.2-latest/versions.cfg auto-checkout = plone.recipe.zope2instance wsgitraining.site sources = sources [sources] plone.recipe.zope2instance = git https://github.com/plone/plone.recipe.zope2instance.git wsgitraining.site = fs wsgitraining.site [instance] recipe = plone.recipe.zope2instance user = admin:admin eggs = Plone wsgitraining.site ``` As you can see, we are using a custom add-on named `wsgitraining.site` contained in the buildout. We will not use the add-on immediately so you don't need to activate it yet. We use `mr.developer` to checkout the source code of this add-on. We also use a source checkout of the `plone.recipe.zope2instance` buildout recipe to get the latest (maybe not yet released on PyPI) functionality for this training. As a first exercise in this training run the above buildout configuration from the command line: Activate your virtualenv if you haven't done so already: ```shell ~/wsgitraining$ . bin/activate ``` Run buildout: ```shell (wsgitraining) ~/wsgitraining$ buildout -c basic.cfg ``` After a successful buildout, you can start Plone in the foreground as usual. Start `zeo` first: ```shell (wsgitraining) ~/wsgitraining$ bin/zeo start ``` Then start the application server: ```shell (wsgitraining) ~/wsgitraining$ bin/instance fg ``` You can then create a Plone instance by pointing your browser to `http://localhost:8080`.