diff --git a/docker/webapp/Dockerfile b/docker/webapp/Dockerfile index 64c045fa..b0dd33d1 100755 --- a/docker/webapp/Dockerfile +++ b/docker/webapp/Dockerfile @@ -1,29 +1,30 @@ FROM apheleia/swoole:latest USER root RUN dnf -y install findutils gnupg2 git rsync && \ dnf clean all EXPOSE 8000 ARG GIT_REF=master ARG GIT_REMOTE=https://git.kolab.org/source/kolab.git ARG CONFIG=config.prod ARG OVERLAY_GIT_REMOTE ARG OVERLAY_GIT_REF=master #Set this to prod or dev ARG RELEASE_MODE=prod COPY build.sh /build.sh RUN /build.sh && \ chgrp -R 0 /opt/app-root /tmp /etc/pki/ca-trust/extracted/ && \ chown -R 1001:0 /opt/app-root /tmp /etc/pki/ca-trust/extracted/ && \ chmod -R g=u /opt/app-root /tmp /etc/pki/ca-trust/extracted/ && \ chmod -R 777 /etc/pki/ca-trust/extracted/ COPY init.sh /init.sh COPY update.sh /update.sh +COPY update-source.sh /update-source.sh USER 1001 CMD [ "/init.sh" ] diff --git a/docker/webapp/init.sh b/docker/webapp/init.sh index 90b8d1d1..48544281 100755 --- a/docker/webapp/init.sh +++ b/docker/webapp/init.sh @@ -1,150 +1,140 @@ #!/bin/bash set -e set -x cd /opt/app-root/src/ REBUILD=false # Update the sourcecode if available. # This also copies the .env files that is required if we don't provide # a configuration via the environment. # So we need this for the docker-compose setup if [ -d /src/kolabsrc.orig ]; then echo "----> Updating source" - rsync -av \ - --exclude=vendor \ - --exclude=composer.lock \ - --exclude=node_modules \ - --exclude=package-lock.json \ - --exclude=public \ - --exclude=storage \ - --exclude=resources/build \ - --exclude=bootstrap \ - --exclude=.gitignore \ - /src/kolabsrc.orig/ /opt/app-root/src/ | tee /tmp/rsync.output + /update-source.sh REBUILD=true fi if [ -d /src/overlay ]; then echo "----> Applying overlay" rsync -av \ --exclude=vendor \ --exclude=composer.lock \ --exclude=node_modules \ --exclude=package-lock.json \ --exclude=public \ --exclude=storage \ --exclude=resources/build \ --exclude=bootstrap \ --exclude=.gitignore \ /src/overlay/ /opt/app-root/src/ | tee /tmp/rsync-overlay.output REBUILD=true fi # If we want to rely on the environment for configuration if [[ $NOENVFILE == true ]]; then echo "----> removing envfile" rm -f .env fi if [[ $REBUILD == true ]]; then rm -rf storage/framework mkdir -p storage/framework/{sessions,views,cache} find bootstrap/cache/ -type f ! -name ".gitignore" -delete ./artisan clear-compiled ./artisan cache:clear php -dmemory_limit=-1 $(command -v composer) install npm run dev fi if [ ! -f 'resources/countries.php' ]; then echo "----> Importing countries" ./artisan data:countries fi echo "----> Waiting for db" ./artisan db:ping --wait # Import the service ca on openshift update-ca-trust function is_not_initialized() { ROWCOUNT=$(echo "select count(*) from migrations;" | mysql -N -b -u "$DB_USERNAME" -p"$DB_PASSWORD" -h "$DB_HOST" "$DB_DATABASE") if [[ "$ROWCOUNT" == "" ]]; then # Treat an error in the above command as uninitialized ROWCOUNT="0" fi [[ "$ROWCOUNT" == "0" ]] } case ${KOLAB_ROLE} in seed|SEED) echo "----> Running seeder" # Only run the seeder if we haven't even migrated yet. if is_not_initialized; then echo "----> Seeding the database" # If we seed, we always drop all existing tables php -dmemory_limit=512M ./artisan migrate:fresh --seed --force fi ;; horizon|HORIZON) echo "----> Waiting for database to be seeded" while is_not_initialized; do sleep 1 echo "." done echo "----> Running migrations" php -dmemory_limit=512M ./artisan migrate --force || : echo "----> Starting horizon" exec ./artisan horizon ;; octane|OCTANE) echo "----> Running octane" echo "----> Waiting for database to be seeded" while is_not_initialized; do sleep 1 echo "." done exec ./artisan octane:start --host=0.0.0.0 ;; worker|WORKER ) ./artisan migrate --force || : echo "----> Running worker" exec ./artisan queue:work ;; combined|COMBINED ) # If there is no db at all then listing users will crash (resulting in us counting the lines of backtrace), # but migrate:status will just fail. if is_not_initialized; then echo "----> Seeding the database" php -dmemory_limit=512M ./artisan migrate --seed # If there is a db but no user we reseed elif test "$( env APP_DEBUG=false ./artisan -n users | wc -l )" -lt "1"; then echo "----> Initializing the database" php -dmemory_limit=512M ./artisan migrate:refresh --seed # Otherwise we just migrate else echo "----> Running migrations" php -dmemory_limit=512M ./artisan migrate --force fi nohup ./artisan horizon 2>&1 & exec ./artisan octane:start --host=$(env | grep OCTANE_HTTP_HOST | tail -n1 | sed "s/OCTANE_HTTP_HOST=//") ;; * ) echo "----> Sleeping" exec sleep 10000 ;; esac diff --git a/docker/webapp/update-source.sh b/docker/webapp/update-source.sh new file mode 100755 index 00000000..8088a556 --- /dev/null +++ b/docker/webapp/update-source.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +rsync -av \ + --exclude=vendor \ + --exclude=composer.lock \ + --exclude=node_modules \ + --exclude=package-lock.json \ + --exclude=public \ + --exclude=storage \ + --exclude=resources/build \ + --exclude=bootstrap \ + --exclude=.gitignore \ + /src/kolabsrc.orig/ /opt/app-root/src/ | tee /tmp/rsync.output diff --git a/docker/webapp/update.sh b/docker/webapp/update.sh index cd7e8bab..5a672a43 100755 --- a/docker/webapp/update.sh +++ b/docker/webapp/update.sh @@ -1,34 +1,24 @@ #!/bin/bash set -e set -x -rsync -av \ - --exclude=vendor \ - --exclude=composer.lock \ - --exclude=node_modules \ - --exclude=package-lock.json \ - --exclude=public \ - --exclude=storage \ - --exclude=resources/build \ - --exclude=bootstrap \ - --exclude=.gitignore \ - /src/kolabsrc.orig/ /opt/app-root/src/ | tee /tmp/rsync.output +/update-source.sh cd /opt/app-root/src/ rm -rf storage/framework mkdir -p storage/framework/{sessions,views,cache} find bootstrap/cache/ -type f ! -name ".gitignore" -delete ./artisan clear-compiled ./artisan cache:clear if grep -e "composer.json" -e "app" /tmp/rsync.output; then php -dmemory_limit=-1 $(command -v composer) update fi # Only run npm if something relevant was updated if grep -e "package.json" -e "resources" /tmp/rsync.output; then npm run dev fi ./artisan octane:reload