Shared folders do not show changes clearly. We can overwrite work or release code that no one reviewed.
We use Git + GitLab. Git keeps change history. GitLab gives the team a shared place to review and merge changes.
At first, one person can write the app and copy it to a server. The goal is simple: users can use it.
Shared folders do not show changes clearly. We can overwrite work or release code that no one reviewed.
We use Git + GitLab. Git keeps change history. GitLab gives the team a shared place to review and merge changes.
It works on a laptop, but the server has different libraries. We spend time rebuilding its runtime environment.
We use Docker to package the app and its dependencies into an image. This reduces differences between environments.
Manual tests can be missed. A written release checklist cannot execute its own commands.
We define CI/CD jobs in GitLab. A Runner executes the tests, builds and deploy commands. GitLab records the results.
Rebuilding later can produce a different image. An image on one laptop is not available to every server.
We use an image registry to store the built image. Deployment selects its exact digest: the image ID.
A release is not enough. We also need a place to run it, a way to reach it, and a way to recover it.
Manual setup creates differences. After a server fails, we may not know which settings made the app work.
We use infrastructure as code (IaC). Files describe resources and setup. We review and apply changes with tools such as Terraform and Ansible.
Docker runs containers on a host. By itself, it does not choose hosts across a cluster or manage a cluster-wide rollout.
We use Nomad to place instances and apply update and recovery rules. It can restart or replace failed tasks, subject to policy and capacity.
App addresses can move. Open access can expose data. Replacing a container can remove files stored inside it.
We add DNS, TLS and routing for access; identity and secrets for protection; persistent storage and backups when the app keeps data.
A running process can still give errors. A restart cannot restore lost data. Old apps can leave access and costs behind.
We use monitoring and alerts to detect failures, restore procedures to recover data, and a retirement plan to stop traffic and remove access safely.