It is recommended to do an initial installation on hosted server without all dev packages and tools. The best approach is to prepare a local docker installation where it is possible to run composer and NPM. For this purpose, we can use an intermediate server for clean code generation in PHP and css/js. The server is also used for final testing of the application before a transfer of cleaned code to the live server.
In order to have the closest possible conditions for running the application on the deployment server, the Apache web server is used here instead of the nginx development server.
Here are basic tasks necessary for preparation of deployment server:
- run on development server webpack.mix.js to generate production clean code for CSS /js files in custom
/deploy/resourcesfolder (needs adjustment of webpack.mix.js)
- fast copy of application code to the deployment server. On Windows/WSL2 is the fastest file transfer achieved with copy inside virtual Ubuntu distribution. EXAMPLE of copy_to_deploy.sh from application root on dev server
/projects/laravel-blogto deployment server located in
#!/usr/bin/env bash cd /projects/laravel-blog cp -R laravel/app ../apache/web cp -R laravel/bootstrap ../apache/web cp -R laravel/config ../apache/web cp -R laravel/database ../apache/web cp -R laravel/resources ../apache/web cp -R laravel/routes ../apache/web cp -R laravel/storage ../apache/web cp -R laravel/themes ../apache/web cp -R laravel/vendor ../apache/web cp laravel/.env ../$target_dir_laravel/.env cp laravel/artisan ../$target_dir_laravel/artisan cp laravel/composer.json ../$target_dir_laravel/composer.json cp laravel/composer.lock ../$target_dir_laravel/composer.lock
composer.lock because it contains important information on package-versions that should be used.
- composer.json needs to be customized for production - remove post-installation scripts.
- in .env file, it is necessary to set:
When performing a production deploy, you can pass the
--no-dev flag to Composer:
composer.phar install --optimize-autoloader --no-dev
composer.lock file might contain information about dev-packages. This doesn't matter. The
--no-dev flag will make sure those dev-packages are not installed.
For correct presentation of images on deployment server, it is necessary to create a symbolic link with artisan:
php artisan storage:link