mirror of
https://github.com/casjaysdevdocker/ampache
synced 2026-05-18 20:47:48 -04:00
All checks were successful
ampache / release-ampache (push) Successful in 21m48s
AI.md CLAUDE.md Dockerfile .env.scripts IDEA.md README.md rootfs/root/docker/setup/00-init.sh rootfs/root/docker/setup/01-system.sh rootfs/root/docker/setup/02-packages.sh rootfs/root/docker/setup/03-files.sh rootfs/root/docker/setup/06-post.sh rootfs/root/docker/setup/07-cleanup.sh rootfs/usr/local/bin/entrypoint.sh rootfs/usr/local/etc/docker/functions/entrypoint.sh rootfs/usr/local/etc/docker/init.d/09-mariadb.sh rootfs/usr/local/etc/docker/init.d/99-ampache.sh TODO.AI.md
5.2 KiB
5.2 KiB
How this image is built and wired
Base image and tooling
Built from casjaysdev/alpine:latest via a multi-stage Dockerfile (build stage → FROM scratch final). tini is the PID 1 supervisor; gosu provides privilege dropping. Package management is handled by pkmgr (auto-detects apk).
Package set
All packages come from Alpine's apk package manager. Key groups:
- Apache 2:
apache2 apache2-ctl apache2-utils apache2-ssl apache2-proxy apache2-http2 apache2-brotli apache2-icons apache2-error - PHP 8.4:
php84 php84-fpmplus all modules Ampache requires (pdo, pdo_mysql, mysqli, mysqlnd, session, intl, curl, simplexml, xml, xmlreader, xmlwriter, dom, mbstring, iconv, tokenizer, fileinfo, openssl, phar, gd, zip, bz2, gmp, exif, opcache, pecl-redis, ctype) - MariaDB:
mariadb mariadb-client mariadb-server-utils - Utilities:
bash tini curl wget unzip tar gzip tzdata ca-certificates pwgen
Build-time setup flow (rootfs/root/docker/setup/)
| Script | Role |
|---|---|
00-init.sh |
Clears template-files/{data,config,defaults} staging dirs |
01-system.sh |
Stub (Alpine repos are already configured by the base image) |
02-packages.sh |
Stub (no post-install compile steps; prebuilt Ampache zip needs no composer/npm) |
03-files.sh |
Auto-installs rootfs/tmp/etc/* → /etc/* and stages copies under template-files/config/ |
04-users.sh |
Defensive creation of apache:apache and mysql:mysql system accounts |
05-custom.sh |
Core setup: wipes distro defaults under /etc/{apache2,php84,my.cnf.d}/*, copies our optimized configs from /tmp/etc/, then downloads and unpacks the Ampache prebuilt zip to /usr/local/share/ampache/ |
06-post.sh |
Stub |
07-cleanup.sh |
Stub |
Config wipe-and-replace
05-custom.sh performs the canonical wipe-and-replace for all three config trees:
- Preserve
apache2/mime.typesandapache2/magic(not shipped in ourrootfs/tmp/etc/apache2/) rm -Rf /etc/{apache2,php84,my.cnf.d}/*cp -Rf /tmp/etc/{apache2,php84,my.cnf.d}/. /etc/{apache2,php84,my.cnf.d}/- Copy resulting
/etc/trees totemplate-files/config/for runtime seeding
Runtime init.d scripts
Two init.d scripts run in numeric order:
09-mariadb.sh
SERVICE_NAME="mariadb",EXEC_CMD_BIN='mariadbd'- Runs as
mysql:mysql; datadir/data/db/mariadb; socket/run/mysqld/mysqld.sock IS_DATABASE_SERVICE="yes",DATABASE_SERVICE_TYPE="mariadb"__run_pre_execute_checks: initializes the datadir withmariadb-install-dbifibdata1is missing__post_execute: waits for the socket, then creates theampachedatabase,ampacheuser (random password), grants privileges, and sets the root password
99-ampache.sh
SERVICE_NAME="ampache",EXEC_CMD_BIN='/usr/local/etc/docker/bin/start-ampache'IS_WEB_SERVER="yes",USES_DATABASE_SERVICE="yes",DATABASE_SERVICE_TYPE="mariadb"SERVICE_USER="apache",SERVICE_GROUP="apache"WWW_ROOT_DIR="/usr/local/share/ampache/public",ETC_DIR="/etc/apache2",CONF_DIR="/config/apache2"ADDITIONAL_CONFIG_DIRS="/config/php84 /config/ampache"__execute_prerun: creates runtime dirs (/run/apache2 /run/php-fpm /tmp/php-sessions /data/logs/{apache2,php-fpm}), chowns them toapache:apache; symlinksampache.cfg.phpbetween/usr/local/share/ampache/config/and/config/ampache/once install.php writes it__run_pre_execute_checks: waits up to 30 s for the MariaDB socket; validateshttpd -tapache config syntax__update_conf_files: replaces theREPLACE_TZtoken in/etc/php84/php.iniwith$TZ__post_execute: mirrorsampache.cfg.phpout to/config/ampache/and creates the symlink if install.php has written it
start-ampache wrapper
EXEC_CMD_BIN points to /usr/local/etc/docker/bin/start-ampache, which:
- Starts
php-fpm84in the background (waits up to 10 s for/run/php-fpm/php-fpm.sock) - Exec's
httpd -D FOREGROUND -f /etc/apache2/httpd.conf(becomes the process the framework monitors)
Config paths
| Component | Config file | User-editable at |
|---|---|---|
| Apache main | /etc/apache2/httpd.conf |
/config/apache2/httpd.conf |
| Apache ampache vhost | /etc/apache2/conf.d/ampache.conf |
/config/apache2/conf.d/ampache.conf |
| Apache MPM tuning | /etc/apache2/conf.d/mpm.conf |
/config/apache2/conf.d/mpm.conf |
| User vhosts | IncludeOptional /config/apache2/vhosts.d/*.conf |
/config/apache2/vhosts.d/ |
| PHP runtime | /etc/php84/php.ini |
/config/php84/php.ini |
| PHP-FPM global | /etc/php84/php-fpm.conf |
/config/php84/php-fpm.conf |
| PHP-FPM pool | /etc/php84/php-fpm.d/www.conf |
/config/php84/php-fpm.d/www.conf |
| MariaDB server | /etc/my.cnf.d/mariadb-server.cnf |
/config/my.cnf.d/mariadb-server.cnf |
| Ampache app config | /usr/local/share/ampache/config/ampache.cfg.php |
/config/ampache/ampache.cfg.php (symlinked) |
Volume layout
/config— all user-editable configs (seeded on first run fromtemplate-files/config/)/data— MariaDB datadir (/data/db/mariadb), logs (/data/logs/), media library if mounted
Port
80(HTTP);443available if SSL is enabled via/config/enable/ssl