Production
A Creopse application deploys like any other Laravel + Inertia application — the usual best practices (server, caching, Composer/Artisan optimizations) apply without any particularity. This page therefore only covers what's specific to Creopse; for everything else, refer to Laravel's official deployment guide.
Deployment steps
# Dependencies, without development packages
composer install --optimize-autoloader --no-dev
pnpm install --frozen-lockfile
# Build frontend assets — never `pnpm dev` in production
pnpm build
# Migrations
php artisan migrate --force
# Laravel optimizations
php artisan config:cache
php artisan route:cache
php artisan view:cache
# Link to public storage (media library, uploads)
php artisan storage:linkMake sure storage/ and bootstrap/cache/ stay writable by the PHP process, and that queue workers (if used) are restarted after deployment.
Specific to Creopse
public/creopse/config.jsonc
apiBaseUrl must point to the production domain, not a development value (creopse.test, localhost...) — otherwise the admin interface keeps calling the wrong API once deployed.
forceDevMode
Must stay false in production. See Configuration — enabling it in production allows editing data structures for every content element from a deployed environment, which isn't desirable outside of explicit debugging.
install.lock
The public/creopse/install.lock file must be absent in production. If it's still present, any visit to /creopse/ redirects to the install wizard instead of the admin interface — see Installation.
Default credentials
If the default admin account (admin/admin) wasn't changed during initial setup, do it before going live — see Installation.
Response compression
The compression middleware automatically negotiates Brotli, Gzip, or Deflate depending on the PHP extensions available and whether the connection is HTTPS. Check that ext-brotli (for Brotli) or ext-zlib (for Gzip/Deflate) is actually installed on the host — otherwise compression stays silently disabled. See Configuration to adjust compression.level/compression.min_length, or to disable compression if it's already handled upstream (Nginx, Caddy, a CDN).
Rate limiting
CREOPSE_RATE_LIMIT (default 600/minute) has no universal production value — adjust it based on actual expected traffic rather than keeping the default out of habit.
Before going live
- [ ]
APP_ENV=productionandAPP_DEBUG=falsein.env. - [ ]
apiBaseUrlupdated inpublic/creopse/config.jsonc. - [ ]
forceDevModeset tofalse. - [ ]
install.lockabsent. - [ ] Default admin credentials changed.
- [ ] Assets built through
pnpm build(notpnpm dev).
See also
Once in production, see Updating Creopse for the version upgrade process.