#!/usr/bin/env bash set -e # 1. Reset containers and volumes docker compose down -v # Ensure the config directory exists mkdir -p config # 2. Generate Random Variables correctly using $(...) MYSQL_USER=$(openssl rand -hex 16) MYSQL_PASSWORD=$(openssl rand -base64 32) MYSQL_DATABASE="wkvs_database" MYSQL_ROOT_PASSWORD=$(openssl rand -base64 32) cat < config/.env.docker.db MYSQL_ROOT_PASSWORD="$MYSQL_ROOT_PASSWORD" MYSQL_DATABASE=$MYSQL_DATABASE MYSQL_USER=$MYSQL_USER MYSQL_PASSWORD="$MYSQL_PASSWORD" EOF # 3. Handle Admin Hashing KEYWORD=$(openssl rand -hex 16) HASHED_KEYWORD=$(php -r "echo password_hash('$KEYWORD', PASSWORD_ARGON2ID);") # Replace placeholder in SQL template sed "s|__ARGON_HASH_PLACEHOLDER__|$HASHED_KEYWORD|g" docker/database/wkvs-database-template.sql > docker/database/db-sql.sql # 1. Generate password REDIS_PASSWORD=$(openssl rand -hex 32) # 3. Save variables to your .env file cat < config/.env.redis REDIS_PASSWORD="$REDIS_PASSWORD" REDIS_HOST=redis REDIS_PORT=6379 EOF # 4. Start Docker Containers docker compose up -d --build # 5. Wait until MariaDB is fully up and accepting connections echo "Waiting for MariaDB to start..." sleep 5 until docker compose exec -T mariadb mariadb-admin ping -h localhost -u root -p"$MYSQL_ROOT_PASSWORD" --silent >/dev/null 2>&1; do sleep 2 done # 6. Execute Primary Schema Import docker compose exec -T mariadb mariadb -u root -p"$MYSQL_ROOT_PASSWORD" "$MYSQL_DATABASE" < docker/database/db-sql.sql rm docker/database/db-sql.sql # 7. Generate Additional Application Users & Passwords MYSQL_WKVS_USERNAME="wkvs_normal_user" MYSQL_GUEST_USERNAME="wkvs_guest_user" MYSQL_WKVS_PASSWORD=$(openssl rand -hex 32) MYSQL_GUEST_PASSWORD=$(openssl rand -hex 16) # Write app user configuration files cat < config/.env.db-wkvs-user DB_USER=$MYSQL_WKVS_USERNAME DB_PASSWORD="$MYSQL_WKVS_PASSWORD" DB_NAME=$MYSQL_DATABASE DB_HOST=mariadb DB_PORT=3306 EOF cat < config/.env.db-guest DB_GUEST_USER=$MYSQL_GUEST_USERNAME DB_GUEST_PASSWORD="$MYSQL_GUEST_PASSWORD" DB_NAME=$MYSQL_DATABASE DB_HOST=mariadb DB_PORT=3306 EOF # 8. Create Additional Users & Grant Permissions in MariaDB echo "Creating application users and setting permissions..." docker compose exec -T mariadb mariadb -u root -p"$MYSQL_ROOT_PASSWORD" < /dev/null && [ ! -f "composer.phar" ]; then php -r "copy('\''https://getcomposer.org/installer'\'', '\''composer-setup.php'\'');" php composer-setup.php --quiet php -r "unlink('\''composer-setup.php'\'');" fi ' # 2. Run composer install against the specified directory docker compose exec "$SERVICE_NAME" bash -c " COMPOSER_CMD=\$(command -v composer || echo \"php \$(pwd)/composer.phar\") TARGET_DIR=\"$COMPOSER_DIR\" if [ -f \"\$TARGET_DIR/composer.lock\" ] || [ -f \"\$TARGET_DIR/composer.json\" ]; then \$COMPOSER_CMD install --working-dir=\"\$TARGET_DIR\" --no-interaction --prefer-dist --quiet else echo \"Error: Neither composer.json nor composer.lock found in '\$TARGET_DIR'.\" >&2 exit 1 fi " echo "Konfiguriere Redis..." # 2. Set password in the currently running Redis container docker compose exec redis redis-cli CONFIG SET requirepass "$REDIS_PASSWORD" PASSWORD_KEY=openssl rand -base64 32 cat < config/.env.pw-encryption-key PW_ENCRYPTION_KEY=$PASSWORD_KEY EOF echo "------------------------------------------------------" echo "Setup Complete!" echo "Admin Plain Keyword: $KEYWORD" echo "------------------------------------------------------"