Simple project database to collect information about aid projects in Liberia and publish it in IATI format (both v1.03 and v2.01). View it at https://liberiaprojects.org
Requires Python v3
Copyright (c) 2016-2021 Mark Brough, Overseas Development Institute
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
The landing page of the Liberia Project Dashboard contains a map of project locations.
On the front page, there are also simple visualisations of spend over time
Project profiles contain a simple summary of data
Project profiles contain a simple summary of project financial data
Results data is also displayed on the Dashboard, where available.
Data can be exported into Excel and imported again using Excel templates.
NB this section is very out of date and will be updated soon.
projectdashboard/translations
NB this section is very out of date and will be updated soon.
The current software has a few limitations which could be improved upon:
Install required packages, if these are not already installed:
apt-get install python python3-pip python3-dev libxml2-dev libxslt-dev build-essential libssl-dev zlib1g-dev git
Clone the repository:
git clone git@github.com:bsi-liberia/liberia-projects.git
Set up a virtualenv:
virtualenv ./pyenv
Activate the virtualenv:
source ./pyenv/bin/activate
Install the requirements:
pip install -r requirements.txt
Copy and edit the config.py.tmpl:
cp config.py.tmpl config.py
Run database migrations:
flask db upgrade
Run initial setup:
flask setup
Run the development server:
flask run
You can log in using the admin username and password defined in your config.py
Before using the geocoding feature, you need to import locations from Geonames. When logged in as an administrator, you can click on the username in the top right, then "Manage codelists". Click on the "Locations" tab, then choose a country to import.
Switch to the client
directory and install dependencies.
cd client
npm i
Copy and edit as required nuxt configuration:
cp nuxt.config.tmpl.js nuxt.config.js
Run in development mode:
npm run dev
Install Apache and mod_wsgi
:
apt-get install apache2 libapache2-mod-wsgi
Create a .wsgi file. Assuming you used a virtualenv
, you need to provide the path to the virtualenv and then the application. It should look something like this:
import logging, sys
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, '/path-to-liberia-projects/pyenv/lib/python2.7/site-packages')
sys.path.insert(0, '/path-to-liberia-projects')
from wsgi import create_app
application=create_app()
Edit the Apache config file (in /etc/apache2/sites-available/liberiaprojects.conf
) to point to the new .wsgi file. In this example,
<VirtualHost *:80>
#ServerName www.example.com
ServerAdmin webmaster@localhost
WSGIDaemonProcess liberiaprojects user=www-data group=www-data threads=5
WSGIScriptAlias / /var/www/liberiaprojects/liberiaprojects.wsgi
<Directory /var/wwww/liberiaprojects>
WSGIProcessGroup liberiaprojects
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Give the Apache user group www-data
group ownership of the database, and the database's parent folder:
chown :www-data /path-to-liberia-projects/db/merged.db
chown :www-data /path-to-liberia-projects/db/
Enable the new site and restart Apache, e.g. if it's called liberiaprojects.conf
:
a2ensite liberiaprojects
systemctl reload apache2
certbot
to allow for HTTPS