initial commit

This commit is contained in:
Jeff Lindsay
2013-06-08 03:26:12 -07:00
commit 26543540c9
4 changed files with 80 additions and 0 deletions

32
bootstrap.sh Normal file
View File

@@ -0,0 +1,32 @@
apt-get install -y linux-image-extra-`uname -r`
apt-get install -y software-properties-common
add-apt-repository -y ppa:dotcloud/lxc-docker
apt-get update
apt-get install -y lxc-docker
apt-get install -y git ruby nginx make
cd /usr/local/bin
wget https://raw.github.com/progrium/gitreceive/master/gitreceive
chmod +x gitreceive
gitreceive init
cd ~
git clone https://github.com/progrium/buildstep.git
cd buildstep
cp buildstep /home/git/buildstep
make
cd ~
git clone https://github.com/progrium/dokku.git
cd dokku
cp receiver /home/git/receiver
cp nginx-app-conf /home/git/nginx-app-conf
cp nginx-reloader.conf /etc/init/nginx-reloader.conf
start nginx-reloader
echo $HOSTNAME > /home/git/DOMAIN
echo "Be sure to upload a public key for your user:"
echo " cat ~/.ssh/id_rsa.pub | ssh root@$HOStNAME \"gitreceive upload-key progrium\""

10
nginx-app-conf Executable file
View File

@@ -0,0 +1,10 @@
#!/bin/bash
APP="$1"; PORT="$2"; HOSTNAME="$3"
cat<<EOF
upstream $APP { server 127.0.0.1:$PORT; }
server {
listen 80;
server_name $APP.$HOSTNAME;
location / { proxy_pass http://$APP; }
}
EOF

4
nginx-reloader.conf Normal file
View File

@@ -0,0 +1,4 @@
script
echo | sudo -u git nc -l -U /home/git/reload-nginx && /etc/init.d/nginx reload
end script
respawn

34
receiver Executable file
View File

@@ -0,0 +1,34 @@
#!/bin/bash
set -e
echo "-----> Building $1 ..."
APP="app/$1"
cat | $HOME/buildstep $APP
echo "-----> Build complete!"
echo "-----> Deploying $1 ..."
if [[ -f "$HOME/DOMAIN" ]]; then
DOMAIN=$(< "$HOME/DOMAIN")
fi
if [[ -f "$HOME/$1/PORT" ]]; then
OLDID=$(< "$HOME/$1/CONTAINER")
docker kill $OLDID > /dev/null
PORT=$(< "$HOME/$1/PORT")
ID=$(docker run -d -p ":$PORT" -e "PORT=$PORT" $APP /bin/bash -c "cd /app && ./start")
echo $ID > "$HOME/$1/CONTAINER"
else
ID=$(docker run -d -p 5000 -e PORT=5000 $APP /bin/bash -c "cd /app && ./start")
echo $ID > "$HOME/$1/CONTAINER"
PORT=$(docker inspect $ID | ruby -e 'require"json";puts JSON.parse(STDIN.read)["NetworkSettings"]["PortMapping"]["5000"]')
echo $PORT > "$HOME/$1/PORT"
if [[ $DOMAIN ]]; then
$HOME/nginx-app-conf $1 $PORT $DOMAIN > $HOME/$1/nginx.conf
nc -U $HOME/reload-nginx
fi
fi
echo
echo "-----> Application deployed:"
if [[ $DOMAIN ]]; then
echo " http://$1.$DOMAIN"
else
echo " http://$(hostname -i | cut -d' ' -f3):$PORT"
fi
echo