New Filestructure for Docker
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
#!/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 <<EOF > 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 <<EOF > 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 <<EOF > 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 <<EOF > 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" <<EOF
|
||||
-- Create Normal User
|
||||
CREATE USER IF NOT EXISTS '$MYSQL_WKVS_USERNAME'@'%' IDENTIFIED BY '$MYSQL_WKVS_PASSWORD';
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON \`$MYSQL_DATABASE\`.* TO '$MYSQL_WKVS_USERNAME'@'%';
|
||||
|
||||
-- Create Guest User
|
||||
CREATE USER IF NOT EXISTS '$MYSQL_GUEST_USERNAME'@'%' IDENTIFIED BY '$MYSQL_GUEST_PASSWORD';
|
||||
GRANT SELECT, INSERT, UPDATE ON \`$MYSQL_DATABASE\`.* TO '$MYSQL_GUEST_USERNAME'@'%';
|
||||
|
||||
FLUSH PRIVILEGES;
|
||||
EOF
|
||||
|
||||
SERVICE_NAME="apache"
|
||||
COMPOSER_DIR="/var/www/wkvs/composer"
|
||||
|
||||
echo "Running Composer setup via Docker Compose..."
|
||||
|
||||
# 1. Download Composer inside the service container if not installed globally
|
||||
docker compose exec "$SERVICE_NAME" bash -c '
|
||||
if ! command -v composer &> /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 <<EOF > config/.env.pw-encryption-key
|
||||
PW_ENCRYPTION_KEY=$PASSWORD_KEY
|
||||
EOF
|
||||
|
||||
echo "------------------------------------------------------"
|
||||
echo "Setup Complete!"
|
||||
echo "Admin Plain Keyword: $KEYWORD"
|
||||
echo "------------------------------------------------------"
|
||||
Reference in New Issue
Block a user