From 6b97e90eb0f646f989173dc983342876218453a6 Mon Sep 17 00:00:00 2001 From: Tom Dyson Date: Tue, 4 Mar 2014 17:10:04 +0000 Subject: [PATCH] Ubuntu installation script Production Wagtail one-liner for clean Ubuntu 13.04 boxes --- scripts/install/ubuntu.sh | 119 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 scripts/install/ubuntu.sh diff --git a/scripts/install/ubuntu.sh b/scripts/install/ubuntu.sh new file mode 100644 index 000000000..a46e12ec3 --- /dev/null +++ b/scripts/install/ubuntu.sh @@ -0,0 +1,119 @@ +# Production-ready Wagtail installation, tested on Ubuntu 13.04 +# Tom Dyson and Neal Todd + +PROJECT=mywagtail +PROJECT_ROOT=/usr/local/django + +echo "This script overwrites key files, and should only be run on a new box." +read -p "Type 'yes' to confirm: " CONFIRM +[ “$CONFIRM” == “yes” ] || exit + +read -p "Enter a name for your project [$PROJECT]: " U_PROJECT +if [ ! -z "$U_PROJECT" ]; then + PROJECT=$U_PROJECT +fi + +read -p "Enter the root of your project, without trailing slash [$PROJECT_ROOT]: " U_PROJECT_ROOT +if [ ! -z "$U_PROJECT_ROOT" ]; then + PROJECT_ROOT=$U_PROJECT_ROOT +fi + +if [ ! -z "$PROJECT_ROOT" ]; then + mkdir -p $PROJECT_ROOT || exit +fi + +echo "Please come back in a few minutes, when we'll need you to create an admin account." +sleep 5 + +aptitude update +aptitude -y install git python-pip nginx postgresql redis-server +aptitude -y install postgresql-server-dev-all python-dev libxml2-dev libxslt-dev libjpeg62-dev + +aptitude -y install npm +ln -s /usr/bin/nodejs /usr/bin/node +npm install -g coffee-script less + +perl -pi -e "s/^(local\s+all\s+postgres\s+)peer$/\1trust/" /etc/postgresql/9.1/main/pg_hba.conf +service postgresql reload + +aptitude -y install openjdk-7-jre-headless +curl -o elasticsearch-1.0.0.deb https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.0.0.deb +dpkg -i elasticsearch-1.0.0.deb +rm elasticsearch-1.0.0.deb +update-rc.d elasticsearch defaults 95 10 +service elasticsearch start + +cd $PROJECT_ROOT +git clone https://github.com/torchbox/wagtaildemo.git $PROJECT +cd $PROJECT +mv wagtaildemo $PROJECT +perl -pi -e"s/wagtaildemo/$PROJECT/" manage.py $PROJECT/wsgi.py $PROJECT/settings/*.py +rm -r etc README.md Vagrantfile* .git .gitignore + +dd if=/dev/zero of=/tmpswap bs=1024 count=524288 +mkswap /tmpswap +swapon /tmpswap +pip install -r requirements/production.txt +swapoff -v /tmpswap +rm /tmpswap + +echo SECRET_KEY = \"`python -c 'import random; print "".join([random.SystemRandom().choice("abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)") for i in range(50)])'`\" > $PROJECT/settings.local.py +echo ALLOWED_HOSTS = [\'`ifconfig eth0 |grep "inet addr" | cut -d: -f2 | cut -d" " -f1`\',] >> $PROJECT/settings/local.py +createdb -Upostgres $PROJECT +./manage.py syncdb --settings=$PROJECT.settings.production +./manage.py migrate --settings=$PROJECT.settings.production +./manage.py update_index --settings=$PROJECT.settings.production +./manage.py collectstatic --settings=$PROJECT.settings.production --noinput + +pip install uwsgi +cp $PROJECT/wsgi.py $PROJECT/wsgi_production.py +perl -pi -e"s/($PROJECT.settings)/\1.production/" $PROJECT/wsgi_production.py + +curl -O https://raw2.github.com/nginx/nginx/master/conf/uwsgi_params +cat << EOF > /etc/nginx/sites-enabled/default +upstream django { + server unix://$PROJECT_ROOT/$PROJECT/uwsgi.sock; +} +server { + listen 80; + charset utf-8; + client_max_body_size 75M; # max upload size + location /media { + alias $PROJECT_ROOT/$PROJECT/media; } + location /static { + alias $PROJECT_ROOT/$PROJECT/static; + } + location / { + uwsgi_pass django; + include $PROJECT_ROOT/$PROJECT/uwsgi_params; } +} +EOF + +cat << EOF > $PROJECT_ROOT/$PROJECT/uwsgi_conf.ini +[uwsgi] +chdir = $PROJECT_ROOT/$PROJECT +module = $PROJECT.wsgi_production +master = true +processes = 10 +socket = $PROJECT_ROOT/$PROJECT/uwsgi.sock +chmod-socket = 666 +vacuum = true +EOF + +mkdir -p /etc/uwsgi/vassals/ +ln -s $PROJECT_ROOT/$PROJECT/uwsgi_conf.ini /etc/uwsgi/vassals/ + +cat << EOF > /etc/init/uwsgi.conf +description "uwsgi for wagtail" +start on runlevel [2345] +stop on runlevel [06] +exec uwsgi --emperor /etc/uwsgi/vassals +EOF + +service uwsgi start +service nginx restart + +URL="http://`ifconfig eth0 |grep "inet addr" | cut -d: -f2 | cut -d" " -f1`" +echo "Wagtail lives!" +echo "The public site is at $URL/" +echo "and the admin interface is at $URL/admin/"