ryotkim.com

News

NEWS

The Struggle of Setting Up RichText on a 1GB Linode ⚔️

RichText

The Struggle of Setting Up RichText on a 1GB Linode ⚔️

1. The Challenge of RichText Setup

One of the first hurdles we faced was enabling RichText fields in Payload CMS.
It wasn’t as simple as just adding a field — it required extensions, plugins, and a lot of trial and error with the configuration.

Along the way:

  • Dependency mismatches caused build failures
  • .next and .cache files piled up, eating precious disk space
  • Even after fixing configs, the UI would sometimes render blank (caused by incomplete cache generation)

Getting it to run smoothly was definitely a “trial by fire” moment.


2. Hitting the Limits of Linode’s 1GB Plan

The environment we used was Linode Nanode (1GB RAM / 25GB SSD) — and that turned out to be the real bottleneck.

What the numbers looked like:

  • Total memory: 961MB
  • In use: ~700MB
  • Free: just a few dozen MB (!!)
  • Swap: 4.5GB available, ~750MB already in use

In other words, physical memory was always maxed out.
Every time we launched containers or rebuilt Payload/Next.js, the system fell back heavily on Swap.

This explained why, right after opening the Payload admin panel, the UI would appear broken or unresponsive: the server was still churning through cache generation and module resolution, slowed down by constant swapping.


3. How We Managed

Short-term tricks:

  • Running cleanup commands (rm -rf .next node_modules/.cache/payload) before each build
  • Waiting until the logs showed “Ready” before opening the browser
  • Leaning on Swap to keep the system afloat

Medium-term band-aid:

  • Considering increasing Swap (from 4GB → 8GB)
    → but this is only a temporary fix, since Swap is always much slower than real RAM.

4. The Takeaway

  • The real culprit wasn’t disk space, but memory exhaustion.
  • Running Payload + Next.js + Docker on just 1GB RAM is simply not sustainable.
  • The practical baseline is at least 2GB–4GB RAM.

👉 So the issues we saw with RichText not showing up or the UI breaking weren’t caused by Payload itself, but by the combination of:

  • A complex setup process
  • The hard limits of a 1GB Linode plan

The clear next step: upgrade to a 2GB (or higher) Linode plan 🚀


Would you like me to make this more personal-story/blog style (with more “I/we” narrative and less technical breakdown), or keep it technical/developer-journal style as it is?