31f90d20f8
After the recent update to 8.4.1 this command was mandatory, but wasnt applied to docker environment, therefore (atleast for my company) views were broken (empty licenses for example). Had to manually exec into the container and execute this command. Adding it to the startup script should bring no real downsides, but should fix this for all others and all future version of snipe-it that have the same requirement for clearing compiled views
135 lines
4.2 KiB
Bash
135 lines
4.2 KiB
Bash
#!/bin/bash
|
|
|
|
# Cribbed from nextcloud docker official repo
|
|
# https://github.com/nextcloud/docker/blob/master/docker-entrypoint.sh
|
|
# usage: file_env VAR [DEFAULT]
|
|
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
|
|
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
|
|
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
|
|
file_env() {
|
|
local var="$1"
|
|
local fileVar="${var}_FILE"
|
|
local def="${2:-}"
|
|
local varValue=$(env | grep -E "^${var}=" | sed -E -e "s/^${var}=//")
|
|
local fileVarValue=$(env | grep -E "^${fileVar}=" | sed -E -e "s/^${fileVar}=//")
|
|
if [ -n "${varValue}" ] && [ -n "${fileVarValue}" ]; then
|
|
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
|
|
exit 1
|
|
fi
|
|
if [ -n "${varValue}" ]; then
|
|
export "$var"="${varValue}"
|
|
elif [ -n "${fileVarValue}" ]; then
|
|
export "$var"="$(cat "${fileVarValue}")"
|
|
elif [ -n "${def}" ]; then
|
|
export "$var"="$def"
|
|
fi
|
|
unset "$fileVar"
|
|
}
|
|
|
|
# Add docker secrets support for the variables below:
|
|
file_env APP_KEY
|
|
file_env DB_HOST
|
|
file_env DB_PORT
|
|
file_env DB_DATABASE
|
|
file_env DB_USERNAME
|
|
file_env DB_PASSWORD
|
|
file_env REDIS_HOST
|
|
file_env REDIS_PASSWORD
|
|
file_env REDIS_PORT
|
|
file_env MAIL_HOST
|
|
file_env MAIL_PORT
|
|
file_env MAIL_USERNAME
|
|
file_env MAIL_PASSWORD
|
|
|
|
# fix key if needed
|
|
if [ -z "$APP_KEY" -a -z "$APP_KEY_FILE" ]
|
|
then
|
|
echo "Please re-run this container with an environment variable \$APP_KEY"
|
|
echo "An example APP_KEY you could use is: "
|
|
/var/www/html/artisan key:generate --show
|
|
exit
|
|
fi
|
|
|
|
if [ -f /var/lib/snipeit/ssl/snipeit-ssl.crt -a -f /var/lib/snipeit/ssl/snipeit-ssl.key ]
|
|
then
|
|
a2enmod ssl
|
|
else
|
|
a2dismod ssl
|
|
fi
|
|
|
|
# create data directories
|
|
# Note: Keep in sync with expected directories by the app
|
|
# https://github.com/grokability/snipe-it/blob/master/app/Console/Commands/RestoreFromBackup.php#L232
|
|
for dir in \
|
|
'data/private_uploads' \
|
|
'data/private_uploads/assets' \
|
|
'data/private_uploads/accessories' \
|
|
'data/private_uploads/audits' \
|
|
'data/private_uploads/components' \
|
|
'data/private_uploads/consumables' \
|
|
'data/private_uploads/eula-pdfs' \
|
|
'data/private_uploads/imports' \
|
|
'data/private_uploads/models' \
|
|
'data/private_uploads/users' \
|
|
'data/private_uploads/licenses' \
|
|
'data/private_uploads/signatures' \
|
|
'data/uploads/accessories' \
|
|
'data/uploads/assets' \
|
|
'data/uploads/avatars' \
|
|
'data/uploads/barcodes' \
|
|
'data/uploads/categories' \
|
|
'data/uploads/companies' \
|
|
'data/uploads/components' \
|
|
'data/uploads/consumables' \
|
|
'data/uploads/departments' \
|
|
'data/uploads/locations' \
|
|
'data/uploads/maintenances' \
|
|
'data/uploads/manufacturers' \
|
|
'data/uploads/models' \
|
|
'data/uploads/suppliers' \
|
|
'dumps' \
|
|
'keys'
|
|
do
|
|
[ ! -d "/var/lib/snipeit/$dir" ] && mkdir -p "/var/lib/snipeit/$dir"
|
|
done
|
|
|
|
chown -R docker:root /var/lib/snipeit/data/*
|
|
chown -R docker:root /var/lib/snipeit/dumps
|
|
chown -R docker:root /var/lib/snipeit/keys
|
|
chown -R docker:root /var/www/html/storage/framework/cache
|
|
|
|
# Fix php settings
|
|
if [ -v "PHP_UPLOAD_LIMIT" ]
|
|
then
|
|
find /etc/php -type f -name php.ini | while IFS= read -r ini; do
|
|
echo "Changing upload limit to ${PHP_UPLOAD_LIMIT}M in $ini"
|
|
sed -i \
|
|
-e "s/^;\? *upload_max_filesize *=.*/upload_max_filesize = ${PHP_UPLOAD_LIMIT}M/" \
|
|
-e "s/^;\? *post_max_size *=.*/post_max_size = ${PHP_UPLOAD_LIMIT}M/" \
|
|
"$ini"
|
|
done
|
|
fi
|
|
|
|
# If the Oauth DB files are not present copy the vendor files over to the db migrations
|
|
if [ ! -f "/var/www/html/database/migrations/*create_oauth*" ]
|
|
then
|
|
cp -ax /var/www/html/vendor/laravel/passport/database/migrations/* /var/www/html/database/migrations/
|
|
fi
|
|
|
|
if [ "$SESSION_DRIVER" = "database" ]
|
|
then
|
|
cp -ax /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Console/stubs/database.stub /var/www/html/database/migrations/2021_05_06_0000_create_sessions_table.php
|
|
fi
|
|
|
|
php artisan migrate --force
|
|
php artisan config:clear
|
|
php artisan config:cache
|
|
php artisan view:clear
|
|
|
|
# we do this after the artisan commands to ensure that if the laravel
|
|
# log got created by root, we set the permissions back
|
|
touch /var/www/html/storage/logs/laravel.log
|
|
chown -R docker:root /var/www/html/storage/logs/laravel.log
|
|
|
|
exec supervisord -c /supervisord.conf
|