Istruzioni per installare un'istanza di open_municipio sul proprio PC.
L'ambiente di sviluppo deve verificare i requisiti Django.
Per comodità, viene usato il tool virtualenv, che permette l'isolamento dell'ambiente di sviluppo.
Per ulteriore comodità, vengono usati gli script virtualenvwrapper, che permettono di accedere velocemente ai comandi di virtualenv per il setup di environment e la loro gestione.
Una volta installato un gestore di pacchetti python, si può procedere semplicemente con l'installazione di entrambi i pacchetti:
pip install virtualenv
pip install virtualenvwrapper
Creare un virtualenv, usando virtualenv_wrapper
mkvirtualenv open_municipio
Poi, in ~/.virtualenvs/open_municipio/bin/
, modificare postactivate
e postdeactivate
, in modo che dopo l'attivazione dell'environment, la working dir diventi /home/open_municipio
.
Si tratta di script che vengono lanciati dopo l'attivazione del virtualenv (workon open_municipio
) o dopo
la disattivazione. Vengono settate alcune variabili di environment per poter lavorare sul progetto comodamente.
postactivate
#!/bin/bash
# This hook is run after this virtualenv is activated.
cd /home/open_municipio
export OLD_PYTHONPATH=$PYTHONPATH
export PYTHONPATH=/home/open_municipio:$PYTHONPATH
export DJANGO_SETTINGS_MODULE=opm_site.settings
postdeactivate
#!/bin/bash
# This hook is run after this virtualenv is deactivated.
cd ~/
export PYTHONPATH=$OLD_PYTHONPATH
unset OLD_PYTHONPATH
unset DJANGO_SETTINGS_MODULE
Installare, nel virtualenv, i pacchetti software che saranno utilizzati.
pip install django - il web framework
pip install django-extensions - estensioni al framework utili per stare più comodi
pip install django-model-utils - per semplificare la scrittura del modello
pip install south - applicazione django per gestire le migrazioni del DB
# pip install django-piston - per costruire le API REST dal modello (opzionale)
pip install https://bitbucket.org/brodie/django-piston/get/c4e6eb8f7eb5.tar.gz (versione corretta di django-piston)
# pip install piston_mini_client - per costruire il client per le API (deps: httplib2 oauth simplejson)
pip install https://github.com/openpolis/piston_mini_client/tarball/master (versione corretta di piston_mini_client)
pip install docutils - per i doc admin autogenerati
pip install django-tagging - per il tagging di contenuti traminte generic relation
pip install MySQL-python - driver mysql (opzionale)
pip install django-debug-toolbar (opzionale)
pip install simplejson (opzionale per python 2.5)
pip install pyyaml (opzionale per python 2.5)
Dopo la generazione dell'ambiente virtualenv, per accedervi e lavorare:
workon open_municipio
mentre, per terminare la sessione di lavoro:
deactivate
Nel mio caso ho legato al mio account su github delle chiavi pubbliche ssh
delle workstion di lavoro, poi ho configurato il file ~/.gitconfig
con:
[user]
name = Guglielmo Celata
email = guglielmo.celata@gmail.com
[core]
excludesfile = /home/guglielmo/.gitignore
Il file .~/.gitignore
contiene le specifiche dei pattern da ignorare nella sinconizzazione del codice,
per tutti i progetti git (globale)
*.pyc
Il file .gitignore nella directory di lavoro openmunicipio, invece, contiene i pattern da ignorare per questo progetto:
om.db
opm_site/settings.py
uploads/aggiornamenti/*
Per clonare il progetto in /home/open_municipio
:
cd /home/
git clone git@github.com:openpolis/open_municipio.git
open_municipio
|- om
| |- models.py
| |- views.py
| |- admin.py
|- opm_site
| |- templates
| |- settings.py
Il progetto web è in opm_site
, e contiene il frontend. Si basa sull'applicazione om
, che vive di vita propria,
in modo da potere essere usata da progetti diversi (diversi templates, canali, ...).
L'applicazione costituisce il backend, permette la modifica e la verifica dei dati ed espone i dati attraverso una API piston.
Il sito usa l'applicazione attraverso la API o in altri modi da stabilire più avanti.
Il file opm_site/settings.py
contiene i settaggi principali del progetto. Questo file non è presente e deve essere
copiato a partire dall'esempio opm_site/settings_sample.py
.
cp opm_site/settings_sample.py opm_site/settings.py
Poi il file settings.py
deve essere modificato per stabilire i parametri di connessione al DB (se Mysql o Postgres o Sqlite, ...),
le directory per gli uploads o per i files statici, le applicazioni che compongono il progetto, ...
Il DB e le sue tabelle vanno create con
django-admin.py syncdb
Nel caso di un db Mysql o Postgres, bisogna prima creare il DB, nel caso si utilizzi sqlite3, si può lasciar fare a Django.
In questa fase viene richiesto se creare l'utente admin. Rispondere di sì e inserire i parametri richiesti (username, email, password).
Per modificare lo schema del DB in modo agile, evitando la rimozione dei dati già inseriti
(alter invece di drop + create) si può usare south
(http://south.aeracode.org/).
Per creare la prima migrazione e allineare il modello al db:
django-admin.py schemamigration om --initial
Per allineare il db alla situazione corrente:
django-admin.py migrate om
In seguito a una modifica del modello, si può allineare il DB con:
django-admin.py schemamigration om --auto
django-admin.py migrate om
La directory che tiene gli uploads deve essere definita nei settings. Io ho scelto /home/open_municipio/uploads
perché è fuori da qualsiasi directory esposta sul web. A questa cartella devono essere dati i permessi di scrittura per
l'utente web.
La directory contiene una subdirectory allegati, che contiene, raggruppati per giorno (formato yyyymmdd) gli allegati caricati dall'interfaccia di backend (o da script di importazione).
django-admin.py runserver
E, su http://localhost:8000/admin è possibile accedere al backend, usando
username e password inseriti al lancio del comando syncdb
.