Skip to main content
Orbit doesn’t require any infrastructure beyond what a standard Laravel app needs — a database, a web server, and (if you’re using queued jobs) a process to run them. There’s no separate frontend to deploy or API to stand up.

Environment

1

Set production environment variables

In .env (or your platform’s environment variable configuration):
Generate a fresh APP_KEY for production — don’t reuse a development key:
2

Point at a production-grade database

SQLite is fine for local development, but for production, switch to MySQL or PostgreSQL — see Configuration for the variables to set.
3

Configure mail for email notifications

Orbit sends email notifications through Laravel’s standard mail configuration. .env.example defaults MAIL_MAILER=log, which just writes emails to the log — point it at a real driver (smtp, ses, and so on) and fill in MAIL_HOST/MAIL_PORT/MAIL_USERNAME/MAIL_PASSWORD/MAIL_FROM_ADDRESS/MAIL_FROM_NAME before relying on email delivery in production. See Configuration.
4

Configure avatar moderation (nsfwjs)

Avatar uploads are screened by a separate nsfwjs HTTP service before being accepted (see Configuration). Run the nsfwjs container (or point NSFW_SERVICE_URL at your own instance) before enabling avatar uploads in production, or set NSFW_DETECTION_ENABLED=false to skip moderation entirely.

Build and deploy

1

Install dependencies without dev tooling

2

Run migrations

Don’t run migrate:fresh in production — it drops all tables first. That command is for local/demo data only.
3

Cache framework configuration

4

Serve the app

Point Nginx or Apache with PHP-FPM at the public/ directory, or run the app’s Docker image directly — see Docker for the container setup, which is suitable for production as well as local development.

Running the queue

Session, cache, and queue all default to the database driver. A queue worker is required in production, not optional — email notifications are always queued, never sent synchronously, so without a worker running they’ll pile up unsent in the jobs table. Run it under a process supervisor (such as supervisord or systemd) rather than the queue:listen command used in local development, so it restarts automatically:

What Orbit doesn’t need

Since Orbit has no public API (see Tech stack) and no broadcasting features in active use, you don’t need to provision a websocket server or API rate limiting for Orbit’s current feature set to work in production. You do need a transactional email provider (for notification emails) and a running queue worker — see above.
Last modified on August 17, 2026