End-to-end cloud infrastructure setup on DigitalOcean

Cloud infrastructure often grows organically: servers are configured manually, access is handed out, and failure of a single node stops the service. We set up cloud infrastructure turnkey: design the architecture, automate deployment, configure backups, and hand over clear procedures to the team. Service recovery time is reduced several times over.

Our competencies:

Frequently Asked Questions

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1365
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1330
  • B2B Advance company logo design
    B2B Advance company logo design
    776
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1077
  • AIDER company logo development
    AIDER company logo development
    1022
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1113

DigitalOcean Infrastructure: Where It Breaks and Why

The typical scenario looks the same: a service starts on one node, a second is added manually, then a third — database, cache, load balancer, backups. Each is configured by hand, and some parameters live only in the head of the engineer who set it up.

While the load is steady, the scheme holds.

The bottleneck of cloud infrastructure appears during growth: the application hits the connection limit to the database, the cache evicts hot keys, and horizontal scaling has no effect because sessions are stored locally on the instance.

Service failure under growing load comes not at the peak, but ten to fifteen minutes after — when the request queue has already grown and degradation has cascaded.

Manual server configuration adds a second class of problems: configurations diverge between environments, updates are applied differently, and rollback after a failed release becomes a separate operation with an unknown outcome.

Unpredictable production crashes almost always have one cause — no resource boundaries and no automatic replacement of a failed node.

Therefore, DigitalOcean infrastructure is designed not as a set of servers, but as a described configuration: memory and connection limits, liveness checks, instance auto-replacement, migrations with rollback capability. Let's break down how this is addressed.

What Changes After Setup: Effect on Timelines and Proportions

The effect of configuring infrastructure on DigitalOcean is measured not by feelings, but by metrics compared before and after: recovery time, share of automated operations, eliminated failure classes, release frequency.

Service Recovery Time

Rollout from a copy becomes one operation: configuration is described by files, copies are taken on schedule, and the environment is brought up from a state snapshot without manual edits.

The target recovery time is set in advance and verified by a drill, not determined during an incident.

Eliminated Failure Class

Changes in the control panel, diverged settings and "temporary" exceptions are the most common source of incidents. When configuration lives in a repository and passes validation before production, this failure class goes away, and divergences are visible in advance.

Deployment Automation and Release Speed

Deployment ceases to be an event: build, checks and delivery are performed in one action, and return to the previous version too. Releases are no longer tied to a window and on-call, so updates ship more often and smaller — such changes are easier to verify.

On-Call Without Night Wake-Ups

Alerts come for significant events, and typical failures — a crashed process, a full disk, an unavailable node — close themselves. The on-call engineer connects only where a human decision is needed, and a malfunction does not turn into downtime until morning.

Deployment Options on DigitalOcean and Their Limitations

On DigitalOcean, the deployment scheme determines what remains on our side and what the platform takes.

A single machine with manual setup, a managed cluster, a container platform and a hybrid with own hardware cover different tasks — and each mode has its own limitations that appear not at the start, but under load growth or node failure.

Option When It Fits Limitations
Manually configured machine one or two services, predictable load no self-healing; updates, backups and secret rotation by hand; node failure means downtime
Managed cluster several services, auto-restart and horizontal scaling needed node pools, ingress and persistent volumes remain with us; partial control over nodes
Container platform web services and APIs without dedicated on-call no node access, network settings and background jobs are limited
Hybrid with own hardware part of the data must remain in your own perimeter more complex network and routing, need a channel to the cloud and a shared access scheme

The limitations of the chosen scheme are cheaper to accept in advance than to sort out during an incident.

Before deployment, we capture the load profile and acceptable downtime, and describe the environment declaratively — then transition between modes, for example from a single machine to a managed cluster, remains a manageable task rather than rewriting infrastructure from scratch.

Workflow: From Infrastructure Audit to Handover

Infrastructure rarely breaks at the start — it degrades due to manual changes in the panel, diverged environments and copies that nobody tested by restoring.

Therefore, implementation stages go from the actual state to the reproducible, and each step ends with an artifact that can be verified.

  1. Infrastructure audit. We gather an inventory: what is deployed, which domains and records point to live nodes, where manual rules remain, how keys are stored. Separately, we check backups — we deploy a copy on an isolated environment and get actual recovery time instead of the stated one.
  2. Deployment scheme. We describe the target topology: private network, separation of public and internal perimeters, load balancer, managed database, object storage. The topology is fixed as code — on DigitalOcean, the environment is brought up with one command, not a set of clicks in the panel.
  3. Environment setup. Dev, staging and production are assembled from the same modules and differ by variables: node size, replica count, backup policy. We move secrets to a vault and issue them by roles, not through variables in the repository.
  4. Failure behavior testing. We shut down the application node, disable the database, and see whether health checks, node replacement and alerts worked. We run restore from a copy on a clean environment and record the time to a working state.
  5. Observability. We configure metrics, logs and alerts so that degradation is seen by your team, not by clients. Each alert has a concrete action in the runbook.
  6. Infrastructure handover to the team. Role-based access instead of shared accounts, diagrams, release procedure, rollback and recovery. We run procedures together with your engineers so that handover is not a folder of documents but a working skill.

Handover Package: Diagrams, Access, Policies, Documentation

The handover package is not an archive of files or access in chat, but a set by which your engineer deploys and maintains the environment without questions to us. What exactly remains with you after acceptance:

  • Transferred configurations — descriptions of services, networks and environments in the repository: deployment is repeated from code, not from an engineer's memory.
  • Environment diagrams — a map of test, pre-production and production perimeters: service connections, external entry points, private subnets.
  • Access policies and roles — a "role → permissions" matrix, procedure for issuing and revoking keys, rules for storing secrets and their rotation periods.
  • Backup policy — what is backed up, at what frequency, how long it is stored, where copies are located and how restore is verified.
  • Infrastructure documentation — topology, owners, procedure for typical operations: version deployment, rollback, scaling, planned maintenance.
  • On-call policy — who receives failure notifications, what steps are performed first, at what stage escalation is engaged.
  • Access and service accounts — the DigitalOcean console is transferred to your organization, automation keys are rotated, old ones are revoked.

Acceptance is by fact: your engineer deploys the environment and restores data from a copy according to instructions, without prompts from our side. If at some step our help was needed, the documentation is incomplete, and we improve it.

Case Study: Service Recovery Time Reduced Severalfold

Before: Failures Followed the Same Scenario

A service with a daily load peak ran on manually assembled servers: configuration was edited directly on the machine, the database ran as a single instance, and there was exactly one point of failure.

The team learned about an outage from users, not from the monitoring system, and recovery took from 40 to 60 minutes — that much went into finding the last change and repeating it on the live machine.

What Was Changed

The infrastructure was moved to DigitalOcean and described declaratively: environment state is stored in configuration, not in engineers' heads, so any node is brought up from the description anew.

The database was moved to a managed cluster with a replica and automatic failover, the application was placed behind a load balancer, and liveness checks were added — a failed node is replaced without manual intervention.

Backups and state snapshots are taken on schedule, and once a week restore is tested in a separate environment. This is the key point: an unverified copy is not a backup but a hope, and we removed this uncertainty.

The Result

Downtime decreased from 40–60 minutes to 3–5, and some incidents are closed by automation before a user notices them. Repeated failures went from 6–8 per quarter to 1–2, and these are now different causes, not the same failure.

A separate result of the implementation was a change in the team's operating mode: on-call stopped being manual triage, release is performed daily, and rollback to the previous version is one operation.

Managed Services vs. Manually Configured Machines

The boundary runs along one question: who operates the component — the provider or your team. Managed services take away the routine: updates, replication, backups, replacement of a failed node. Manually managed machines leave this within your zone, but give full control over the environment.

Managed services win on a standard perimeter: database, load balancer, object storage, container cluster.

The provider is responsible for availability and timely updates, while the maintenance window and recovery procedure are fixed in the SLA — the on-call engineer does not wake up because of a planned patch.

Manually managed machines are justified when non-standard setup is needed: custom kernel parameters, specialized agents, data placement requirements, services that cannot be packaged into a container.

A platform like DigitalOcean does not limit here, but it also will not backstop you: update, reboot and rollback are performed by your team according to your own policy.

Who is responsible for updates is the main dividing line of the choice. With a managed service, a missed patch remains the provider's zone; with a manually managed machine, it turns into a deferred failure and technical debt.

The contractor's responsibility zone is fixed by a scheme, not a promise: what the provider maintains, what is automated in configuration, what requires manual intervention.

Predictability of behavior is provided by code-described state — infrastructure is reproduced from scratch, and divergence between environments is visible before deployment.

Technical Concerns: Access, Fault Tolerance, Migrations

Questions before the start are almost always the same for engineering teams: what will happen to a running service, how to separate access, can backups be trusted. Below are direct answers, without promises and vague wording.

Our workflow is to first capture the current state: network diagram, roles, backup schedule, load growth points. Then we propose changes so that each step can be rolled back separately, rather than "we moved and saw what happens".

We have a production service running — will migration involve downtime?

No, if migration is done in stages. We bring up the target environment in DigitalOcean, deploy the service on it, warm it up, and only then switch traffic at the load balancer level.

The old site remains operational until the last step, so rollback is a reverse switch, not a restore from copies. Clients see a second-long connection interruption, not a downtime window.

How are access rights separated between teams?

Roles are described by the principle of least privilege: a separate account for each service, not a shared administrative key for everyone. Development gets access to its services and logs, but not to network settings and billing; operations — vice versa. All actions go to the log, so incident review relies on facts, not memories.

How do you verify that backups actually restore?

An unverified copy is an assumption. We regularly deploy it in an isolated environment, verify data integrity and measure actual recovery time. If the service doesn't come up from the copy within an acceptable time, we change the storage scheme rather than hope for the best.

What about fault tolerance — will the service go down with a single node?

Nodes are distributed across independent availability zones, the load balancer removes the failed one from rotation, and services restart automatically. Configuration and data are not tied to a specific machine, so node replacement is a planned operation, not an emergency.

Let's Discuss the Task: We'll Return with a Plan and Work Estimate

To discuss an infrastructure task substantively, not at the level of general words, we start with inputs — they take half an hour on your side and remove most assumptions from the future estimate. A finished project isn't needed: what you already have at hand is enough.

  • How it works now: which services run, where they are hosted, what has already been moved to DigitalOcean, and what remains on previous sites.
  • Load profile: users, number of requests, peak periods, data volume and its growth rate — these are inputs for calculating machine size and autoscaling thresholds.
  • Fault tolerance requirements: acceptable downtime, whether a standby node in another region is needed, how often to take backups and within what time recovery must happen.
  • Access and security: rules for connecting to servers, network isolation, secret storage, logging of administrator actions.
  • Constraints: desired timelines, windows in which switches are allowed, and external contractors with whom work must be coordinated.
  • Owner on your side: the person who approves infrastructure decisions and accepts the result.

After the review, we return with a work plan and estimate: breakdown into stages, dependencies between them and timelines for environment setup — from network and servers to monitoring and handover to operations.

The procedure for starting work is simple: approve the plan, fix control points and start with the perimeter that gives effect sooner than the others.