|
| 1 | +#!/usr/bin/with-contenv bash |
| 2 | + |
| 3 | +# create directory structure |
| 4 | +mkdir -p \ |
| 5 | + /config/www/{uploads,files,images} |
| 6 | + |
| 7 | +# check for .env and copy default if needed |
| 8 | +[[ ! -f "/config/www/.env" ]] && \ |
| 9 | + cp /var/www/html/.env.example /config/www/.env |
| 10 | + |
| 11 | +# create symlinks |
| 12 | +symlinks=( \ |
| 13 | +/var/www/html/storage/uploads/files \ |
| 14 | +/var/www/html/storage/uploads/images \ |
| 15 | +/var/www/html/public/uploads \ |
| 16 | +/var/www/html/.env \ |
| 17 | +/var/www/html/storage/logs/laravel.log |
| 18 | +) |
| 19 | + |
| 20 | +for i in "${symlinks[@]}" |
| 21 | +do |
| 22 | +[[ -e "$i" && ! -L "$i" ]] && rm -rf "$i" |
| 23 | +[[ ! -L "$i" ]] && ln -s /config/www/"$(basename "$i")" "$i" |
| 24 | +done |
| 25 | + |
| 26 | +# Echo init finish for test runs |
| 27 | +if [ -n "${TEST_RUN}" ]; then |
| 28 | + echo '[services.d] done.' |
| 29 | +fi |
| 30 | + |
| 31 | +# Create API key if needed |
| 32 | +if [ ! -f "/config/BOOKSTACK_APP_KEY.txt" ]; |
| 33 | + then |
| 34 | + echo "Generating BookStack app key for first run" |
| 35 | + key=$(php /var/www/html/artisan key:generate --show) |
| 36 | + echo $key > /config/BOOKSTACK_APP_KEY.txt |
| 37 | + echo "App Key set to $key you can modify the file to update /config/BOOKSTACK_APP_KEY.txt" |
| 38 | +elif [ -f "/config/BOOKSTACK_APP_KEY.txt" ]; |
| 39 | + then |
| 40 | + echo "App Key found - setting variable for seds" |
| 41 | + key=$(cat /config/BOOKSTACK_APP_KEY.txt) |
| 42 | +fi |
| 43 | + |
| 44 | +# .env file setup |
| 45 | +# check for the default app key or if it has been updated |
| 46 | +if grep -Fxq "APP_KEY=SomeRandomString" /config/www/.env || \ |
| 47 | +! grep -Fxq "APP_KEY=${key}" /config/www/.env; then |
| 48 | + sed -i "s#^APP_KEY=.*#APP_KEY=${key}#" /config/www/.env |
| 49 | +fi |
| 50 | +# check to see if db_user is set, if it is then run seds and if not then leave them |
| 51 | +if [ "${DB_USER}" ]; |
| 52 | + then |
| 53 | + echo "Running config - db_user set" |
| 54 | + sed -i "s/DB_HOST=localhost/DB_HOST=${DB_HOST}/g" /config/www/.env |
| 55 | + sed -i "s/DB_DATABASE=database_database/DB_DATABASE=${DB_DATABASE}/g" /config/www/.env |
| 56 | + sed -i "s/DB_USERNAME=database_username/DB_USERNAME=${DB_USER}/g" /config/www/.env |
| 57 | + sed -i "s/DB_PASSWORD=database_user_password/DB_PASSWORD=${DB_PASS}/g" /config/www/.env |
| 58 | +fi |
| 59 | + |
| 60 | +# set appurl if detected |
| 61 | +[ -n "${APP_URL}" ] && sed -r "s,([#\s]*)?APP_URL=.*,APP_URL=${APP_URL},g" -i /config/www/.env |
| 62 | + |
| 63 | +# check for the mysql endpoint for 30 seconds |
| 64 | +END=$((SECONDS+30)) |
| 65 | +while [ ${SECONDS} -lt ${END} ] && [ -n "${DB_HOST+x}" ]; do |
| 66 | + /usr/bin/nc -z ${DB_HOST} 3306 && \ |
| 67 | + if [ ! -z "$(/usr/bin/nc -w1 ${DB_HOST} 3306)" ]; then |
| 68 | + [ ! -z "${RUN}" ] && break |
| 69 | + RUN="RAN" |
| 70 | + # we sleep here again due to first run init on DB containers |
| 71 | + [ ! -f /dbwait.lock ] && sleep 5 |
| 72 | + else |
| 73 | + sleep 1 |
| 74 | + fi |
| 75 | + sleep 1 |
| 76 | +done |
| 77 | + |
| 78 | +# update database - will set up database if fresh, or, migrate existing |
| 79 | +if [ -z "${CI_RUN+x}" ]; then |
| 80 | + php /var/www/html/artisan migrate --force |
| 81 | +fi |
| 82 | + |
| 83 | +# set permissions |
| 84 | +chown -R abc:abc \ |
| 85 | + /config \ |
| 86 | + /var/www/ |
| 87 | + |
| 88 | +# set lockfile to avoid DB waits for this specific container |
| 89 | +touch /dbwait.lock |
0 commit comments