Scale up as you grow — whether you're running one virtual machine or ten thousand.

From GPU-powered inference and Kubernetes to managed databases and storage, get everything you need to build, scale, and deploy intelligent applications.

This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.
Heya, @keneucker
This is usually caused by heavy first-run build work rather than the application size or a broken Droplet.
If your containers are running composer install and npm install on startup, it’s very easy to saturate a small Droplet. Composer dependency resolution, Node module installs, Astro builds, and MySQL initialization are all CPU- and disk-intensive. On 1 vCPU (even with 2 GB RAM), this can peg the CPU at 100% for a long time and make the Droplet appear unreachable, including over SSH.
For production, these steps should not happen at runtime. The usual approach is to build everything ahead of time (locally or in CI) using a multi-stage Dockerfile, then deploy pre-built images to the Droplet. A startup should only involve launching services, not compiling or installing dependencies.
It’s also worth checking memory pressure. Node + Composer + MySQL together can easily push a small Droplet into swapping or OOM behaviour, which makes the system feel “hung.” Adding swap and keeping build steps off the server typically stabilizes things immediately.
You’re not forced to use App Platform — many people run Laravel + frontend stacks on Droplets successfully — but the key is moving builds out of container startup so the Droplet only runs already-built code.
Hope that this helps!
Hi there,
I might be wrong, but this behavior is pretty common when doing first-time installs on small Droplets. Composer and Node module installs are very CPU and memory intensive, and on a $4 or even a 2 GB Droplet it’s easy to hit 100% CPU and memory pressure, which can make the Droplet feel unresponsive.
In many cases this can still work with a bit of tuning. Enabling some swap helps a lot, especially during the initial install. It also helps to avoid running composer install and npm install every time the containers start. A common pattern is to build the Docker images locally or in CI, then deploy prebuilt images to the Droplet.
For a small setup, Laravel, MySQL, and a Node based frontend can run fine on a Droplet once everything is built and running, but the build phase needs more resources than people often expect. If you’d rather not deal with that, App Platform handles the build step for you and keeps it isolated from runtime.
So it can work on a Droplet with some adjustments, but moving build work out of runtime and adding a bit of swap usually makes a big difference.