Installing Indico
Only >=1.2
Before starting
From 0.98 on, Indico runs on WSGI. Previous releases were using mod_python. mod_python is no longer supported.
There are WSGI modules for all major web servers. We normally run mod_wsgi, using the Apache httpd server. Here is the recommended setup:
- Python 2.6+
- Apache httpd 2.2+
- mod_wsgi 3.3+ (by installing libapache2-mod-wsgi)
You will need some system libraries:
- python-devel (or python-dev depending on your OS)
- libxslt-devel
- libxml2-devel
- libffi-devel
- openldap-devel (if you wish to use LDAP authentication)
You will also need to easy_install python-ldap if you want LDAP to work.
Installing it
There are two options:
fetching a release (recommended)
You can do it from command line (recommended) executing:
# easy_install indico
Or, you can also do it fetching a tarball or egg file from here.
from our Git repository
You can find our git repository here (development sources);
You should have checked out an indico directory. cd into it and simply do (as root):
# python setup.py install
The setup script will fetch all the dependencies for you and install Indico as a Python EGG in your Python library path.
Post-Install script
The next step is to run indico_initial_setup:
# indico_initial_setup No previous installation of Indico was found. Please specify a directory prefix: [/opt/indico]:
and follow the instructions that the script will provide. By default, Indico will be installed under /opt/indico, but the setup script allows you to specify other paths.
By the end of the process, you should have obtained some information on how to start the database:
If you are running ZODB on this host: - Review etc/zodb.conf and etc/zdctl.conf to make sure everything is ok. - To start the database run: zdaemon -C etc/zdctl.conf start
As well as some information on the paths:
indico.conf: /opt/indico/etc/indico.conf BinDir: /opt/indico/bin DocumentationDir: /opt/indico/doc ConfigurationDir: /opt/indico/etc HtdocsDir: /opt/indico/htdocs
Configuring the Web Server
Indico needs to run behind a WSGI-compliant web server. This guide describes two options:
- Apache HTTPD
- Nginx/uWSGI
Configuring Apache (recommended)
If you already have a previous installation of Indico with mod_python, you should first remove it before starting the mod_wsgi installation and configuration.
Read this if that's the case.
HTTP Mode
Create a new file in the 'sites-available' folder of apache. It's located by default under '/etc/apache2/sites-available/'.
jdoe@localhost ~$ sudo gedit /etc/apache2/sites-available/indico
Copy the next lines into that file, making sure to replace 'jdoe' with your username:
AddDefaultCharset UTF-8 <VirtualHost *:80> # mod_wsgi indico ErrorLog /var/log/apache2/error.log LogLevel warn Alias /indico/images "/opt/indico/htdocs/images" Alias /indico/css "/opt/indico/htdocs/css" Alias /indico/js "/opt/indico/htdocs/js" Alias /indico/ihelp "/opt/indico/htdocs/ihelp" WSGIDaemonProcess WSGIDAEMON processes=32 threads=1 inactivity-timeout=3600 maximum-requests=10000 \ python-eggs=/opt/indico/tmp/egg-cache WSGIScriptAlias /indico "/opt/indico/htdocs/indico.wsgi" <Directory "/opt/indico"> WSGIProcessGroup WSGIDAEMON WSGIApplicationGroup %{GLOBAL} AllowOverride None Options None Order deny,allow Allow from all </Directory> </VirtualHost> <VirtualHost *:443> ErrorLog /var/log/apache2/error.log LogLevel warn Alias /indico/images "/opt/indico/htdocs/images" Alias /indico/css "/opt/indico/htdocs/css" Alias /indico/js "/opt/indico/htdocs/js" Alias /indico/ihelp "/opt/indico/htdocs/ihelp" WSGIScriptAlias /indico "/opt/indico/htdocs/indico.wsgi" SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key </VirtualHost>
Here's the explanation of the above lines:
- Alias: Redirects some static locations to the containing folders, reducing load times.
- WSGIDaemonProcess: Create 32 daemon processes of 1 thread each with name WSGIDAEMON. Set the python-path and python-eggs paths. (The other two parameters are for robustness).
- WSGIScriptAlias: Redirect all petitions starting with /indico to the specified file.
- WSGIProcessGroup: Configure the execution with the settings of WSGIDAEMON.
- WSGIApplicationGroup: Set the execution to run under the same Python interpreter (the first created).
Accessing http://localhost/indico/ should give you the main Indico page.
Configuring uWSGI/nginx (option 2)
Indico might be installed as a uWSGI application, in order to run on Nginx (and possibly on Varnish as well). Create a uWSGI application configuration file for indico on /etc/uwsgi/apps-available/indico.ini:
[uwsgi] pythonpath = /opt/indico processes = 4 threads = 2 wsgi-file = /opt/indico/htdocs/indico.wsgi post-buffering = 1 autoload = true master = true workers = 2 no-orphans = true pidfile = /run/uwsgi/%(deb-confnamespace)/%(deb-confname)/pid socket = /run/uwsgi/%(deb-confnamespace)/%(deb-confname)/socket chmod-socket = 660 log-date = true uid = www-data gid = www-data
Then symlink this configuration file at /etc/uwsgi/apps-enabled/indico.ini:
# ln -s ../apps-available/indico.ini /etc/uwsgi/apps-enabled/indico.ini
The uWSGI daemon should be started after ZODB is running, and if you commit any changes to indico configuration, the daemon should also be restarted:
# /etc/init.d/uwsgi start
This will create the uwsgi daemon socket at /run/uwsgi/app/indico/socket.
Nginx configuration
By default all you need to do on Nginx is to redirect all Indico requests to the uwsgi socket. However, static files should be delivered directly. Here's a sample configuration that works for both HTTP and HTTPS:
## Here's the upstream socket upstream indico { server unix:/run/uwsgi/app/indico/socket; } ## Uncomment the following lines in case you want to enable HTTPS #ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; #ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; ## uWSGI cache params: uwsgi_cache_key $scheme$host$request_uri; uwsgi_cache_valid 200 302 1h; uwsgi_cache_valid 301 1d; uwsgi_cache_valid any 1m; uwsgi_cache_min_uses 1; uwsgi_cache_use_stale error timeout invalid_header http_500; server { listen 80; ## uncomment the following line to enable HTTPS access #listen 443 ssl; server_name _; root /opt/indico/htdocs; index index.py; ## try to get static files directly, if not, send request to Indico upstream location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt|pdf|swf|woff|ttf|otf|svg|ico)$ { access_log off; expires max; try_files $uri @indico; } ## This is should be the same path as the BaseURL configuration at indico.conf location / { include uwsgi_params; uwsgi_pass indico; } location @indico { include uwsgi_params; uwsgi_pass indico; } }
If the file /etc/nginx/uwsgi_params does not exist, create it with the following content:
uwsgi_param QUERY_STRING $query_string; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param UWSGI_SCHEME $scheme; uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_NAME $server_name;
Please note that the uwsgi_param UWSGI_SCHEME is not available by default, and it's required in case you configure a server with both HTTP and HTTPS.
After setup, restart nginx:
# /etc/init.d/nginx restart
Indico config file
The next step should be inspecting indico.conf and configuring it to fit your server configuration. indico.conf replaces the old config.xml, so you will have to update it with the paramaters that you already have in your config.xml.
From v1.2 on, the URLs will be shorter, alike http://my.indico.srv/event/2413/ instead of the historical http://my.indico.srv/conferenceDisplay.py?confId=2413. If you want to stay compatible with the old way, i.e. redirect from the old URLs to new URLs, then you need to set RouteOldUrls = True in your (new) indico.conf file.
Post-install tasks
If you wish to use the scheduler daemon (replaces old taskDaemon), then you should run:
sudo -u apache indico_scheduler start
Do not forget to delete the following file:
/your/tmp/folder/vars.js.tpl.tmp
Migration
If you are using an existing DB, please read this.
Future installations
Once you have succeeded to install Indico for the first time, you can automatize the upgrading process with a single script. This script should basically include the following actions:
$ easy_install -U indico $ indico_initial_setup --existing-config=/opt/indico/etc/indico.conf #replace with your path to your indico.conf # restart apache /path/to/httpd restart