Sign inSign up

heshamfouda/locanda

By heshamfouda

•Updated about 2 months ago

Self-hosted, white-label booking and reservation platform for hotels and short-stay apartments.

Buildkit cache
Image
Operating systems
Content management system
Databases & storage
0

328

heshamfouda/locanda repository overview

⁠Locanda

Self-hosted, white-label booking platform for hotels and short-stay apartments. Laravel 13, Vue 3, Postgres, Typesense.

Source and deployment examples: https://github.com/hesham-fouda/locanda⁠

This image carries the application and nothing else — no database, no cache, no reverse proxy, no process supervisor. Bring your own, or use one of the compose files in the repository.

⁠Tags

TagWhat it is
betaThe newest release while Locanda is pre-1.0. Use this today.
0.0.1One exact release. Pin it if you want a build that never moves.
0.0The newest patch in the 0.0 series.
latestWill appear with the first stable release. It does not exist yet.

Built for linux/amd64 and linux/arm64.

⁠Quickest start

curl -O https://raw.githubusercontent.com/hesham-fouda/locanda/main/docker-compose.minimal.yml
mv docker-compose.minimal.yml docker-compose.yml
docker compose up -d

That brings up Locanda and Postgres, with photographs on a local volume. Open the published port and the first-run wizard handles markets, currency, tax and the first administrator.

Five more shapes are in the repository — the full stack with Redis, Typesense and MinIO; a managed database; nothing but the app; and overlays for an existing Traefik or Caddy.

⁠Running it directly

docker run -d -p 8080:80 \
  -e APP_URL=https://stay.example.com \
  -e DB_HOST=postgres -e DB_DATABASE=locanda \
  -e DB_USERNAME=locanda -e DB_PASSWORD=secret \
  -v locanda-storage:/app/storage/app \
  heshamfouda/locanda:beta

⁠Roles

One image, four roles, chosen by the command. A Laravel deployment is not one process: webhook delivery and calendar imports are queued, and calendar polling is scheduled. A web-only stack serves every page correctly while quietly never reading a calendar again.

CommandWhat it does
web (default)Serves the application on port 80
workerDrains the queue; recycles hourly, bounded retries
schedulerRuns scheduled work, including calendar sync
migrateApplies migrations and exits, for an orchestrator to wait on

Anything else is run as given, so docker run … php artisan tinker works.

⁠Configuration

Postgres is required. Not a preference: double booking is prevented by an EXCLUDE USING gist constraint, the rate and stay rules use generated columns with a CHECK, and search uses ilike and jsonb. The schema does not build on anything else. The image defaults DB_CONNECTION to pgsql for that reason.

VariableDefaultNotes
APP_KEYgeneratedMade on first boot and kept in the storage volume if unset
APP_URLhttp://localhostSigned URLs and OAuth callbacks are built from it
DB_HOST DB_PORT DB_DATABASE DB_USERNAME DB_PASSWORD—Required
REDIS_HOST REDIS_PASSWORD—Optional; the database drivers work without it
QUEUE_CONNECTION CACHE_STORE SESSION_DRIVERdatabaseSet to redis when you have one
SCOUT_DRIVERcollectiontypesense for ranked search
FILESYSTEM_DISKpublicPhotographs on the volume; s3 for a bucket
TZEtc/UTCContainer clock and log timestamps
LOCANDA_AUTO_MIGRATEfalseMigrate on start. Prefer the migrate role with more than one container
LOCANDA_QUEUESdefaultWhich queues the worker drains

⁠Volume

/app/storage/app

Photographs on the public disk and the generated application key. Deliberately not /app/storage — each container keeps its own compiled views there, and sharing that directory has containers clearing it under each other at boot.

Logs go to the container's output, so docker logs has them.

⁠Notes

  • Serves as www-data, not root. The entrypoint starts as root only long enough to fix ownership on a freshly mounted volume.
  • Config, routes and views are cached at start-up rather than at build, so the environment baked in is yours and not the build machine's.
  • The first boot of an empty database needs migrations: use the migrate role, or LOCANDA_AUTO_MIGRATE=true for a single container.

⁠Status and licence

v0.0.1. The catalogue, pricing, availability, checkout, reviews, two-way iCal sync, outbound webhooks and the operator panel are built. No payment provider is wired up yet, so bookings are pay-on-arrival.

Source-available, not OSI open source: free for individuals, non-profits and businesses earning under USD 5,000/month; a commercial subscription is required at or above that. See LICENSE.md in the repository.

Tag summary

Content type

Image

Digest

sha256:53f57903c…

Size

109.7 MB

Last updated

about 2 months ago

docker pull heshamfouda/locanda:beta