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
indicouser:indico-uwsgi(uWSGI on a loopback socket) andindico-celery(Celery worker and scheduler) - PostgreSQL 16 with the
unaccentandpg_trgmextensions, 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_URLset 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-dataholding 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 StandardOpen 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 900On 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.txtThe 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
:443server block (Let's Encrypt withcertbot --nginxis a good option). - Configure a real SMTP server with
SMTP_SERVERinindico.conf, so that Indico can send registration and notification email.
Restart the services after you edit the configuration:
sudo systemctl restart indico-uwsgi nginxVerifying 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/healthzIndico 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