Before starting the containers, set a SECRET_KEY
in the indico-prod/indico.conf
file. You can generate one by running the following snippet from the terminal:
python -c 'import os; print(repr(os.urandom(32)))'
Once this is done, start the containers with:
$ cd indico-prod && docker compose up
Indico will be accessible at localhost:8080. You can also access the wsgi app directly at localhost:9090 which skips the nginx proxy.
There are a couple config files which you can use to configure this setup.
- indico-prod/.env - This file specifies general settings like the DB config, nginx port and the path to
indico.conf
. - indico-prod/indico.conf - This is a sample Indico config file. It is passed to the containers as a read-only volume. Feel free to modify it based on your needs. You can use a different config file by changing the
INDICO_CONFIG
variable in indico-prod/.env. - indico-prod/logging.yaml - The default logging config for Indico. Feel free to modify it or use a different config by changing the
INDICO_LOGGING_CONFIG
variable.
The production setup contains the following containers:
- indico-web - Indico running behind uwsgi (accessible at localhost:9090)
- indico-celery - Indico celery task runner
- indico-celery-beat - celery beat
- indico-redis - redis
- indico-nginx - nginx proxy (by default accessible at localhost:8080, can be changed by updating
NGINX_PORT
)
indico-web uses the getindico/indico
image that we publish to Dockerhub. You can build this image locally using the build_latest.sh script. The image pulls the latest Indico release from PyPI together with the indico-plugins
package. You can use the indico.conf
file to specify which plugins you want to enable.
If you don't need the DB and the nginx proxy, you can just run:
$ docker compose up indico-web
This will bring up only Indico, celery and redis. The DB should be on the same network to be accessible.
The getindico/indico
image can also be used completely standalone outside of this docker-compose setup, as long as the remaining services (postgres, redis, celery) are available elsewhere. In that case, make sure to update REDIS_CACHE_URL
, CELERY_BROKER
in your indico.conf
and the DB connection settings in prod.env.
This is how you can run Indico on its own:
$ docker run \
type=bind,src=/path/to/indico.conf,target=/opt/indico/etc/indico.conf \
getindico/indico /opt/indico/run_indico.sh
Or to run celery from the same image:
$ docker run \
type=bind,src=/path/to/indico.conf,target=/opt/indico/etc/indico.conf \
getindico/indico /opt/indico/run_celery.sh
In the above, we omit the network setup to make e.g. the DB accessible from the containers.
$ oc create configmap settings --from-literal=baseurl=<base_url> --from-literal=pgdatabase=<db_name>
--from-literal=pghost=<db_host> --from-literal=pguser=<db_user> --from-literal=pgport=<db_port>
--from-literal=pgpassword=<db_password> --from-literal=sentrydsn=<sentrydsn> --from-literal=secretkey=<secretkey>
--from-literal=storage=<storage> --from-literal=attachmentstorage=<attachment_storage>
$ cd openshift/
$ ./create.sh
In case you want to run the postgres container instead of DBoD (DataBase On Demand), keep in mind to set the pghost
literal as indico-postgres
and the rest of literals accordingly:
$ oc create configmap settings --from-literal=baseurl=<base_url> --from-literal=pgdatabase=indico
--from-literal=pghost=indico-postgres --from-literal=pguser=indico --from-literal=pgport=5432
--from-literal=pgpassword=indicopass --from-literal=sentrydsn=<sentrydsn> --from-literal=secretkey=<secretkey>
--from-literal=storage=<storage> --from-literal=attachmentstorage=<attachment_storage>