Deployment guide

Indico

Overview

Indico is a comprehensive, open-source event management system. It covers conferences, meetings, lectures, agendas and timetables, abstract and paper review, registration forms, and a room booking module, all behind a rich web interface. Indico was created at CERN and is used by universities, research organisations and enterprises worldwide.

Indico is a Python and Flask application served by uWSGI, with Celery for background tasks, PostgreSQL for storage and Redis for caching and queues.

The SecureAnyCloud image installs Indico 3.3.12 the official production way. It uses a dedicated indico system user, a Python 3.12 virtualenv, pip install indico, PostgreSQL 16 and Redis on loopback, and nginx in front. The image keeps the database and the uploaded materials archive on a dedicated Azure data disk. It generates the Flask SECRET_KEY, the PostgreSQL password and the initial administrator account uniquely on the first boot of each VM. The image is backed by 24/7 SecureAnyCloud support.

What you get:

  • Indico 3.3.12 installed the official production way (MIT licensed), on Python 3.12
  • Two systemd services running as the unprivileged indico user: indico-uwsgi (uWSGI on a loopback socket) and indico-celery (Celery worker and scheduler)
  • PostgreSQL 16 with the unaccent and pg_trgm extensions, plus Redis, bound to loopback
  • nginx fronting the app on port 80 with an unauthenticated /healthz
  • A per-VM Flask SECRET_KEY, a per-VM PostgreSQL password and a per-VM administrator account. All are generated on first boot and recorded in a root-only credentials file, and none are baked into the image
  • The BASE_URL set automatically from the VM public IP on first boot, so the web interface works immediately
  • A dedicated 20 GiB Azure data disk at /var/lib/indico-data holding the PostgreSQL cluster and the Indico archive, captured into the image and re-provisioned with every VM
  • 24/7 SecureAnyCloud support

Prerequisites

You need an active Azure subscription, an SSH key pair, and a VNet plus subnet in the target region.

Standard_D2s_v4 (2 vCPU / 8 GiB RAM) is the recommended size. Indico runs uWSGI and Celery alongside PostgreSQL and Redis, so 8 GiB of RAM is comfortable for evaluation and small deployments.

For NSG inbound rules, allow 22/tcp from your management network. Allow 80/tcp for the web interface, plus 443/tcp once you add your own TLS certificate.

Step 1 - Deploy from the Azure Marketplace

Launch the image from the Azure portal. Search the Marketplace for "Indico on Ubuntu 24.04 LTS by SecureAnyCloud", choose your size and networking, and create the VM. Alternatively, launch it from the Azure CLI:

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:indico-ubuntu-24-04:default:latest
az vm create \
  --resource-group my-indico-rg \
  --name my-indico \
  --image sac1647283583153:indico-ubuntu-24-04:default:latest \
  --size Standard_D2s_v4 \
  --admin-username azureuser \
  --generate-ssh-keys \
  --public-ip-sku Standard

Open the required inbound ports on the VM network security group:

az vm open-port --resource-group my-indico-rg --name my-indico --port 80 --priority 900

On first boot, the appliance generates its per-VM secrets and administrator account and sets BASE_URL to the VM public IP. Allow a minute or two for this to complete before you sign in.

Step 2 - Retrieve the per-VM administrator password

Indico ships with no default login. The first-boot service creates a unique administrator account and writes it to a root-only file. Connect over SSH and read the file:

ssh azureuser@<vm-public-ip>
sudo cat /root/indico-credentials.txt

The file shows the administrator username (admin), the email address, the per-VM password and the URL to use.

The database lives on the dedicated data disk, and the Flask SECRET_KEY and PostgreSQL password are unique to this VM.

Step 3 - Sign in to the web interface

Browse to http://<vm-public-ip>/ and sign in with the username and password from the credentials file. Use the "Login with Indico" local provider.

Step 4 - Create categories, events and timetables

Indico organises everything under categories. Create a category, and then create events (meetings, lectures or conferences) inside it. The category page lists upcoming and past events and lets you manage access.

Each event has a timetable. For a meeting, add contributions (talks) with their times and durations. Indico renders the full agenda automatically, ready to publish to attendees.

Step 5 - Administration

The Administration area is available to the per-VM admin account. Use it to configure the instance: general settings, security, plugins, user management, the homepage, and the room booking module.

Step 6 - Set your own domain, TLS and email

Indico bakes absolute URLs from BASE_URL. The appliance boots with BASE_URL set to the VM public IP over plain HTTP, as a working evaluation default. Before you publish real events, complete these tasks:

  • Point a DNS name at the VM and set BASE_URL = 'https://your.domain' in /opt/indico/etc/indico.conf.
  • Add a TLS certificate and an nginx :443 server block (Let's Encrypt with certbot --nginx is a good option).
  • Configure a real SMTP server with SMTP_SERVER in indico.conf, so that Indico can send registration and notification email.

Restart the services after you edit the configuration:

sudo systemctl restart indico-uwsgi nginx

Verifying the deployment

All services run locally. PostgreSQL, Redis, uWSGI and Celery listen on loopback, fronted by nginx on port 80.

The unauthenticated health endpoint returns 200, and the landing and login pages render:

curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1/healthz

Indico has no default login. A wrong or blank password is rejected, and only the per-VM administrator password authenticates to the admin area:

Data, storage and maintenance

The PostgreSQL cluster and the Indico archive (uploaded materials and attachments) live on the dedicated 20 GiB Azure data disk mounted at /var/lib/indico-data, which is captured into the image and re-provisioned with every VM. For a production instance, grow the data disk to suit your event volume and take regular backups of both the database and the archive.

Keep the OS patched with unattended-upgrades, which is enabled by default.

Useful paths and commands:

  • Configuration: /opt/indico/etc/indico.conf
  • Credentials (root only): /root/indico-credentials.txt
  • Logs: sudo journalctl -u indico-uwsgi -u indico-celery
  • Restart: sudo systemctl restart indico-uwsgi indico-celery nginx

Support

SecureAnyCloud provides this image with 24/7 support. Indico is open-source software released under the MIT License.

SecureAnyCloud is not affiliated with or endorsed by CERN or the Indico project. "Indico" is used only to identify the software packaged in this image.

Deploy on Azure

Launch Indico on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure