For the last couple of years, I have been using buddy.works for my testing and production deployments, but recently I wanted to save a couple of danish kroner and decided to downgrade my subscription. This led me to take a closer look at my deployment process. The rest of this post will give a conceptual view of that process.
I tend to work on single environment projects, where buddy handles the compile, build and deploy. Therefore, this short recipe caters mostly to that particular scenario.
This first thing I do, is to build the version locally. For a typical composer I run the following commands:
composer install --no-interaction --prefer-dist --optimize-autoloader
Now, that the project is setup for production I continue to build the version release.
In order to build the version, I create a new folder under deployments/
VERSION. This is a local folder structure, where the
PROJECT is the name of the project and
VERSION is the GIT hash of the production commit.
I then, copy the relevant files from my project into this new folder. The relevant files obviously, depend on which kind of project you are building, but for a Laravel project the relevant files are:
After the files are copied to the version folder. I compress the folder and I’m now ready to upload the compressed folder to the server.
The version is now ready and I use the following steps to deploy it on your server:
1. Folder Structure
I maintain a clear folder structure on my server for organizing the deployments. This is the structure:
ROOT/public/currentfolder acts as a symbolic link pointing to the current deployed version.
ROOT/versionsfolder stores all versions that have been deployed.
2. Unzip Uploaded Folder
On the server, I make sure that I upload the version and then navigate to the designated deployment path (e.g.,
ROOT/versions). Then I unzip the uploaded folder into this directory.
unzip VERSION.zip ROOT/versions
This will result in a new version in the folder:
3. Create Symbolic Link
The last thing is to then update the symbolic link to point to the new version. Execute the following commands:
rm -f public/current
ln -s versions/VERSION public/current
VERSION with the actual version identifier and that’s it. This is a conceptual walk-through of my deployment process, which obliviously can be summarized in a neat little script.