docker.recipes

Rallly Meeting Scheduler

beginner

Self-hosted Doodle alternative for scheduling meetings and events.

Overview

Rallly is a modern, open-source meeting scheduler that serves as a self-hosted alternative to Doodle and other commercial polling platforms. Built with Next.js and designed for privacy-conscious organizations, Rallly allows users to create time-slot polls for meeting coordination without requiring participants to create accounts. The platform emphasizes simplicity and user experience while giving organizations full control over their scheduling data and participant information. This deployment combines the Rallly application container with a dedicated PostgreSQL database instance. The rallly service runs the Node.js-based web application on port 3000, while the db service provides persistent data storage using PostgreSQL 15 Alpine. The configuration includes comprehensive email integration through SMTP settings, enabling automated notifications when participants vote on polls or when poll creators receive responses. This stack is ideal for teams, organizations, and communities that need reliable meeting coordination without depending on external services or compromising participant privacy. The PostgreSQL backend ensures data integrity and supports complex queries for reporting and analytics, while the containerized approach simplifies deployment across different environments from development to production.

Key Features

  • Anonymous poll participation without requiring user accounts or registrations
  • Real-time poll updates showing participant responses as they vote
  • Comprehensive SMTP email integration for poll notifications and reminders
  • PostgreSQL backend with ACID compliance for reliable data persistence
  • Responsive web interface optimized for both desktop and mobile devices
  • Customizable poll options with time slots, dates, and text-based choices
  • Poll creator dashboard for managing multiple polls and viewing analytics
  • Privacy-focused design with self-hosted data storage and no external tracking

Common Use Cases

  • 1Remote teams coordinating weekly standup meetings across different time zones
  • 2Event organizers scheduling workshops, webinars, or community meetups
  • 3Educational institutions coordinating office hours, study groups, or parent-teacher conferences
  • 4Healthcare practices allowing patients to vote on preferred appointment slots
  • 5Project managers finding optimal times for sprint planning or retrospective meetings
  • 6Non-profit organizations scheduling volunteer meetings and board sessions
  • 7Family or friend groups coordinating social events, dinners, or vacation planning

Prerequisites

  • Docker and Docker Compose installed with minimum 1GB RAM for PostgreSQL performance
  • Environment variables configured for database password and application secret
  • SMTP server credentials for email notifications and poll invitations
  • Base URL configuration matching your domain or IP address for proper link generation
  • Port 3000 available for web interface access
  • Basic understanding of poll creation workflows and participant management

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 rallly:
3 image: lukevella/rallly:latest
4 container_name: rallly
5 environment:
6 - DATABASE_URL=postgres://rallly:${DB_PASSWORD}@db:5432/rallly
7 - SECRET_PASSWORD=${SECRET_PASSWORD}
8 - NEXT_PUBLIC_BASE_URL=${BASE_URL}
9 - SUPPORT_EMAIL=${SUPPORT_EMAIL}
10 - SMTP_HOST=${SMTP_HOST}
11 - SMTP_PORT=${SMTP_PORT}
12 - SMTP_USER=${SMTP_USER}
13 - SMTP_PWD=${SMTP_PASSWORD}
14 - SMTP_SECURE=false
15 ports:
16 - "3000:3000"
17 depends_on:
18 - db
19 networks:
20 - rallly-network
21 restart: unless-stopped
22
23 db:
24 image: postgres:15-alpine
25 container_name: rallly-db
26 environment:
27 - POSTGRES_USER=rallly
28 - POSTGRES_PASSWORD=${DB_PASSWORD}
29 - POSTGRES_DB=rallly
30 volumes:
31 - postgres-data:/var/lib/postgresql/data
32 networks:
33 - rallly-network
34 restart: unless-stopped
35
36volumes:
37 postgres-data:
38
39networks:
40 rallly-network:
41 driver: bridge

.env Template

.env
1# Rallly
2BASE_URL=http://localhost:3000
3SUPPORT_EMAIL=support@example.com
4
5# Generate with: openssl rand -base64 32
6SECRET_PASSWORD=your_secret_password
7DB_PASSWORD=secure_rallly_password
8
9# SMTP Settings
10SMTP_HOST=smtp.example.com
11SMTP_PORT=587
12SMTP_USER=rallly@example.com
13SMTP_PASSWORD=smtp_password

Usage Notes

  1. 1Web UI at http://localhost:3000
  2. 2Create polls without account
  3. 3Share poll links with participants
  4. 4Email notifications for votes
  5. 5Self-hosted Doodle alternative

Individual Services(2 services)

Copy individual services to mix and match with your existing compose files.

rallly
rallly:
  image: lukevella/rallly:latest
  container_name: rallly
  environment:
    - DATABASE_URL=postgres://rallly:${DB_PASSWORD}@db:5432/rallly
    - SECRET_PASSWORD=${SECRET_PASSWORD}
    - NEXT_PUBLIC_BASE_URL=${BASE_URL}
    - SUPPORT_EMAIL=${SUPPORT_EMAIL}
    - SMTP_HOST=${SMTP_HOST}
    - SMTP_PORT=${SMTP_PORT}
    - SMTP_USER=${SMTP_USER}
    - SMTP_PWD=${SMTP_PASSWORD}
    - SMTP_SECURE=false
  ports:
    - "3000:3000"
  depends_on:
    - db
  networks:
    - rallly-network
  restart: unless-stopped
db
db:
  image: postgres:15-alpine
  container_name: rallly-db
  environment:
    - POSTGRES_USER=rallly
    - POSTGRES_PASSWORD=${DB_PASSWORD}
    - POSTGRES_DB=rallly
  volumes:
    - postgres-data:/var/lib/postgresql/data
  networks:
    - rallly-network
  restart: unless-stopped

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 rallly:
5 image: lukevella/rallly:latest
6 container_name: rallly
7 environment:
8 - DATABASE_URL=postgres://rallly:${DB_PASSWORD}@db:5432/rallly
9 - SECRET_PASSWORD=${SECRET_PASSWORD}
10 - NEXT_PUBLIC_BASE_URL=${BASE_URL}
11 - SUPPORT_EMAIL=${SUPPORT_EMAIL}
12 - SMTP_HOST=${SMTP_HOST}
13 - SMTP_PORT=${SMTP_PORT}
14 - SMTP_USER=${SMTP_USER}
15 - SMTP_PWD=${SMTP_PASSWORD}
16 - SMTP_SECURE=false
17 ports:
18 - "3000:3000"
19 depends_on:
20 - db
21 networks:
22 - rallly-network
23 restart: unless-stopped
24
25 db:
26 image: postgres:15-alpine
27 container_name: rallly-db
28 environment:
29 - POSTGRES_USER=rallly
30 - POSTGRES_PASSWORD=${DB_PASSWORD}
31 - POSTGRES_DB=rallly
32 volumes:
33 - postgres-data:/var/lib/postgresql/data
34 networks:
35 - rallly-network
36 restart: unless-stopped
37
38volumes:
39 postgres-data:
40
41networks:
42 rallly-network:
43 driver: bridge
44EOF
45
46# 2. Create the .env file
47cat > .env << 'EOF'
48# Rallly
49BASE_URL=http://localhost:3000
50SUPPORT_EMAIL=support@example.com
51
52# Generate with: openssl rand -base64 32
53SECRET_PASSWORD=your_secret_password
54DB_PASSWORD=secure_rallly_password
55
56# SMTP Settings
57SMTP_HOST=smtp.example.com
58SMTP_PORT=587
59SMTP_USER=rallly@example.com
60SMTP_PASSWORD=smtp_password
61EOF
62
63# 3. Start the services
64docker compose up -d
65
66# 4. View logs
67docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/rallly-scheduling/run | bash

Troubleshooting

  • Database connection refused errors: Verify DB_PASSWORD environment variable matches between rallly and db services
  • Email notifications not sending: Check SMTP credentials and ensure SMTP_HOST is reachable from the container network
  • Poll links showing localhost in emails: Update NEXT_PUBLIC_BASE_URL to match your actual domain or IP address
  • Container startup failures: Ensure postgres-data volume has proper permissions and sufficient disk space
  • Web interface showing 502 errors: Check that rallly container can connect to db service on port 5432 within rallly-network
  • Participants unable to access polls: Verify BASE_URL configuration and firewall settings for port 3000

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space