Guest User

Untitled

a guest
Feb 18th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.84 KB | None | 0 0
  1. #!/bin/bash
  2. # Backup/duplicate a Drupal website and its database.
  3. # Usage: sh backup.sh
  4.  
  5. # Prompt for website to backup.
  6. read -p "Website directory to backup (/var/www/html/drupal): " WEBSITE_DIRECTORY
  7. if [ -z "$WEBSITE_DIRECTORY" ]; then
  8. WEBSITE_DIRECTORY="/var/www/html/drupal"
  9. fi
  10.  
  11. # Check if website is a Drupal installation.
  12. if [ ! -f "$WEBSITE_DIRECTORY/sites/default/settings.php" ]; then
  13. tput setaf 1; echo "Couldn't find Drupal installation, please check path."; tput sgr0;
  14. exit 1
  15. fi
  16.  
  17. read -p "Backup directory (${WEBSITE_DIRECTORY}_dev): " BACKUP_DIRECTORY
  18. if [ -z "$BACKUP_DIRECTORY" ]; then
  19. BACKUP_DIRECTORY="${WEBSITE_DIRECTORY}_dev"
  20. fi
  21.  
  22. # Create temporary settings file to get database credentials from settings.php.
  23. printf '<?php include("settings.php");echo "DATABASE=".$databases["default"]["default"]["database"].";";echo "USERNAME=".$databases["default"]["default"]["username"].";";echo "PASSWORD=".$databases["default"]["default"]["password"].";";echo "HOST=".$databases["default"]["default"]["host"].";";' > "$WEBSITE_DIRECTORY/sites/default/settings.tmp.php"
  24. eval `php "$WEBSITE_DIRECTORY/sites/default/settings.tmp.php"`
  25. rm "$WEBSITE_DIRECTORY/sites/default/settings.tmp.php"
  26.  
  27. # Error getting database credentials.
  28. if [ -z "$DATABASE" ]; then
  29. tput setaf 3; echo "Couldn't get database credentials."; tput sgr0;
  30.  
  31. # Ask user for credentials.
  32. read -p "Database host (localhost): " HOST
  33. if [ -z "$HOST" ]; then
  34. HOST="localhost"
  35. fi
  36. read -p "Database user (postgres): " USERNAME
  37. if [ -z "$USERNAME" ]; then
  38. USER="postgres"
  39. fi
  40. read -sp "Database password (postgres): " PASSWORD
  41. if [ -z "$PASSWORD" ]; then
  42. PASSWORD="postgres"
  43. fi
  44. read -p "Database name (drupal): " DATABASE
  45. if [ -z "$DATABASE" ]; then
  46. DATABASE="drupal"
  47. fi
  48. fi
  49.  
  50. # Backup website directory into target directory.
  51. if [ -d "$BACKUP_DIRECTORY" ] && find "$BACKUP_DIRECTORY" -mindepth 1 -print -quit | grep -q .; then
  52. tput setaf 1; echo "Target directory is not empty, files were not copied."; tput sgr0;
  53. exit 1
  54. else
  55. read -p "Backup database name, will be created if not exists (${DATABASE}_dev): " TARGET_DATABASE
  56. if [ -z "$TARGET_DATABASE" ]; then
  57. TARGET_DATABASE="${DATABASE}_dev"
  58. fi
  59.  
  60. tput smso; echo "Copying website files..."; tput sgr0;
  61. cp -r "$WEBSITE_DIRECTORY/." "$BACKUP_DIRECTORY"
  62. tput setaf 2; echo "Website files copied successfully!"; tput sgr0;
  63.  
  64. tput smso; echo "Updating file permissions"; tput sgr0;
  65. chown -R apache:apache "$BACKUP_DIRECTORY"
  66. tput setaf 2; echo "OK"; tput sgr0;
  67.  
  68. tput smso; echo "Updating settings.php"; tput sgr0;
  69. sed -i -e "s/'database' => '$DATABASE'/'database' => '$TARGET_DATABASE'/g" "$BACKUP_DIRECTORY/sites/default/settings.php"
  70. tput setaf 2; echo "OK"; tput sgr0;
  71.  
  72. tput smso; echo "Updating robots.txt"; tput sgr0;
  73. printf "User-agent: *\nDisallow: /" > "$BACKUP_DIRECTORY/robots.txt"
  74. tput setaf 2; echo "OK"; tput sgr0;
  75. fi
  76.  
  77. # Database duplication.
  78. if [ $HOST = "localhost" ] || [ $HOST = "127.0.0.1" ] ; then
  79. tput smso; echo "Database backup..."; tput sgr0;
  80. psql -U $USERNAME -c 'CREATE DATABASE $TARGET_DATABASE' && pg_dump -U $USERNAME $DATABASE | psql -U $USERNAME $TARGET_DATABASE && exit 1
  81. tput setaf 2; echo "OK"; tput sgr0;
  82. else
  83. # SSH through remote database.
  84. tput smso; echo "SSH connection initialization..."; tput sgr0;
  85. read -p "User for ${HOST} connection (root): " SSH_USER
  86. if [ -z "$SSH_USER" ]; then
  87. SSH_USER="root"
  88. fi
  89.  
  90. tput smso; echo "Database backup..."; tput sgr0;
  91. ssh "$SSH_USER"@"$HOST" "psql -U $USERNAME -c 'CREATE DATABASE $TARGET_DATABASE' && pg_dump -U $USERNAME $DATABASE | psql -U $USERNAME $TARGET_DATABASE && exit 1"
  92. tput setaf 2; echo "OK"; tput sgr0;
  93. fi
  94.  
  95. tput setaf 2; echo "Everything went smoothly, you can check out your new website!"; tput sgr0;
Add Comment
Please, Sign In to add comment