Deploy Easy!Appointments

Open-source online appointment scheduler for businesses and teams

Deploy Easy!Appointments

Just deployed

/var/lib/mysql

Just deployed

Deploy and Host Easy!Appointments on Railway

Easy!Appointments is an open-source, self-hosted appointment scheduling platform for managing online bookings, services, providers, customers, schedules, and availability.

Deploy it on Railway and run your own scheduling platform for businesses, teams, clinics, professionals, and service providers.

About Hosting

Hosting Easy!Appointments on Railway provides a convenient way to run a self-hosted appointment scheduling platform without manually configuring a traditional server environment.

This template deploys Easy!Appointments together with a MySQL database and configures the application through Railway environment variables.

The application container includes PHP and Apache. The MySQL service uses persistent storage so appointment, customer, and application data survive container restarts and redeployments.

Why Deploy Easy!Appointments on Railway

Railway provides a simple way to run Easy!Appointments without manually configuring a traditional server.

With this template you can:

  • Run your own appointment scheduling platform.
  • Manage services, providers, schedules, and availability.
  • Accept online bookings.
  • Manage customers and appointments.
  • Synchronize supported calendars.
  • Send appointment notifications.
  • Connect external systems through APIs and webhooks.
  • Build automation workflows around scheduling data.

Common Use Cases

Healthcare & Clinics

Manage appointments between patients, professionals, services, and available time slots.

Salons & Beauty Services

Allow customers to select services, professionals, and available appointment times.

Professional Services

Schedule consultations, meetings, interviews, and other time-based services.

Education & Training

Organize classes, consultations, training sessions, and scheduled activities.

Recruitment

Schedule interviews and meetings between candidates and team members.

Events & Reservations

Manage time-based bookings, sessions, and reservation workflows.

Key Features

  • Online Appointment Booking — Let customers book appointments online.
  • Services & Providers — Configure services, providers, schedules, and availability.
  • Flexible Scheduling — Define working hours, breaks, and booking rules.
  • Customer Management — Manage customer information and appointment history.
  • Calendar Synchronization — Integrate supported calendar services.
  • Email Notifications — Send notifications for appointment events.
  • Group Appointments — Support multiple attendees for appointment slots.
  • Shareable Booking Links — Provide direct links to booking pages.
  • REST API — Integrate with external applications and services.
  • Webhooks — Trigger external workflows from supported application events.
  • Mobile-Friendly Interface — Access the platform from desktop and mobile devices.
  • Multi-language Support — Use available community-maintained translations.

Automation & Integrations

Easy!Appointments can connect to external systems through its API and webhook capabilities.

You can integrate it with:

  • n8n
  • CRM platforms
  • Slack
  • Microsoft Teams
  • Email and notification services
  • Custom applications
  • Other API-based services

Example Automation Workflow

A new booking can trigger a workflow that:

  1. Receives the webhook from Easy!Appointments.
  2. Processes the appointment data.
  3. Creates or updates a CRM record.
  4. Notifies a team.
  5. Sends a confirmation or follow-up message.
  6. Stores the information in another system.

Dependencies for Easy!Appointments Hosting

This template uses:

  • Easy!Appointments: 1.6.0
  • PHP: 8.2
  • Apache: 2.4
  • Database: MySQL
  • Container Port: 80
  • Persistent Storage: Railway Volume for MySQL

Railway Services

The Railway project should contain:

  1. An Easy!Appointments service using this repository.
  2. A MySQL service.
  3. A persistent Volume attached to MySQL at /var/lib/mysql.
  4. A public domain for the Easy!Appointments service.

The Easy!Appointments service does not require a Railway Volume.

Important: Do not attach a Volume to /var/www/html, because this directory contains the application files included in the Docker image.

Railway Variables

Configure the following variables on the Easy!Appointments service:

VariableValue
BASE_URLhttps://${{RAILWAY_PUBLIC_DOMAIN}}
DB_HOST${{MySQL.MYSQLHOST}}
DB_NAME${{MySQL.MYSQLDATABASE}}
DB_PASSWORD${{MySQL.MYSQLPASSWORD}}
DB_USERNAME${{MySQL.MYSQLUSER}}
DEBUG_MODEFALSE
PORT80

The database variables use Railway service references to obtain the connection information from the MySQL service.

Important: Configure these variables on the Easy!Appointments service, not on the MySQL service.

First Access

After deploying the template:

  1. Wait for the Easy!Appointments and MySQL services to start.
  2. Open the public URL of the Easy!Appointments service.
  3. Complete the initial application setup.
  4. Configure your services and providers.
  5. Define working hours, schedules, and availability.
  6. Configure email notifications and calendar integrations as required.
  7. Configure API and webhook integrations for automation.

The application configuration is generated automatically from the Railway environment variables when the container starts.

Database

Easy!Appointments uses MySQL for application data.

The application connects to the MySQL service using these Railway references:

VariableRailway Reference
DB_HOST${{MySQL.MYSQLHOST}}
DB_NAME${{MySQL.MYSQLDATABASE}}
DB_USERNAME${{MySQL.MYSQLUSER}}
DB_PASSWORD${{MySQL.MYSQLPASSWORD}}

Important: Railway resolves these references before they are used by the application. Do not replace them with hardcoded database credentials in the repository.

Persistence

The MySQL service requires a persistent Railway Volume mounted at:

/var/lib/mysql

This preserves appointments, customers, services, providers, and other database data across container restarts and redeployments.

The Easy!Appointments service does not require a Volume because the application files are included in the Docker image and the runtime configuration is generated from environment variables.

Warning: Removing the MySQL Volume can permanently destroy your Easy!Appointments data.

Email Configuration

Easy!Appointments can use SMTP for appointment and system notifications.

Common SMTP variables include:

VariableExample / Value
MAIL_PROTOCOLsmtp
MAIL_SMTP_DEBUG0
MAIL_SMTP_AUTH1
MAIL_SMTP_HOSTsmtp.example.com
MAIL_SMTP_USERSMTP username
MAIL_SMTP_PASSSMTP password
MAIL_SMTP_CRYPTOtls
MAIL_SMTP_PORT587
MAIL_FROM_ADDRESSSender email address
MAIL_FROM_NAMESender name
MAIL_REPLY_TO_ADDRESSReply-to email address

Keep SMTP credentials in Railway Variables and never commit them to Git.

Updating Easy!Appointments

The application version is intentionally pinned to 1.6.0 instead of using latest.

Pinning the version provides predictable builds and avoids unexpected upstream changes.

Before upgrading:

  1. Back up the MySQL database.
  2. Review the official Easy!Appointments release notes.
  3. Test the new version separately.
  4. Update the VERSION argument in the Dockerfile.
  5. Deploy only after confirming compatibility.

Security Notes

  • Use strong administrator credentials.
  • Never commit database or SMTP passwords to Git.
  • Keep the MySQL Volume persistent.
  • Keep DEBUG_MODE=FALSE in production.
  • Keep the application version pinned.
  • Do not expose MySQL publicly unless required.

Source and Build

The application is built from the official Easy!Appointments source repository:

https://github.com/alextselegidis/easyappointments

The version is controlled in the Dockerfile:

ARG VERSION=1.6.0

The Docker configuration is based on the official Easy!Appointments Docker packaging and includes Railway-specific deployment configuration and explicit Apache MPM handling.

License

Easy!Appointments is licensed under the GNU General Public License v3.0 (GPL-3.0).

Project content is licensed under CC BY 3.0.

See the official project repository for complete license information.

Resources

About This Railway Template

This repository provides a Railway-ready deployment of Easy!Appointments with MySQL, persistent database storage, environment-based configuration, and Apache configured for reliable container operation.

Deploy Easy!Appointments on Railway and build your own appointment scheduling infrastructure.


Template Content

More templates in this category

View Template
Rocky Linux
Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀

codestorm
47
View Template
Foundry Virtual Tabletop
A Self-Hosted & Modern Roleplaying Platform

Lucas
71
View Template
Letta Code Remote
Run a Letta Code agent 24/7. No inbound ports, just deploy.

Letta
51