Installation for Development
This section guides you through installing and running SODAR for local development.
Unlike installation for evaluation or deployment, you will need to run the SODAR Django server and related components locally on your development workstation. Third party services such as iRODS and database servers can still be run in a Docker Compose network.
Prerequisites
System requirements for SODAR development are as follows:
- Ubuntu 20.04
Other Ubuntu versions and Linux distributions may work but are not supported. The instructions in this section assume the use of Ubuntu 20.04.
- Python 3.8, 3.9 or 3.10
3.8 recommended.
SODAR Docker Compose Setup
In addition to the sodar-server
repository, the following components are
required for SODAR development:
PostgreSQL
Redis
Main iRODS server
Test iRODS server
The recommended method to set up the environment required for development is cloning the sodar-docker-compose repository and running it in development mode.
The environment is the same used for evaluation and deployment as described in the administration section. In this case, we will use it to only provide the aforementioned services in a Docker Compose network. The Django server, Vue.js app and Celery workers will be run locally for development and debugging.
Note
You can also run these components outside of the Docker Compose network if needed. In this case, you will need to modify the related server addresses and ports in SODAR configurations, as well as initialize the required services and databases manually.
1. Clone the Repository
Clone the sodar-docker-compose
repository. It is recommended to clone it
into a specific directory so you can still easily run the evaluation version of
the environment in a separate Docker Compose network if needed.
$ git clone https://github.com/bihealth/sodar-docker-compose.git sodar-docker-compose-dev
$ cd sodar-docker-compose-dev
2. Initialize Volumes
Use the provided init.sh
script to create required configuration and volume
directories.
$ ./init.sh
3. Provide Certificate and DH Parameters
Similar to evaluating SODAR, you will need to provide self-signed TLS/SSL certificates and Diffie-Hellman key exchange parameters to enable full SODAR functionality.
For instructions on how to generate certificates with OpenSSL in Ubuntu, see here. If using a different Linux distribution, consult the relevant documentation.
Once generated, ensure your .crt
and .key
files are placed under the
config/traefik/tls
directory.
$ cp yourcert.crt config/traefik/tls/server.crt
$ cp yourcert.key config/traefik/tls/server.key
$ chmod +r config/traefik/tls/server.key
To generate the dhparams.pem
file for Diffie-Hellman key exchange, you can
use OpenSSL as demonstrated below. Ensure the file is placed under
config/irods/etc
.
$ openssl dhparam -2 -out config/irods/etc/dhparams.pem 2048
4. Configure the Environment
Copy the file env.example.dev
into .env
to use the default
sodar-docker-compose configuration for development.
$ cp env.example.dev .env
In the case of the development setup, this environment only includes variables
available to the external SODAR components. The sodar-server
settings will
be set up in a local .env
file we will describe further on in this document.
5. Bring Up the Environment
To run the environment in the development configuration, use the following helper script:
$ ./run_dev.sh
You will see a real-time output of the environment. To shut down the network,
press Ctrl-C
.
SODAR Server Setup
With the required external components running in Docker, you can set up and run the SODAR Django server and other local components.
1. Set Up the Repository
First, clone the sodar-server
repository and install the OS dependencies
along with Python. Make sure to check out the dev
branch, as it is used as
the base for all development.
$ git clone https://github.com/bihealth/sodar-server.git
$ cd sodar-server
$ git checkout dev
$ sudo utility/install_os_dependencies.sh
$ sudo utility/install_python.sh
2. Install Python Dependencies
Next, create and activate a virtual environment. Once in the environment, install the Python dependencies for the project:
$ python3 -m venv .venv
$ source .venv/bin/activate
$ utility/install_python_dependencies.sh
It is also possible to use other virtual environments such as pipenv or conda, but those are not supported.
3. Copy the Environment File
Next, copy the supplied env.example
file into .env
. This contains the
settings for running the SODAR server with the default development
configuration.
$ cp env.example .env
To ensure the file gets read by Django, ensure DJANGO_READ_DOT_ENV_FILE=1
is
set in your environment variables.
4. Install the Vue.js Application
To enable the Sample Sheets Vue.js app in development, you need to install its prerequisites. First, install Nodejs and Vue dependencies using the following command:
$ sudo utility/install_vue_dev.sh
Once the dependencies have been set up, install the app requirements:
$ cd samplesheets/vueapp
$ npm install
5. Final Setup
The SODAR database needs to be initialized and migrated to run the server locally. This will also synchronize the app plugins for the server.
$ cd sodar-server
$ ./manage.py migrate
Next, run commands to retrieve the Iconify icons and collect static files.
$ ./manage.py geticons
$ ./manage.py collectstatic
Finally, you should create a Django superuser for the SODAR site. Use the user
name admin
if you do not wish to edit your configuration files. Run the
following command and follow the command line prompt.
$ ./manage.py createsuperuser --skip-checks --username admin
LDAP Setup (Optional)
If you will be developing features using LDAP/AD authentication, make sure to also run:
$ sudo utility/install_ldap_dependencies.sh
$ pip install -r requirements/ldap.txt
Furthermore, update your LDAP settings in the .env
file.
Run SODAR for Development
With both the Docker environment and the SODAR server set up, you can now run all the component to have a local SODAR environment for development. It is recommended to run the components in the order presented here.
Note
This will require running multiple services which remain active in their respective terminals. Thus multiple terminal tabs or windows will be required.
1. SODAR Docker Compose
During first time setup, you should also have the environment running at this point. If not, run it with the following commands:
$ cd sodar-docker-compose-dev
$ ./run_dev.sh
2. SODAR Django Server
In a separate terminal tab, run the SODAR Django server. Make sure to activate your virtual environment.
$ cd sodar-server
$ source .venv/bin/activate
$ make serve
3. Sample Sheets Vue App
Open a new terminal tab and run the Sample Sheets Vue.js app with the following
command. This will serve the development version with hot reloading in
http://127.0.0.1:8080
.
$ make samplesheets_vue
4. SODAR Celery Processes
For asynchronous tasks, run the SODAR celery process in debug mode. First, open a new terminal tab, make sure to activate your virtual environment and run Celery with Celerybeat using the following command:
$ source .venv/bin/activate
$ make celery
Note
The Celery process needs to access correct Django settings. Make sure the
variable DJANGO_READ_DOT_ENV_FILE=1
is set in your environment when
running this process.