.. _installation_requirements:
Requirements
============
Documents API
-------------
The Woo Publications component uses the VNG
`Documents API `_
standard for the actual persisting of (published) documents. This means that you must
provide or provision an API provider that implements this standard. You must also
configure some authorization aspects in the
`Authorisations API `_
used by the chosen Documents API.
What you'll need
~~~~~~~~~~~~~~~~
* Access to the admin environment of the Woo Publications component, e.g.
``https://woo-publications.example.com/admin/``.
* Configure the :ref:`Documents API service `.
Configuration for the Authorisations API
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The Woo Publications component uses the
:ref:`information categories ` to describe
the document type ("informatieobjecttype") for the Documents API. The permissions to the
Documents API are based on these document types.
**Permission scopes**
* ``documenten.aanmaken``
* ``documenten.bijwerken``
Woo Publications requires the scopes listed above, for all information categories.
The API resource URLs for all information categories are available on a page in the
admin. Navigate to **Admin** > **Metadata** > **Information categories**. In the top
right, click the **View API resource URLs** button.
The list page displays all information categories, grouped by their origin with the
fully qualified resource URLs required by the Authorisations API.
Known applications/products providing a Documents API
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* `Open Zaak `_
.. tip:: If you're a vendor, please create a PR to add your product to this list.
Reverse proxy
-------------
It's recommended to set up a reverse proxy (like nginx or a Kubernetes ingress/gateway)
before the application container, as these pieces of software are designed to scale
well. They can prevent the application containers from becoming overloaded.
Configuring a reverse proxy or Kubernetes cluster is out of scope for this project, but
some implementation details are relevant and they are listed below.
Allow streaming of document downloads
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Uploaded documents in the API are also downloaded again - especially by the National
Search Index (DiWoo) which indexes the documents, but ultimately also by interested
parties like citizens, journalists...
Our download API endpoint (``/api/v1/documenten/:uuid/download``) sends a response
header ``X-Accel-Buffering: off`` to the reverse proxy to promote synchronous streaming
to the client. Certain nginx (or possibly other reverse proxy implementations)
configuration can lead to this header being ignored.
Most of the time (small files, fast networks...) this shouldn't be a problem, but
especially with larger files (1GB+) being downloaded over slow connections it's possible
the internal nginx buffers fill up and the application container times out when trying
to write the response back to nginx. This results in downloads getting aborted after
about 1GB. Disabling buffering prevents this problem by writing/streaming directly to
the client.
Alternative configurations could be to disable buffering for these endpoints in
particular, in which case the response header can be safely ignored too.
.. seealso:: For all the gritty details, you can read more in
`github issue 164 `_.