summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--install/django.wsgi.template7
-rw-r--r--install/install.sh254
-rw-r--r--install/local_settings.py.sample41
-rw-r--r--install/nginx.conf.template34
-rw-r--r--install/uwsgi.ini.template18
-rw-r--r--requirements.txt3
6 files changed, 357 insertions, 0 deletions
diff --git a/install/django.wsgi.template b/install/django.wsgi.template
new file mode 100644
index 000000000..54bf07351
--- /dev/null
+++ b/install/django.wsgi.template
@@ -0,0 +1,7 @@
+import os, sys
+MAIN_PATH = os.path.realpath(os.path.dirname(__file__)) + "/.."
+sys.path.append(MAIN_PATH)
+os.environ['DJANGO_SETTINGS_MODULE'] = '#SHORT_NAME#.settings'
+import django.core.handlers.wsgi
+application = django.core.handlers.wsgi.WSGIHandler()
+
diff --git a/install/install.sh b/install/install.sh
new file mode 100644
index 000000000..dc2bb9b2a
--- /dev/null
+++ b/install/install.sh
@@ -0,0 +1,254 @@
+#!/bin/bash
+
+######################################################################
+# Minimum configuration #
+######################################################################
+
+# only lower alpha-numeric char and '_' and must start with a letter
+[ $SHORT_NAME ] || ( echo 'SHORT_NAME empty. Default to: "default".' ; );
+SHORT_NAME=${SHORT_NAME-default}
+
+[ $URL ] || ( echo 'URL empty. Default to: "localhost".' ; URL=localhost ; );
+URL=${URL-localhost}
+
+[ $PROJECT_NAME ] || ( echo 'PROJECT_NAME empty. Default to: "Test".' ; );
+PROJECT_NAME=${PROJECT_NAME-Test}
+
+DEFAULT_DATA='fr' # available data: 'fr'
+
+######################################################################
+# Advanced configuration #
+######################################################################
+
+# if the database is not local the database will be not automatically
+# created
+[ $DB_HOST ] || ( echo 'DB_HOST empty. Default to: "127.0.0.1".' ; );
+DB_HOST=${DB_HOST-127.0.0.1}
+
+# if not set automatically generated
+DB_PASSWORD=''
+DB_PORT='5432'
+PG_VERSION=9.1
+
+# ishtar git branch
+[ $VERSION ] || ( echo 'VERSION empty. Default to: "new-stable".' ; );
+VERSION=new-stable
+
+# change it for each instance on a same server
+UWSGI_PORT=8891
+
+# webserver port - default "[::]:80"
+NGINX_PORT="[::]:80"
+if [ $URL = 'localhost' ]; then
+ # don't clash with default server on localhost
+ NGINX_PORT="[::]:8080"
+fi
+
+# don't forget the trailing slash
+INSTALL_PREFIX=/srv/
+
+# if a virtualenv is used put the full path of the python to use
+PYTHON=python
+
+# Don't edit below this line
+######################################################################
+
+echo "* installing dependencies"
+
+if [ $DB_HOST = "127.0.0.1" ]; then
+ apt-get -q -y install postgresql postgresql-$PG_VERSION-postgis postgresql 2> /dev/null > /dev/null
+fi
+
+apt-get -q -y install git apg python-pip 2> /dev/null > /dev/null
+
+apt-get -q -y install python python-django \
+ libjs-jquery libjs-jquery-ui python-pisa python-django-registration \
+ python-utidylib python-lxml python-imaging python-django-south \
+ python-psycopg2 python-gdal gettext \
+ python-django-extra-views python-memcache python-dbf 2> /dev/null > /dev/null
+
+apt-get -q -y install uwsgi uwsgi-plugin-python nginx memcached 2> /dev/null > /dev/null
+
+pip install git+https://github.com/treyhunner/django-simple-history.git@0fd9b8e9c6f36b0141367b502420efe92d4e21ce 2> /dev/null > /dev/null
+
+if [ -z "$DB_PASSWORD" ]
+then
+
+DB_PASSWORD=`apg -a 0 -M ncl -n 6 -x 10 -m 10 |head -n 1`
+
+fi
+
+DB_NAME='ishtar'$SHORT_NAME
+INSTALL_PATH=$INSTALL_PREFIX$DB_NAME
+DATE=`date +%F`
+CDIR=`pwd`
+SECRET_KEY=`apg -a 0 -M ncl -n 6 -x 10 -m 40 |head -n 1`
+
+if [ $DB_HOST = '127.0.0.1' ]
+then
+
+echo "* create database and user"
+DB_PASSWORD=$DB_PASSWORD DB_NAME=$DB_NAME PROJECT_NAME=$PROJECT_NAME PG_VERSION=$PG_VERSION su postgres <<'EOF'
+cd
+if [ `psql -l | grep template_postgis | wc -l` -ne 1 ]; then
+ createdb template_postgis
+ psql -d template_postgis -f /usr/share/postgresql/$PG_VERSION/contrib/postgis-1.5/postgis.sql 2> /dev/null > /dev/null
+ psql -d template_postgis -f /usr/share/postgresql/$PG_VERSION/contrib/postgis-1.5/spatial_ref_sys.sql 2> /dev/null > /dev/null
+
+fi
+if [ `psql -l | grep $DB_NAME | wc -l` -ne 1 ]; then
+ createuser --echo --adduser --createdb --encrypted $DB_NAME 2> /dev/null > /dev/null
+ psql --command "ALTER USER "$DB_NAME" with password '"$DB_PASSWORD"';" 2> /dev/null > /dev/null
+ createdb -T template_postgis --echo --owner $DB_NAME --encoding UNICODE $DB_NAME "$PROJECT_NAME" 2> /dev/null > /dev/null
+
+fi
+EOF
+
+fi
+
+
+echo '* get sources'
+
+mkdir $INSTALL_PATH
+mkdir $INSTALL_PATH'/conf'
+cd $INSTALL_PATH
+
+echo ' * oook!'
+git clone git://git.proxience.net/git/oook_replace.git 2> /dev/null
+echo ' * ishtar'
+git clone git://git.proxience.net/git/ishtar.git 2> /dev/null
+cd ishtar
+git fetch 2> /dev/null
+git checkout $VERSION 2> /dev/null
+
+cp -ra example_project $SHORT_NAME 2> /dev/null > /dev/null
+
+rm $SHORT_NAME/settings.py
+ln -s $INSTALL_PATH"/example_project/settings.py" $INSTALL_PATH"/"$SHORT_NAME"/"
+
+APP_DIR=$INSTALL_PATH'/ishtar/'$SHORT_NAME
+
+echo '* load parameters'
+
+sed -s "s/#SHORT_NAME#/$SHORT_NAME/g;\
+ s/#DATE#/$DATE/g;\
+ s/#PROJECT_NAME#/$PROJECT_NAME/g;\
+ s/#DB_HOST#/$DB_HOST/g;\
+ s/#DB_NAME#/$DB_NAME/g;\
+ s/#DB_PORT#/$DB_PORT/g;\
+ s/#APP_DIR#/$APP_DIR/g;\
+ s/#SECRET_KEY#/$SECRET_KEY/g;\
+ s/#DB_PASSWORD#/$DB_PASSWORD/g;\
+ s/#UWSGI_PORT#/$UWSGI_PORT/g;" $CDIR'/local_settings.py.sample' > \
+ $INSTALL_PATH'/conf/local_settings.py'
+
+ln -s $INSTALL_PATH'/conf/local_settings.py' $APP_DIR'/local_settings.py'
+
+# rights
+mkdir $APP_DIR'/media'
+chown -R root:www-data $APP_DIR'/media'
+chmod -R g+w $APP_DIR'/media'
+
+# logs
+mkdir -p /var/log/django/
+chown root:www-data '/var/log/django'
+touch '/var/log/django/ishtar-'$SHORT_NAME'.log'
+chown root:www-data '/var/log/django/ishtar-'$SHORT_NAME'.log'
+chmod g+w '/var/log/django/ishtar-'$SHORT_NAME'.log'
+
+cd $APP_DIR
+./manage.py collectstatic --noinput 2> /dev/null > /dev/null
+
+# load locale data
+
+cd $INSTALL_PATH'/ishtar/archaeological_context_records'
+django-admin compilemessages -l fr 2> /dev/null
+cd $INSTALL_PATH'/ishtar/archaeological_files'
+django-admin compilemessages -l fr 2> /dev/null
+cd $INSTALL_PATH'/ishtar/archaeological_finds'
+django-admin compilemessages -l fr 2> /dev/null
+cd $INSTALL_PATH'/ishtar/archaeological_operations'
+django-admin compilemessages -l fr 2> /dev/null
+cd $INSTALL_PATH'/ishtar/archaeological_warehouse'
+django-admin compilemessages -l fr 2> /dev/null
+cd $INSTALL_PATH'/ishtar/ishtar_common'
+django-admin compilemessages -l fr 2> /dev/null
+
+echo "* sync database"
+
+cd $APP_DIR
+python ./manage.py syncdb --noinput 2> /dev/null > /dev/null
+python ./manage.py migrate ishtar_common 2> /dev/null > /dev/null
+python ./manage.py migrate archaeological_files 0013 2> /dev/null > /dev/null
+python ./manage.py migrate archaeological_operations 2> /dev/null > /dev/null
+python ./manage.py migrate archaeological_files 2> /dev/null > /dev/null
+python ./manage.py migrate 2> /dev/null > /dev/null
+
+echo "* load default data"
+# data migrations have created some default data - return to a clean state
+python ./manage.py flush --noinput 2> /dev/null
+
+python ./manage.py loaddata \
+ '../fixtures/initial_data-auth-'$DEFAULT_DATA'.json' 2> /dev/null
+python ./manage.py loaddata \
+ '../ishtar_common/fixtures/initial_data-'$DEFAULT_DATA'.json' 2> /dev/null
+python ./manage.py loaddata \
+ '../ishtar_common/fixtures/initial_towns-'$DEFAULT_DATA'.json' 2> /dev/null
+python ./manage.py loaddata \
+ '../archaeological_operations/fixtures/initial_data-'$DEFAULT_DATA'.json' 2> /dev/null
+python ./manage.py loaddata \
+ '../archaeological_files/fixtures/initial_data-'$DEFAULT_DATA'.json' 2> /dev/null
+python ./manage.py loaddata \
+ '../archaeological_context_records/fixtures/initial_data-'$DEFAULT_DATA'.json' 2> /dev/null
+python ./manage.py loaddata \
+ '../archaeological_finds/fixtures/initial_data-'$DEFAULT_DATA'.json' 2> /dev/null
+python ./manage.py loaddata \
+ '../archaeological_warehouse/fixtures/initial_data-'$DEFAULT_DATA'.json' 2> /dev/null
+
+echo "* create superuser"
+python ./manage.py createsuperuser
+
+# "de-flush" migrations
+$PYTHON ./manage.py migrate --fake 2> /dev/null > /dev/null
+
+# add a default site
+echo '[{"pk":null, "model": "sites.site", "fields": {"domain": "'$URL'", "name": "'$PROJECT_NAME'"}}]' > \
+ /tmp/site.json
+python ./manage.py loaddata /tmp/site.json
+rm /tmp/site.json
+
+echo '* uwsgi configuration'
+
+sed -s "s/#SHORT_NAME#/$SHORT_NAME/g;\
+ s/#DB_NAME#/$DB_NAME/g;\
+ s/#URL#/$URL/g;\
+ s/#UWSGI_PORT#/$UWSGI_PORT/g;" $CDIR'/uwsgi.ini.template' > \
+ $INSTALL_PATH'/conf/uwsgi.ini'
+
+sed -s "s/#SHORT_NAME#/$SHORT_NAME/g;" $CDIR'/django.wsgi.template' > \
+ $INSTALL_PATH'/conf/'$SHORT_NAME'.wsgi'
+
+ln -s $INSTALL_PATH'/conf/uwsgi.ini' \
+ '/etc/uwsgi/apps-available/'$SHORT_NAME'-uwsgi.ini'
+ln -s '/etc/uwsgi/apps-available/'$SHORT_NAME'-uwsgi.ini' \
+ '/etc/uwsgi/apps-enabled/'$SHORT_NAME'-uwsgi.ini'
+
+service uwsgi restart
+
+echo '* nginx configuration'
+
+
+sed -s "s/#SHORT_NAME#/$SHORT_NAME/g;\
+ s/#UWSGI_PORT#/$UWSGI_PORT/g;\
+ s/#DB_NAME#/$DB_NAME/g;\
+ s/#DATE#/$DATE/g;\
+ s/#NGINX_PORT#/$NGINX_PORT/g;\
+ s/#URL#/$URL/g;" $CDIR'/nginx.conf.template' > \
+ $INSTALL_PATH'/conf/nginx.conf'
+ln -s $INSTALL_PATH'/conf/nginx.conf' \
+ '/etc/nginx/sites-available/'$SHORT_NAME'.conf'
+ln -s '/etc/nginx/sites-available/'$SHORT_NAME'.conf' \
+ '/etc/nginx/sites-enabled/'$SHORT_NAME'.conf'
+
+service nginx restart
+
diff --git a/install/local_settings.py.sample b/install/local_settings.py.sample
new file mode 100644
index 000000000..db40fe7bf
--- /dev/null
+++ b/install/local_settings.py.sample
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+DEBUG = False
+DEBUG_TOOLBAR = False
+TEMPLATE_DEBUG = DEBUG
+SQL_DEBUG = False
+
+APP_NAME = u"#PROJECT_NAME#"
+ROOT_URLCONF = '#SHORT_NAME#.urls'
+STATIC_URL = '/static-#DATE#/'
+SECRET_KEY = "#SECRET_KEY#"
+LOGFILE = "/var/log/django/ishtar-#SHORT_NAME#.log"
+
+MEDIA_ROOT = "#APP_DIR#/media/"
+
+ADMINS = (
+ # ('Your Name', 'your_email@domain.com'),
+)
+
+MANAGERS = ADMINS
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.contrib.gis.db.backends.postgis',
+ 'NAME': '#DB_NAME#',
+ 'HOST': '#DB_HOST#',
+ 'PORT': '#DB_PORT#',
+ 'USER': '#DB_NAME#',
+ 'PASSWORD': '#DB_PASSWORD#',
+ }
+}
+
+# choose the extensions to install
+EXTRA_APPS = [
+ 'archaeological_files',
+ 'archaeological_context_records',
+ 'archaeological_warehouse',
+ 'archaeological_finds',
+]
+
diff --git a/install/nginx.conf.template b/install/nginx.conf.template
new file mode 100644
index 000000000..0a68be712
--- /dev/null
+++ b/install/nginx.conf.template
@@ -0,0 +1,34 @@
+server {
+ listen #NGINX_PORT#;
+ server_name #URL#;
+ root /srv/#DB_NAME#/ishtar/;
+ access_log /var/log/django/#SHORT_NAME#-access.log;
+ error_log /var/log/django/#SHORT_NAME#-error.log;
+ client_max_body_size 20M;
+
+ location /static-#DATE#/ { # STATIC_URL
+ alias /srv/#DB_NAME#/ishtar/#SHORT_NAME#/static/; # STATIC_ROOT
+ expires 30d;
+ }
+
+ location /media/ { # MEDIA_URL
+ alias /srv/#DB_NAME#/ishtar/#SHORT_NAME#/media/; # MEDIA_ROOT
+ expires 30d;
+ }
+
+ location /tinymce/ {
+ alias /usr/share/tinymce/www/;
+ expires 30d;
+ }
+
+ location /javascript/ {
+ alias /usr/share/javascript/;
+ expires 30d;
+ }
+
+ location / {
+ include uwsgi_params;
+ uwsgi_pass 127.0.0.1:#UWSGI_PORT#;
+ }
+}
+
diff --git a/install/uwsgi.ini.template b/install/uwsgi.ini.template
new file mode 100644
index 000000000..0e2fc6554
--- /dev/null
+++ b/install/uwsgi.ini.template
@@ -0,0 +1,18 @@
+[uwsgi]
+# variables
+projectname = #SHORT_NAME#
+projectdomain = #URL#
+base = /srv/#DB_NAME#/ishtar/
+
+# config
+plugins = python
+master = true
+protocol = uwsgi
+env = DJANGO_SETTINGS_MODULE=%(projectname).settings
+pythonpath = %(base)
+module = %(projectname).wsgi
+socket = 127.0.0.1:#UWSGI_PORT#
+logto = /var/log/django/uwsgi-%(projectname).log
+#below line runs it as a daemon in background
+daemonize = /var/log/uwsgi/uwsgi-%(projectname).log
+buffer-size=65535
diff --git a/requirements.txt b/requirements.txt
index 401ae07d8..18f3567b3 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -18,3 +18,6 @@ html5lib
django-extra-views==0.2.4
git+https://github.com/treyhunner/django-simple-history.git@0fd9b8e9c6f36b0141367b502420efe92d4e21ce
+
+# oook_replace
+beautifulsoup4