#!/bin/sh # Install any local extensions in the src_extensions volume echo "Looking for local extensions to install..." echo "Extension dir contents:" ls -la $SRC_EXTENSIONS_DIR for i in $SRC_EXTENSIONS_DIR/* do if [ -d $i ]; then if [ -f $i/pip-requirements.txt ]; then pip install -r $i/pip-requirements.txt echo "Found requirements file in $i" fi if [ -f $i/requirements.txt ]; then pip install -r $i/requirements.txt echo "Found requirements file in $i" fi if [ -f $i/dev-requirements.txt ]; then pip install -r $i/dev-requirements.txt echo "Found dev-requirements file in $i" fi if [ -f $i/setup.py ]; then cd $i python3 $i/setup.py develop echo "Found setup.py file in $i" cd $APP_DIR fi # Point `use` in test.ini to location of `test-core.ini` if [ -f $i/test.ini ]; then echo "Updating \`test.ini\` reference to \`test-core.ini\` for plugin $i" ckan config-tool $i/test.ini "use = config:../../src/ckan/test-core.ini" fi fi done # Set debug to true echo "Enabling debug mode" ckan config-tool $CKAN_INI -s DEFAULT "debug = true" # Add ckan.datapusher.api_token to the CKAN config file (updated with corrected value later) ckan config-tool $CKAN_INI ckan.datapusher.api_token=xxx # Set up the Secret key used by Beaker and Flask # This can be overriden using a CKAN___BEAKER__SESSION__SECRET env var if grep -E "beaker.session.secret ?= ?$" ckan.ini then echo "Setting beaker.session.secret in ini file" ckan config-tool $CKAN_INI "beaker.session.secret=$(python3 -c 'import secrets; print(secrets.token_urlsafe())')" ckan config-tool $CKAN_INI "WTF_CSRF_SECRET_KEY=$(python3 -c 'import secrets; print(secrets.token_urlsafe())')" JWT_SECRET=$(python3 -c 'import secrets; print("string:" + secrets.token_urlsafe())') ckan config-tool $CKAN_INI "api_token.jwt.encode.secret=${JWT_SECRET}" ckan config-tool $CKAN_INI "api_token.jwt.decode.secret=${JWT_SECRET}" fi # Update the plugins setting in the ini file with the values defined in the env var echo "Loading the following plugins: $CKAN__PLUGINS" ckan config-tool $CKAN_INI "ckan.plugins = $CKAN__PLUGINS" # Update test-core.ini DB, SOLR & Redis settings echo "Loading test settings into test-core.ini" ckan config-tool $SRC_DIR/ckan/test-core.ini \ "sqlalchemy.url = $TEST_CKAN_SQLALCHEMY_URL" \ "ckan.datastore.write_url = $TEST_CKAN_DATASTORE_WRITE_URL" \ "ckan.datastore.read_url = $TEST_CKAN_DATASTORE_READ_URL" \ "solr_url = $TEST_CKAN_SOLR_URL" \ "ckan.redis.url = $TEST_CKAN_REDIS_URL" # Run the prerun script to init CKAN and create the default admin user sudo -u ckan -EH python3 prerun.py echo "Set up ckan.datapusher.api_token in the CKAN config file" ckan config-tool $CKAN_INI "ckan.datapusher.api_token=$(ckan -c $CKAN_INI user token add ckan_admin datapusher | tail -n 1 | tr -d '\t')" # Run any startup scripts provided by images extending this one if [[ -d "/docker-entrypoint.d" ]] then for f in /docker-entrypoint.d/*; do case "$f" in *.sh) echo "$0: Running init file $f"; . "$f" ;; *.py) echo "$0: Running init file $f"; python3 "$f"; echo ;; *) echo "$0: Ignoring $f (not an sh or py file)" ;; esac echo done fi # Start supervisord supervisord --configuration /etc/supervisord.conf & # Start the development server with automatic reload sudo -u ckan -EH ckan -c $CKAN_INI run -H 0.0.0.0