[[:[PageOutline]]] DjangoSiteDevelopment ====== Remote Development ====== Remote development refers to development on your own computer, not "tux" the machine serving the OCLUG web site. Developing remotely allows experimentation with the site without broadcasting your changes to everyone. It also allows users without accounts on tux to work on the site. ====== Required Software ====== For remote development of the OCLUG web site you will need the following: * Apache 2.x with mod_wsgi * Python, python-markdown and python-imaging * Subversion * Sqlite (or PostgreSQL or MySQL if you prefer) * [[http://www.djangoproject.com/|Django]] 1.4 ===== Virtualenv/pip packages ===== If you prefer you may use the requirements.txt to install the python requirements into a virtualenv. Setting up a virtualenv is outside the scope of this document. ===== Debian/Ubuntu packages ===== Everything can be installed on recent Debian or Ubuntu systems with this command run as root (or with `sudo`): sudo apt-get install apache2 libapache2-mod-wsgi subversion \ python python-markdown python-imaging python-pysqlite2 \ python-django ===== RedHat packages ===== or on Ret Hat/Fedora systems you will first have to download python-markdown by following the link from http://www.freewisdom.org/projects/python-markdown/ then do the following: cd python-markdown-* python setup.py install yum install httpd mod_wsgi subversion python python-imaging python-sqlite You can verify your installation by running: python -c 'import django; print django.VERSION' It should print something like `(1, 4, 1, 'final', 0)`. ====== Setting up the Working Directory ====== These instructions suggest installing the code in a regular user account's home direcory. Make sure the user account's home directory is accessible by apache by running: ls -ald $HOME If the set of characters printed starting with `drwx` ends with a `-` instead of an `x` then you need to change the default permissions. If you do not want to make your home directory world-traversable you may want to create a separate user account at this time. This command will make the home directory world-traversable: chmod a+x $HOME ====== Downloading the Code and Site data ====== Run these commands starting from your home directory to create an `oclug_site` directory and download the OCLUG site code and data: cd mkdir oclug_site cd oclug_site svn co http://devel.oclug.on.ca/svn/oclug_django_site/trunk oclug_django_site svn co http://devel.oclug.on.ca/svn/site_data/trunk site_data ====== Site Configuration ====== You will need to create a settings file called `local_settings.py` in your `oclug_django_site` directory: cd $HOME/oclug_site/oclug_django_site sed "s/PUT-RANDOM-STUFF-HERE/$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM/; s{USERS-HOME-DIRECTORY{$HOME{;" < local_settings.sample.py > local_settings.py Next set up a database and a writable directory for Apache: sudo mkdir -p /var/local/apache_writable/oclug_uploaded/ sudo cp -r $HOME/oclug_site/site_data/uploaded/* /var/local/apache_writable/oclug_uploaded/ cd $HOME/oclug_site/oclug_django_site sudo python manage.py syncdb # this will let you create an admin account sudo python manage.py loaddata $HOME/oclug_site/site_data/db.xml sudo chown -R www-data: /var/local/apache_writable/ # use "apache" instead of www-data on Red Hat systems The account you created will be used to access the `/admin/` pages on the web site. We also need to create two symlinks to allow Apache to find some of the media files. The first one lets Apache find the uploaded files in the directory writable by Apache, which we created above. The second allows the admin site to be displayed with all its images and formatting: ln -s /var/local/apache_writable/oclug_uploaded/ $HOME/oclug_site/uploaded ln -s `python -c'import django, os; print os.path.dirname(django.__file__)'`/contrib/admin/media/ \ $HOME/oclug_site/admin ====== Apache Configuration ====== General apache configuration is covered in [[https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/|"How to deploy with WSGI"]]. If your apache is configured to use virtual hosts with a `NameVirtualHost *` directive then your configuration for the OCLUG Django site would look something like: WSGIScriptAlias / /home/(MY-USER-NAME)/oclug_site/oclug_django_site/apache/oclug.conf Alias /images/ /home/(MY-USER-NAME)/oclug_site/oclug_django_site/docroot/images/ Alias /media/ /home/(MY-USER-NAME)/oclug_site/oclug_django_site/docroot/media/ Alias favicon.ico /home/(MY-USER-NAME)/oclug_site/oclug_django_site/docroot/favicon.ico The `/images/`, `/media/` and `/favicon.ico` location blocks allow images and files to be served by Apache. All other URLs are handled by the Django site. Restart apache and browse to `http://localhost/` to see if everything worked. You can browse to `http://localhost/admin/` to use the site administration interface with the account created above. ====== Making Changes ====== You can make changes to the files in the `oclug_django_site` directory and restart Apache to test your changes. When you are happy with you change you can post the patch containing your changes to the oclug-www mailing list. To create a patch use this command from the `oclug_django_site` directory: svn diff > my_changes.patch Your patch will be reviewed on the mailing list by the web site maintainers. Changes made through the administration page on the web site exist in your local copy of the database and can't be moved to the OCLUG site as a patch. If you want to suggest that sort of change, just post your request to the oclug-www mailing list. ====== Updating Your Copy ====== You can use `svn update` to update your `oclug_django_site` directory. To update your `site_data` and reset your local copy of the database, use these commands: cd oclug_site/site_data svn update sudo cp -r $HOME/oclug_site/site_data/uploaded/* /var/local/apache_writable/oclug_uploaded/ cd ../oclug_django_site sudo python manage.py loaddata ../site_data/db.xml