Deploy QloApps

Hotel management software with a built-in booking website

Deploy QloApps

Just deployed

/var/lib/mysql

Just deployed

/data

Just deployed

/data

Deploy and Host QloApps on Railway

QloApps is a free, open-source hotel management suite bundling three products a property normally buys separately: a Property Management System for the front desk, a commission-free booking engine, and a public hotel website with a room-search widget on the homepage. Built by Webkul on the PrestaShop 1.6 core, it suits independent hotels, guest houses, hostels and small chains that want direct bookings without paying an OTA 15–20% per reservation. Arrivals, departures, room allocation, rates, refunds and invoices live in the same back office as the storefront that took the booking.

Deploy QloApps on Railway and you get a working hotel out of the box. The template runs three services: qloapps, the Apache/PHP application serving the public site and the back office; MySQL, the managed database holding rooms, rates, guests and orders; and mailpit, a private SMTP server capturing booking confirmations and password resets so you can watch mail working before choosing a relay. The app reaches both over the private network; only the storefront and the inbox get public URLs. A volume at /data holds room photography, uploads, invoices, module code and the shop's settings file, so everything survives a redeploy.

Diagram of the QloApps, MySQL and Mailpit services on Railway

Getting Started with QloApps on Railway

Set QLO_ADMIN_EMAIL and QLO_ADMIN_PASSWORD before you deploy; those become the hotel manager account, and nothing else is required. The first boot creates the database role, installs the schema and seeds a demo property called Hotel Prime with four room types, photographs and pricing — about a minute, after which /healthz answers.

Open the public URL and you land on a real hotel website with a working availability search. For the back office, append QLO_ADMIN_DIR/backoffice/ by default — and sign in. QloApps refuses to serve one at /admin, so change it to something private.

Your first useful action is Hotel Reservation System → Manage Hotel: replace the demo property with your own name, address and contact details, then open Catalog → Manage Room Types for real rooms and rates. Book a room from the storefront to confirm the whole path works — it appears at once under Customers → Booking Carts, and the confirmation email lands in the Mailpit inbox on its own URL, protected by MP_UI_AUTH. Point QLO_SMTP_HOST, QLO_SMTP_PORT, QLO_SMTP_USER and QLO_SMTP_PASSWORD at your provider to send real mail; set QLO_INSTALL_FIXTURES=0 before the first deploy for an empty shop.

QloApps hotel homepage with its room availability search bar Room type page showing nightly price and rooms left Back office booking calendar with room availability by date

About Hosting QloApps

QloApps replaces the usual three-vendor stack — website builder, booking widget and PMS — with one application and one database, inheriting PrestaShop's catalogue, tax, currency and invoice engine, applied to rooms and nights.

  • Room-type catalogue with occupancy rules, bed types, amenities and galleries
  • Availability calendar and front-desk booking screen for walk-in guests
  • Advance payment, cancellation and refund rules; invoices and credit slips
  • Multi-property, multi-currency, multi-language and per-country tax rules
  • PrestaShop's modules and themes, plus a channel manager for OTAs

The architecture is deliberately small. qloapps serves the storefront, the back office and the API from one origin, because the session cookie has to be same-origin. MySQL stores everything transactional, and the app never connects as its superuser: each boot creates a dedicated qloapps database and a role granted only on it, then runs as that role, so a third-party module cannot reach anything else.

Why Deploy QloApps on Railway

Railway removes the server administration a PHP application normally drags along.

  • Managed MySQL with backups, no my.cnf to tune
  • Private networking between the app, database and mail server
  • HTTPS and a domain on the first deploy, custom domains in a click
  • One volume for photography, invoices and uploads
  • Health checks, logs and scaling, nothing to configure

Common Use Cases

  • Independent hotels and B&Bs taking commission-free direct bookings instead of paying an OTA on every reservation
  • Hostels and guest houses needing occupancy and rate management without a per-room PMS subscription
  • Small chains running several properties from one back office

Dependencies for QloApps

  • qloapps — built from gridalpha/qloapps-railway, packaging QloApps 1.7.0 on php:8.3-apache with the extensions it requires (gd, intl, zip, soap, bcmath, pdo_mysql, mysqli, exif, opcache). It installs the shop headlessly, so there is no wizard and no window in which the site has no owner.
  • MySQLmysql:9.4. Rooms, rates, reservations, guests, invoices and every configuration value live here.
  • mailpitaxllent/mailpit:latest, SMTP on private port 1025 with a web inbox. It never forwards mail, so confirmations are captured until you set a relay.

Environment Variables Reference

VariablePurpose
QLO_ADMIN_EMAILEmail address of the hotel manager account
QLO_ADMIN_PASSWORDPassword for that account; at least 8 characters
QLO_ADMIN_DIRBack office directory; cannot be admin
QLO_INSTALL_FIXTURES1 installs the demo property, 0 starts empty
QLO_PUBLIC_DOMAINSet this when you attach a custom domain
QLO_SMTP_HOSTSMTP server; point at your relay to send real mail
MP_UI_AUTHuser:password for the Mailpit inbox

Deployment Dependencies

Source: https://github.com/gridalpha/qloapps-railway — upstream: https://github.com/Qloapps/QloApps and https://qloapps.com/documentation/

Hardware Requirements for Self-Hosting QloApps

ResourceMinimumRecommended
CPU1 vCPU2 vCPU
RAM1 GB app, 512 MB MySQL2 GB app, 1 GB MySQL
Storage5 GB volume10 GB+ once photography grows
RuntimePHP 8.1–8.4, MySQL 5.7+PHP 8.3, MySQL 9

Apache runs prefork because mod_php requires it, and each worker holds a full PHP interpreter. The image sizes the pool from the container's memory limit, so a bigger plan raises concurrency.

Self-Hosting QloApps

To run it locally, clone the deployment repository and build the image:

git clone https://github.com/gridalpha/qloapps-railway.git
cd qloapps-railway
docker build -t qloapps .

Then start MySQL and the application. The entrypoint creates the database and its scoped role itself, so the only credential you supply is the admin connection string:

docker network create qlonet
docker run -d --name qlo-mysql --network qlonet \
  -e MYSQL_ROOT_PASSWORD=change-me mysql:9.4
docker run -d --name qloapps --network qlonet -p 8080:8080 -v qlo-data:/data \
  -e PORT=8080 -e MYSQL_URL="mysql://root:change-me@qlo-mysql:3306/mysql" \
  -e QLO_DB_PASSWORD="a-long-random-string" \
  -e QLO_ADMIN_EMAIL="manager@yourhotel.com" \
  -e QLO_ADMIN_PASSWORD="a-strong-password" qloapps

The site is then on http://localhost:8080, the back office on /backoffice/. Upstream's webkul/qloapps_docker bundles its own MySQL and needs a human to finish a browser installer, which is why this template builds its own image.

Is QloApps Free to Self-Host?

QloApps is free and open source under the Open Software License 3.0 — no per-room fee, no per-booking commission, no licence key. Webkul sells optional add-ons such as a channel manager, payment gateways and themes, but the core PMS, booking engine and website are complete without them. Self-hosting costs only the infrastructure the three services use.

FAQ

What is QloApps?

An open-source hotel management system combining a Property Management System, a commission-free booking engine and a hotel website in one application, built on the PrestaShop 1.6 core by Webkul under the OSL 3.0 licence. It is free to self-host.

What does this Railway template deploy?

Three services: the QloApps application on Apache with PHP 8.3, a managed MySQL 9.4 database, and a Mailpit SMTP server with a web inbox, plus a volume at /data for photography, uploads, invoices and the shop's settings file.

Why does the template include a database and a mail server?

QloApps keeps every room, rate, reservation and configuration value in MySQL, so it cannot run without one. It also mails on its core flow — booking confirmations, account welcomes, password resets — and PHP's mail() does not work in a container, so a template with no SMTP would look fine while dropping every message.

How do I log in to the QloApps back office after deploying?

Append your QLO_ADMIN_DIR value to the public URL — /backoffice/ unless you changed it — and sign in with QLO_ADMIN_EMAIL and QLO_ADMIN_PASSWORD. QloApps blocks a back office in a directory named admin, which is why the path is not /admin.

Can I use my own domain with self-hosted QloApps?

Yes. Attach the domain to the qloapps service and set QLO_PUBLIC_DOMAIN to that hostname; the shop URL and every generated link are re-applied from it on the next boot.


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