Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- LDIR=`pwd`
- cd `dirname $0`
- SDIR=`pwd`
- cd "$LDIT"
- if [ -n "$1" ] ; then
- NAME="$1"
- else
- read -p "Instance Name: " NAME
- fi
- DST="$SDIR/$NAME"
- if [ -d "$DST" ] ; then
- source "$DST/config"
- exec ssh -i $DST/id_rsa root@$IP -p $PORT
- fi
- mkdir "$DST"
- read -s -p "DigitalOcean token: " TOKEN
- echo ""
- echo "Check DigitalOcean account"
- curl -sS -X GET \
- -o "$DST/account.log" \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer $TOKEN" \
- "https://api.digitalocean.com/v2/account"
- ACCOUNT=`sed -e 's/^.*"status":"\([^"]*\)".*$/\1/' $DST/account.log`
- if [ "$ACCOUNT" != "active" ] ; then
- echo "Wrong DigitalOcean token"
- exit 1
- fi
- echo "Create new SSH key"
- ssh-keygen -q -t rsa -b 4096 -C "support@cesbo.com" -f $DST/id_rsa -N ""
- PUBKEY=`cat $DST/id_rsa.pub`
- curl -sS -X POST \
- -o "$DST/key.log" \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer $TOKEN" \
- -d "{\"name\":\"$NAME\",\"public_key\":\"$PUBKEY\"}" \
- "https://api.digitalocean.com/v2/account/keys"
- KEYID=`sed -e 's/^.*"id":\([0-9]*\).*$/\1/' $DST/key.log`
- echo "Create new droplet"
- curl -sS -X POST \
- -o "$DST/droplet.log" \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer $TOKEN" \
- -d "{\"name\":\"$NAME\",\"region\":\"ams3\",\"size\":\"512mb\",\"image\":\"ubuntu-14-04-x64\",\"ssh_keys\":[\"$KEYID\"],\"backups\":false,\"ipv6\":true,\"user_data\":null,\"private_networking\":null}" \
- "https://api.digitalocean.com/v2/droplets"
- DROPLETID=`cat $DST/droplet.log | sed -e 's/^."droplet":{//' | sed -e 's/"[a-z_]*":{[^}]*}//g' | sed -e 's/^.*"id":\([0-9]*\).*$/\1/'`
- while true ; do
- curl -sS -X GET \
- -o "$DST/status.log" \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer $TOKEN" \
- "https://api.digitalocean.com/v2/droplets/$DROPLETID"
- STATUS=`sed -e 's/^.*"status":"\([^"]*\)".*$/\1/' $DST/status.log`
- if [ "$STATUS" == "active" ] ; then
- break
- fi
- sleep 5
- done
- echo "Droplet ready"
- IP4=`cat $DST/status.log | sed -e 's/^.*"v4":\[\([^]]*\)\].*$/\1/'`
- IP=`echo "$IP4" | sed -e 's/^.*"ip_address":"\([^"]*\)".*$/\1/'`
- echo "IP=\"$IP\"" >$DST/config
- ssh -o StrictHostKeychecking=no -i $DST/id_rsa root@$IP echo "OK" >/dev/null 2>&1
- SSH="ssh -i $DST/id_rsa root@$IP"
- echo "Update system"
- $SSH "apt-get -y update >>/var/log/install.log 2>&1"
- $SSH "apt-get -y upgrade >>/var/log/install.log 2>&1"
- echo "Install packages"
- $SSH "sh" <<EOF
- apt-get -y install curl nginx unzip >>/var/log/install.log 2>&1
- sed -i -e "s/# \(server_tokens\)/\1/g" /etc/nginx/nginx.conf
- echo "Install Docker" >>/var/log/install.log
- curl -fsSL https://get.docker.com/ | sh >>/var/log/install.log 2>&1
- mkdir -p /opt/cesbo/www /opt/cesbo/download
- EOF
- echo "Configure system"
- scp -q -i $DST/id_rsa -r $SDIR/host/* root@$IP:/
- read -p "SSH Port: " SSH_PORT
- $SSH -t dpkg-reconfigure tzdata
- $SSH "sh" <<EOF
- sed -i -e "s/^\(Port\) .*$/\1 $SSH_PORT/g" /etc/ssh/sshd_config
- service ssh restart >/dev/null
- EOF
- PORT="$SSH_PORT"
- echo "PORT=\"$PORT\"" >>$DST/config
- SSH="ssh -i $DST/id_rsa -p $PORT root@$IP"
- LINK=""
- read -r -p "Install Mail container? [y/N] " RESP
- if [ "$RESP" == "y" -o "$RESP" == "Y" ] ; then
- LINK="$LINK --link \"mail:mail.local\""
- read -p "Relay domain: " RELAY_DOMAIN
- read -p "Google Mail login: " GMAIL_LOGIN
- read -s -p "Google Mail password: " GMAIL_PASS
- echo ""
- $SSH "sh" <<EOF
- docker run --name mail -e RELAY_DOMAIN="$RELAY_DOMAIN" --hostname "mail.local" -d cesbo/exim-relay >>/var/log/install.log 2>&1
- echo "*.google.com:$GMAIL_LOGIN:$GMAIL_PASS" | docker exec -i mail sh -c "cat >/etc/exim4/passwd.client"
- EOF
- fi
- read -r -p "Install MySQL container? [y/N] " RESP
- if [ "$RESP" == "y" -o "$RESP" == "Y" ] ; then
- LINK="$LINK --link \"mysql:mysql.local\""
- read -s -p "MySQL root password: " MYSQL_PASS
- echo ""
- OPTS="-e MYSQL_ROOT_PASSWORD=\"$MYSQL_PASS\""
- read -r -p "Make MySQL DB? [y/N] " RESP
- if [ "$RESP" == "y" -o "$RESP" == "Y" ] ; then
- read -p "DB Name: " DB_NAME
- read -p "DB User: " DB_USER
- read -s -p "DB Password: " DB_PASS
- echo ""
- OPTS="$OPTS -e MYSQL_DATABASE=\"$DB_NAME\" -e MYSQL_USER=\"$DB_USER\" -e MYSQL_PASSWORD=\"$DB_PASS\""
- fi
- $SSH "sh" <<EOF
- docker run --name mysql $OPTS --hostname "mysql.local" -d mysql:5.7 >>/var/log/install.log 2>&1
- EOF
- fi
- read -r -p "Install PHP-FPM container? [y/N] " RESP
- if [ "$RESP" == "y" -o "$RESP" == "Y" ] ; then
- $SSH "sh" <<EOF
- docker run --name php --volume "/opt/cesbo/www:/opt/cesbo/www" --hostname "php.local" $LINK -d php:5.6-fpm >>/var/log/install.log 2>&1
- docker exec -i -t php apt-get -y update >>/var/log/install.log 2>&1
- docker exec -i -t php apt-get -y install php5-mysqlnd php5-gd php5-curl php5-mcrypt php5-json >>/var/log/install.log 2>&1
- EOF
- fi
- echo "Done!"
- read -r -p "Launch SSH? [y/N] " RESP
- if [ "$RESP" == "y" -o "$RESP" == "Y" ] ; then
- exec ssh -i $DST/id_rsa -p $PORT root@$IP
- fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement