# Deployment This repository uses a Bash-based production deploy flow. ## Normal deploy Run the existing entrypoint: ```bash 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-dev` on the server - run `php artisan migrate --force` - clear and rebuild Laravel caches - restart queue workers with `php artisan queue:restart` ## Deploy options ```bash bash sync.sh --skip-build bash sync.sh --skip-migrate bash sync.sh --no-maintenance ``` Environment overrides: ```bash REMOTE_SERVER=user@example.com REMOTE_FOLDER=/var/www/app bash sync.sh ``` You can also override the local build command explicitly: ```bash 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 bash scripts/push-db-to-prod.sh --force ``` Or combine it with deploy: ```bash 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 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 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 `mysqldump` export - 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 --force` unless `--skip-migrate` is 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: ```bash 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.sh` without `--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:cache` in deploy automation because the route file contains closure routes.