#!/bin/bash set -eu file_env() { local var="$1" local fileVar="${var}_FILE" local def="${2:-}" if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then echo >&2 "error: both $var and $fileVar are set (but are exclusive)" exit 1 fi local val="$def" if [ "${!var:-}" ]; then val="${!var}" elif [ "${!fileVar:-}" ]; then val="$(< "${!fileVar}")" fi export "$var"="$val" unset "$fileVar" } file_env "WORDPRESS_DB_PASS" file_env "CIVICRM_DB_PASS" file_env "CIVICRM_SITE_KEY" file_env "CIVICRM_CRED_KEYS" file_env "SMTP_PASSWORD" file_env "WORDPRESS_ADMIN_PASSWORD" file_env "OPEN_ID_CLIENT_SECRET" if [[ "${1-default}" == "cron" ]]; then echo "============ Running cron job ============" env /usr/local/bin/php /usr/local/bin/cv api job.execute --user=admin --cwd=/var/www/html/ exit $? fi until mysql -e '\q' -h"${WORDPRESS_DB_HOST}" -u"${WORDPRESS_DB_USER}" -p"${WORDPRESS_DB_PASS}" && mysql -e '\q' -h"${CIVICRM_DB_HOST}" -u"${CIVICRM_DB_USER}" -p"${CIVICRM_DB_PASS}"; do echo "============ Waiting for db container to come up============" sleep 2 done; echo "============ Running Docker Entrypoint ============" /usr/local/bin/civicrm-docker-entrypoint # Check if Wordpress already installed if su civicrm -c "wp core is-installed"; then echo "============ Wordpress already installed ============" else echo "============ Installing Wordpress ============" su civicrm -c "wp core install --locale=$WORDPRESS_LOCALE --url=$BASE_URL --title=$PROJECT_NAME --admin_user=admin --admin_email=$WORDPRESS_ADMIN_EMAIL --admin_password='$WORDPRESS_ADMIN_PASSWORD'" su civicrm -c "wp language core install $WORDPRESS_LOCALE" su civicrm -c "wp language core activate $WORDPRESS_LOCALE" fi # Setup Civicrm L10n if ! [[ -d /var/www/html/wp-content/plugins/civicrm/civicrm/l10n ]]; then echo "============ Moving Civicrm L10n ============" pushd /var/www/html/wp-content/plugins/civicrm/ mkdir -p civicrm/l10n cp -r l10n/de_DE civicrm/l10n cp -r sql/civicrm_acl.de_DE.mysql civicrm/sql/civicrm_acl.de_DE.mysql cp -r sql/civicrm_data.de_DE.mysql civicrm/sql/civicrm_data.de_DE.mysql chown -R civicrm:civicrm civicrm/l10n civicrm/sql popd fi # Install Civicrm pushd /var/www/html/wp-content/uploads/civicrm/ if ! [[ -f /var/www/html/wp-content/uploads/civicrm/is_installed ]]; then echo "============ Running Civicrm Docker Install ============" touch is_installed rm -rf civicrm.settings.php su civicrm -c "wp plugin activate civicrm" su civicrm -c "cv core:install -vv --keep --db=mysql://$CIVICRM_DB_USER:$CIVICRM_DB_PASS@$CIVICRM_DB_HOST:$CIVICRM_DB_PORT/$CIVICRM_DB_NAME --lang $WORDPRESS_LOCALE --comp $CIVICRM_COMPONENTS" mv civicrm.settings.php civicrm.settings.php.generated cp /usr/local/etc/civicrm/civicrm.settings.php civicrm.settings.php chmod a-wx /var/www/html/wp-content/uploads/civicrm/civicrm.settings.php chown -R civicrm:civicrm templates_c upload else # https://docs.civicrm.org/sysadmin/en/latest/upgrade/wordpress/ echo "============ Running Civicrm Upgrade Steps ============" rm -rf templates_c su civicrm -c "cv upgrade:db" su civicrm -c "cv flush" fi popd if [[ -n "${OPEN_ID_CLIENT_ID}" ]]; then # install OpenID Connect Generic plugin if ! su civicrm -c "wp plugin is-installed daggerhart-openid-connect-generic"; then # su civicrm -c "wp option list" echo "============ Running OpenId Connect Install ============" su civicrm -c "wp plugin install daggerhart-openid-connect-generic --activate" # su civicrm -c "wp option list" fi if ! su civicrm -c "wp option get openid_connect_generic_settings"; then echo "Couldn't find openid connect settings option!" # cat /usr/local/etc/civicrm/openid_settings.json su civicrm -c "wp option add openid_connect_generic_settings --format=json < /usr/local/etc/civicrm/openid_settings.json" fi su civicrm -c "wp option list" su civicrm -c "wp option patch update openid_connect_generic_settings client_id $OPEN_ID_CLIENT_ID" su civicrm -c "wp option patch update openid_connect_generic_settings client_secret $OPEN_ID_CLIENT_SECRET" if [[ -n "${AUTHENTIK_DOMAIN}" ]]; then su civicrm -c "wp option patch update openid_connect_generic_settings endpoint_login https://$AUTHENTIK_DOMAIN/application/o/authorize/" su civicrm -c "wp option patch update openid_connect_generic_settings endpoint_userinfo https://$AUTHENTIK_DOMAIN/application/o/userinfo/" su civicrm -c "wp option patch update openid_connect_generic_settings endpoint_token https://$AUTHENTIK_DOMAIN/application/o/token/" su civicrm -c "wp option patch update openid_connect_generic_settings endpoint_end_session https://$AUTHENTIK_DOMAIN/application/o/wordpress/end-session/" else su civicrm -c "wp option patch update openid_connect_generic_settings endpoint_login $OPEN_ID_PROVIDER_LOGIN_URL" su civicrm -c "wp option patch update openid_connect_generic_settings endpoint_userinfo $OPEN_ID_USERINFO_URL" su civicrm -c "wp option patch update openid_connect_generic_settings endpoint_token $OPEN_ID_TOKEN_ENDPOINT_URL" su civicrm -c "wp option patch update openid_connect_generic_settings endpoint_end_session $OPEN_ID_END_SESSION_URL" fi su civicrm -c "wp option list" fi echo "============ Setting up cron ============" printenv > /etc/environment apt update && apt install -y cron crontab -l | { cat; echo "*/5 * * * * /usr/local/bin/entrypoint.sh cron > /tmp/cronlog 2>&1"; } | crontab - cron # if [[ "${OPEN_ID_CONNECT_ENABLED}" == "1" ]]; then # sleep 30s # echo "============ Configuring OpenID Connect ============" # if su civicrm -c "wp option get openid_connect_generic_settings"; then # echo "found openid connect settings option!" # su civicrm -c "wp option get openid_connect_generic_settings" # # su civicrm -c "wp option patch update openid_connect_generic_settings client_id $OPEN_ID_CLIENT_ID" # else # echo "Couldn't find openid connect settings option!" # fi # fi echo "============ Running Webserver ============" exec apache2-foreground