mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-20 17:15:51 +02:00
Added an database automigration feature to the docker image
This commit is contained in:
parent
594a5779dc
commit
c8375def1a
2 changed files with 54 additions and 0 deletions
|
@ -42,6 +42,48 @@ fi
|
||||||
# Start PHP-FPM (the PHP_VERSION is replaced by the configured version in the Dockerfile)
|
# Start PHP-FPM (the PHP_VERSION is replaced by the configured version in the Dockerfile)
|
||||||
service phpPHP_VERSION-fpm start
|
service phpPHP_VERSION-fpm start
|
||||||
|
|
||||||
|
|
||||||
|
# Run migrations if automigration is enabled via env variable DB_AUTOMIGRATE
|
||||||
|
if [ "$DB_AUTOMIGRATE" = "true" ]; then
|
||||||
|
echo "Waiting for database to be ready..."
|
||||||
|
ATTEMPTS_LEFT_TO_REACH_DATABASE=60
|
||||||
|
until [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ] || DATABASE_ERROR=$(sudo -E -u www-data php bin/console dbal:run-sql -q "SELECT 1" 2>&1); do
|
||||||
|
if [ $? -eq 255 ]; then
|
||||||
|
# If the Doctrine command exits with 255, an unrecoverable error occurred
|
||||||
|
ATTEMPTS_LEFT_TO_REACH_DATABASE=0
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
ATTEMPTS_LEFT_TO_REACH_DATABASE=$((ATTEMPTS_LEFT_TO_REACH_DATABASE - 1))
|
||||||
|
echo "Still waiting for database to be ready... Or maybe the database is not reachable. $ATTEMPTS_LEFT_TO_REACH_DATABASE attempts left."
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ]; then
|
||||||
|
echo "The database is not up or not reachable:"
|
||||||
|
echo "$DATABASE_ERROR"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "The database is now ready and reachable"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if there are any available migrations to do, by executing doctrine:migrations:up-to-date
|
||||||
|
# and checking if the exit code is 0 (up to date) or 1 (not up to date)
|
||||||
|
if sudo -E -u www-data php bin/console doctrine:migrations:up-to-date --no-interaction; then
|
||||||
|
echo "Database is up to date, no migrations necessary."
|
||||||
|
else
|
||||||
|
echo "Migrations available..."
|
||||||
|
echo "Do backup of database..."
|
||||||
|
|
||||||
|
sudo -E -u www-data mkdir -p /var/www/html/uploads/.automigration-backup/
|
||||||
|
# Backup the database
|
||||||
|
sudo -E -u www-data php bin/console partdb:backup -n --database /var/www/html/uploads/.automigration-backup/backup-$(date +%Y-%m-%d_%H-%M-%S).zip
|
||||||
|
|
||||||
|
# Check if there are any migration files
|
||||||
|
sudo -E -u www-data php bin/console doctrine:migrations:migrate --no-interaction
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
# first arg is `-f` or `--some-option` (taken from https://github.com/docker-library/php/blob/master/8.2/bullseye/apache/docker-php-entrypoint)
|
# first arg is `-f` or `--some-option` (taken from https://github.com/docker-library/php/blob/master/8.2/bullseye/apache/docker-php-entrypoint)
|
||||||
if [ "${1#-}" != "$1" ]; then
|
if [ "${1#-}" != "$1" ]; then
|
||||||
set -- apache2-foreground "$@"
|
set -- apache2-foreground "$@"
|
||||||
|
|
|
@ -47,6 +47,12 @@ services:
|
||||||
- DATABASE_URL=sqlite:///%kernel.project_dir%/var/db/app.db
|
- DATABASE_URL=sqlite:///%kernel.project_dir%/var/db/app.db
|
||||||
# In docker env logs will be redirected to stderr
|
# In docker env logs will be redirected to stderr
|
||||||
- APP_ENV=docker
|
- APP_ENV=docker
|
||||||
|
|
||||||
|
# Uncomment this, if you want to use the automatic database migration feature. With this you have you do not have to
|
||||||
|
# run the doctrine:migrations:migrate commands on installation or upgrade. A database backup is written to the uploads/
|
||||||
|
# folder (under .automigration-backup), so you can restore it, if the migration fails.
|
||||||
|
# This feature is currently experimental, so use it at your own risk!
|
||||||
|
# - DB_AUTOMIGRATE=true
|
||||||
|
|
||||||
# You can configure Part-DB using environment variables
|
# You can configure Part-DB using environment variables
|
||||||
# Below you can find the most essential ones predefined
|
# Below you can find the most essential ones predefined
|
||||||
|
@ -130,6 +136,12 @@ services:
|
||||||
# In docker env logs will be redirected to stderr
|
# In docker env logs will be redirected to stderr
|
||||||
- APP_ENV=docker
|
- APP_ENV=docker
|
||||||
|
|
||||||
|
# Uncomment this, if you want to use the automatic database migration feature. With this you have you do not have to
|
||||||
|
# run the doctrine:migrations:migrate commands on installation or upgrade. A database backup is written to the uploads/
|
||||||
|
# folder (under .automigration-backup), so you can restore it, if the migration fails.
|
||||||
|
# This feature is currently experimental, so use it at your own risk!
|
||||||
|
# - DB_AUTOMIGRATE=true
|
||||||
|
|
||||||
# You can configure Part-DB using environment variables
|
# You can configure Part-DB using environment variables
|
||||||
# Below you can find the most essential ones predefined
|
# Below you can find the most essential ones predefined
|
||||||
# However you can add add any other environment configuration you want here
|
# However you can add add any other environment configuration you want here
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue