Last active
December 30, 2016 09:32
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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="[email protected]" | |
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