From 7c010b370c494082e57274b361140e4289ad74ff Mon Sep 17 00:00:00 2001 From: Brett Date: Wed, 5 Apr 2023 13:55:59 +1200 Subject: [PATCH] Update setup/ directory files --- ckan/setup/{prerun.py => prerun.py.override} | 1 + .../{start_ckan.sh => start_ckan.sh.override} | 20 +++- ckan/setup/start_ckan_development.sh.override | 99 +++++++++++++++++++ ckan/setup/supervisord.conf | 23 ----- ckan/setup/uwsgi.conf | 2 - 5 files changed, 119 insertions(+), 26 deletions(-) rename ckan/setup/{prerun.py => prerun.py.override} (99%) rename ckan/setup/{start_ckan.sh => start_ckan.sh.override} (51%) create mode 100755 ckan/setup/start_ckan_development.sh.override delete mode 100644 ckan/setup/supervisord.conf delete mode 100644 ckan/setup/uwsgi.conf diff --git a/ckan/setup/prerun.py b/ckan/setup/prerun.py.override similarity index 99% rename from ckan/setup/prerun.py rename to ckan/setup/prerun.py.override index b148d78..3d68696 100644 --- a/ckan/setup/prerun.py +++ b/ckan/setup/prerun.py.override @@ -209,3 +209,4 @@ if __name__ == "__main__": init_datastore_db() check_solr_connection() create_sysadmin() + \ No newline at end of file diff --git a/ckan/setup/start_ckan.sh b/ckan/setup/start_ckan.sh.override similarity index 51% rename from ckan/setup/start_ckan.sh rename to ckan/setup/start_ckan.sh.override index e1fb8e1..0c8409c 100755 --- a/ckan/setup/start_ckan.sh +++ b/ckan/setup/start_ckan.sh.override @@ -1,8 +1,26 @@ -#!/bin/bash +#!/bin/sh + +# 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 # 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 diff --git a/ckan/setup/start_ckan_development.sh.override b/ckan/setup/start_ckan_development.sh.override new file mode 100755 index 0000000..93ce814 --- /dev/null +++ b/ckan/setup/start_ckan_development.sh.override @@ -0,0 +1,99 @@ +#!/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 \ No newline at end of file diff --git a/ckan/setup/supervisord.conf b/ckan/setup/supervisord.conf deleted file mode 100644 index a3f6671..0000000 --- a/ckan/setup/supervisord.conf +++ /dev/null @@ -1,23 +0,0 @@ -[unix_http_server] -file = /tmp/supervisor.sock -chmod = 0777 -chown = nobody:nogroup - -[supervisord] -logfile = /tmp/supervisord.log -logfile_maxbytes = 50MB -logfile_backups=10 -loglevel = info -pidfile = /tmp/supervisord.pid -nodaemon = true -umask = 022 -identifier = supervisor - -[supervisorctl] -serverurl = unix:///tmp/supervisor.sock - -[rpcinterface:supervisor] -supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface - -[include] -files = /etc/supervisord.d/*.conf diff --git a/ckan/setup/uwsgi.conf b/ckan/setup/uwsgi.conf deleted file mode 100644 index 6321d6d..0000000 --- a/ckan/setup/uwsgi.conf +++ /dev/null @@ -1,2 +0,0 @@ -[uwsgi] -route = ^(?!/api).*$ basicauth:Restricted,/srv/app/.htpasswd