setup_environment.sh 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #!/bin/bash
  2. set -e
  3. # Ensure we're in the project root directory
  4. PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
  5. cd "${PROJECT_ROOT}"
  6. # Define directories relative to project root
  7. CREDENTIALS_DIR="config/credentials"
  8. DOCKER_DIR="docker"
  9. KEYCLOAK_SCRIPTS_DIR="scripts/setup/keycloak"
  10. ANSIBLE_PLAYBOOK="ansible/site.yml"
  11. ANSIBLE_INVENTORY="ansible/inventory/staging/hosts"
  12. # Create necessary directories
  13. mkdir -p "${CREDENTIALS_DIR}"
  14. mkdir -p "${DOCKER_DIR}"
  15. mkdir -p "${KEYCLOAK_SCRIPTS_DIR}"
  16. # Function to generate secure passwords
  17. generate_password() {
  18. openssl rand -base64 24 | tr -dc 'a-zA-Z0-9' | head -c 24
  19. }
  20. # Date for documentation
  21. SETUP_DATE=$(date '+%Y-%m-%d_%H-%M-%S')
  22. # Generate passwords
  23. KEYCLOAK_ADMIN_PASSWORD=$(generate_password)
  24. KC_DB_PASSWORD=$(generate_password)
  25. TESTADMIN_PASSWORD=$(generate_password)
  26. TESTUSER_PASSWORD=$(generate_password)
  27. NEXTCLOUD_DB_ROOT_PASSWORD=$(generate_password)
  28. NEXTCLOUD_DB_USER=$(generate_password)
  29. NEXTCLOUD_DB_PASSWORD=$(generate_password)
  30. NEXTCLOUD_ADMIN_USER=$(generate_password)
  31. NEXTCLOUD_ADMIN_PASSWORD=$(generate_password)
  32. KEYCLOAK_NEXTCLOUD_CLIENT_SECRET=$(generate_password)
  33. # Create .env file in docker directory
  34. cat > "${DOCKER_DIR}/.env" << EOL
  35. # Generated on ${SETUP_DATE}
  36. # Keycloak Admin
  37. KEYCLOAK_ADMIN_PASSWORD=${KEYCLOAK_ADMIN_PASSWORD}
  38. # Keycloak Database
  39. KC_DB_USERNAME=keycloak
  40. KC_DB_PASSWORD=${KC_DB_PASSWORD}
  41. # Nextcloud Database
  42. NEXTCLOUD_DB_ROOT_PASSWORD=${NEXTCLOUD_DB_ROOT_PASSWORD}
  43. NEXTCLOUD_DB_USER=${NEXTCLOUD_DB_USER}
  44. NEXTCLOUD_DB_PASSWORD=${NEXTCLOUD_DB_PASSWORD}
  45. NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER}
  46. NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_ADMIN_PASSWORD}
  47. EOL
  48. # Create .env file for keycloak setup script
  49. cat > "${KEYCLOAK_SCRIPTS_DIR}/.env" << EOL
  50. # Generated on ${SETUP_DATE}
  51. KEYCLOAK_URL=https://auth.mrx8086.com
  52. KEYCLOAK_ADMIN_USER=admin
  53. KEYCLOAK_ADMIN_PASSWORD=${KEYCLOAK_ADMIN_PASSWORD}
  54. NEXTCLOUD_CLIENT_ID=nextcloud
  55. PAPERLESS_CLIENT_ID=paperless
  56. NODERED_CLIENT_ID=nodered
  57. TESTADMIN_PASSWORD=${TESTADMIN_PASSWORD}
  58. TESTUSER_PASSWORD=${TESTUSER_PASSWORD}
  59. KEYCLOAK_NEXTCLOUD_CLIENT_SECRET=${KEYCLOAK_NEXTCLOUD_CLIENT_SECRET}
  60. EOL
  61. # Create encrypted credentials documentation
  62. cat > "${CREDENTIALS_DIR}/credentials_${SETUP_DATE}.txt" << EOL
  63. Setup Date: ${SETUP_DATE}
  64. Keycloak Admin Credentials:
  65. Username: admin
  66. Password: ${KEYCLOAK_ADMIN_PASSWORD}
  67. Keycloak Database Credentials:
  68. Username: keycloak
  69. Password: ${KC_DB_PASSWORD}
  70. Test Admin Credentials:
  71. Password: ${TESTADMIN_PASSWORD}
  72. Test User Credentials:
  73. Password: ${TESTUSER_PASSWORD}
  74. Nextcloud Database Credentials:
  75. Root Password: ${NEXTCLOUD_DB_ROOT_PASSWORD}
  76. User: ${NEXTCLOUD_DB_USER}
  77. Password: ${NEXTCLOUD_DB_PASSWORD}
  78. Nextcloud Admin Credentials:
  79. Username: ${NEXTCLOUD_ADMIN_USER}
  80. Password: ${NEXTCLOUD_ADMIN_PASSWORD}
  81. EOL
  82. # Encrypt credentials file
  83. gpg --symmetric --cipher-algo AES256 "${CREDENTIALS_DIR}/credentials_${SETUP_DATE}.txt"
  84. rm "${CREDENTIALS_DIR}/credentials_${SETUP_DATE}.txt"
  85. echo "Environment setup completed!"
  86. echo "Credentials have been saved and encrypted in: ${CREDENTIALS_DIR}/credentials_${SETUP_DATE}.txt.gpg"
  87. echo ".env file for docker-compose has been created in: ${DOCKER_DIR}/.env"
  88. echo ".env file for setup_realm.js has been created in: ${KEYCLOAK_SCRIPTS_DIR}/.env"
  89. echo ""
  90. echo "To view credentials, use:"
  91. echo "gpg -d ${CREDENTIALS_DIR}/credentials_${SETUP_DATE}.txt.gpg"
  92. echo ">>> Nextcloud Konfiguration..."
  93. # Verify if variable is set from earlier in the script
  94. echo ">>> Debug: Checking original variable..."
  95. echo ">>> Debug: KEYCLOAK_NEXTCLOUD_CLIENT_SECRET = ${KEYCLOAK_NEXTCLOUD_CLIENT_SECRET}"
  96. # Try reading from .env file if variable is empty
  97. if [ -z "${KEYCLOAK_NEXTCLOUD_CLIENT_SECRET}" ]; then
  98. echo ">>> Debug: Variable is empty, trying to read from .env file..."
  99. KEYCLOAK_NEXTCLOUD_CLIENT_SECRET=$(grep KEYCLOAK_NEXTCLOUD_CLIENT_SECRET "${KEYCLOAK_SCRIPTS_DIR}/.env" | cut -d '=' -f2)
  100. echo ">>> Debug: Value from .env file = ${KEYCLOAK_NEXTCLOUD_CLIENT_SECRET}"
  101. fi
  102. # Ensure we have a value
  103. if [ -z "${KEYCLOAK_NEXTCLOUD_CLIENT_SECRET}" ]; then
  104. echo ">>> Error: Could not get client secret value"
  105. exit 1
  106. fi
  107. # Escape special characters in the secret for JSON
  108. ESCAPED_SECRET=$(echo "$KEYCLOAK_NEXTCLOUD_CLIENT_SECRET" | sed 's/["\]/\\&/g')
  109. echo ">>> Debug: Escaped secret = $ESCAPED_SECRET"
  110. # Create the extra vars
  111. EXTRA_VARS="{\"client_secret\": \"$ESCAPED_SECRET\"}"
  112. echo ">>> Debug: Extra vars = $EXTRA_VARS"
  113. # Run Ansible with the extra vars
  114. sudo ansible-playbook \
  115. -i "$ANSIBLE_INVENTORY" \
  116. "$ANSIBLE_PLAYBOOK" \
  117. --extra-vars "$EXTRA_VARS" \
  118. -v
  119. echo ">>> Fertig"