Easy!Appointments
Open source appointment scheduling and booking platform
Alternative to: calendly, acuity scheduling, square appointments
Easy!Appointments is a highly customizable web application that lets customers book appointments with you through a sophisticated web interface. It manages customers, services and providers, enforces working plans and booking rules, and syncs appointments with Google Calendar. Email notifications keep everyone updated, and the self-hosted installer runs alongside an existing website on a single PHP/MySQL server.
Easy!Appointments Docker Compose example
Self-host Easy!Appointments on your own server, homelab, or VPS starting from this Docker Compose example.
It runs Easy!Appointments in Docker containers using the official alextselegidis/easyappointments:latest, mysql:8.0 images, with persistent volumes and automatic restarts preconfigured.
Review the environment variables and adjust them to your setup, save the file as compose.yml (or docker-compose.yml), and start the stack with docker compose up -d.
services:
easyappointments:
image: alextselegidis/easyappointments:latest
restart: unless-stopped
depends_on:
- mysql
environment:
# Public URL where Easy!Appointments is reached.
BASE_URL: "http://localhost"
# Enable verbose debug output. Keep FALSE in production.
DEBUG_MODE: "FALSE"
# Hostname of the MySQL service on the compose network.
DB_HOST: "mysql"
# Database name.
DB_NAME: "easyappointments"
# Database user.
DB_USERNAME: "easyappointments"
# Database password (internal to the compose network).
DB_PASSWORD: "easyappointments"
# Mail transport: 'mail' (PHP mail) or 'smtp'.
MAIL_PROTOCOL: "mail"
# SMTP debug verbosity (0 disables).
MAIL_SMTP_DEBUG: "0"
# Whether SMTP requires authentication (0 = no).
MAIL_SMTP_AUTH: "0"
# SMTP server hostname (used when MAIL_PROTOCOL is smtp).
MAIL_SMTP_HOST: "smtp.example.org"
# SMTP server port.
MAIL_SMTP_PORT: "587"
# From address for outgoing mail.
MAIL_FROM_ADDRESS: "no-reply@example.org"
# From name for outgoing mail.
MAIL_FROM_NAME: "Easy!Appointments"
# Reply-to address for outgoing mail.
MAIL_REPLY_TO_ADDRESS: "no-reply@example.org"
mysql:
image: mysql:8.0
restart: unless-stopped
volumes:
- mysql:/var/lib/mysql
environment:
# Root password for the MySQL server (internal to the compose network).
MYSQL_ROOT_PASSWORD: "changeme-root"
# Database created on first startup.
MYSQL_DATABASE: "easyappointments"
# Application database user created on first startup.
MYSQL_USER: "easyappointments"
# Password for the application database user (matches DB_PASSWORD above).
MYSQL_PASSWORD: "easyappointments"
volumes:
mysql:
Values set to changeme are required — replace them with your own
values before starting Easy!Appointments.
Prefer a managed setup? WinterFlow installs, configures, and updates Easy!Appointments for you using this same Docker Compose configuration.