Railway

Deploy Easy!Appointments | Open Source Appointment Scheduler on Railway

Self host Easy!Appointments. Booking, calendar sync, email notifications.

Deploy Easy!Appointments | Open Source Appointment Scheduler on Railway

Just deployed

Just deployed

/var/lib/mysql

Easy!Appointments logo

Deploy and Host Easy!Appointments on Railway

Deploy on Railway

Easy!Appointments is a free, open-source web appointment scheduler that lets customers book time slots with service providers — perfect for clinics, salons, consultants, tutors, or any business that runs on bookings. Self-host Easy!Appointments and you keep full control of customer data without paying per-user SaaS fees forever.

This Railway template runs the official alextselegidis/easyappointments:1.5.2 Docker image alongside a managed MySQL 8 database. The startup script handles the Apache MPM gotcha that breaks php:*-apache images on Railway, templates your env vars into Easy!Appointments' config.php and email.php at boot, and wires HTTPS through Railway's edge proxy so your generated URLs are correct from the first request.

Getting Started with Easy!Appointments on Railway

After the deploy finishes, open the public Railway URL in your browser. Easy!Appointments self-detects that the database is empty and redirects you to /index.php/installation — a one-page web wizard. Enter your admin first name, last name, email, username, password, language, and phone number, plus your company name and link, then submit. Easy!Appointments creates the schema, seeds a sample service and provider, and signs you in as the new administrator. From there you can configure your services, working hours, and customer-facing booking page.

Easy!Appointments dashboard screenshot

About Hosting Easy!Appointments

Easy!Appointments is a PHP + CodeIgniter application backed by MySQL. It exposes a public booking page where your customers self-serve, plus an admin backend where you manage providers, services, working plans, customers, and appointments.

Key features:

  • Customer-facing booking page (no account required to book)
  • Multi-provider, multi-service scheduling with per-provider working plans
  • Two-way Google Calendar sync (OAuth 2.0)
  • Email notifications via SMTP or PHP mail()
  • REST API and webhook support for integrations
  • Multi-language support out of the box

The app talks to MySQL over Railway's private network. The Easy!Appointments container is the only service with a public domain.

Why Deploy Easy!Appointments on Railway

The template gets you from zero to a working booking site in minutes:

  • Managed MySQL 8 with persistent volume — no DB setup work
  • HTTPS, custom domains, and TLS handled by Railway's edge
  • Private networking between app and DB out of the box
  • Apache MPM and entrypoint gotchas already worked around in the startup script
  • One-click redeploys when you bump the image tag

Common Use Cases

  • Clinics and therapists running an appointment-only schedule
  • Hair salons, barbers, and beauty studios with multiple staff
  • Tutors, coaches, and consultants selling 1-on-1 sessions
  • Small service businesses replacing Calendly or Acuity to avoid per-seat SaaS pricing

Dependencies for Easy!Appointments

  • EasyAppointmentsalextselegidis/easyappointments:1.5.2 (PHP 8.2 + Apache, port 80)
  • MySQL — Railway-managed MySQL 8

Environment Variables Reference

VariableDescriptionRequired
BASE_URLPublic app URL — pin to https://${{RAILWAY_PUBLIC_DOMAIN}}Yes
DB_HOST / DB_NAME / DB_USERNAME / DB_PASSWORDMySQL connection (reference ${{MySQL.*}})Yes
STARTUP_B64Base64 startup script (env templating + MPM fix)Yes
LANGUAGEDefault UI language (english, german, french, ...)No
DEBUG_MODETRUE or FALSE — leave FALSE in productionNo
MAIL_PROTOCOLmail or smtpNo
MAIL_SMTP_HOST / MAIL_SMTP_USER / MAIL_SMTP_PASS / MAIL_SMTP_PORTOutbound email settingsNo
MAIL_FROM_ADDRESS / MAIL_FROM_NAME / MAIL_REPLY_TO_ADDRESSSender identity for notificationsNo
GOOGLE_SYNC_FEATURETRUE to enable Google Calendar two-way syncNo
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET / GOOGLE_API_KEYGoogle OAuth credentialsIf sync on

Deployment Dependencies

Minimum Hardware Requirements for Self-Hosting Easy!Appointments

ResourceMinimumRecommended
CPU0.5 vCPU1 vCPU
RAM256 MB512 MB – 1 GB
Storage1 GB (DB + uploads)5 GB
RuntimePHP 8.2 + MySQL 8PHP 8.2 + MySQL 8

The app itself is light. RAM ceiling rises with concurrent customers and Google Calendar sync activity.

How to Self-Host Easy!Appointments Outside Railway

The fastest path is the official Docker image plus a MySQL container:

docker run -d --name eaa-mysql \
  -e MYSQL_ROOT_PASSWORD=changeme \
  -e MYSQL_DATABASE=easyappointments \
  -v eaa-mysql:/var/lib/mysql \
  mysql:8

docker run -d --name easyappointments \
  -p 8080:80 \
  -e BASE_URL=http://localhost:8080 \
  -e DEBUG_MODE=FALSE \
  -e DB_HOST=eaa-mysql \
  -e DB_NAME=easyappointments \
  -e DB_USERNAME=root \
  -e DB_PASSWORD=changeme \
  --link eaa-mysql:eaa-mysql \
  alextselegidis/easyappointments:1.5.2

Or build from source with Composer + npm:

git clone https://github.com/alextselegidis/easyappointments.git
cd easyappointments
composer install --no-dev
npm install && npm run build
cp config-sample.php config.php   # edit DB + BASE_URL
php -S 0.0.0.0:8080 -t .

Then visit http://localhost:8080 to run the install wizard.

Is Easy!Appointments Free?

Yes — Easy!Appointments is open source under GPL-3.0 with no paid tiers, no per-user fees, and no booking commissions. There is no upstream cloud-hosted version. Your only cost is the infrastructure you run it on. On Railway, that's the small monthly compute + storage + bandwidth bill for the app container and the managed MySQL service — no Easy!Appointments licence on top.

Easy!Appointments vs Calendly vs Cal.com

FeatureEasy!AppointmentsCalendlyCal.com
Open sourceYes (GPL-3.0)NoYes (AGPL-3.0)
Self-hostableYesNoYes
Pricing modelFree$10–$20+/user/moFree OSS, paid cloud
Customer-facing public booking pageYesYesYes
Multi-providerYesTeams planYes
Google Calendar syncYesYesYes

Easy!Appointments is the leanest option for a small business that just wants a self-hosted booking page and admin panel; Cal.com is heavier but has a richer integration ecosystem.

FAQ

What is Easy!Appointments and why self-host it? Easy!Appointments is an open-source PHP web app that lets your customers book appointments online. Self-hosting on Railway means your customer data lives on infrastructure you control and you avoid Calendly-style per-user SaaS fees.

What does this Railway template deploy? Two services — the alextselegidis/easyappointments:1.5.2 app container and a Railway-managed MySQL 8 database, wired together over the private network with Easy!Appointments exposed on a public HTTPS URL.

Why is MySQL included in the template? Easy!Appointments stores all appointment, customer, provider, and admin data in MySQL — and only MySQL (the image ships pdo_mysql only, so Postgres is not an option). The managed Railway MySQL service is added so the template works on first deploy with no manual DB setup.

How do I create the first admin user on Easy!Appointments? Visit the deployed URL and you'll be redirected to the install wizard at /index.php/installation. Fill in your admin details and company info, submit, and Easy!Appointments creates the schema and signs you in. There is no env-var path for this; the wizard is the official setup flow.

Does Easy!Appointments support Google Calendar sync on Railway? Yes. Set GOOGLE_SYNC_FEATURE=TRUE and supply GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, and GOOGLE_API_KEY from a Google Cloud OAuth 2.0 project, then enable sync per provider in the admin UI.

Can I send appointment confirmation emails from self-hosted Easy!Appointments? Yes. Set MAIL_PROTOCOL=smtp, fill in your SMTP host/port/user/pass, and set MAIL_FROM_ADDRESS and MAIL_FROM_NAME. Easy!Appointments will send booking, cancellation, and reminder emails via your SMTP provider.


Template Content

More templates in this category

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

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

Letta
View Template
(v1) Simple Medusa Backend
Deploy an ecommerce backend and admin using Medusa

Shahed Nasser