How to install a SIB server

What is behind SiB server ?

Our solution is based on Django and named DjangoLDP, adapted to be compatible with Linked Datas convention.

Go to Server Architecture to know more about it.

Requirements

The SIB server requires:

  • python 3.6

  • postgresql database (for production)

Initiate the server

Note

If you’re working on many project in Python, we advice you to use a virtual environement.

From a fresh environment, get the last version of the sib-manager:

python -m pip install -U sib-manager

Create a project structure from a production template:

sib startproject sibserver --production
cd sibserver

For a development server remove the –production flag.

now your architecture should look like :

sibserver/
    server/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    manage.py
    packages.yml

For more detail, go to the official Django project documentation.

Configure your LDP packages

The configuration of the packages goes in packages.yml file in the ldppackages section. Those following ones are given as an example. Yours depend on what your app does.

Here you have :

If the description of the available packages is unclear, open an issue to ask for more description.

ldppackages:
    djangoldp_account: djangoldp_account
    oidc_provider: 'git+https://github.com/jblemee/django-oidc-provider.git@develop'

Details about packages.yml format are given in the template file.

Configure your server parameters

The packages.yml files is also use to provide parameters to the server itself. Configure the server parameters in the packages.yml:

server:
    site_url: 'http://localhost:8000'
    admin_email: admin@example.org
    admin_name: admin
    admin_pass: admin
    registration_open: True
    xmpp_url: 'https://jabber.localhost'
    jabber_host: 'jabber.localhost'
    default_client: 'http://localhost:3000'

This configuration works for a local development server but for a production instance you need to setup a postgresql database and configure dependent services:

server:
    site_url: 'https://api.batman.happy-dev.fr'
    allowed_hosts:
        - api.batman.happy-dev.fr
    db_host: postgresql-batman.happy-dev.fr
    db_name: batman_db
    db_user: batman
    db_pass: changeit
    smtp_host: smtp-batman.happy-dev.fr
    smtp_user: batman
    smtp_pass: changeit
    admin_email: admin@example.org
    admin_name: admin
    admin_pass: changeit
    xmpp_url: 'https://jabber.happy-dev.fr'
    jabber_host: 'happy-dev.fr'

Make your migration

python manage.py migrate

Create your super user

python manage.py createsuperuser

Follow the instructions you get in your terminal.

Launch the server

Run the server in development:

python manage.py runserver

Then go to http://127.0.0.1:8000/admin/ to acces to your Django administration.

Enter the identifier you’ve just created and you shoud see the Django admin.

Warning

In some case, you could get this kind of error : no such table: djangoldp_xyz_abc. Enter this command to solve it : python3 manage.py migrate - -run-syncdb

You should be able to get you api at http://localhost:8000/abc/ where abc is the model of data you want to get.

To update the installation

Install/update the project:

sib install sibserver

To launch the server in production:

  • You have to install the static files with python manage.py collectstatic

  • You have to configure your python server to server the script: wsgi.py on the URL api.batman.happy-dev.fr/.

If you have any problem, tell us reporting it in an issue. Thanks!

Tips & tricks

Activate debug mode To activate the debug mode (default in development) you can override manually the DEBUG variable in the settings.py

Install the server as a subfolder URL This method isn’t officially supported and requires to change values in the core configuration. To setup the SIB server on a subfolder https://batman.happy-dev.fr/api you have to manually override the configuration in the settings.py:

BASE_URL = 'https://batman.happy-dev.fr'
SITE_URL = 'https://batman.happy-dev.fr/api'
STATIC_URL = '/api/static/'

and URLs in urls.py:

urlpatterns = [
    url(r'^api/', include('djangoldp.urls')),
    url(r'^api/admin/', admin.site.urls),
]

Note: Alwaysdata static config /api/static/=/static/

Initiate the server with Docker

This is not intended to support production running.

Setup your SIB server

Create your packages.yml according to the documentation. Create the Dockerfile:

FROM python:3.6
ENV PATH="/root/.local/bin:${PATH}"
RUN pip install --user -U sib-manager
WORKDIR /opt
RUN cd /opt/ && sib startproject sib_server
ADD packages.yml /opt/sib_server/packages.yml
RUN cd /opt/sib_server && sib install sib_server
EXPOSE 8000
CMD cd /opt/sib_server && python manage.py runserver 0.0.0.0:8000

Build the image:

docker build -t sibserver .

Run the container:

docker run --rm -p 127.0.0.1:8000:8000 -d sibserver

Serve your client app

Launch a container from within your code folder:

docker run --rm -v $PWD:/code -w /code -u $UID -it -p 127.0.0.1:3000:3000 node npm install && npm run watch