======================== OpenSlides Development ======================== If you want to contribute to OpenSlides, have a look at `OpenSlides website `_ and write us an email. Installation and start of the development version ================================================= 1. Installation on GNU/Linux or Mac OS X ---------------------------------------- a. Check requirements ''''''''''''''''''''' Make sure that you have installed `Python (>= 3.4) `_, `Node.js (>=4.x) `_, `Yarn `_ and `Git `_ 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 `_ and run:: $ sudo apt-get install git nodejs nodejs-legacy npm build-essential python3-dev *Note: For Ubuntu 14.04 you have to update Node.js before. The distribution version is 0.10.25 which is not sufficient.* b. Get OpenSlides source code ''''''''''''''''''''''''''''' Clone current master version from `OpenSlides GitHub repository `_:: $ 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 `_. d. Install dependencies ''''''''''''''''''''''' Install all required Python packages:: $ pip install --requirement requirements.txt Install all Node.js and Bower packages and run several JavaScript build tasks:: $ yarn Optional: To enhance performance run Gulp in production mode:: $ node_modules/.bin/gulp --production e. Start OpenSlides ''''''''''''''''''' Use the command-line interface:: $ python manage.py start See step 1. d. in the installation section in the `README.rst `_. 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 one worker and to avoid opening new browser windows run:: $ python manage.py start --no-browser When debugging something email related change the email backend to console:: $ python manage.py start --debug-email To start OpenSlides with Daphne and four workers (avoid concurrent write requests or use PostgreSQL, see below) run:: $ python manage.py runserver To start OpenSlides with Geiss and one worker and to avoid opening new browser windows (download Geiss and setup Redis before, see below) run:: $ python manage.py start --no-browser --use-geiss Use gulp watch in a second command-line interface:: $ node_modules/.bin/gulp watch 2. Installation on Windows -------------------------- Follow the instructions above (Installation on GNU/Linux or Mac OS X) but care of the following variations. To get Python download and run the latest `Python 3.5 32-bit (x86) executable installer `_. 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 `_ 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. 3. Running the test cases ------------------------- a. Running server tests ''''''''''''''''''''''' To run some server tests see `.travis.yml `_. b. Running AngularJS test cases ''''''''''''''''''''''''''''''' Run client tests by starting karma:: $ yarn run karma Watch for file changes and run the tests automatically after each change:: $ yarn run karma:watch 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. Optionally you can use `Geiss `_ as interface server instead of Daphne. 1. Install and configure PostgreSQL and Redis --------------------------------------------- Install `PostgreSQL `_ and `Redis `_. 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 2. Install additional packages ------------------------------ Install some more required Python packages:: $ pip install -r requirements_big_mode.txt 3. 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 4. Run OpenSlides ----------------- First start e. g. four workers (do not use the `--threads` option, because the threads will not spawn across all cores):: $ python manage.py runworker& $ python manage.py runworker& $ python manage.py runworker& $ python manage.py runworker& To start Daphne as protocol server run:: $ export DJANGO_SETTINGS_MODULE=settings $ export PYTHONPATH=personal_data/var/ $ daphne openslides.asgi:channel_layer To use Geiss instead of Daphne, just download Geiss and start it:: $ python manage.py getgeiss $ ./personal_data/var/geiss 5. 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/Geiss listen on port 8000:: server { listen 80; listen [::]:80; server_name _; location ~* ^/(?!ws|wss|webclient|core/servertime|core/version|users/whoami|users/login|users/logout|users/setpassword|motions/docxtemplate|projector|real-projector|static|media|rest).*$ { rewrite ^.*$ /static/templates/index.html; } location ~* ^/projector.*$ { rewrite ^.*$ /static/templates/projector-container.html; } location ~* ^/real-projector.*$ { rewrite ^.*$ /static/templates/projector.html; } location ~* ^/webclient.*$ { rewrite ^/webclient/(site|projector).*$ /static/js/webclient-$1.js; } location /static { alias /collected-static; } location / { 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; } } Using Nginx as a load balancer is fairly easy. Just start multiple Daphnes/Geiss on different ports, change the `proxy_pass` to `http://openslides/` and add this on top of the Nginx configuration:: upstream openslides { server localhost:2001; server localhost:2002; }