mirror of
https://github.com/snipe/snipe-it.git
synced 2026-02-04 14:05:41 +00:00
FIXES: https://github.com/grokability/snipe-it/issues/12725 In some of our Docker startups, it was possible for the Laravel log file to be created with root permissions, causing future errors when the non-root webapp tries to write to it. We'll now always chown (and create, if necessary) the log file to the proper user after running any artisan commands (as root) We _could_ run them as the proper user via su, but IMO not doing so keeps the script easier to read, but I'm not married to the approach. I'd still want to keep the chown command(s) in, because it will also fix the permissions for anyone who already has this issue.
135 lines
4.3 KiB
Bash
135 lines
4.3 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/assetmodels' \
|
|
'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/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
|
|
echo "Changing upload limit to ${PHP_UPLOAD_LIMIT}"
|
|
if [ -e /etc/php/*/apache2/php.ini ]
|
|
then
|
|
sed -i "s/^upload_max_filesize.*/upload_max_filesize = ${PHP_UPLOAD_LIMIT}M/" /etc/php/*/apache2/php.ini
|
|
sed -i "s/^post_max_size.*/post_max_size = ${PHP_UPLOAD_LIMIT}M/" /etc/php/*/apache2/php.ini
|
|
else
|
|
sed -i "s/^upload_max_filesize.*/upload_max_filesize = ${PHP_UPLOAD_LIMIT}M/" /etc/php*/php.ini
|
|
sed -i "s/^post_max_size.*/post_max_size = ${PHP_UPLOAD_LIMIT}M/" /etc/php*/php.ini
|
|
fi
|
|
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
|
|
|
|
# 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
|