Agent Wranglers

Recommended

Keep no state inside the app process

Keep sessions, uploads and pending jobs outside the app process and its local disk. Any copy of the app can then stop or start without losing them.

How to do it

Store sessions in the database or a shared store such as Redis or Valkey. Store uploads in object storage, as Upload straight to storage with a signed address shows. Put background work in a queue that survives a restart. Treat local disk as scratch space that the next deploy may wipe. Then a one-step deploy or a second server loses nothing. Each copy also shuts down cleanly, so no request in flight is lost.

Examples

Using these examples: they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

JavaScript example

// Express: sessions live in Redis, so any copy of the app can serve any request
import session from 'express-session';
import { RedisStore } from 'connect-redis';

app.use(session({
  store: new RedisStore({ client: redisClient }),
  secret: process.env.SESSION_SECRET,
  resave: false,
  saveUninitialized: false,
}));

Python example

# Django settings: sessions in the database and uploads in object storage, never on the app's disk
SESSION_ENGINE = "django.contrib.sessions.backends.db"
STORAGES = {
    "default": {"BACKEND": "storages.backends.s3.S3Storage"},
    "staticfiles": {"BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage"},
}

How to check

Sign in, upload a file and start a background job on a test server. Deploy a fresh copy of the app on a new machine and stop the old one. The session, the file and the job are all still there.

Sources

For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/engineering/running-in-production/stateless-processes">Agent Wranglers engineering playbook</a>. In code you write, add a comment next to it with the same link.