Skip to content

Instantly share code, notes, and snippets.

@bingdian
Created January 21, 2018 10:15
Show Gist options
  • Save bingdian/05b0fe80a9b251e55428d95c5c6d0ab3 to your computer and use it in GitHub Desktop.
Save bingdian/05b0fe80a9b251e55428d95c5c6d0ab3 to your computer and use it in GitHub Desktop.

Revisions

  1. bingdian created this gist Jan 21, 2018.
    144 changes: 144 additions & 0 deletions vhost.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,144 @@
    #!/bin/bash
    ### Set Language
    TEXTDOMAIN=virtualhost

    ### Set default parameters
    action=$1
    domain=$2
    port=$3
    rootDir=$4
    owner=$(who am i | awk '{print $1}')
    sitesEnable='/etc/nginx/sites-enabled/'
    sitesAvailable='/etc/nginx/sites-available/'
    userDir='/home/wwwroot/'

    if [ "$(whoami)" != 'root' ]; then
    echo $"You have no permission to run $0 as non-root user. Use sudo"
    exit 1;
    fi

    if [ "$action" != 'create' ] && [ "$action" != 'delete' ]
    then
    echo $"You need to prompt for action (create or delete) -- Lower-case only"
    exit 1;
    fi

    while [ "$domain" == "" ]
    do
    echo -e $"Please provide domain. e.g.dev,staging"
    read domain
    done

    if [ "$rootDir" == "" ]; then
    rootDir=${domain//./}
    fi

    ### if root dir starts with '/', don't use /var/www as default starting point
    if [[ "$rootDir" =~ ^/ ]]; then
    userDir=''
    fi

    # rootDir=$userDir$rootDir

    if [ "$action" == 'create' ]
    then
    ### check if domain already exists
    if [ -e $sitesAvailable$domain ]; then
    echo -e $"This domain already exists.\nPlease Try Another one"
    exit;
    fi

    ### check if directory exists or not
    if ! [ -d $userDir$rootDir ]; then
    ### create the directory
    mkdir $userDir$rootDir
    ### give permission to root dir
    chmod 755 $userDir$rootDir
    fi

    ### create virtual host rules file
    if ! echo "server {
    listen 80;
    root $userDir$rootDir;
    server_name $domain;
    location / {
    proxy_pass http://localhost:$port;
    proxy_http_version 1.1;
    proxy_set_header Upgrade \$http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host \$host;
    proxy_cache_bypass \$http_upgrade;
    }
    }" > $sitesAvailable$domain
    then
    echo -e $"There is an ERROR create $domain file"
    exit;
    else
    echo -e $"\nNew Virtual Host Created\n"
    fi

    ### Add domain in /etc/hosts
    if ! echo "127.0.0.1 $domain" >> /etc/hosts
    then
    echo $"ERROR: Not able write in /etc/hosts"
    exit;
    else
    echo -e $"Host added to /etc/hosts file \n"
    fi

    if [ "$owner" == "" ]; then
    chown -R $(whoami):www-data $userDir$rootDir
    else
    chown -R $owner:www-data $userDir$rootDir
    fi

    ### enable website
    ln -s $sitesAvailable$domain $sitesEnable$domain

    ### restart Nginx
    service nginx restart

    ### show the finished message
    echo -e $"Complete! \nYou now have a new Virtual Host \nYour new host is: http://$domain \nAnd its located at $userDir$rootDir"
    exit;
    else
    ### check whether domain already exists
    if ! [ -e $sitesAvailable$domain ]; then
    echo -e $"This domain dont exists.\nPlease Try Another one"
    exit;
    else
    ### Delete domain in /etc/hosts
    newhost=${domain//./\\.}
    sed -i "/$newhost/d" /etc/hosts

    ### disable website
    rm $sitesEnable$domain

    ### restart Nginx
    service nginx restart

    ### Delete virtual host rules files
    rm $sitesAvailable$domain
    fi

    ### check if directory exists or not
    if [ -d $userDir$rootDir ]; then
    echo -e $"Delete host root directory ? (s/n)"
    read deldir

    if [ "$deldir" == 's' -o "$deldir" == 'S' ]; then
    ### Delete the directory
    rm -rf $userDir$rootDir
    echo -e $"Directory deleted"
    else
    echo -e $"Host directory conserved"
    fi
    else
    echo -e $"Host directory not found. Ignored"
    fi

    ### show the finished message
    echo -e $"Complete!\nYou just removed Virtual Host $domain"
    exit 0;
    fi