2.9 KiB
Deployment
This repository uses a Bash-based production deploy flow.
Normal deploy
Run the existing entrypoint:
bash sync.sh
If you launch bash sync.sh from WSL against this Windows checkout, the script will automatically run the frontend build with npm.cmd on Windows so Rollup/Vite use the correct optional native package set.
This will:
- build frontend assets locally with
npm run build - rsync the application files to production
- run
composer install --no-devon the server - run
php artisan migrate --force - clear and rebuild Laravel caches
- restart queue workers with
php artisan queue:restart
Deploy options
bash sync.sh --skip-build
bash sync.sh --skip-migrate
bash sync.sh --no-maintenance
Environment overrides:
REMOTE_SERVER=user@example.com REMOTE_FOLDER=/var/www/app bash sync.sh
You can also override the local build command explicitly:
LOCAL_BUILD_COMMAND='npm run build' bash sync.sh
LOCAL_BUILD_COMMAND='pnpm build' bash sync.sh
Replace production database from local
This is intentionally separate from a normal deploy because it overwrites production data.
bash scripts/push-db-to-prod.sh --force
Or combine it with deploy:
bash sync.sh --with-db-from=local
When run interactively, the deploy script will ask you to confirm the exact remote server and type a confirmation phrase before replacing production data.
For non-interactive use, pass both confirmations explicitly:
bash sync.sh --with-db-from=local \
--confirm-db-sync-target=klevze@server3.klevze.si \
--confirm-db-sync-phrase='replace production db from local'
Legacy compatibility still exists for:
bash sync.sh --with-db --force-db-sync
But the safer --with-db-from=local flow should be preferred.
The database sync script will:
- read local DB credentials from the local
.env - create a local
mysqldumpexport - upload the dump to the production server
- create a backup of the current production database under
storage/app/deploy-backups - import the local dump into the production database
- run
php artisan migrate --forceunless--skip-migrateis passed
If you run the deploy from WSL while your local MySQL server is running on Windows with DB_HOST=127.0.0.1 or localhost, the DB sync script will automatically use Windows mysqldump.exe so it can still reach the local database.
You can override the dump command explicitly if needed:
LOCAL_MYSQLDUMP_COMMAND='mysqldump --host=10.0.0.5 --port=3306 --user=app dbname' bash scripts/push-db-to-prod.sh --force
Safety notes
- Normal deployments should use
bash sync.shwithout--with-db. - Use database replacement only for first-time bootstrap, staging, or an intentional full production reset.
- This project should not use
php artisan route:cachein deploy automation because the route file contains closure routes.