#! /bin/sh # if [ ! -f "${PWD}/.env" ]; then echo "missing env file in ${PWD}" exit 1 fi set -a . "${PWD}/.env" . "${PWD}/env_files/certs.env" . "${PWD}/env_files/project.env" set +a mkdir -p "/tmp/${PREFIX}" echo "Setting up docker volumes" docker volume create "${PREFIX}-db" docker volume create "${PREFIX}-root" docker volume create "${PREFIX}-traefik-certs" docker volume create "${PREFIX}-traefik-dynamic" docker volume create "${PREFIX}-traefik-logs" docker volume create "${PREFIX}-traefik-static" docker volume create "${PREFIX}-webroot" docker volume create wp-cli-cache docker volume create composer-cache echo "Copying SSL certificates to traefik volume" if [ ! -f "${SSL_CRT_LOCATION}/${SSL_CRT_NAME}" ] || [ ! -f "${SSL_KEY_LOCATION}/${SSL_KEY_NAME}" ]; then echo "Missing SSL key or cert file" exit 1 fi docker run \ --rm \ --volume "${PREFIX}-traefik-certs":/certs \ --volume "${SSL_CRT_LOCATION}":/source \ ubuntu \ cp "/source/${SSL_CRT_NAME}" /certs docker run \ --rm \ --volume "${PREFIX}-traefik-certs":/certs \ --volume "${SSL_KEY_LOCATION}":/source \ ubuntu \ cp "/source/${SSL_KEY_NAME}" /certs echo "Generating traefik configuration files (ssl.yml and middlewares.yml)" cat << EOF > /tmp/${PREFIX}/ssl.yml --- tls: stores: default: defaultCertificate: certFile: /certs/${SSL_CRT_NAME} keyFile: /certs/${SSL_KEY_NAME} EOF cat << EOF > /tmp/${PREFIX}/middlewares.yml --- http: middlewares: https-redirect: redirectscheme: scheme: https permanent: true EOF docker run \ --rm \ --volume "/tmp/${PREFIX}":/source \ --volume "${PREFIX}-traefik-dynamic":/destination \ ubuntu \ cp /source/ssl.yml /source/middlewares.yml /destination echo "Generating traefik static configuration" cat << EOF > /tmp/${PREFIX}/static.yml --- api: dashboard: true entrypoints: http: address: :80 https: address: :443 log: filepath: /logs/traefik.log level: debug providers: docker: exposedbydefault: false file: directory: /etc/traefik/dynamic watch: true EOF docker run \ --rm \ --volume "/tmp/${PREFIX}":/source \ --volume "${PREFIX}-traefik-static":/destination \ ubuntu \ cp /source/static.yml /destination/traefik.yml docker compose up -d app while ! docker ps -q -f name="${PREFIX}-app"; do echo "Waiting for the web container to be up and running..." sleep 1 done docker compose up -d db while ! docker ps -q -f name="${PREFIX}-db"; do echo "Waiting for the db container to be up and running..." sleep 1 done while ! docker exec "${PREFIX}-app" /bin/sh -c "mysqladmin ping -h ${PREFIX}-db -P 3306 --protocol=tcp -u user -puser --silent"; do echo "Waiting for the mysql server in the db container to be up and running and reachable from the app container..." sleep 1 done if [ "${PROJECT_TYPE}" = "laravel" ]; then echo "Installing laravel" docker exec --user www-data --workdir "/var/www/html" "${PREFIX}-app" /bin/sh -c "composer create-project --prefer-dist laravel/laravel /var/www/html '${LAREVEL_VERSION}'" fi if [ "${PROJECT_TYPE}" = "livewire" ]; then echo "Installing livewire" docker exec --user www-data --workdir "/var/www/html" "${PREFIX}-app" /bin/sh -c "composer create-project --prefer-dist laravel/laravel /var/www/html '${LARAVEL_VERSION}'" docker exec --user www-data --workdir "/var/www/html" "${PREFIX}-app" /bin/sh -c "composer require livewire/livewire ${LIVEWIRE_VERSION}" fi if [ "${PROJECT_TYPE}" = "wordpress" ]; then echo "Downloading WordPress core" docker exec --user www-data "${PREFIX}-app" /bin/sh -c " wp core download \ --locale=${WP_LOCALE} \ --path=/var/www/html \ --version=${WP_VERSION}" echo "Creating WordPress config" docker exec --user www-data "${PREFIX}-app" /bin/sh -c ' wp config create \ --dbhost='"${PREFIX}-db"' \ --dbname='"${DB_NAME}"' \ --dbpass='"${DB_USER_PASSWORD}"' \ --dbuser='"${DB_USER}"' \ --force \ --path=/var/www/html \ --skip-check \ --extra-php <