diff --git a/.env.sample b/.env.sample index be77cb2..6ddc5b9 100644 --- a/.env.sample +++ b/.env.sample @@ -20,8 +20,8 @@ LETS_ENCRYPT_ENV=production # Every new user is per default subscriber, uncomment to change it #DEFAULT_USER_ROLE=administrator -# Uncomment to install PHP Composer -#COMPOSER=1 +# PHP composer for plugin installation +#COMPOSE_FILE="$COMPOSE_FILE:compose.composer.yml" #WORDPRESS_DEBUG=true diff --git a/abra.sh b/abra.sh index 0c6384f..b066de1 100644 --- a/abra.sh +++ b/abra.sh @@ -1,5 +1,5 @@ export PHP_UPLOADS_CONF_VERSION=v3 -export ENTRYPOINT_CONF_VERSION=v5 +export ENTRYPOINT_CONF_VERSION=v6 export ENTRYPOINT_MAILRELAY_CONF_VERSION=v2 export MSMTP_CONF_VERSION=v4 @@ -75,77 +75,3 @@ set_authentik(){ fix_mysql() { echo "ALTER TABLE mysql.column_stats MODIFY histogram longblob; ALTER TABLE mysql.column_stats MODIFY hist_type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB','JSON_HB');" | mysql -u root -p$(cat /run/secrets/db_root_password) } - -sub_wp() { - CONTAINER=$(docker container ls -f "Name=${STACK_NAME}_app" --format '{{ .ID }}') - if [ -z "$CONTAINER" ]; then - error "Can't find a container for ${STACK_NAME}_app" - exit - fi - debug "Using Container ID ${CONTAINER}" - - # FIXME 3wc: we're fighting the Wordpress image, which recommends a named - # volume for /var/www/html -- this used to work fine using --volumes-from - # because the actual MySQL password was inserted into the generated - # wp-config.php -- but as of Wordpress 5.7.0, wp-config loads data straight - # from the environment, which requires Docker secrets to work, which only work - # in swarm services (not one-off `docker run` commands). Defining a `cli` - # service in compose.yml almost works, but there's no volumes_from: in Compose - # V3, and without it then the `cli` service can't access Wordpress core. - # See https://git.autonomic.zone/coop-cloud/wordpress/issues/21 - warning "Slowly looking up MySQL password..." - silence - abra__service_="app" - DB_PASSWORD="$(sub_app_run cat "/run/secrets/db_password")" - unsilence - - # shellcheck disable=SC2154,SC2086 - docker run -it \ - --volumes-from "$CONTAINER" \ - --network "container:$CONTAINER" \ - -u xfs:xfs \ - -e WORDPRESS_DB_HOST=db \ - -e WORDPRESS_DB_USER=wordpress \ - -e WORDPRESS_DB_PASSWORD="${DB_PASSWORD}" \ - -e WORDPRESS_DB_NAME=wordpress \ - -e WORDPRESS_CONFIG_EXTRA="${WORDPRESS_CONFIG_EXTRA}" \ - wordpress:cli wp ${abra__args_[*]} -} - -abra_backup_app() { - _abra_backup_dir "app:/var/www/html/wp-content" -} - -abra_backup_db() { - _abra_backup_mysql "db" "wordpress" -} - -abra_backup() { - abra_backup_app && abra_backup_db -} - -abra_restore_app() { - # shellcheck disable=SC2034 - { - abra__src_="-" - abra__dst_="app:/var/www/html/" - } - - zcat "$@" | sub_app_cp - - success "Restored 'app'" -} - -abra_restore_db() { - # 3wc: unlike abra_backup_db, we can assume abra__service_ will be 'db' if we - # got this far.. - - # shellcheck disable=SC2034 - abra___no_tty="true" - - DB_ROOT_PASSWORD=$(sub_app_run cat /run/secrets/db_root_password) - - zcat "$@" | sub_app_run mysql -u root -p"$DB_ROOT_PASSWORD" wordpress - - success "Restored 'db'" -} diff --git a/compose.composer.yml b/compose.composer.yml new file mode 100644 index 0000000..0b97fe1 --- /dev/null +++ b/compose.composer.yml @@ -0,0 +1,14 @@ +--- +version: "3.8" + +services: + app: + volumes: + - "composer:/var/www/html/composer" + environment: + - ENABLE_COMPOSER=1 + - COMPOSER=composer/composer.json + - COMPOSER_VENDOR_DIR=composer/vendor + +volumes: + composer: diff --git a/entrypoint.sh.tmpl b/entrypoint.sh.tmpl index 503d80f..72a8776 100644 --- a/entrypoint.sh.tmpl +++ b/entrypoint.sh.tmpl @@ -7,9 +7,9 @@ docker-php-ext-install {{ env "PHP_EXTENSIONS" }} curl -z /usr/local/bin/wp -o /usr/local/bin/wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar chmod +x /usr/local/bin/wp -{{ if eq (env "COMPOSER") "1" }} +{{ if eq (env "ENABLE_COMPOSER") "1" }} mkdir -p /var/www/.composer -chown www-data:www-data /var/www/.composer +chown www-data:www-data /var/www/.composer /var/www/html/composer curl https://getcomposer.org/installer -o /tmp/composer-setup.php php -r "if (hash_file('sha384', '/tmp/composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"