Skip to content

Instantly share code, notes, and snippets.

@nickhudkins
Created September 6, 2011 06:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nickhudkins/1196729 to your computer and use it in GitHub Desktop.
Save nickhudkins/1196729 to your computer and use it in GitHub Desktop.
Create Env!
#!/bin/sh
USERNAME="shl"
USER_FULL_NAME="Deployment User"
PROJECT_NAME="shl"
DOMAIN_NAME="shl.gramophone.com"
clear
#edit sudoers
if [ -z "$1" ]; then
echo ""
echo "-----------------------"
echo "Installing packages...."
echo "-----------------------"
echo ""
apt-get -y install build-essential python-dev python-setuptools nginx daemontools git-core
echo ""
echo "---------------------------"
echo "Configuring daemontools...."
echo "---------------------------"
echo ""
svscanboot="/etc/init/svscanboot.conf"
sudo rm -rf $svscanboot
touch $svscanboot
echo "start on runlevel [2345]" >> $svscanboot
echo "stop on runlevel [!2345]" >> $svscanboot
echo ""
echo "respawn" >> $svscanboot
echo ""
echo "exec /usr/bin/svscanboot" >> $svscanboot
mkdir /etc/service/
initctl start svscanboot
echo ""
echo "---------------"
echo "Adding user...."
echo "---------------"
echo ""
sudo adduser -q --disabled-password --gecos "$USER_FULL_NAME" $USERNAME
echo "Starting up visudo with this script as first parameter"
export EDITOR=$0 && sudo -E visudo
else
echo "Changing sudoers"
echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> $1
#create the virtualenv
echo ""
echo "-----------------------"
echo "Creating virtualenv...."
echo "-----------------------"
echo ""
easy_install virtualenv virtualenvwrapper
sudo -u $USERNAME mkdir /home/$USERNAME/virtualenvs
echo "export WORKON_HOME=\$HOME/virtualenvs" | sudo -u $USERNAME tee -a /home/$USERNAME/.bashrc
echo "source /usr/local/bin/virtualenvwrapper.sh" | sudo -u $USERNAME tee -a /home/$USERNAME/.bashrc
sudo -u $USERNAME virtualenv /home/$USERNAME/virtualenvs/$PROJECT_NAME
sudo -s -u $USERNAME "source /home/$USERNAME/virtualenvs/$PROJECT_NAME/bin/activate && easy_install pip"
sudo -s -u $USERNAME "source /home/$USERNAME/virtualenvs/$PROJECT_NAME/bin/activate && pip install flup"
echo ""
echo "-----------------------------"
echo "Setup daemontools service...."
echo "-----------------------------"
echo ""
#setup the service
rm -rf /etc/service/$PROJECT_NAME
mkdir /etc/service/$PROJECT_NAME
runfile="/etc/service/$PROJECT_NAME/run"
touch $runfile
echo '#!/usr/bin/env bash' >> $runfile
echo "source /home/$USERNAME/virtualenvs/$PROJECT_NAME/bin/activate" >> $runfile
echo "cd /home/$USERNAME/$PROJECT_NAME/" >> $runfile
echo "export DJANGO_SETTINGS_MODULE=$PROJECT_NAME.settings" >> $runfile
echo "exec envuidgid $USERNAME django-admin.py runfcgi method=threaded host=127.0.0.1 port=8000 pidfile=$PROJECT_NAME.pid minspare=4 maxspare=30 daemonize=false" >> $runfile
chmod +x $runfile
echo ""
echo "---------------"
echo "Setup NGINX...."
echo "---------------"
echo ""
fastcgiparams="/etc/nginx/fastcgi_params"
rm -rf $fastcgiparams
touch $fastcgiparams
echo 'fastcgi_param QUERY_STRING $query_string;' >> $fastcgiparams
echo 'fastcgi_param REQUEST_METHOD $request_method;' >> $fastcgiparams
echo 'fastcgi_param CONTENT_TYPE $content_type;' >> $fastcgiparams
echo 'fastcgi_param CONTENT_LENGTH $content_length;' >> $fastcgiparams
echo ""
echo 'fastcgi_param PATH_INFO $fastcgi_script_name;' >> $fastcgiparams
echo 'fastcgi_param REQUEST_URI $request_uri;' >> $fastcgiparams
echo 'fastcgi_param DOCUMENT_URI $document_uri;' >> $fastcgiparams
echo 'fastcgi_param DOCUMENT_ROOT $document_root;' >> $fastcgiparams
echo 'fastcgi_param SERVER_PROTOCOL $server_protocol;' >> $fastcgiparams
echo ""
echo 'fastcgi_param GATEWAY_INTERFACE CGI/1.1;' >> $fastcgiparams
echo 'fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;' >> $fastcgiparams
echo ""
echo 'fastcgi_param REMOTE_ADDR $remote_addr;' >> $fastcgiparams
echo 'fastcgi_param REMOTE_PORT $remote_port;' >> $fastcgiparams
echo 'fastcgi_param SERVER_ADDR $server_addr;' >> $fastcgiparams
echo 'fastcgi_param SERVER_PORT $server_port;' >> $fastcgiparams
echo 'fastcgi_param SERVER_NAME $server_name;' >> $fastcgiparams
nginx_conf="/etc/nginx/sites-available/$PROJECT_NAME"
sudo rm -rf $nginx_conf
touch $nginx_conf
echo "server {" >> $nginx_conf
echo " listen 80;" >> $nginx_conf
echo " server_name $DOMAIN_NAME;" >> $nginx_conf
echo " access_log /var/log/nginx/$PROJECT_NAME.access.log;" >> $nginx_conf
echo "" >> $nginx_conf
echo " location /media {" >> $nginx_conf
echo " autoindex on;" >> $nginx_conf
echo " index index.html;" >> $nginx_conf
echo " root /home/$USERNAME/$PROJECT_NAME;" >> $nginx_conf
echo " break;" >> $nginx_conf
echo " }" >> $nginx_conf
echo "" >> $nginx_conf
echo " location / {" >> $nginx_conf
echo " include /etc/nginx/fastcgi_params;" >> $nginx_conf
echo " fastcgi_pass 127.0.0.1:8000;" >> $nginx_conf
echo " break;" >> $nginx_conf
echo " }" >> $nginx_conf
echo "}" >> $nginx_conf
ln -sf /etc/nginx/sites-available/$PROJECT_NAME /etc/nginx/sites-enabled/$PROJECT_NAME
/etc/init.d/nginx restart
echo ""
echo "--------------"
echo "DONE DONE DONE"
echo "--------------"
echo ""
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment