Revision: 5919
Updated Code
at April 1, 2009 14:25 by mandric
Updated Code
#!/bin/bash
# Create a django skeleton.
# Dir structure looks like:
#~example/
# bin
# sites
# example.com
# |-- lib
# | `-- example
# | |-- media
# | `-- templates
# |-- logs
# |-- public
# | |-- admin_media -> /path/to/django/contrib/admin/media
# | `-- media -> /home/example/sites/example.com/lib/example/media
# |-- static
# |-- trac
# |-- uploads
if [ -z $1 ] ; then
echo 'Please specify a username.'
exit
fi
if [ -z $2 ] ; then
echo 'Please specify a domain name.'
exit
fi
USER=$1
PROJECT=$USER
SITE=$2
USER_PASS=`makepasswd --chars=15`
DB_PASS=`makepasswd --chars=25`
SECRET_KEY=`makepasswd --chars=128`
HOME_DIR=/home/$USER
LIB_DIR=$HOME_DIR/sites/$SITE/projects
bootstrap_user () {
echo "rand user pass: $USER_PASS"
echo "Creating $USER"
# add unix user
adduser $USER --force-badname
mkdir $HOME_DIR/sites/$SITE -p
mkdir $LIB_DIR
mkdir $HOME_DIR/sites/$SITE/logs
mkdir $HOME_DIR/sites/$SITE/public
mkdir $HOME_DIR/sites/$SITE/static
mkdir $HOME_DIR/sites/$SITE/uploads
mkdir $HOME_DIR/bin
}
create_database () {
# Create database
NAME=$PROJECT
USER=$USER
echo "$USER db pass: $DB_PASS"
echo "enter mysql root pass"
mysql -u root -p << EOF
create database $NAME default character set = 'utf8' default collate = 'utf8_general_ci';
GRANT ALL ON ${NAME}.* TO '${NAME}'@'localhost' IDENTIFIED BY '${DB_PASS}';
flush privileges;
EOF
}
# Setup Trac
setup_trac() {
mkdir -p $HOME_DIR/sites/$SITE/trac/env
mkdir $HOME_DIR/sites/$SITE/trac/repos
trac-admin $HOME_DIR/sites/$SITE/trac/env initenv
svnadmin create $HOME_DIR/sites/$SITE/trac/repos/
cat >>$HOME_DIR/sites/$SITE/public/trac.fcgi <<EOF
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2003-2004 Edgewall Software
# Copyright (C) 2003-2004 Jonas Borgström <[email protected]>
# All rights reserved.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at http://trac.edgewall.org/wiki/TracLicense.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
# history and logs, available at http://trac.edgewall.org/log/.
#
# Author: Jonas Borgström <[email protected]>
# for andric.us
import os
os.environ['TRAC_ENV'] = '${HOME_DIR}/sites/${SITE}/trac/env'
try:
from trac.web import fcgi_frontend
fcgi_frontend.run()
except SystemExit:
raise
except Exception, e:
print 'Content-Type: text/plain
',
print 'Oops...'
print
print 'Trac detected an internal error:'
print
print e
print
import traceback
import StringIO
tb = StringIO.StringIO()
traceback.print_exc(file=tb)
print tb.getvalue()
EOF
}
create_wsgi () {
# Copy .htaccess and dispatch.wsgi into public dir
# This also depends on the proper configuration in apache.
cat >>$HOME_DIR/sites/$SITE/public/dispatch.wsgi <<EOF
#!/usr/bin/python2.5
import sys, os
# make stdout go to stderr for wsgi apps
sys.stdout = sys.stderr
USERNAME = '$USER'
SITE = '$SITE'
PROJECT = '$USER'
# Add a custom Python path.
sys.path.insert(0, "/home/%s/sites/%s/projects" % (USERNAME,SITE) )
os.environ['PYTHON_EGG_CACHE'] = '/home/%s/sites/%s/.python-eggs'
# Import our django handler
import django.core.handlers.wsgi
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % PROJECT
application = django.core.handlers.wsgi.WSGIHandler()
EOF
}
create_fcgi () {
# Add .htaccess only under fcgi
cat >>$HOME_DIR/sites/$SITE/public/.htaccess <<EOF
RewriteEngine On
RewriteBase /
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(admin_media/.*)$ - [L]
# rewrite trac/ requests so they get served by trac.fcgi
RewriteRule ^(trac\.fcgi/.*)$ - [L]
RewriteRule ^trac/(.*)$ trac.fcgi/\$1 [L]
# rewrite everything else to disptach.fcgi
RewriteRule ^(dispatch\.fcgi/.*)$ - [L]
RewriteRule ^(.*)$ dispatch.fcgi/\$1 [QSA,L]
EOF
cat >>$HOME_DIR/sites/$SITE/public/dispatch.fcgi <<EOF
#!/usr/bin/python
import sys, os
USERNAME = '$USER'
SITE = '$SITE'
PROJECT = '$USER'
# Add a custom Python path.
sys.path.insert(0, "/home/%s/sites/%s/apps/%s" % (USERNAME,SITE,PROJECT) )
sys.path.insert(0, "/home/%s/lib/python" % (USERNAME,) )
# Switch to the directory of your project.
#os.chdir("/home/%s/dev/" % (USERNAME,) )
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % PROJECT
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
EOF
echo "make dispatch.fcgi executable"
chmod +x $HOME_DIR/sites/$SITE/public/dispatch.fcgi
}
setup_django () {
# Build django project
cd $LIB_DIR && \
/usr/bin/django-admin.py startproject $PROJECT && \
cd $PROJECT && \
mkdir media && \
mkdir templates
# Link in media dirs
cd $HOME_DIR/sites/$SITE/public
ln -s /usr/lib/python2.4/site-packages/django/contrib/admin/media admin_media
ln -s $LIB_DIR/$PROJECT/media .
create_wsgi
#create_fcgi
# Add local override trick to settings.py
cat >> $LIB_DIR/$PROJECT/settings.py <<EOF
# allow local settings to override
try:
from local_settings import *
except ImportError, exp:
pass
EOF
echo "Adding overrides to local_settings.py"
cat >> $LIB_DIR/$PROJECT/local_settings.py <<EOF
import os
DATABASE_ENGINE='mysql'
DATABASE_NAME='${PROJECT}'
DATABASE_USER='${USER}'
DATABASE_PASSWORD='${DB_PASS}'
TIME_ZONE = 'America/Chicago'
# Make this unique, and don't share it with anybody.
SECRET_KEY = '${SECRET_KEY}'
TEMPLATE_DIRS = (
os.path.join (os.getcwd(), 'templates'),
'$LIB_DIR/$PROJECT/templates',
)
MEDIA_ROOT = '$LIB_DIR/$PROJECT/media/'
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.cache.CacheMiddleware',
'django.middleware.doc.XViewMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'django.contrib.markup',
'template_utils',
'django.contrib.flatpages',
)
ADMIN_MEDIA_PREFIX = '/admin_media/'
EOF
echo "local_settings has a pw in it, so only allow read from owner."
echo "chmod 400 $LIB_DIR/$PROJECT/local_settings.py"
chmod 400 $LIB_DIR/$PROJECT/local_settings.py
echo "Configure django apps by hand ..."
echo "$LIB_DIR/$PROJECT/local_settings.py"
# Hardening app
cd $HOME_DIR && \
find . -name \*.py -type f -exec chmod -w {} \;
find . -type d -exec chmod -w {} \;
}
cleanup_perms () {
# Make sure everything in user dir is owned by user
echo "Finalizing some permissions ..."
echo "chown -R $USER $HOME_DIR"
chown -R $USER:$USER $HOME_DIR
echo "chmod +w $HOME_DIR"
chmod +w $HOME_DIR
# Chown logs dir as root
echo "chown root $HOME_DIR/sites/$SITE/logs"
chown root $HOME_DIR/sites/$SITE/logs
echo "chmod +w $HOME_DIR/sites/$SITE/logs"
chmod +w $HOME_DIR/sites/$SITE/logs
}
bootstrap_user
create_database
setup_django
#setup_trac
cleanup_perms
Revision: 5918
Updated Code
at April 1, 2009 14:23 by mandric
Updated Code
#!/bin/bash
# Create a django skeleton.
# Dir structure looks like:
#~example/
# bin
# sites
# example.com
# |-- lib
# | `-- example
# | |-- media
# | `-- templates
# |-- logs
# |-- public
# | |-- admin_media -> /path/to/django/contrib/admin/media
# | `-- media -> /home/example/sites/example.com/lib/example/media
# |-- static
# |-- trac
# |-- uploads
if [ -z $1 ] ; then
echo 'Please specify a username.'
exit
fi
if [ -z $2 ] ; then
echo 'Please specify a domain name.'
exit
fi
USER=$1
PROJECT=$USER
SITE=$2
USER_PASS=`makepasswd --chars=15`
DB_PASS=`makepasswd --chars=25`
SECRET_KEY=`makepasswd --chars=128`
HOME_DIR=/home/$USER
LIB_DIR=$HOME_DIR/sites/$SITE/projects
bootstrap_user () {
echo "rand user pass: $USER_PASS"
echo "Creating $USER"
# add unix user
adduser $USER --force-badname
mkdir $HOME_DIR/sites/$SITE -p
mkdir $LIB_DIR
mkdir $HOME_DIR/sites/$SITE/logs
mkdir $HOME_DIR/sites/$SITE/public
mkdir $HOME_DIR/sites/$SITE/static
mkdir $HOME_DIR/sites/$SITE/uploads
mkdir $HOME_DIR/bin
}
create_database () {
# Create database
NAME=$PROJECT
USER=$USER
echo "$USER db pass: $DB_PASS"
echo "enter mysql root pass"
mysql -u root -p << EOF
create database $NAME default character set = 'utf8' default collate = 'utf8_general_ci';
GRANT ALL ON ${NAME}.* TO '${NAME}'@'localhost' IDENTIFIED BY '${DB_PASS}';
flush privileges;
EOF
}
# Setup Trac
setup_trac() {
mkdir -p $HOME_DIR/sites/$SITE/trac/env
mkdir $HOME_DIR/sites/$SITE/trac/repos
trac-admin $HOME_DIR/sites/$SITE/trac/env initenv
svnadmin create $HOME_DIR/sites/$SITE/trac/repos/
cat >>$HOME_DIR/sites/$SITE/public/trac.fcgi <<EOF
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2003-2004 Edgewall Software
# Copyright (C) 2003-2004 Jonas Borgström <[email protected]>
# All rights reserved.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at http://trac.edgewall.org/wiki/TracLicense.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
# history and logs, available at http://trac.edgewall.org/log/.
#
# Author: Jonas Borgström <[email protected]>
# for andric.us
import os
os.environ['TRAC_ENV'] = '${HOME_DIR}/sites/${SITE}/trac/env'
try:
from trac.web import fcgi_frontend
fcgi_frontend.run()
except SystemExit:
raise
except Exception, e:
print 'Content-Type: text/plain
',
print 'Oops...'
print
print 'Trac detected an internal error:'
print
print e
print
import traceback
import StringIO
tb = StringIO.StringIO()
traceback.print_exc(file=tb)
print tb.getvalue()
EOF
}
create_wsgi () {
# Copy .htaccess and dispatch.wsgi into public dir
# This also depends on the proper configuration in apache.
cat >>$HOME_DIR/sites/$SITE/public/dispatch.wsgi <<EOF
#!/usr/bin/python2.5
import sys, os
# make stdout go to stderr for wsgi apps
sys.stdout = sys.stderr
USERNAME = '$USER'
SITE = '$SITE'
PROJECT = '$USER'
# Add a custom Python path.
sys.path.insert(0, "/home/%s/sites/%s/projects" % (USERNAME,SITE) )
os.environ['PYTHON_EGG_CACHE'] = '/home/%s/sites/%s/.python-eggs'
# Import our django handler
import django.core.handlers.wsgi
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % PROJECT
application = django.core.handlers.wsgi.WSGIHandler()
EOF
}
create_fcgi () {
# Add .htaccess only under fcgi
cat >>$HOME_DIR/sites/$SITE/public/.htaccess <<EOF
RewriteEngine On
RewriteBase /
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(admin_media/.*)$ - [L]
# rewrite trac/ requests so they get served by trac.fcgi
RewriteRule ^(trac\.fcgi/.*)$ - [L]
RewriteRule ^trac/(.*)$ trac.fcgi/\$1 [L]
# rewrite everything else to disptach.fcgi
RewriteRule ^(dispatch\.fcgi/.*)$ - [L]
RewriteRule ^(.*)$ dispatch.fcgi/\$1 [QSA,L]
EOF
cat >>$HOME_DIR/sites/$SITE/public/dispatch.fcgi <<EOF
#!/usr/bin/python
import sys, os
USERNAME = '$USER'
SITE = '$SITE'
PROJECT = '$USER'
# Add a custom Python path.
sys.path.insert(0, "/home/%s/sites/%s/apps/%s" % (USERNAME,SITE,PROJECT) )
sys.path.insert(0, "/home/%s/lib/python" % (USERNAME,) )
# Switch to the directory of your project.
#os.chdir("/home/%s/dev/" % (USERNAME,) )
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % PROJECT
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
EOF
echo "make dispatch.fcgi executable"
chmod +x $HOME_DIR/sites/$SITE/public/dispatch.fcgi
}
setup_django () {
# Build django project
cd $LIB_DIR && \
/usr/bin/django-admin.py startproject $PROJECT && \
cd $PROJECT && \
mkdir media && \
mkdir templates
# Link in media dirs
cd $HOME_DIR/sites/$SITE/public
ln -s /usr/lib/python2.4/site-packages/django/contrib/admin/media admin_media
ln -s $LIB_DIR/$PROJECT/media .
create_wsgi
#create_fcgi
# Add local override trick to settings.py
cat >> $LIB_DIR/$PROJECT/settings.py <<EOF
# allow local settings to override
try:
from local_settings import *
except ImportError, exp:
pass
EOF
echo "Adding overrides to local_settings.py"
cat >> $LIB_DIR/$PROJECT/local_settings.py <<EOF
import os
DATABASE_ENGINE='mysql'
DATABASE_NAME='${PROJECT}'
DATABASE_USER='${USER}'
DATABASE_PASSWORD='${DB_PASS}'
TIME_ZONE = 'America/Chicago'
# Make this unique, and don't share it with anybody.
SECRET_KEY = '${SECRET_KEY}'
TEMPLATE_DIRS = (
os.path.join (os.getcwd(), 'templates'),
'$LIB_DIR/$PROJECT/templates',
)
MEDIA_ROOT = '$LIB_DIR/$PROJECT/media/'
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.cache.CacheMiddleware',
'django.middleware.doc.XViewMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'django.contrib.markup',
'template_utils',
'django.contrib.flatpages',
)
ADMIN_MEDIA_PREFIX = '/admin_media/'
EOF
echo "local_settings has a pw in it, so only allow read from owner."
echo "chmod 400 $LIB_DIR/$PROJECT/local_settings.py"
chmod 400 $LIB_DIR/$PROJECT/local_settings.py
echo "Configure django apps by hand ..."
echo "$LIB_DIR/$PROJECT/local_settings.py"
# Hardening app
cd $HOME_DIR && \
find . -name \*.py -type f -exec chmod -w {} \;
find . -type d -exec chmod -w {} \;
}
cleanup_perms () {
# Make sure everything in user dir is owned by user
echo "Finalizing some permissions ..."
echo "chown -R $USER $HOME_DIR"
chown -R $USER:$USER $HOME_DIR
echo "chmod +w $HOME_DIR"
chmod +w $HOME_DIR
# Chown logs dir as root
echo "chown root $HOME_DIR/sites/$SITE/logs"
chown root $HOME_DIR/sites/$SITE/logs
echo "chmod +w $HOME_DIR/sites/$SITE/logs"
chmod +w $HOME_DIR/sites/$SITE/logs
}
bootstrap_user
create_database
#setup_django
#setup_trac
cleanup_perms
Revision: 5917
Updated Code
at April 1, 2009 14:06 by mandric
Updated Code
#!/bin/bash
# Create a django skeleton.
# Dir structure looks like:
#~example/
# bin
# sites
# example.com
# |-- lib
# | `-- example
# | |-- media
# | `-- templates
# |-- logs
# |-- public
# | |-- admin_media -> /path/to/django/contrib/admin/media
# | `-- media -> /home/example/sites/example.com/lib/example/media
# |-- static
# |-- trac
# |-- uploads
if [ -z $1 ] ; then
echo 'Please specify a username.'
exit
fi
if [ -z $2 ] ; then
echo 'Please specify a domain name.'
exit
fi
USER=$1
PROJECT=$USER
SITE=$2
USER_PASS=`makepasswd --chars=15`
DB_PASS=`makepasswd --chars=25`
SECRET_KEY=`makepasswd --chars=128`
HOME_DIR=/home/$USER
LIB_DIR=$HOME_DIR/sites/$SITE/projects
bootstrap_user () {
echo "rand user pass: $USER_PASS"
echo "Creating $USER"
# add unix user
adduser $USER --force-badname
mkdir $HOME_DIR/sites/$SITE -p
mkdir $LIB_DIR
mkdir $HOME_DIR/sites/$SITE/logs
mkdir $HOME_DIR/sites/$SITE/public
mkdir $HOME_DIR/sites/$SITE/static
mkdir $HOME_DIR/sites/$SITE/uploads
mkdir $HOME_DIR/bin
}
create_database () {
# Create database
NAME=$PROJECT
USER=$USER
echo "$USER db pass: $DB_PASS"
echo "enter mysql root pass"
mysql -u root -p << EOF
create database $NAME;
GRANT ALL ON ${NAME}.* TO '${NAME}'@'localhost' IDENTIFIED BY '${DB_PASS}';
flush privileges;
EOF
}
# Setup Trac
setup_trac() {
mkdir -p $HOME_DIR/sites/$SITE/trac/env
mkdir $HOME_DIR/sites/$SITE/trac/repos
trac-admin $HOME_DIR/sites/$SITE/trac/env initenv
svnadmin create $HOME_DIR/sites/$SITE/trac/repos/
cat >>$HOME_DIR/sites/$SITE/public/trac.fcgi <<EOF
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2003-2004 Edgewall Software
# Copyright (C) 2003-2004 Jonas Borgström <[email protected]>
# All rights reserved.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at http://trac.edgewall.org/wiki/TracLicense.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
# history and logs, available at http://trac.edgewall.org/log/.
#
# Author: Jonas Borgström <[email protected]>
# for andric.us
import os
os.environ['TRAC_ENV'] = '${HOME_DIR}/sites/${SITE}/trac/env'
try:
from trac.web import fcgi_frontend
fcgi_frontend.run()
except SystemExit:
raise
except Exception, e:
print 'Content-Type: text/plain
',
print 'Oops...'
print
print 'Trac detected an internal error:'
print
print e
print
import traceback
import StringIO
tb = StringIO.StringIO()
traceback.print_exc(file=tb)
print tb.getvalue()
EOF
}
setup_django () {
# Build django project
cd $LIB_DIR && \
/usr/bin/django-admin.py startproject $PROJECT && \
cd $PROJECT && \
mkdir media && \
mkdir templates
# Link in media dirs
cd $HOME_DIR/sites/$SITE/public
ln -s /usr/lib/python2.4/site-packages/django/contrib/admin/media admin_media
ln -s $LIB_DIR/$PROJECT/media .
# Copy .htaccess and dispatch.fcgi into public dir
cat >>$HOME_DIR/sites/$SITE/public/dispatch.wsgi <<EOF
#!/usr/bin/python2.5
import sys, os
# make stdout go to stderr for wsgi apps
sys.stdout = sys.stderr
USERNAME = '$USER'
SITE = '$SITE'
PROJECT = '$USER'
# Add a custom Python path.
sys.path.insert(0, "/home/%s/sites/%s/projects" % (USERNAME,SITE) )
os.environ['PYTHON_EGG_CACHE'] = '/home/%s/sites/%s/.python-eggs'
# Import our django handler
import django.core.handlers.wsgi
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % PROJECT
application = django.core.handlers.wsgi.WSGIHandler()
EOF
# Add .htaccess only under fcgi
#cat >>$HOME_DIR/sites/$SITE/public/.htaccess <<EOF
#RewriteEngine On
#RewriteBase /
##RewriteCond %{REQUEST_FILENAME} !-f
##RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^(media/.*)$ - [L]
#RewriteRule ^(admin_media/.*)$ - [L]
#
# rewrite trac/ requests so they get served by trac.fcgi
#RewriteRule ^(trac\.fcgi/.*)$ - [L]
#RewriteRule ^trac/(.*)$ trac.fcgi/\$1 [L]
# rewrite everything else to disptach.fcgi
#RewriteRule ^(dispatch\.fcgi/.*)$ - [L]
#RewriteRule ^(.*)$ dispatch.fcgi/\$1 [QSA,L]
#EOF
# Add local override trick to settings.py
cat >> $LIB_DIR/$PROJECT/settings.py <<EOF
# allow local settings to override
try:
from local_settings import *
except ImportError, exp:
pass
EOF
echo "Adding overrides to local_settings.py"
cat >> $LIB_DIR/$PROJECT/local_settings.py <<EOF
import os
DATABASE_ENGINE='mysql'
DATABASE_NAME='${PROJECT}'
DATABASE_USER='${USER}'
DATABASE_PASSWORD='${DB_PASS}'
TIME_ZONE = 'America/Chicago'
# Make this unique, and don't share it with anybody.
SECRET_KEY = '${SECRET_KEY}'
TEMPLATE_DIRS = (
os.path.join (os.getcwd(), 'templates'),
'$LIB_DIR/$PROJECT/templates',
)
MEDIA_ROOT = '$LIB_DIR/$PROJECT/media/'
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.cache.CacheMiddleware',
'django.middleware.doc.XViewMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'django.contrib.markup',
'template_utils',
'django.contrib.flatpages',
)
ADMIN_MEDIA_PREFIX = '/admin_media/'
EOF
echo "make dispatch.fcgi executable"
chmod +x $HOME_DIR/sites/$SITE/public/dispatch.fcgi
echo "settings has a pw in it, so only allow read from owner."
echo "chmod 400 $LIB_DIR/$PROJECT/local_settings.py"
chmod 400 $LIB_DIR/$PROJECT/local_settings.py
echo "Configure django apps by hand ..."
echo "$LIB_DIR/$PROJECT/local_settings.py"
# Hardening app
cd $HOME_DIR && \
find . -name \*.py -type f -exec chmod -w {} \;
find . -type d -exec chmod -w {} \;
}
cleanup_perms () {
# Make sure everything in user dir is owned by user
echo "Finalizing some permissions ..."
echo "chown -R $USER $HOME_DIR"
chown -R $USER:$USER $HOME_DIR
echo "chmod +w $HOME_DIR"
chmod +w $HOME_DIR
# Chown logs dir as root
echo "chown root $HOME_DIR/sites/$SITE/logs"
chown root $HOME_DIR/sites/$SITE/logs
echo "chmod +w $HOME_DIR/sites/$SITE/logs"
chmod +w $HOME_DIR/sites/$SITE/logs
}
bootstrap_user
create_database
#setup_django
#setup_trac
cleanup_perms
Revision: 5916
Updated Code
at May 21, 2008 11:32 by mandric
Updated Code
#!/bin/bash
# Create a django skeleton.
# Dir structure looks like:
#~example/
# bin
# sites
# example.com
# |-- lib
# | `-- example
# | |-- media
# | `-- templates
# |-- logs
# |-- public
# | |-- admin_media -> /path/to/django/contrib/admin/media
# | `-- media -> /home/example/sites/example.com/lib/example/media
# |-- static
# |-- trac
# |-- uploads
if [ -z $1 ] ; then
echo 'Please specify a username.'
exit
fi
if [ -z $2 ] ; then
echo 'Please specify a domain name.'
exit
fi
USER=$1
PROJECT=$USER
SITE=$2
USER_PASS=`makepasswd --chars=25`
DB_PASS=`makepasswd --chars=25`
SECRET_KEY=`makepasswd --chars=128`
HOME_DIR=/home/$USER
LIB_DIR=$HOME_DIR/sites/$SITE/lib
echo "rand user pass: $USER_PASS"
echo "rand db pass: $DB_PASS"
echo "Creating $USER"
# add unix user
adduser $USER --force-badname
mkdir $HOME_DIR/sites/$SITE -p
mkdir $LIB_DIR
mkdir $HOME_DIR/sites/$SITE/logs
mkdir $HOME_DIR/sites/$SITE/public
mkdir $HOME_DIR/sites/$SITE/static
mkdir $HOME_DIR/sites/$SITE/uploads
mkdir $HOME_DIR/bin
# Build django project
cd $LIB_DIR && \
/usr/bin/django-admin.py startproject $PROJECT && \
cd $PROJECT && \
mkdir media && \
mkdir templates
# Create database
echo "enter mysql root pass"
mysql -u root -p << EOF
create database $PROJECT;
GRANT ALL ON ${PROJECT}.* TO '${USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
flush privileges;
EOF
# Link in media dirs
cd $HOME_DIR/sites/$SITE/public
ln -s /usr/lib/python2.4/site-packages/django/contrib/admin/media admin_media
ln -s $LIB_DIR/$PROJECT/media .
# Setup Trac
mkdir -p $HOME_DIR/sites/$SITE/trac/env
mkdir $HOME_DIR/sites/$SITE/trac/repos
trac-admin $HOME_DIR/sites/$SITE/trac/env initenv
svnadmin create $HOME_DIR/sites/$SITE/trac/repos/
cat >>$HOME_DIR/sites/$SITE/public/trac.fcgi <<EOF
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2003-2004 Edgewall Software
# Copyright (C) 2003-2004 Jonas Borgström <[email protected]>
# All rights reserved.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at http://trac.edgewall.org/wiki/TracLicense.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
# history and logs, available at http://trac.edgewall.org/log/.
#
# Author: Jonas Borgström <[email protected]>
# for andric.us
import os
os.environ['TRAC_ENV'] = '${HOME_DIR}/sites/${SITE}/trac/env'
try:
from trac.web import fcgi_frontend
fcgi_frontend.run()
except SystemExit:
raise
except Exception, e:
print 'Content-Type: text/plain
',
print 'Oops...'
print
print 'Trac detected an internal error:'
print
print e
print
import traceback
import StringIO
tb = StringIO.StringIO()
traceback.print_exc(file=tb)
print tb.getvalue()
EOF
# Copy .htaccess and dispatch.fcgi into public dir
cat >>$HOME_DIR/sites/$SITE/public/dispatch.fcgi <<EOF
#!/usr/bin/python
import sys, os
USERNAME = '$USER'
SITE = '$SITE'
PROJECT = '$USER'
# Add a custom Python path.
sys.path.insert(0, "/home/%s/sites/%s/lib" % (USERNAME,SITE) )
# Switch to the directory of your project.
#os.chdir("/home/%s/dev/" % (USERNAME,) )
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % PROJECT
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
EOF
# Add .htaccess
cat >>$HOME_DIR/sites/$SITE/public/.htaccess <<EOF
RewriteEngine On
RewriteBase /
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(admin_media/.*)$ - [L]
# rewrite trac/ requests so they get served by trac.fcgi
RewriteRule ^(trac\.fcgi/.*)$ - [L]
RewriteRule ^trac/(.*)$ trac.fcgi/\$1 [L]
# rewrite everything else to disptach.fcgi
RewriteRule ^(dispatch\.fcgi/.*)$ - [L]
RewriteRule ^(.*)$ dispatch.fcgi/\$1 [QSA,L]
EOF
# Add local override trick to settings.py
cat >> $LIB_DIR/$PROJECT/settings.py <<EOF
# allow local settings to override
try:
from local_settings import *
except ImportError, exp:
pass
EOF
echo "Adding overrides to local_settings.py"
cat >> $LIB_DIR/$PROJECT/local_settings.py <<EOF
import os
DATABASE_ENGINE='mysql'
DATABASE_NAME='${PROJECT}'
DATABASE_USER='${USER}'
DATABASE_PASSWORD='${DB_PASS}'
TIME_ZONE = 'America/Chicago'
# Make this unique, and don't share it with anybody.
SECRET_KEY = '${SECRET_KEY}'
TEMPLATE_DIRS = (
os.path.join (os.getcwd(), 'templates'),
'$LIB_DIR/$PROJECT/templates',
)
MEDIA_ROOT = '$LIB_DIR/$PROJECT/media/'
EOF
# Make sure everything in user dir is owned by user
echo "Finalizing some permissions ..."
echo "chown -R $USER $HOME_DIR"
chown -R $USER:$USER $HOME_DIR
echo "chmod +w $HOME_DIR"
chmod +w $HOME_DIR
echo "make dispatch.fcgi executable"
chmod +x $HOME_DIR/sites/$SITE/public/dispatch.fcgi
# Chown logs dir as root
echo "chown root $HOME_DIR/sites/$SITE/logs"
chown root $HOME_DIR/sites/$SITE/logs
echo "settings has a pw in it, so only allow read from owner."
echo "chmod 400 $LIB_DIR/$PROJECT/local_settings.py"
chmod 400 $LIB_DIR/$PROJECT/local_settings.py
echo "Configure django apps by hand ..."
echo "$LIB_DIR/$PROJECT/local_settings.py"
# Hardening, make
cd $HOME_DIR && \
find . -name \*.py -type f -exec chmod -w {} \;
find . -type d -exec chmod -w {} \;
echo "chmod +w $HOME_DIR/sites/$SITE/logs"
chmod +w $HOME_DIR/sites/$SITE/logs
Revision: 5915
Updated Code
at May 20, 2008 23:58 by mandric
Updated Code
#!/bin/bash
# Create a django skeleton.
# Dir structure looks like:
#~example
# bin
# sites
# example.com
# |-- lib
# | `-- example
# | |-- media
# | `-- templates
# |-- logs
# |-- public
# | |-- admin_media -> /path/to/django/contrib/admin/media
# | `-- media -> /home/example/sites/example.com/lib/<proj>/media
# |-- static
# |-- trac
# |-- uploads
if [ -z $1 ] ; then
echo 'Please specify a username.'
exit
fi
if [ -z $2 ] ; then
echo 'Please specify a domain name.'
exit
fi
USER=$1
PROJECT=$USER
SITE=$2
USER_PASS=`makepasswd --chars=25`
DB_PASS=`makepasswd --chars=25`
SECRET_KEY=`makepasswd --chars=128`
HOME_DIR=/home/$USER
LIB_DIR=$HOME_DIR/sites/$SITE/lib
echo "rand user pass: $USER_PASS"
echo "rand db pass: $DB_PASS"
echo "Creating $USER"
# add unix user
adduser $USER --force-badname
mkdir $HOME_DIR/sites/$SITE -p
mkdir $LIB_DIR
mkdir $HOME_DIR/sites/$SITE/logs
mkdir $HOME_DIR/sites/$SITE/public
mkdir $HOME_DIR/sites/$SITE/static
mkdir $HOME_DIR/sites/$SITE/uploads
mkdir $HOME_DIR/bin
# Build django project
cd $LIB_DIR && \
/usr/bin/django-admin.py startproject $PROJECT && \
cd $PROJECT && \
mkdir media && \
mkdir templates
# Create database
echo "enter mysql root pass"
mysql -u root -p << EOF
create database $PROJECT;
GRANT ALL ON ${PROJECT}.* TO '${USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
flush privileges;
EOF
# Link in media dirs
cd $HOME_DIR/sites/$SITE/public
ln -s /usr/lib/python2.4/site-packages/django/contrib/admin/media admin_media
ln -s $LIB_DIR/$PROJECT/media .
# Setup Trac
mkdir -p $HOME_DIR/sites/$SITE/trac/env
mkdir $HOME_DIR/sites/$SITE/trac/repos
trac-admin $HOME_DIR/sites/$SITE/trac/env initenv
svnadmin create $HOME_DIR/sites/$SITE/trac/repos/
# Hardening, make
cd $HOME_DIR
find . -name \*.py -type f -exec chmod -w {} \;
find . -type d -exec chmod -w {} \;
cat >>$HOME_DIR/sites/$SITE/public/trac.fcgi <<EOF
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2003-2004 Edgewall Software
# Copyright (C) 2003-2004 Jonas Borgstr�¶m <[email protected]>
# All rights reserved.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at http://trac.edgewall.org/wiki/TracLicense.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
# history and logs, available at http://trac.edgewall.org/log/.
#
# Author: Jonas Borgstr�¶m <[email protected]>
# for andric.us
import os
os.environ['TRAC_ENV'] = '${HOME_DIR}/sites/${SITE}/trac/env'
try:
from trac.web import fcgi_frontend
fcgi_frontend.run()
except SystemExit:
raise
except Exception, e:
print 'Content-Type: text/plain
',
print 'Oops...'
print
print 'Trac detected an internal error:'
print
print e
print
import traceback
import StringIO
tb = StringIO.StringIO()
traceback.print_exc(file=tb)
print tb.getvalue()
EOF
# Copy .htaccess and dispatch.fcgi into public dir
cat >>$HOME_DIR/sites/$SITE/public/dispatch.fcgi <<EOF
#!/usr/bin/python
import sys, os
USERNAME = '$USER'
SITE = '$SITE'
PROJECT = '$USER'
# Add a custom Python path.
sys.path.insert(0, "/home/%s/sites/%s/lib" % (USERNAME,SITE) )
# Switch to the directory of your project.
#os.chdir("/home/%s/dev/" % (USERNAME,) )
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % PROJECT
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
EOF
# Add .htaccess
cat >>$HOME_DIR/sites/$SITE/public/.htaccess <<EOF
RewriteEngine On
RewriteBase /
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(admin_media/.*)$ - [L]
# rewrite trac/ requests so they get served by trac.fcgi
RewriteRule ^(trac\.fcgi/.*)$ - [L]
RewriteRule ^trac/(.*)$ trac.fcgi/$1 [L]
# rewrite everything else to disptach.fcgi
RewriteRule ^(dispatch\.fcgi/.*)$ - [L]
RewriteRule ^(.*)$ dispatch.fcgi/$1 [QSA,L]
EOF
# Add local override trick to settings.py
cat >> $LIB_DIR/$PROJECT/settings.py <<EOF
# allow local settings to override
try:
from local_settings import *
except ImportError, exp:
pass
EOF
echo "Adding overrides to local_settings.py"
cat >> $LIB_DIR/$PROJECT/local_settings.py <<EOF
import os
DATABASE_ENGINE='mysql'
DATABASE_NAME='${PROJECT}'
DATABASE_USER='${USER}'
DATABASE_PASSWORD='${DB_PASS}'
TIME_ZONE = 'America/Chicago'
# Make this unique, and don't share it with anybody.
SECRET_KEY = '${SECRET_KEY}'
TEMPLATE_DIRS = (
os.path.join (os.getcwd(), 'templates'),
'$LIB_DIR/$PROJECT/templates',
)
MEDIA_ROOT = '$LIB_DIR/$PROJECT/media/'
EOF
# Make sure everything in user dir is owned by user
echo "Finalizing some permissions ..."
echo "chown -R $USER $HOME_DIR"
chown -R $USER:$USER $HOME_DIR
echo "chmod +w $HOME_DIR"
chmod +w $HOME_DIR
echo "make dispatch.fcgi executable"
chmod +x $HOME_DIR/sites/$SITE/public/dispatch.fcgi
# Chown logs dir as root
echo "chown root $HOME_DIR/sites/$SITE/logs"
chown root $HOME_DIR/sites/$SITE/logs
echo "settings has a pw in it, so only allow read from owner."
echo "chmod 400 $LIB_DIR/$PROJECT/local_settings.py"
chmod 400 $LIB_DIR/$PROJECT/local_settings.py
echo "Configure django apps by hand ..."
echo "$LIB_DIR/$PROJECT/local_settings.py"
Revision: 5914
Updated Code
at May 20, 2008 23:56 by mandric
Updated Code
#!/bin/bash
# Create a django skeleton.
# Dir structure looks like:
#~example
# bin
# sites
# example.com
# |-- lib
# | `-- example
# | |-- media
# | `-- templates
# |-- logs
# |-- public
# | |-- admin_media -> /usr/lib/python2.4/site-packages/django/contrib/admin/media
# | `-- media -> /home/example/sites/example.com/lib/<proj>/media
# |-- static
# |-- trac
# |-- uploads
if [ -z $1 ] ; then
echo 'Please specify a username.'
exit
fi
if [ -z $2 ] ; then
echo 'Please specify a domain name.'
exit
fi
USER=$1
PROJECT=$USER
SITE=$2
USER_PASS=`makepasswd --chars=25`
DB_PASS=`makepasswd --chars=25`
SECRET_KEY=`makepasswd --chars=128`
HOME_DIR=/home/$USER
LIB_DIR=$HOME_DIR/sites/$SITE/lib
echo "rand user pass: $USER_PASS"
echo "rand db pass: $DB_PASS"
echo "Creating $USER"
# add unix user
adduser $USER --force-badname
mkdir $HOME_DIR/sites/$SITE -p
mkdir $LIB_DIR
mkdir $HOME_DIR/sites/$SITE/logs
mkdir $HOME_DIR/sites/$SITE/public
mkdir $HOME_DIR/sites/$SITE/static
mkdir $HOME_DIR/sites/$SITE/uploads
mkdir $HOME_DIR/bin
# Build django project
cd $LIB_DIR && \
/usr/bin/django-admin.py startproject $PROJECT && \
cd $PROJECT && \
mkdir media && \
mkdir templates
# Create database
echo "enter mysql root pass"
mysql -u root -p << EOF
create database $PROJECT;
GRANT ALL ON ${PROJECT}.* TO '${USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
flush privileges;
EOF
# Link in media dirs
cd $HOME_DIR/sites/$SITE/public
ln -s /usr/lib/python2.4/site-packages/django/contrib/admin/media admin_media
ln -s $LIB_DIR/$PROJECT/media .
# Setup Trac
mkdir -p $HOME_DIR/sites/$SITE/trac/env
mkdir $HOME_DIR/sites/$SITE/trac/repos
trac-admin $HOME_DIR/sites/$SITE/trac/env initenv
svnadmin create $HOME_DIR/sites/$SITE/trac/repos/
# Hardening, make
cd $HOME_DIR
find . -name \*.py -type f -exec chmod -w {} \;
find . -type d -exec chmod -w {} \;
cat >>$HOME_DIR/sites/$SITE/public/trac.fcgi <<EOF
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2003-2004 Edgewall Software
# Copyright (C) 2003-2004 Jonas Borgström <[email protected]>
# All rights reserved.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at http://trac.edgewall.org/wiki/TracLicense.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
# history and logs, available at http://trac.edgewall.org/log/.
#
# Author: Jonas Borgström <[email protected]>
# for andric.us
import os
os.environ['TRAC_ENV'] = '${HOME_DIR}/sites/${SITE}/trac/env'
try:
from trac.web import fcgi_frontend
fcgi_frontend.run()
except SystemExit:
raise
except Exception, e:
print 'Content-Type: text/plain
',
print 'Oops...'
print
print 'Trac detected an internal error:'
print
print e
print
import traceback
import StringIO
tb = StringIO.StringIO()
traceback.print_exc(file=tb)
print tb.getvalue()
EOF
# Copy .htaccess and dispatch.fcgi into public dir
cat >>$HOME_DIR/sites/$SITE/public/dispatch.fcgi <<EOF
#!/usr/bin/python
import sys, os
USERNAME = '$USER'
SITE = '$SITE'
PROJECT = '$USER'
# Add a custom Python path.
sys.path.insert(0, "/home/%s/sites/%s/lib" % (USERNAME,SITE) )
# Switch to the directory of your project.
#os.chdir("/home/%s/dev/" % (USERNAME,) )
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % PROJECT
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
EOF
# Add .htaccess
cat >>$HOME_DIR/sites/$SITE/public/.htaccess <<EOF
RewriteEngine On
RewriteBase /
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(admin_media/.*)$ - [L]
# rewrite trac/ requests so they get served by trac.fcgi
RewriteRule ^(trac\.fcgi/.*)$ - [L]
RewriteRule ^trac/(.*)$ trac.fcgi/$1 [L]
# rewrite everything else to disptach.fcgi
RewriteRule ^(dispatch\.fcgi/.*)$ - [L]
RewriteRule ^(.*)$ dispatch.fcgi/$1 [QSA,L]
EOF
# Add local override trick to settings.py
cat >> $LIB_DIR/$PROJECT/settings.py <<EOF
# allow local settings to override
try:
from local_settings import *
except ImportError, exp:
pass
EOF
echo "Adding overrides to local_settings.py"
cat >> $LIB_DIR/$PROJECT/local_settings.py <<EOF
import os
DATABASE_ENGINE='mysql'
DATABASE_NAME='${PROJECT}'
DATABASE_USER='${USER}'
DATABASE_PASSWORD='${DB_PASS}'
TIME_ZONE = 'America/Chicago'
# Make this unique, and don't share it with anybody.
SECRET_KEY = '${SECRET_KEY}'
TEMPLATE_DIRS = (
os.path.join (os.getcwd(), 'templates'),
'$LIB_DIR/$PROJECT/templates',
)
MEDIA_ROOT = '$LIB_DIR/$PROJECT/media/'
EOF
# Make sure everything in user dir is owned by user
echo "Finalizing some permissions ..."
echo "chown -R $USER $HOME_DIR"
chown -R $USER:$USER $HOME_DIR
echo "chmod +w $HOME_DIR"
chmod +w $HOME_DIR
echo "make dispatch.fcgi executable"
chmod +x $HOME_DIR/sites/$SITE/public/dispatch.fcgi
# Chown logs dir as root
echo "chown root $HOME_DIR/sites/$SITE/logs"
chown root $HOME_DIR/sites/$SITE/logs
echo "settings has a pw in it, so only allow read from owner."
echo "chmod 400 $LIB_DIR/$PROJECT/local_settings.py"
chmod 400 $LIB_DIR/$PROJECT/local_settings.py
echo "Configure django apps by hand ..."
echo "$LIB_DIR/$PROJECT/local_settings.py"
Revision: 5913
Updated Code
at May 20, 2008 23:52 by mandric
Updated Code
#!/bin/bash
# Create a django skeleton.
# Dir structure looks like:
# bin
# sites
# example.com
# |-- lib
# | `-- example
# | |-- media
# | `-- templates
# |-- logs
# |-- public
# | |-- admin_media -> /usr/lib/python2.4/site-packages/django/contrib/admin/media
# | `-- media -> /home/example/sites/example.com/lib/mm401k/media
# |-- static
# |-- trac
# |-- uploads
if [ -z $1 ] ; then
echo 'Please specify a username.'
exit
fi
if [ -z $2 ] ; then
echo 'Please specify a domain name.'
exit
fi
USER=$1
PROJECT=$USER
SITE=$2
USER_PASS=`makepasswd --chars=25`
DB_PASS=`makepasswd --chars=25`
SECRET_KEY=`makepasswd --chars=128`
HOME_DIR=/home/$USER
LIB_DIR=$HOME_DIR/sites/$SITE/lib
echo "rand user pass: $USER_PASS"
echo "rand db pass: $DB_PASS"
echo "Creating $USER"
# add unix user
adduser $USER --force-badname
mkdir $HOME_DIR/sites/$SITE -p
mkdir $LIB_DIR
mkdir $HOME_DIR/sites/$SITE/logs
mkdir $HOME_DIR/sites/$SITE/public
mkdir $HOME_DIR/sites/$SITE/static
mkdir $HOME_DIR/sites/$SITE/uploads
mkdir $HOME_DIR/bin
# Build django project
cd $LIB_DIR && \
/usr/bin/django-admin.py startproject $PROJECT && \
cd $PROJECT && \
mkdir media && \
mkdir templates
# Create database
echo "enter mysql root pass"
mysql -u root -p << EOF
create database $PROJECT;
GRANT ALL ON ${PROJECT}.* TO '${USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
flush privileges;
EOF
# Link in media dirs
cd $HOME_DIR/sites/$SITE/public
ln -s /usr/lib/python2.4/site-packages/django/contrib/admin/media admin_media
ln -s $LIB_DIR/$PROJECT/media .
# Setup Trac
mkdir -p $HOME_DIR/sites/$SITE/trac/env
mkdir $HOME_DIR/sites/$SITE/trac/repos
trac-admin $HOME_DIR/sites/$SITE/trac/env initenv
svnadmin create $HOME_DIR/sites/$SITE/trac/repos/
# Hardening, make
cd $HOME_DIR
find . -name \*.py -type f -exec chmod -w {} \;
find . -type d -exec chmod -w {} \;
cat >>$HOME_DIR/sites/$SITE/public/trac.fcgi <<EOF
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2003-2004 Edgewall Software
# Copyright (C) 2003-2004 Jonas Borgström <[email protected]>
# All rights reserved.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at http://trac.edgewall.org/wiki/TracLicense.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
# history and logs, available at http://trac.edgewall.org/log/.
#
# Author: Jonas Borgström <[email protected]>
# for andric.us
import os
os.environ['TRAC_ENV'] = '${HOME_DIR}/sites/${SITE}/trac/env'
try:
from trac.web import fcgi_frontend
fcgi_frontend.run()
except SystemExit:
raise
except Exception, e:
print 'Content-Type: text/plain
',
print 'Oops...'
print
print 'Trac detected an internal error:'
print
print e
print
import traceback
import StringIO
tb = StringIO.StringIO()
traceback.print_exc(file=tb)
print tb.getvalue()
EOF
# Copy .htaccess and dispatch.fcgi into public dir
cat >>$HOME_DIR/sites/$SITE/public/dispatch.fcgi <<EOF
#!/usr/bin/python
import sys, os
USERNAME = '$USER'
SITE = '$SITE'
PROJECT = '$USER'
# Add a custom Python path.
sys.path.insert(0, "/home/%s/sites/%s/lib" % (USERNAME,SITE) )
# Switch to the directory of your project.
#os.chdir("/home/%s/dev/" % (USERNAME,) )
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % PROJECT
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
EOF
# Add .htaccess
cat >>$HOME_DIR/sites/$SITE/public/.htaccess <<EOF
RewriteEngine On
RewriteBase /
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(admin_media/.*)$ - [L]
# rewrite trac/ requests so they get served by trac.fcgi
RewriteRule ^(trac\.fcgi/.*)$ - [L]
RewriteRule ^trac/(.*)$ trac.fcgi/$1 [L]
# rewrite everything else to disptach.fcgi
RewriteRule ^(dispatch\.fcgi/.*)$ - [L]
RewriteRule ^(.*)$ dispatch.fcgi/$1 [QSA,L]
EOF
# Add local override trick to settings.py
cat >> $LIB_DIR/$PROJECT/settings.py <<EOF
# allow local settings to override
try:
from local_settings import *
except ImportError, exp:
pass
EOF
echo "Adding overrides to local_settings.py"
cat >> $LIB_DIR/$PROJECT/local_settings.py <<EOF
import os
DATABASE_ENGINE='mysql'
DATABASE_NAME='${PROJECT}'
DATABASE_USER='${USER}'
DATABASE_PASSWORD='${DB_PASS}'
TIME_ZONE = 'America/Chicago'
# Make this unique, and don't share it with anybody.
SECRET_KEY = '${SECRET_KEY}'
TEMPLATE_DIRS = (
os.path.join (os.getcwd(), 'templates'),
'$LIB_DIR/$PROJECT/templates',
)
MEDIA_ROOT = '$LIB_DIR/$PROJECT/media/'
EOF
# Make sure everything in user dir is owned by user
echo "Finalizing some permissions ..."
echo "chown -R $USER $HOME_DIR"
chown -R $USER:$USER $HOME_DIR
echo "chmod +w $HOME_DIR"
chmod +w $HOME_DIR
echo "make dispatch.fcgi executable"
chmod +x $HOME_DIR/sites/$SITE/public/dispatch.fcgi
# Chown logs dir as root
echo "chown root $HOME_DIR/sites/$SITE/logs"
chown root $HOME_DIR/sites/$SITE/logs
echo "settings has a pw in it, so only allow read from owner."
echo "chmod 400 $LIB_DIR/$PROJECT/local_settings.py"
chmod 400 $LIB_DIR/$PROJECT/local_settings.py
echo "Configure django apps by hand ..."
echo "$LIB_DIR/$PROJECT/local_settings.py"
Revision: 5912
Updated Code
at April 11, 2008 12:22 by mandric
Updated Code
#!/bin/bash
# Create a django skeleton on my debian box.
if [ -z $1 ] ; then
echo 'Please specify a username.'
exit
fi
if [ -z $2 ] ; then
echo 'Please specify a domain name.'
exit
USER=$1
PROJECT=$USER
SITE=$2
USER_PASS=`makepasswd --chars=25`
DB_PASS=`makepasswd --chars=25`
HOME_DIR=/home/$USER
LIB_DIR=$HOME_DIR/sites/$SITE/lib
DJANGO_DIR=/usr/lib/python2.4/site-packages/django
echo "Creating $USER"
# add unix user, allowing numbers in the username.
adduser $USER --force-badname
mkdir $HOME_DIR/sites/$SITE -p
mkdir $LIB_DIR
mkdir $HOME_DIR/sites/$SITE/logs
mkdir $HOME_DIR/sites/$SITE/public
mkdir $HOME_DIR/sites/$SITE/static
mkdir $HOME_DIR/sites/$SITE/uploads
mkdir $HOME_DIR/bin
# Build django project
cd $LIB_DIR && \
$DJANGO_DIR/bin/django-admin.py startproject $PROJECT && \
cd $PROJECT && \
mkdir media && \
mkdir templates
# Create database
mysql -u root -p << EOF
create database $PROJECT;
GRANT ALL ON ${PROJECT}.* TO '${USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
flush privileges;
exit;
EOF
# Link in media dirs
cd $HOME_DIR/sites/$SITE/public
ln -s $DJANGO_DIR/contrib/admin/media admin_media
ln -s $HOME_DIR/sites/$SITE/$PROJECT/media .
# Setup Trac
mkdir -p $HOME_DIR/sites/$SITE/trac/env
mkdir $HOME_DIR/sites/$SITE/trac/repos
trac-admin $HOME_DIR/sites/$SITE/trac/env initenv
svnadmin create $HOME_DIR/sites/$SITE/trac/repos/
# Hardening a bit
cd $HOME_DIR
find . -name \*.py -type f -exec chmod -w {} \;
find . -type d -exec chmod -w {} \;
# Copy .htaccess and dispatch.fcgi into public dir
cat >>$HOME_DIR/sites/$SITE/public/dispatch.fcgi <<EOF
#!/usr/bin/python
import sys, os
USERNAME = '$USER'
SITE = '$SITE'
PROJECT = '$USER'
# Add a custom Python path.
sys.path.insert(0, "/home/%s/sites/%s/lib" % (USERNAME,SITE) )
# Switch to the directory of your project.
#os.chdir("/home/%s/dev/" % (USERNAME,) )
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % PROJECT
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
EOF
# Add .htaccess
cat >>$HOME_DIR/sites/$SITE/public/.htaccess <<EOF
RewriteEngine On
RewriteBase /
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(admin_media/.*)$ - [L]
# rewrite trac/ requests so they get served by trac.fcgi
RewriteRule ^(trac\.fcgi/.*)$ - [L]
RewriteRule ^trac/(.*)$ trac.fcgi/$1 [L]
# rewrite everything else to disptach.fcgi
RewriteRule ^(dispatch\.fcgi/.*)$ - [L]
RewriteRule ^(.*)$ dispatch.fcgi/$1 [QSA,L]
EOF
# Make sure everything in user dir is owned by user
echo "Finalizing some permissions ..."
echo "chown -R $USER $HOME_DIR"
chown -R $USER $HOME_DIR
echo "chmod +w $HOME_DIR"
chmod +w $HOME_DIR
# Chown logs dir as root
echo "chown root $HOME_DIR/sites/$SITE/logs"
chown root $HOME_DIR/sites/$SITE/logs
# Configure the rest by hand ...
echo "DATABASE_USER='$USER'" >> $LIB_DIR/$PROJECT/settings.py
echo "DATABASE_PASSWORD='$DB_PASS'" >> $LIB_DIR/$PROJECT/settings.py
echo "Configure $LIB_DIR/$PROJECT/settings.py"
echo "Configure Apache"
Revision: 5911
Updated Code
at April 11, 2008 12:21 by mandric
Updated Code
#!/bin/bash
# Create a django skeleton on my debian box.
if [ -z $1 ] ; then
echo 'Please specify a username.'
exit
fi
if [ -z $2 ] ; then
echo 'Please specify a domain name.'
exit
USER=$1
PROJECT=$USER
SITE=$2
USER_PASS=`makepasswd --chars=25`
DB_PASS=`makepasswd --chars=25`
HOME_DIR=/home/$USER
LIB_DIR=$HOME_DIR/sites/$SITE/lib
DJANGO_DIR=/usr/lib/python2.4/site-packages/django
echo "Creating $USER"
# add unix user, allowing numbers in the username.
adduser $USER --force-badname
mkdir $HOME_DIR/sites/$SITE -p
mkdir $LIB_DIR
mkdir $HOME_DIR/sites/$SITE/logs
mkdir $HOME_DIR/sites/$SITE/public
mkdir $HOME_DIR/sites/$SITE/static
mkdir $HOME_DIR/sites/$SITE/uploads
mkdir $HOME_DIR/bin
# Build django project
cd $LIB_DIR && \
$DJANGO_DIR/bin/django-admin.py startproject $PROJECT && \
cd $PROJECT && \
mkdir media && \
mkdir templates
# Create database
mysql -u root -p << EOF
create database $PROJECT;
GRANT ALL ON ${PROJECT}.* TO '${USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
flush privileges;
exit;
EOF
# Link in media dirs
cd $HOME_DIR/sites/$SITE/public
ln -s $DJANGO_DIR/contrib/admin/media admin_media
ln -s $HOME_DIR/sites/$SITE/$PROJECT/media .
# Setup Trac
mkdir -p $HOME_DIR/sites/$SITE/trac/env
mkdir $HOME_DIR/sites/$SITE/trac/repos
trac-admin $HOME_DIR/sites/$SITE/trac/env initenv
svnadmin create $HOME_DIR/sites/$SITE/trac/repos/
# Hardening a bit
cd $HOME_DIR
find . -name \*.py -type f -exec chmod -w {} \;
find . -type d -exec chmod -w {} \;
# Copy .htaccess and dispatch.fcgi into public dir
cat >>$HOME_DIR/sites/$SITE/public/dispatch.fcgi <<EOF
#!/usr/bin/python
import sys, os
USERNAME = '$USER'
SITE = '$SITE'
PROJECT = '$USER'
# Add a custom Python path.
sys.path.insert(0, "/home/%s/sites/%s/lib" % (USERNAME,SITE) )
# Switch to the directory of your project.
#os.chdir("/home/%s/dev/" % (USERNAME,) )
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % PROJECT
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
EOF
# Add .htaccess
cat >>$HOME_DIR/sites/$SITE/public/.htaccess <<EOF
RewriteEngine On
RewriteBase /
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(admin_media/.*)$ - [L]
# rewrite trac/ requests so they get served by trac.fcgi
RewriteRule ^(trac\.fcgi/.*)$ - [L]
RewriteRule ^trac/(.*)$ trac.fcgi/$1 [L]
# rewrite everything else to disptach.fcgi
RewriteRule ^(dispatch\.fcgi/.*)$ - [L]
RewriteRule ^(.*)$ dispatch.fcgi/$1 [QSA,L]
EOF
# Make sure everything in user dir is owned by user
echo "Finalizing some permissions ..."
echo "chown -R $USER $HOME_DIR"
chown -R $USER $HOME_DIR
echo "chmod +w $HOME_DIR"
chmod +w $HOME_DIR
# Chown logs dir as root
echo "chown root $HOME_DIR/sites/$SITE/logs"
chown root $HOME_DIR/sites/$SITE/logs
# Configure the rest by hand ...
echo "DATABASE_USER='$DB_USER'" >> $LIB_DIR/$PROJECT/settings.py
echo "DATABASE_PASSWORD='$DB_PASS'" >> $LIB_DIR/$PROJECT/settings.py
echo "Configure $LIB_DIR/$PROJECT/settings.py"
echo "Configure Apache"
Revision: 5910
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at April 11, 2008 12:07 by mandric
Initial Code
#!/bin/bash
# Create a django skeleton on my debian box.
if [ -z $1 ] ; then
echo 'Please specify a username.'
exit
fi
if [ -z $2 ] ; then
echo 'Please specify a domain name.'
exit
USER=$1
PROJECT=$USER
SITE=$2
USER_PASS=`makepasswd --chars=25`
DB_PASS=`makepasswd --chars=25`
HOME_DIR=/home/$USER
LIB_DIR=$HOME_DIR/sites/$SITE/lib
DJANGO_DIR=/usr/lib/python2.4/site-packages/django
echo "Creating $USER"
# add unix user, allowing numbers in the username.
adduser $USER --force-badname
mkdir $HOME_DIR/sites/$SITE -p
mkdir $LIB_DIR
mkdir $HOME_DIR/sites/$SITE/logs
mkdir $HOME_DIR/sites/$SITE/public
mkdir $HOME_DIR/sites/$SITE/static
mkdir $HOME_DIR/sites/$SITE/uploads
mkdir $HOME_DIR/bin
# Build django project
cd $LIB_DIR && \
$DJANGO_DIR/bin/django-admin.py startproject $PROJECT && \
cd $PROJECT && \
mkdir media && \
mkdir templates
# Create database
mysql -u root -p << EOF
create database $PROJECT;
GRANT ALL ON ${PROJECT}.* TO '${USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
flush privileges;
exit;
EOF
# Link in media dirs
cd $HOME_DIR/sites/$SITE/public
ln -s $DJANGO_DIR/contrib/admin/media admin_media
ln -s $HOME_DIR/sites/$SITE/$PROJECT/media .
# Setup Trac
mkdir -p $HOME_DIR/sites/$SITE/trac/env
mkdir $HOME_DIR/sites/$SITE/trac/repos
trac-admin $HOME_DIR/sites/$SITE/trac/env initenv
svnadmin create $HOME_DIR/sites/$SITE/trac/repos/
# Hardening a bit
cd $HOME_DIR
find . -name \*.py -type f -exec chmod -w {} \;
find . -type d -exec chmod -w {} \;
# Copy .htaccess and dispatch.fcgi into public dir
cat >>$HOME_DIR/sites/$SITE/public/dispatch.fcgi <<EOF
#!/usr/bin/python
import sys, os
USERNAME = '$USER'
SITE = '$SITE'
PROJECT = '$USER'
# Add a custom Python path.
sys.path.insert(0, "/home/%s/sites/%s/lib" % (USERNAME,SITE) )
# Switch to the directory of your project.
#os.chdir("/home/%s/dev/" % (USERNAME,) )
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % PROJECT
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
EOF
# Add .htaccess
cat >>$HOME_DIR/sites/$SITE/public/.htaccess <<EOF
RewriteEngine On
RewriteBase /
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(admin_media/.*)$ - [L]
# rewrite trac/ requests so they get served by trac.fcgi
RewriteRule ^(trac\.fcgi/.*)$ - [L]
RewriteRule ^trac/(.*)$ trac.fcgi/$1 [L]
# rewrite everything else to disptach.fcgi
RewriteRule ^(dispatch\.fcgi/.*)$ - [L]
RewriteRule ^(.*)$ dispatch.fcgi/$1 [QSA,L]
EOF
# Make sure everything in user dir is owned by user
echo "Finalizing some permissions ..."
echo "chown -R $USER $HOME_DIR"
chown -R $USER $HOME_DIR
echo "chmod +w $HOME_DIR"
chmod +w $HOME_DIR
# Chown logs dir as root
echo "chown root $HOME_DIR/sites/$SITE/logs"
chown root $HOME_DIR/sites/$SITE/logs
# Configure django apps by hand ...
echo "Configure $LIB_DIR/$PROJECT/settings.py"
Initial URL
Initial Description
This is meant to be run as root, so do it at your own risk. It's very raw and needs error checking, but works. I run this script to get new django sites off the ground in a few minutes.
Initial Title
Bootstrap a Django setup
Initial Tags
Bash, script, unix, linux, django
Initial Language
Bash