Deploying a web app to the cloud is easier to repeat when the process is documented as a sequence rather than treated as a one-time launch. This guide provides a practical workflow for preparing an application, configuring its build and environment, connecting a domain, enabling HTTPS, checking logs, handling rollbacks, and reviewing the deployment on a regular cadence.
Overview
A cloud deployment usually connects four moving parts: your application source code, a build and runtime environment, a hosting service, and the domain or DNS configuration that makes the app reachable. The names and screens differ between providers, but the decisions are broadly similar.
The most reliable workflow separates deployment into five stages:
- Prepare: confirm that the project builds and starts outside your local machine.
- Configure: define the runtime version, build command, output directory, start command, and environment variables.
- Release: connect the repository or upload the build, then deploy a controlled version.
- Verify: test the application, domain, HTTPS, logs, and key user journeys.
- Review: record what changed and revisit recurring deployment risks monthly or quarterly.
This approach works for static frontends, server-rendered applications, APIs, and full-stack projects, although server-side applications may also require a database, background worker, cache, or separate service. Before choosing a platform, identify which parts of the application need to run continuously and which can be generated as static files.
A useful deployment record should include the repository and branch, the expected build command, the runtime version, required environment variables, the production URL, the domain provider, and the rollback method. Keep secrets out of this document; record variable names and ownership instead.
What to track
Application and build settings
Start by writing down the commands that work locally. For example, a frontend may use a package installation command followed by a build command that produces a directory such as dist or build. An API may need both a build command and a start command. Do not assume the cloud platform will infer these correctly.
Track the following values:
- Package manager and lockfile, such as npm, pnpm, or Yarn.
- Node.js, Python, PHP, or other runtime version.
- Build command and generated output directory.
- Production start command for server applications.
- Required ports, health-check paths, and service dependencies.
- Whether the deployment is triggered by a branch, tag, or manual action.
Pinning or explicitly declaring the runtime helps reduce surprises when a hosting environment changes its default. For related local and CI considerations, see the comparison of Node version managers and the guide to faster package installs in CI and local development.
Environment variables and services
Separate configuration from code. Common variables include an API base URL, database connection string, session secret, authentication settings, storage location, and feature flags. Maintain a small inventory with the variable name, purpose, environment, and rotation owner. Never paste secret values into source control, tickets, screenshots, or public debugging tools.
Check that the production application points to production services. A deployment can appear healthy while quietly using a development API or database. For APIs and integrations, test representative requests with an appropriate API testing tool; the API testing tools guide can help structure that part of the workflow.
Domain, DNS, and HTTPS
Record the intended canonical hostname, such as example.com or www.example.com, and decide whether the other version redirects to it. Your hosting provider will supply the DNS record or nameserver instructions. Follow those instructions precisely, then verify the result with a DNS checker rather than relying only on one local lookup. DNS changes can appear inconsistently while different resolvers update; use the DNS troubleshooting guide when results do not match.
After the domain resolves, confirm that HTTPS is active, that the certificate covers the hostname users visit, and that HTTP requests redirect as intended. Avoid changing several DNS records at once without recording the previous values. The custom-domain HTTPS checklist covers the main verification points.
Observability and recovery
Track where deployment logs, runtime logs, access logs, and build artifacts can be found. Also record how to redeploy a known-good commit and how to restore a previous version. A rollback plan is only useful if someone can execute it without reconstructing the process during an incident.
Cadence and checkpoints
Use a short checklist for every release and a deeper review on a monthly or quarterly schedule. The release checklist should cover:
- Run the application’s tests and production build locally or in CI.
- Confirm the intended commit, branch, or tag is being deployed.
- Check environment variable names and service endpoints without exposing values.
- Review migration requirements before changing an API or database schema.
- Deploy and wait for the build and health checks to complete.
- Open the production URL and test login, navigation, forms, API calls, and error states.
- Inspect logs for startup failures, missing variables, failed requests, and unexpected warnings.
- Record the deployment identifier, notable changes, and any follow-up work.
Once a month, check that the runtime and package-manager settings still match the project, unused environment variables are removed, domain records are documented, certificates are valid, monitoring alerts reach the right person, and the rollback path still works. Review deployment duration and recurring failures as well. A slow build or repeated manual fix is a process signal, even if the application remains available.
Every quarter, compare the current architecture with actual usage. Confirm that scheduled jobs still run, storage and database connections are healthy, access permissions remain appropriate, and staging resembles production closely enough to catch release problems. If the frontend workflow has changed, revisit the relevant frontend build-tool comparison rather than copying old settings into a new project.
How to interpret changes
Not every deployment issue has the same cause. A failed build usually points to dependency resolution, a runtime mismatch, a missing file, or an incorrect build command. A successful build followed by an unavailable site more often indicates an incorrect start command, port configuration, health check, or environment variable. A site that loads but fails when users submit data may have an API URL, authentication, CORS, database, or migration problem.
Compare the first failing deployment with the last known-good deployment. This narrows the investigation to the code, configuration, or infrastructure that changed between them. Text and configuration differences are easier to review with an online diff and text comparison tool.
When DNS appears inconsistent, distinguish a DNS issue from an application issue by testing the provider URL, the custom domain, and the DNS records separately. When HTTPS fails, check the exact hostname, certificate status, redirect behavior, and whether an old record still points to another service. When users report intermittent failures, inspect timestamps in access and runtime logs instead of relying on a single browser refresh.
Track changes in a simple table with columns for date, deployment, symptom, suspected cause, fix, and prevention. Over time, this reveals recurring variables: a particular dependency update, an undocumented manual step, a frequently rotated credential, or a service that lacks a health check.
When to revisit
Revisit this deployment workflow after every significant release and on a monthly or quarterly cadence, even when nothing appears broken. Update it immediately when you change hosting providers, domains, DNS records, runtime versions, build tools, databases, authentication, environment variables, or monitoring.
Use the following practical review sequence:
- Open the deployment record and compare it with the current repository configuration.
- Run a production-style build and confirm the documented commands still work.
- Verify the live domain, HTTPS redirect, key application paths, and API responses.
- Inspect recent build and runtime logs for repeated warnings or failed requests.
- Confirm that a known-good version can be identified and redeployed.
- Update the checklist with the actual fix for any issue found.
Keep a separate staging or preview environment when the application needs safer testing, and use a feedback loop that makes failures visible before production releases; the feedback-loop guide provides a useful framework. For ongoing confidence after launch, pair deployment checks with uptime monitoring as described in the uptime monitoring comparison.
A repeatable cloud deployment is not a single successful publish. It is a maintained record of assumptions, checks, and recovery steps. Review that record whenever the application or its surrounding services change, and the next deployment becomes a controlled routine rather than a reconstruction exercise.