Build and Deploy
Now that we have set up the repository, we are ready to push changes to your PaaS environment.
The key concept is that your PaaS project is a git repository. Every time you push to that repository, a new version of your store will be created from the source code and deployed. Different environments (e.g., dev-previews, staging, and production) are mapped by corresponding branches.
Push main branch
To push your latest changes, run the following commands from your terminal:
git add .
git commit -m "Applied new configuration"
git push -u shopware main
First, we stage all changes and then add them as a new commit. Then, we push them to our shopware
origin (remember, the one for our PaaS environment) on the main
branch.
This will trigger a new build with a subsequent deploy consisting of the following steps:
Build | Deploy |
---|---|
Configuration validation | Hold app requests |
Build container image | Unmount live containers |
Installing dependencies | Mount file systems |
Run build hook | Run deploy hook |
Building app image | Serve requests |
After both steps have been executed successfully (you will get extensive logging about the process), you will be able to see the deployed store on a link presented at the end of the deployment.
First deployment
The first time the site is deployed, Shopware's command line installer will run and initialize Shopware. It will not run again unless the install.lock
file is removed. Do not remove that file unless you want the installer to run on the next deploy.
The installer will create an administrator account with the default credentials.
username | password |
---|---|
admin | shopware |
Make sure to change this password immediately in your Administration account settings. Not doing so is a security risk.
Manual steps
After the first deploy, some steps must be done manually before the environment is entirely up and running.
JWT keys
The JWT keys, used for the Administration authentication, need to be generated for your project. The keys will be stored securely in the Shopware Paas environment variable storage and should not be committed to the Git repository or be available on the file system.
To generate the keys and add them to the storage, run the following command:
shopware ssh --app=app "bin/console system:generate-jwt-secret --use-env" |\
grep -E "^JWT_(PUBLIC|PRIVATE)_KEY=" |\
while read line ; do \
shopware variable:create --sensitive 1 --level project --name env:$(echo $line | cut -d "=" -f 1) --value $(echo $line | cut -d "=" -f 2-); \
done
Run this command from your project directory so the shopware
command knows which project to update.
The command connects to the application server to generate the JWT keys. It then sets the JWT_PUBLIC_KEY
and JWT_PRIVATE_KEY
as private environment variables.
Finally, execute the shopware redeploy
command to proceed with the build-and-deploy process.
Shopware config
By default, Shopware looks for the JWT keys on the file system. The configuration must be updated to use the keys in the environment variables.
If you use the Shopware Flex Paas template, the configuration will be applied automatically.
shopware:
api:
jwt_key:
private_key_path: '%env(base64:JWT_PRIVATE_KEY)%'
public_key_path: '%env(base64:JWT_PUBLIC_KEY)%'
Theme assets
It is a known issue that after the first deployment, theme assets are not compiled during the deployment. For that reason, your store will look unstyled. The Theme Build section explains how to resolve that issue.
Composer authentication
You must authenticate yourself to install extensions from the Shopware store via composer. In your local development environment, this is possible by creating an auth.json
file that contains your auth token. However, this file shouldn't be committed to the repository.
The following command adds your authentication token to the secure environment variable storage of Shopware Paas. This variable (contains the content which would otherwise be in auth.json
) will be available during the build step and be automatically picked up by the composer.
shopware variable:create --level project --name env:COMPOSER_AUTH --json true --visible-runtime false --sensitive true --visible-build true --value '{"bearer": {"packages.shopware.com": "%place your key here%"}}'
Make sure to replace %place your key here%
with your actual token. You can find your token by clicking 'Install with Composer' in your Shopware Account.
Extending Shopware - plugins and apps
The PaaS recipe uses the Composer plugin loader.
Manually trigger rebuilds
Sometimes, you might want to trigger a rebuild and deploy of your environment without pushing new code to your project. To do this for your main environment, create a REBUILD_DATE
environment variable. This triggers a build right away to propagate the variable.
shopware variable:create --environment main --level environment --prefix env --name REBUILD_DATE --value "$(date)" --visible-build true
To force a rebuild at any time, update the variable with a new value:
shopware variable:update --environment main --value "$(date)" "env:REBUILD_DATE"
This forces your application to be built even if no code has changed.