Skip to content

Instantly share code, notes, and snippets.

@prochor666
Created March 6, 2020 10:11
Show Gist options
  • Save prochor666/16600224b298903261821eb0894c54b2 to your computer and use it in GitHub Desktop.
Save prochor666/16600224b298903261821eb0894c54b2 to your computer and use it in GitHub Desktop.
Create web host, MySQL db, user, ftp and jail user in Debian Buster
#!/bin/bash
# Sanatorium web host creator for Debian 10 Buster
# prochor, 2020
# prochor666@gmail.com
clear
# Create new website
echo -e "\e[38;5;14m|------------------------------------------- \e[0m"
echo -e "\e[38;5;14m| Sanatorium web host creator for Debian 10 Buster \e[0m"
echo -e "\e[38;5;14m|------------------------------------------- \e[0m"
echo -e "\e[38;5;14m| \e[0m"
echo -e "\e[38;5;14m| * Apache 2 host \e[0m"
echo -e "\e[38;5;14m| * MySQL 5 database and user \e[0m"
echo -e "\e[38;5;14m| * Vsftpd user \e[0m"
echo -e "\e[38;5;14m| \e[0m"
echo -e "\e[38;5;14m| prochor666@gmail.com \e[0m"
echo -e "\e[38;5;14m|------------------------------------------- \e[0m"
echo -e " "
AUTOX=$1
DOMAIN=$2
USERNAME=$3
PASSWORD=$4
EMAIL=$5
# Domain
if [ "$AUTOX" != "auto" ]; then
read -p "Type valid domain name: " DOMAIN
fi
S1=${#DOMAIN}
if [[ $S1 -lt 3 ]]; then
echo -e " "
echo -e "\e[91mError in domain name, exiting \e[0m"
echo -e " "
exit 0
fi
# User
if [ "$AUTOX" != "auto" ]; then
read -p "Type username (min 3 characters): " USERNAME
fi
S2=${#USERNAME}
if [[ $S2 -lt 3 ]]; then
echo -e " "
echo -e "\e[91mError in username, exiting \e[0m"
echo -e " "
exit 0
fi
# Password
if [ "$AUTOX" != "auto" ]; then
read -p "Type user password (min 4 characters): " PASSWORD
fi
S3=${#PASSWORD}
if [[ $S3 -lt 4 ]]; then
echo -e " "
echo -e "\e[91mPassword error, exiting \e[0m"
echo -e " "
exit 0
fi
# Email
if [ "$AUTOX" != "auto" ]; then
read -p "Type valid email: " EMAIL
fi
S4=${#EMAIL}
if [[ $S4 -lt 4 ]]; then
echo -e " "
echo -e "\e[91mEmail not set, exiting \e[0m"
echo -e " "
exit 0
fi
echo -e " "
echo -e " "
echo -e "\e[93mSetting up host task \e[0m"
echo -e " "
echo -e "Domain host: \e[38;5;14m${DOMAIN,,} \e[0m"
echo -e "Username: \e[38;5;14m$USERNAME \e[0m"
echo -e "Email: \e[38;5;14m$EMAIL \e[0m"
echo -e "Password: \e[38;5;14m******* \e[0m"
echo -e " "
# OS
echo -e "\e[38;5;14m - System user - \e[0m"
echo -e " "
USEREXISTS=false
getent passwd $USERNAME > /dev/null 2>&1 && USEREXISTS=true
if $USEREXISTS; then
echo -e " "
echo -e "\e[91mError, user $USERNAME $USEREXISTS already exists, exiting \e[0m"
echo -e " "
exit 0
fi
useradd -s "/bin/bash" -m -d "/var/www/${DOMAIN,,}" -p $(openssl passwd -1 $PASSWORD) $USERNAME
usermod $USERNAME -g www-data
usermod $USERNAME -s /bin/false
#FTP
echo -e "\e[38;5;14m - FTP user and jail - \e[0m"
echo -e " "
echo "local_root=/var/www/${DOMAIN,,}
dirlist_enable=YES
download_enable=YES
write_enable=YES
" > /etc/vsftpd-users/$USERNAME
systemctl restart vsftpd
#MySQL
echo -e "\e[38;5;14m - MySQL user and database - \e[0m"
echo -e " "
# replace "-" with "_" for database username
MAINDB=${USERNAME//[^a-zA-Z0-9]/_}
SQLSTR=${MAINDB:0:10}
# If /root/.my.cnf exists then it won't ask for root password
if [ -f "/root/.my.cnf" ]; then
MYSQL=`which mysql`
Q1="CREATE DATABASE IF NOT EXISTS $SQLSTR COLLATE 'utf8_general_ci';"
Q2="GRANT USAGE ON $SQLSTR.* TO '$SQLSTR'@'localhost' IDENTIFIED BY '$PASSWORD';"
Q3="GRANT ALL PRIVILEGES ON $SQLSTR.* TO '$SQLSTR'@'localhost' WITH GRANT OPTION;"
Q4="FLUSH PRIVILEGES;"
SQL="${Q1}${Q2}${Q3}${Q4}"
$MYSQL -e "$SQL"
fi
# Apache 2
echo -e "\e[38;5;14m - Apache virtual host - \e[0m"
echo -e " "
echo "
<VirtualHost ${DOMAIN,,}:80>
ServerName ${DOMAIN,,}
ServerAdmin $EMAIL
DocumentRoot /var/www/${DOMAIN,,}/web
ErrorLog /var/www/${DOMAIN,,}/log/error.log
CustomLog /var/www/${DOMAIN,,}/log/access.log combined
<Directory \"/var/www/${DOMAIN,,}/web\">
Options FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
<IfModule mpm_itk_module>
AssignUserId $USERNAME www-data
</IfModule>
ServerAlias *.${DOMAIN,,}
#RewriteEngine on
#RewriteCond %{SERVER_NAME} =${DOMAIN,,} [OR]
#RewriteCond %{SERVER_NAME} =*.${DOMAIN,,}
#RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost>
" > "/etc/apache2/sites-available/${DOMAIN,,}.conf"
a2ensite ${DOMAIN,,}
mkdir /var/www/${DOMAIN,,}/log
mkdir /var/www/${DOMAIN,,}/web
echo "<?php phpinfo(); ?>" > /var/www/${DOMAIN,,}/web/index.php
chown $USERNAME:www-data /var/www/${DOMAIN,,}/log
chown $USERNAME:www-data /var/www/${DOMAIN,,}/web
chown $USERNAME:www-data /var/www/${DOMAIN,,}/web/index.php
chown root:root /var/www/${DOMAIN,,}
systemctl restart apache2
# Dump
echo "{\"email\":\"$EMAIL\",\"domain\":\"${DOMAIN,,}\",\"username\":\"$USERNAME\",\"db\":\"$SQLSTR\",\"dbuser\":\"$SQLSTR\",\"password\":\"$PASSWORD\"}" > host-task-${DOMAIN,,}.json
echo -e "\e[38;5;14mDone \e[0m"
# SSL
echo -e "\e[38;5;14m - SSL certificate and Apache virtual host modify - \e[0m"
echo -e " "
certbot --authenticator webroot --webroot-path /var/www/${DOMAIN,,}/web --installer apache -d ${DOMAIN,,} -m $EMAIL
#certbot --apache -n -d ${DOMAIN,,} -m $EMAIL --keep-until-expiring --agree-tos
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment