265 lines
8.7 KiB
Bash
Executable File
265 lines
8.7 KiB
Bash
Executable File
#! /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}" = "collectiveaccess" ]; then
|
|
echo "Installing collective-access"
|
|
docker exec --user www-data "${PREFIX}-app" /bin/sh -c "
|
|
git clone \
|
|
--branch ${COLLECTIVEACCESS_VERSION} \
|
|
--single-branch \
|
|
https://github.com/collectiveaccess/providence.git \
|
|
/var/www/html
|
|
"
|
|
docker exec --user www-data "${PREFIX}-app" /bin/sh -c "
|
|
mkdir /var/www/html/media/collectiveaccess && \
|
|
chown 33:33 /var/www/html/media/collectiveaccess && \
|
|
chown 33:33 /var/www/html/media/collectiveaccess --recursive
|
|
"
|
|
cat << EOF > /tmp/${PREFIX}/setup.php
|
|
<?php
|
|
define("__CA_DB_HOST__", '${PREFIX}-db');
|
|
define("__CA_DB_USER__", '${DB_USER}');
|
|
define("__CA_DB_PASSWORD__", '${DB_USER_PASSWORD}');
|
|
define("__CA_DB_DATABASE__", '${DB_NAME}');
|
|
define("__CA_DEFAULT_LOCALE__", "fr_FR");
|
|
define("__CA_APP_DISPLAY_NAME__", "My First CollectiveAccess System");
|
|
define("__CA_ADMIN_EMAIL__", 'info@put-your-domain-here.com');
|
|
date_default_timezone_set('Europe/Paris');
|
|
define("__CA_QUEUE_ENABLED__", 0);
|
|
define("__CA_USE_CLEAN_URLS__", 0);
|
|
define("__CA_APP_NAME__", "collectiveaccess");
|
|
define("__CA_GOOGLE_MAPS_KEY__", "");
|
|
define('__CA_CACHE_BACKEND__', 'file');
|
|
define('__CA_ALLOW_INSTALLER_TO_OVERWRITE_EXISTING_INSTALLS__', false);
|
|
define('__CA_STACKTRACE_ON_EXCEPTION__', false);
|
|
require(__DIR__."/app/helpers/post-setup.php");
|
|
EOF
|
|
docker cp "/tmp/${PREFIX}/setup.php" "${PREFIX}-app":/var/www/html
|
|
docker exec --user root "${PREFIX}-app" /bin/sh -c "
|
|
chown 33:33 /var/www/html/setup.php
|
|
"
|
|
docker cp "/home/vanhalleje/CARHOP/Collective Access/mappings/default/profile.xml" "${PREFIX}-app":/var/www/html/install/profiles/xml/sample_profile.xml
|
|
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
|