1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
*Note: these installation instructions are for the main libravatar.org service, not for mirrors. If you're interested in running a mirror, see <https://wiki.libravatar.org/run_a_mirror/> instead.*
# External dependencies
* Python 2.7
* Django 1.4
* Apache 2 with:
* mod\_alias
* mod\_expires
* mod\_headers
* mod\_rewrite
* [Python DNS 2.3.6](http://pydns.sourceforge.net/)
* jQuery 1.7.2
* [Python Imaging Library](http://www.pythonware.com/library/)
* [YUI Compressor](http://developer.yahoo.com/yui/compressor/), for minifying CSS/JS files
* [Gearman](http://www.gearman.org)
* [Python bcrypt](https://pypi.python.org/pypi/bcrypt)
* [Python Gearman](https://pypi.python.org/pypi/gearman)
* [Python OpenID](https://github.com/openid/python-openid)
* [OpenID Integration for django.contrib.auth](https://launchpad.net/django-openid-auth)
* [Requests](http://python-requests.org/)
* Python LDAP library (if using optional LDAP authenticaion)
* PNG crush
* AdvanceCOMP
* GIFsicle
On Debian unstable or jessie:
apt-get install python-django python-dns libjs-jquery python-imaging libapache2-mod-wsgi python-psycopg2 yui-compressor gearman-job-server gearman-tools python-gearman jpegoptim optipng python-openid python-django-auth-openid python-requests ca-certificates pngcrush advancecomp gifsicle python-bcrypt
apt-get install python-ldap
# Create your database
Create a database user:
sudo -u postgres createuser djangouser
Create a database:
sudo -u postgres createdb -O djangouser libravatar
Create the required tables:
cd /usr/share/libravatar
python manage.py migrate
# Apache Configuration
Start by adding this to your /etc/hosts:
127.0.0.1 www.libravatar.org cdn.libravatar.org seccdn.libravatar.org
Enable mod_alias, mod\_expires, mod\_headers, mod\_rewrite and mod\_wsgi:
a2enmod alias
a2enmod expires
a2enmod headers
a2enmod rewrite
a2enmod wsgi
and put the following in `/etc/apache2/conf-available/ssl.conf`:
SSLStaplingCache shmcb:/var/run/ocsp(128000)
before enabling it:
a2enconf ssl
Create an uploaded/ directory that is writable by the www-data user:
mkdir /var/lib/libravatar/uploaded
sudo chgrp www-data /var/lib/libravatar/uploaded
sudo chmod g+w /var/lib/libravatar/uploaded
as well as ready/ and user/ directories which are not writable by www-data:
mkdir /var/lib/libravatar/ready
mkdir /var/lib/libravatar/user
Similarly, avatar/ and export directories that are only writable by root:
mkdir /var/lib/libravatar/avatar
mkdir /var/lib/libravatar/export
Then copy config/*.conf to /etc/apache2/sites-enabled/, adjust the
path to the cdn-common include file and restart Apache using:
apache2ctl configtest
apache2ctl restart
# Gearman jobs
A few Gearman jobs must be running to fully take care of photo management:
* cropresize: must run under a user that has read access to /uploaded and
write access to /ready
* ready2user: must run under a user with read access to /ready and write
access to /uploaded and /user
* changephoto: must run as root
* deletephoto: must run as root
* resizeavatar: must run as root
* exportaccount: must run as root
There are python scripts under libravatar/ for all of these functions and
workers can be setup like this:
gearman -w -f FUNCTION_NAME libravatar/FUNCTION_NAME.py
# Cron job
You should have a daily cron job which does the following:
* delete old sessions and exports
* delete old uploaded (i.e. non-cropped) files
Have a look in debian/libravatar-www.cron.daily for an example.
# Authenticating with an external LDAP server:
Download and install the [Django LDAP authentication backend](http://packages.python.org/django-auth-ldap/):
apt-get install python-django-auth-ldap
Then uncomment the LDAP backend line in AUTHENTICATION\_BACKENDS in your
settings.py and set your AUTH\_LDAP\_SERVER\_URI and AUTH\_LDAP\_USER\_DN\_TEMPLATE
settings to something appropriate. More complex setups are also well documented
in the [package documentation](http://packages.python.org/django-auth-ldap/).
|