| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- #! /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}" = "wintercms" ]; then
- echo "Installing wintercms"
- docker exec --user www-data --workdir "/var/www/html" "${PREFIX}-app" /bin/sh -c "composer create-project wintercms/winter /var/www/html"
- docker exec --user www-data --workdir "/var/www/html" "${PREFIX}-app" /bin/sh -c "echo ASSET_URL=https://${APP_URL} >> /var/www/html/.env"
- docker exec --user www-data --workdir "/var/www/html" "${PREFIX}-app" /bin/sh -c "echo DB_DATABASE=${DB_NAME} >> /var/www/html/.env"
- docker exec --user www-data --workdir "/var/www/html" "${PREFIX}-app" /bin/sh -c "echo DB_USERNAME=${DB_USER} >> /var/www/html/.env"
- docker exec --user www-data --workdir "/var/www/html" "${PREFIX}-app" /bin/sh -c "echo DB_PASSWORD=${DB_USER_PASSWORD} >> /var/www/html/.env"
- docker exec --user www-data --workdir "/var/www/html" "${PREFIX}-app" /bin/sh -c "echo DB_HOST=${PREFIX}-db >> /var/www/html/.env"
- docker exec --user root "${PREFIX}-app" /bin/sh -c "sed -i 's|/var/www/html/public|/var/www/html|g' /etc/apache2/sites-available/000-default.conf"
- docker restart "${PREFIX}-app"
- docker exec --user www-data --workdir "/var/www/html" -it "${PREFIX}-app" /bin/sh -c "php artisan winter:install"
- fi
-
- if [ "${PROJECT_TYPE}" = "laravel" ] || [ "${PROJECT_TYPE}" = "livewire" ] || [ "${PROJECT_TYPE}" = "php" ]; then
- echo "Generating vscode launch.json file"
- cat << EOF > /tmp/${PREFIX}/launch.json
- {
- "version": "0.2.0",
- "configurations": [
- {
- "hostname": "${TRAEFIK_LISTENING_IP}",
- "name": "Listen for Xdebug (${TRAEFIK_LISTENING_IP})",
- "pathMappings": {
- "/var/www/html/": "\${workspaceRoot}/",
- },
- "port": 9003,
- "request": "launch",
- "type": "php"
- }
- ]
- }
- EOF
- docker run \
- --rm \
- --user www-data \
- --volume "${PREFIX}-app":/destination \
- ubuntu \
- mkdir --parents /destination/.vscode
- docker run \
- --rm \
- --user www-data \
- --volume "${PREFIX}-app":/destination \
- ubuntu \
- cp /source/launch.json /destination/.vscode
- docker run \
- --rm \
- --user root \
- --volume "${PREFIX}-app":/destination \
- ubuntu \
- chown www-data:www-data /destination/.vscode -r
- fi
-
- if [ "${PROJECT_TYPE}" = "wordpress" ]; then
- echo "Installing wppb-cli"
- composer global require tmeister/wppb-cli
- 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 <<EXTRA-PHP
- if (isset(\$_SERVER["HTTP_X_FORWARDED_PROTO"]) && \$_SERVER["HTTP_X_FORWARDED_PROTO"] == "https") \$_SERVER["HTTPS"]="on";
- EXTRA-PHP
- '
-
- echo "Installing WordPress core"
- docker exec --user www-data "${PREFIX}-app" /bin/sh -c "
- wp core install \
- --admin_email=no@mail.com \
- --admin_password=${WP_ADMIN_PASSWORD} \
- --admin_user=${WP_ADMIN_USERNAME} \
- --path=/var/www/html \
- --skip-email \
- --title=${PREFIX} \
- --url=${WP_DEFAULT_PROTOCOL}://${APP_URL}"
-
- echo "Installing WordPress "${WP_THEME}" theme"
- docker exec --user www-data "${PREFIX}-app" /bin/sh -c "
- wp theme install ${WP_THEME} \
- --activate \
- --path=/var/www/html"
- fi
-
- docker compose up -d adminer
- docker compose up -d app
- docker compose up -d traefik
|