Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ RUN mkdir -p /opt/flarum \
&& composer clear-cache \
&& addgroup -g ${PGID} flarum \
&& adduser -D -h /opt/flarum -u ${PUID} -G flarum -s /bin/sh -D flarum \
&& composer show --working-dir /opt/flarum --direct --name-only | sort > /opt/flarum/.bundled-packages \
&& chown -R flarum:flarum /opt/flarum \
&& rm -rf /root/.composer /tmp/*

Expand Down
6 changes: 6 additions & 0 deletions rootfs/etc/cont-init.d/03-config.sh
Original file line number Diff line number Diff line change
Expand Up @@ -220,5 +220,11 @@ if [ -s "/data/extensions/list" ]; then
COMPOSER_CACHE_DIR="/data/extensions/.cache" gosu flarum:flarum composer require --working-dir /opt/flarum ${extensions}
fi

# Register composer hook so that extensions installed via the admin UI
# (Extension Manager) are automatically persisted to /data/extensions/list
# (see https://github.com/crazy-max/docker-flarum/issues/103)
echo "Registering extension sync hook..."
gosu flarum:flarum composer config --working-dir /opt/flarum scripts.post-update-cmd extension-sync

gosu flarum:flarum php flarum migrate
gosu flarum:flarum php flarum cache:clear
12 changes: 12 additions & 0 deletions rootfs/usr/local/bin/extension-sync
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/sh
# Sync /data/extensions/list with composer.json so that extensions
# installed via the admin UI (Extension Manager) persist across restarts.

php -r '
$bundled = file("/opt/flarum/.bundled-packages", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$composer = json_decode(file_get_contents("/opt/flarum/composer.json"), true);
$packages = array_filter(array_keys($composer["require"]), fn($p) => str_contains($p, "/"));
$extensions = array_diff($packages, $bundled);
sort($extensions);
file_put_contents("/data/extensions/list", implode("\n", $extensions) . "\n");
'