Donal McBreen 0b439362da Asset paths
During deployments both the old and new containers will be active for a
small period of time. There also may be lagging requests for older CSS
and JS after the deployment.

This can lead to 404s if a request for old assets hits a new container
or visa-versa.

This PR makes sure that both sets of assets are available throughout the
deployment from before the new version of the app is booted.

This can be configured by setting the asset path:

```yaml
asset_path: "/rails/public/assets"
```

The process is:
1. We extract the assets out of the container, with docker run, docker
cp, docker stop. Docker run sets the container command to "sleep" so
this needs to be available in the container.
2. We create an asset volume directory on the host for the new version
of the app on the host and copy the assets in there.
3. If there is a previous deployment we also copy the new assets into
its asset volume and copy the older assets into the new asset volume.
4. We start the new container mapping the asset volume over the top of
the container's asset path.

This means the both the old and new versions have replaced the asset
path with a volume containing both sets of assets and should be able
to serve any request during the deployment. The older assets will
continue to be available until the next deployment.
2023-09-11 12:18:18 +01:00
2023-08-22 08:24:31 -07:00
2023-09-11 12:18:18 +01:00
2023-09-11 12:18:18 +01:00
2023-08-22 08:24:31 -07:00
2023-08-22 08:24:31 -07:00
2023-08-22 08:24:31 -07:00
2023-03-10 19:40:57 +00:00
2023-08-24 09:16:13 -07:00
2023-08-23 15:15:51 +02:00
2023-01-07 15:32:25 +01:00
2023-08-22 17:11:26 -07:00

Kamal: Deploy web apps anywhere

From bare metal to cloud VMs using Docker, deploy web apps anywhere with zero downtime. Kamal uses the dynamic reverse-proxy Traefik to hold requests, while the new app container is started and the old one is stopped — working seamlessly across multiple hosts, using SSHKit to execute commands. Originally built for Rails apps, Kamal will work with any type of web app that can be containerized with Docker.

➡️ See kamal-deploy.org for documentation on installation, configuration, and commands.

Contributing to the documentation

Please help us improve Kamal's documentation on the the basecamp/kamal-site repository.

License

Kamal is released under the MIT License.

Description
Deploy web apps anywhere.
Readme 4 MiB
Languages
Ruby 98.1%
Dockerfile 1%
Shell 0.9%