Metadata-Version: 2.1
Name: backend.ai-webserver
Version: 21.9.1
Summary: Backend.AI Web Server
Home-page: https://backend.ai
Author: Lablup Inc.
Author-email: devops@lablup.com
License: Proprietary
Project-URL: Documentation, https://docs.backend.ai
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Operating System :: POSIX
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Environment :: No Input/Output (Daemon)
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Software Development
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: aiohttp (~=3.7.4)
Requires-Dist: aiohttp-cors (~=0.7)
Requires-Dist: aiohttp-session[aioredis] (~=2.9.0)
Requires-Dist: aioredis (~=1.3.1)
Requires-Dist: aiotools (~=1.2.1)
Requires-Dist: async-timeout (~=3.0)
Requires-Dist: attrs (>=21.2)
Requires-Dist: click (>=8.0.1)
Requires-Dist: coloredlogs (>=10.0)
Requires-Dist: jinja2 (~=2.11.2)
Requires-Dist: uvloop (~=0.15.2)
Requires-Dist: setproctitle (>=1.2.1)
Requires-Dist: toml (>=0.10.0)
Requires-Dist: backend.ai-client (>=21.9.0.dev0)
Provides-Extra: build
Requires-Dist: wheel (>=0.36.2) ; extra == 'build'
Requires-Dist: twine (>=3.4.1) ; extra == 'build'
Requires-Dist: towncrier (~=19.2.0) ; extra == 'build'
Provides-Extra: dev
Provides-Extra: lint
Requires-Dist: flake8 (~=3.9.0) ; extra == 'lint'
Provides-Extra: test
Requires-Dist: pytest (~=6.2.2) ; extra == 'test'
Requires-Dist: pytest-asyncio (~=0.14.0) ; extra == 'test'
Requires-Dist: pytest-aiohttp (~=0.3.0) ; extra == 'test'
Requires-Dist: pytest-cov ; extra == 'test'
Requires-Dist: pytest-mock (~=3.5.1) ; extra == 'test'
Requires-Dist: codecov ; extra == 'test'
Provides-Extra: typecheck
Requires-Dist: mypy (>=0.800) ; extra == 'typecheck'
Requires-Dist: types-pkg-resources ; extra == 'typecheck'
Requires-Dist: types-toml ; extra == 'typecheck'

# Backend.AI Web Server

[![GitHub version](https://badge.fury.io/gh/lablup%2Fbackend.ai-webserver.svg)](https://badge.fury.io/gh/lablup%2Fbackend.ai-webserver) [![PyPI version](https://badge.fury.io/py/backend.ai-webserver.svg)](https://badge.fury.io/py/backend.ai-webserver)

A webapp hosting daemon which serves our `webui` as a SPA and proxies API requests


## Installation

Prepare a Python virtualenv (Python 3.9 or higher) and a Redis server (6.2 or higher).

```console
$ git clone https://github.com/lablup/backend.ai-webserver webserver
$ cd webserver
$ pip install -U -e .
$ cp webserver.sample.conf webserver.conf
```

## Mode

If `service.mode` is set "webui" (the default), the webserver handles
PWA-style fallbacks (e.g., serving `index.html` when there are no matching
files for the requested URL path).
The PWA must exclude `/server` and `/func` URL prefixes from its own routing
to work with the webserver's web sessions and the API proxy.

If it is set "static", the webserver serves the static files as-is,
without any fallbacks or hooking, while preserving the `/server` and `/func`
prefixed URLs and their functionalities.

If you want to serve web UI in webserver with "webui" mode, prepare static web UI source by choosing one of the followings.

### Option 1: Build web UI from source

Build **[backend.ai-webui](https://github.com/lablup/backend.ai-webui)** and copy all files under `build/bundle`
into the `src/ai/backend/web/static` directory.

### Option 2: Use pre-built web UI

To download and deploy web UI from pre-built source, do the following:

```console
git submodule init
git submodule update
cd src/ai/backend/web/static
git checkout main  # or target branch
git fetch
git pull
```
### Setup configuration for webserver

You don't have to write `config.toml` for the web UI as this webserver auto-generates it on-the-fly.

Edit `webserver.conf` to match with your environment.


## Usage

To execute web server, run command below. (for debugging, append a `--debug` flag)


```console
$ python -m ai.backend.web.server
```


