OpenSlides/DEVELOPMENT.rst

226 lines
6.3 KiB
ReStructuredText
Raw Normal View History

========================
OpenSlides Development
========================
If you want to contribute to OpenSlides, have a look at `OpenSlides website
<https://openslides.org/>`_ and write us an email.
Installation and start of the development version
=================================================
1. Installation on GNU/Linux or Mac OS X
----------------------------------------
a. Check requirements
'''''''''''''''''''''
2018-08-22 22:00:08 +02:00
Make sure that you have installed `Python (>= 3.6) <https://www.python.org/>`_,
`Node.js (>=4.x) <https://nodejs.org/>`_, `Yarn <https://yarnpkg.com/>`_ and
`Git <http://git-scm.com/>`_ on your system. You also need build-essential
packages and header files and a static library for Python.
For Ubuntu 16.04 e. g. follow `Yarn installation instructions
<https://yarnpkg.com/en/docs/install>`_ and run::
2017-03-28 18:11:28 +02:00
$ sudo apt-get install git nodejs nodejs-legacy npm build-essential python3-dev
b. Get OpenSlides source code
'''''''''''''''''''''''''''''
Clone current master version from `OpenSlides GitHub repository
<https://github.com/OpenSlides/OpenSlides/>`_::
$ git clone https://github.com/OpenSlides/OpenSlides.git
$ cd OpenSlides
c. Setup a virtual Python environment (optional)
''''''''''''''''''''''''''''''''''''''''''''''''
See step 1. b. in the installation section in the `README.rst
<https://github.com/OpenSlides/OpenSlides/blob/master/README.rst>`_.
2018-10-13 08:41:51 +02:00
d. Finish the server
''''''''''''''''''''
Install all required Python packages::
$ pip install --requirement requirements.txt
2018-10-13 08:41:51 +02:00
Create a settings file, run migrations and start the server::
2018-10-13 08:41:51 +02:00
$ python manage.py createsettings
$ python manage.py migrate
$ python manage.py runserver
To get help on the command line options run::
$ python manage.py --help
Later you might want to restart the server with one of the following commands.
To start OpenSlides with Daphne and to avoid opening new browser
windows run::
$ python manage.py start --no-browser
2018-01-12 08:40:15 +01:00
When debugging something email related change the email backend to console::
$ python manage.py start --debug-email
2018-10-13 08:41:51 +02:00
e. Setup and start the client
'''''''''''''''''''''''''''''
2018-10-13 08:41:51 +02:00
Go in the client's directory in a second command-line interface::
$ cd client/
Install all dependencies and start the development server::
2018-10-13 08:41:51 +02:00
$ npm install
$ yarn start
2016-09-09 00:50:27 +02:00
2018-10-13 08:41:51 +02:00
Now the client is available under ``localhost:4200``.
If you do not need to work with the client, you can build the client and let it be delivered by the server directly::
$ yarn build
The client's address is now ``localhost:8000``.
2016-09-09 00:50:27 +02:00
2. Installation on Windows
--------------------------
Follow the instructions above (Installation on GNU/Linux or Mac OS X) but care
of the following variations.
2018-08-22 22:00:08 +02:00
To get Python download and run the latest `Python 3.7 32-bit (x86) executable
installer <https://www.python.org/downloads/windows/>`_. Note that the 32-bit
installer is required even on a 64-bit Windows system. If you use the 64-bit
installer, step d. of the instruction might fail unless you installed some
packages manually.
You have to install `MS Visual C++ 2015 build tools
<https://www.microsoft.com/en-us/download/details.aspx?id=48159>`_ before you
install the required python packages for OpenSlides (unfortunately Twisted
16.6.x needs it).
To setup and activate the virtual environment in step c. use::
> .virtualenv\Scripts\activate.bat
All other commands are the same as for GNU/Linux and Mac OS X.
2016-08-20 10:07:56 +02:00
3. Running the test cases
-------------------------
a. Running server tests
'''''''''''''''''''''''
To run some server tests see `.travis.yml
<https://github.com/OpenSlides/OpenSlides/blob/master/.travis.yml>`_.
2018-10-13 08:41:51 +02:00
b. Client tests and commands
''''''''''''''''''''''''''''
Change to the client's directory to run every client related command. Run client tests::
2018-10-13 08:41:51 +02:00
$ yarn test
2016-08-20 10:07:56 +02:00
2018-10-13 08:41:51 +02:00
Fix the code format and lint it with::
2018-10-13 08:41:51 +02:00
$ yarn pretty-quick && yarn lint
2017-10-29 10:52:57 +01:00
2018-10-13 08:41:51 +02:00
To extract translations run::
$ yarn extract
OpenSlides in big mode
======================
In the so called big mode you should use OpenSlides with Redis, PostgreSQL and a
webserver like Apache HTTP Server or nginx as proxy server in front of your
OpenSlides interface server.
1. Install and configure PostgreSQL and Redis
---------------------------------------------
Install `PostgreSQL <https://www.postgresql.org/>`_ and `Redis
<https://redis.io/>`_. For Ubuntu 16.04 e. g. run::
$ sudo apt-get install postgresql libpq-dev redis-server
Be sure that database and redis server is running. For Ubuntu 16.04 e. g. this
was done automatically if you used the package manager.
Then add database user and database. For Ubuntu 16.04 e. g. run::
$ sudo -u postgres createuser --pwprompt --createdb openslides
$ sudo -u postgres createdb --owner=openslides openslides
2018-08-22 05:56:05 +02:00
2. Change OpenSlides settings
-----------------------------
Create OpenSlides settings file if it does not exist::
$ python manage.py createsettings
Change OpenSlides settings file (usually called settings.py): Setup
`DATABASES` entry as mentioned in the settings file. Set `use_redis` to
`True`.
Populate your new database::
$ python manage.py migrate
2018-08-22 05:56:05 +02:00
3. Run OpenSlides
-----------------
2018-08-22 05:56:05 +02:00
To start gunicorn with uvicorn as protocol server run::
$ export DJANGO_SETTINGS_MODULE=settings
$ export PYTHONPATH=personal_data/var/
2018-08-22 05:56:05 +02:00
$ gunicorn -w 4 -k uvicorn.workers.UvicornWorker openslides.asgi:application
2018-08-22 05:56:05 +02:00
This example uses 4 instances. The recommendation is to use CPU cores * 2.
2018-08-22 05:56:05 +02:00
4. Use Nginx (optional)
-----------------------
When using Nginx as a proxy for delivering staticfiles the performance of the setup will increase very much. For delivering staticfiles you have to collect those::
$ python manage.py collectstatic
This is an example configuration for a single Daphne listen on port 8000::
server {
listen 80;
listen [::]:80;
server_name _;
2018-10-13 08:41:51 +02:00
location ~* ^/(ws|wss|media|rest|apps).*$ {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
}
2018-10-13 08:41:51 +02:00
location / {
alias <your path to>/collected-static;
}
}