Skip to content

Instantly share code, notes, and snippets.

@xvilo
Last active December 30, 2016 09:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xvilo/a871fa73eeda22e0e995a589b1259ded to your computer and use it in GitHub Desktop.
Save xvilo/a871fa73eeda22e0e995a589b1259ded to your computer and use it in GitHub Desktop.
Automatically manage a testing server with WordPress install script. WP-CLI is needed.
#!/bin/bash
#############
# Functions #
#############
function exit_usage() {
echo "User manager 1.0"
echo "Usage: $0 COMMAND USERNAME"
echo ""
echo "COMMANDS:"
echo " create Create new user"
echo " delete Drop user and remove all files"
exit 1
}
function exit_err() {
echo "$1"
exit 1
}
# Run as root, of course.
if [ "$UID" -ne 0 ]
then
echo "Must be root to run this script."
exit 1
fi
# Command line sanity checks
if [ -z "$1" ]; then exit_usage; fi
if [ -z "$2" ]; then exit_usage; fi
#########
# Setup #
#########
file_vhost="vhost.conf"
dir_root="/srv/${2}"
dir_vhost="${dir_root}/conf"
dir_webroot="${dir_root}/www"
dir_logs="${dir_root}/logs"
dir_tmp="${dir_root}/tmp"
dir_backup="${dir_root}/backup"
server_name="${2}.mydomain.com"
ftp_user="${2}"
database_user="${2}"
database_name="${2}_db"
admin_user="my_admin"
admin_password="Sup3rS3cr3tP@@sw0oRd!"
admin_email="your@system.com"
passw=`< /dev/urandom tr -dc _A-Za-z0-9 | head -c12`
case "$1" in
"create" )
#ftp_password="undefined"
#database_password="undefined"
ftp_password=$passw
database_password=$passw
# Abort if user already exists
if [ id -u $2 >/dev/null 2>&1 ]; then exit_err "User $2 already exists"; fi
###############
# Create user #
###############
echo "Creating user ${2}..."
useradd -d "/srv/$2" -m "$2" -g www-users -s /bin/bash
if [ $? != 0 ]; then exit_err "Failed creating specified user"; fi
#####################
# Set user password #
#####################
#echo "Setup the user password for ftp access."
#read -s -p "FTP password for ${ftp_user}:" ftp_password
echo -e "${ftp_password}\n${ftp_password}" | passwd $2
##############################
# Create directory structure #
##############################
echo "Creating directory structure..."
mkdir -v -p "$dir_webroot"
mkdir -v -p "$dir_vhost"
mkdir -v -p "$dir_logs"
mkdir -v -p "$dir_tmp"
##############################
# Create virtual server file #
##############################
echo "Setting up virtual hosts file in ${dir_vhost}/${file_vhost}..."
echo "<VirtualHost *:80>
ServerName ${server_name}
ServerAlias *.${server_name}
DocumentRoot ${dir_webroot}
AssignUserID $2 www-users
php_admin_value open_basedir ${dir_root}/:/home/henk/bitbucket/
php_admin_value upload_tmp_dir ${dir_tmp}
ErrorLog ${dir_logs}/error.log
CustomLog ${dir_logs}/access.log combined
<Directory "${dir_webroot}/">
Require all granted
AllowOverride All
Options +FollowSymLinks +Includes -MultiViews +ExecCGI
</Directory>
</VirtualHost>" > "${dir_vhost}/${file_vhost}"
#####################
# Setup permissions #
#####################
echo "Setting up file permissions..."
chown -R ${2}:www-users "${dir_root}"
chmod 555 "${dir_root}"
##################
# Setup database #
##################
echo "We now need the mysql ROOT password to setup the database."
read -s -p "Mysql root password: " mysql_root_password
echo ""
echo "New mysql user will be created with username '${database_user}'"
#read -s -p "New mysql password: " database_password
echo "Setting up database..."
echo "
CREATE DATABASE \`${database_name}\`;
USE \`${database_name}\`;
CREATE USER '${database_user}'@'localhost' IDENTIFIED BY '${database_password}';
GRANT ALL PRIVILEGES ON \`${database_name}\`.* TO '${database_user}'@'localhost';
FLUSH PRIVILEGES;
" | mysql -uroot -p"${mysql_root_password}"
###################
# Restart apache2 #
###################
service apache2 restart
#######################
# Finished installing #
#######################
echo ""
echo "New server created."
echo "Server name: ${server_name}"
echo "FTP username: ${ftp_user}"
echo "FTP password: ${ftp_password}"
echo "Database user: ${database_user}"
echo "Database password: ${database_password}"
echo "Database name: ${database_name}"
echo ""
read -p "Install Wordpress Latest [y/N]? " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]
then
cd ${dir_webroot}
su ${ftp_user} -c "wp core download --locale=nl_NL"
su ${ftp_user} -c "wp core config --dbname=$database_name --dbuser=$database_user --dbpass=$database_password"
su ${ftp_user} -c "wp db create"
su ${ftp_user} -c "wp core install --url=$server_name --title=$ftp_user --admin_user=$admin_user --admin_password=$admin_password --admin_email=$admin_email"
echo ""
echo "New WP setup."
echo "Admin user: ${admin_user}"
echo "FTP username: ${admin_password}"
echo ""
fi
exit 0;
;;
"delete" )
echo "Deleting user $2 and all settings."
echo "We need the mysql ROOT password to setup the database."
read -s -p "Mysql root password: " mysql_root_password
##########################
# Drop database, db user #
##########################
echo "Delete database setup..."
echo "
DROP DATABASE \`${2}_db\`;
DROP USER '${2}'@'localhost';
FLUSH PRIVILEGES;
" | mysql -uroot -p"${mysql_root_password}"
################
# Delete files #
################
echo "Deleting files..."
rm -rv "/srv/$2/conf" "/srv/$2/logs" "/srv/$2/www" "/srv/$2/tmp"
rm "/srv/$2/.bash_logout" "/srv/$2/.bashrc" "/srv/$2/.profile"
rmdir "/srv/$2"
###############
# Delete user #
###############
echo "Deleting user..."
if [ ! id -u $2 >/dev/null 2>&1 ]; then exit_err "User $2 does not exist" ; fi
# Delete user
userdel "$2"
echo "Done deleting user. If any warnings were shown, be sure to manually check if cleanup was successful."
;;
"backup" )
echo "Preparing backup of user $2"
################
# Collect info #
################
database_password="undefined"
read -s -p "Mysql ROOT password: " database_password
mkdir -v -p "$dir_backup"
chown -v "${2}:www-users" "${dir_backup}"
archive_sql="${dir_backup}/$(date +%Y-%m-%d).sql.gz"
archive_www="${dir_backup}/$(date +%Y-%m-%d).tar.gz"
###################
# Backup database #
###################
echo "Backing up database..."
mysqldump -uroot -p"${database_password}" "${database_name}" | gzip > "${archive_sql}"
if [ $? != 0 ]; then exit_err "Error while backing up the database"; fi
chown "${ftp_user}:www-users" "${archive_sql}" &&
chmod 644 "${archive_sql}"
if [ $? != 0 ]; then exit_err "Error while backing up the database"; fi
##################
# Backup wwwdocs #
##################
echo "Backing up files..."
tar --directory "${dir_webroot}" --create --file "${archive_www}" .
if [ $? != 0 ]; then exit_err "Error while backing up the files"; fi
chown "${ftp_user}:www-users" "${archive_www}" &&
chmod 644 "${archive_www}"
if [ $? != 0 ]; then exit_err "Error while backing up the files"; fi
echo "==============="
echo "== All done! =="
echo "==============="
;;
* )
exit_usage;
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment