9. Deployment of the system
9.1. Environment variables
slurk reads a few environment variables for configuration. Because slurk is a flask application,
it reads FLASK_ENV
and defaults to a more verbose logging, when FLASK_ENV=development
.
Also, the admin token is fixed to 00000000-0000-0000-0000-000000000000
and for RapiDoc,
the token is provided. To provide cookies, a secret key is required, which can be set with
SLURK_SECRET_KEY
, which defaults to a random value. This implies that every time the
server is restarted, the cookies will be invalidated.
slurk is backed by a database. When no database is provided, an in-memory database is used.
This can be changed by setting SLURK_DATABASE_URI
. For a list of possible engines, see
the SQLAlchemy documentation,
however only SQLite and Postgres are tested. If you notice errors with other providers, please
file an issue. Also note, that
SQLite behaves weirdly when using auto-increment keys, so deletion of entries may cause the
same id to be used again. Later, we will see how slurk can be set up with a Postgres-database and
docker-compose.
The API of slurk uses ETags for patching, putting, and deleting entries. Those can be disabled
when setting SLURK_DISABLE_ETAG
.
9.1.1. OpenVidu support
When slurk should connect to an OpenVidu server, those additional variables may be set:
SLURK_OPENVIDU_URL
: for example"https://openvidu.example.com"
SLURK_OPENVIDU_SECRET
: Secret used for the openvidu serverSLURK_OPENVIDU_PORT
, defaults to443
SLURK_OPENVIDU_VERIFY
, Enable SSL validation, defaults toTrue
For spinning up an OpenVidu server, please consult the corresponding documentation.
9.2. Hosting slurk
There is a script in the slurk-repository called scripts/start_server.sh
. Depending
on the environment variables set, the script starts a GUnicorn server locally or in a
docker container. Please see the header of the script for the usage.
9.2.1. Docker
As described in Getting Started, the easiest way is to use docker
.
$ docker run -p 5000:80 slurk/server
Please note that passing an SQLite database also requires a volume to be bound when the database should be persistent. For Postgres, make sure that the docker container can access the same domain as the database.
9.2.2. Flask
Flask provides several ways for hosting an application, for example
$ export FLASK_APP=slurk
$ flask run
See the Deployment Options of Flask for a comprehensive list of different options.
9.3. Example using docker-compose and Postgres
Before spinning up slurk, we need a proper database. For our case, we chose postgres.
When using the postgres docker container and the slurk docker container, the two
containers probably can’t see each other, so we use docker-compose here.
We want to host slurk on port 5000 and connect it to the postgres database. The database
should be persistent, so a volume for the data has to be mounted. This is the
docker-compose.yml
file we end up with:
version: "3.9"
services:
db:
image: postgres
restart: always
environment:
- POSTGRES_PASSWORD=SUPER_SECRET_PSQL_PASSWORD
- POSTGRES_USER=postgres
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- ./postgres-data:/var/lib/postgresql/data/pgdata
slurk:
image: slurk/server
restart: on-failure
ports:
- 5000:80
environment:
- SLURK_DATABASE_URI=postgresql://postgres:SUPER_SECRET_PSQL_PASSWORD@db:5432/postgres
- SLURK_SECRET_KEY=MY_SLURK_SECRET_KEY
- SLURK_OPENVIDU_URL=https://openvidu.example.com
- SLURK_OPENVIDU_SECRET=MY_SUPER_SECRET_OV_SECRET
First, we start the postgres-container, named db
. We define the password to login
to the database and mount the database content to /path/to/postgres/data
.
When postgres has started, we pass the postgres URI to slurk, alongside a secret key.
As we also want OpenVidu support, the two required OpenVidu-variables are also passed.
Now follow these steps if you want to (re-)start slurk.
Navigate into the directory of your
docker-compose.yml
file.Stop old containers and remove containers, networks, volumes and images created by
up
.
$ docker-compose down
Pull all associated docker images.
$ docker-compose pull
(Optional) If you do not wish to use the default slurk from GitHub, you should manually build a slurk image of your preferred version. Start by navigating into your slurk project folder.
$ docker build --tag "slurk/server" -f Dockerfile .
Navigate back to the directory of your docker-compose.yml
file afterwards.
Start all specified containers in the background and leave them running.
$ docker-compose up -d
(Optional) Verify that all containers have been successfully started.
$ docker container ls -a