{
  "manifest_version": "1",
  "slug": "redis",
  "title": "Redis",
  "headline": "Self-host Redis",
  "description": "Run Redis 8 on an exe.dev VM: password-protected users, persistence for a cache or a data store, nightly tested backups, and Redis Insight.",
  "category": "databases",
  "tags": [
    "redis",
    "redis 8",
    "cache",
    "queue",
    "key-value store",
    "redis insight",
    "backups"
  ],
  "url": "https://exe.dev/deploy/redis",
  "markdown_url": "https://exe.dev/deploy/redis.md",
  "upstream": {
    "website": "https://redis.io",
    "source": "https://github.com/redis/redis",
    "docs": "https://redis.io/docs/latest/",
    "license": "AGPL-3.0, RSALv2 or SSPLv1 (your choice)"
  },
  "example_vm_name": "my-redis",
  "time": "10 minutes",
  "stack": [
    {
      "name": "Redis 8",
      "detail": "From Redis's APT repository, with search, JSON, and time series built in",
      "port": 6379,
      "data": "/var/lib/redis"
    },
    {
      "name": "Redis Insight 3",
      "detail": "Web UI in Docker, behind exe.dev login and an email allowlist",
      "port": 8000,
      "data": "~/redis/insight"
    },
    {
      "name": "Nightly backups",
      "detail": "A snapshot of every key, plus the users, 14 nights kept",
      "data": "~/redis/backups"
    }
  ],
  "access": [
    {
      "url": "https://my-redis.exe.xyz/",
      "who": "private",
      "what": "Redis Insight, connected as the Redis admin user"
    }
  ],
  "delivers": [
    "Redis 8, started at boot, listening on localhost only, with a memory limit sized to the VM and every write logged to disk.",
    "No anonymous access, an admin user for you, and an `app` user whose settings are in `~/redis/app.env`.",
    "Redis Insight at the VM's private URL, open only to the owner's exe.dev email.",
    "Nightly snapshot backups, one restored into a scratch Redis and checked."
  ],
  "owner_runs_after": [
    "ssh my-redis.exe.xyz cat redis/app.env",
    "ssh -N -L 6380:localhost:6379 my-redis.exe.xyz"
  ],
  "deployable": true,
  "deploy": {
    "new_vm_url": "https://exe.dev/new?prompt=Set%20up%20Redis%20on%20this%20VM%20by%20following%20the%20exe.dev%20recipe%20at%20https%3A%2F%2Fexe.dev%2Fdeploy%2Fredis.md%20from%20top%20to%20bottom.%0A%0AThe%20recipe%27s%20example%20VM%20name%20is%20my-redis.%20This%20VM%27s%20name%20is%20the%20output%20of%20%60hostname%60%3A%20use%20it%20wherever%20the%20recipe%20writes%20my-redis.%20Skip%20the%20step%20that%20creates%20the%20VM%3B%20you%20are%20on%20it.%0A%0AYou%20are%20done%20when%20all%20of%20these%20are%20true.%20Check%20each%20one%20yourself%3A%0A-%20Redis%208%2C%20started%20at%20boot%2C%20listening%20on%20localhost%20only%2C%20with%20a%20memory%20limit%20sized%20to%20the%20VM%20and%20every%20write%20logged%20to%20disk.%0A-%20No%20anonymous%20access%2C%20an%20admin%20user%20for%20you%2C%20and%20an%20%60app%60%20user%20whose%20settings%20are%20in%20%60~%2Fredis%2Fapp.env%60.%0A-%20Redis%20Insight%20at%20the%20VM%27s%20private%20URL%2C%20open%20only%20to%20the%20owner%27s%20exe.dev%20email.%0A-%20Nightly%20snapshot%20backups%2C%20one%20restored%20into%20a%20scratch%20Redis%20and%20checked.%0A%0ARead%20the%20whole%20recipe%2C%20including%20the%20closed%20details.%20For%20initial%20setup%2C%0Afollow%20%22Install%20by%20hand%22%20from%20top%20to%20bottom%3A%20the%20Redis%20repository%20and%0Aserver%2C%20the%20users%20and%20lock-down%2C%20tuning%20%28leave%20mode%3Dstore%29%2C%20the%20app%0Auser%2C%20Redis%20Insight%20on%20port%208000%2C%20the%20backup%20timer%2C%20and%20the%20scratch%0Arestore%20test.%20The%20walkthrough%20sections%20are%20for%20the%20owner%20afterwards%3A%0Adon%27t%20import%20data%2C%20switch%20to%20cache%20mode%2C%20set%20up%20Tailscale%20or%20Docker%0Aaccess%2C%20or%20run%20the%20Restore%20or%20Update%20instructions%20during%20initial%20setup.%0ANever%20overwrite%20an%20existing%20~%2Fredis%2F%2A.env%20file%20or%20%2Fetc%2Fredis%2Fusers.acl.%0AAllow%20only%20the%20owner%27s%20email%20in%20Redis%20Insight%2C%20read%20from%20the%20reflection%0Aintegration%3B%20if%20that%20fails%2C%20ask%20the%20owner%20for%20it.%20Check%20Redis%20Insight%20on%0Alocalhost%20with%20no%20email%2C%20a%20wrong%20email%2C%20and%20the%20owner%27s%20email.%0ALeave%20the%20VM%20private%20and%20do%20not%20reboot.%20Don%27t%20paste%20passwords%20into%20the%0Achat%3B%20say%20they%20are%20in%20~%2Fredis%2Fapp.env.%0A%0AFinish%20with%20the%20URLs%20I%20should%20open%20and%20these%20commands%2C%20which%20only%20I%20can%20run%2C%20from%20my%20own%20computer%20%28with%20this%20VM%27s%20name%20in%20them%29%3A%0A%20%20ssh%20my-redis.exe.xyz%20cat%20redis%2Fapp.env%0A%20%20ssh%20-N%20-L%206380%3Alocalhost%3A6379%20my-redis.exe.xyz%0A",
    "terminal": "curl -fsSL https://exe.dev/deploy/redis/prompt.txt | ssh exe.dev new --prompt=/dev/stdin",
    "prompt": "Set up Redis on this VM by following the exe.dev recipe at https://exe.dev/deploy/redis.md from top to bottom.\n\nThe recipe's example VM name is my-redis. This VM's name is the output of `hostname`: use it wherever the recipe writes my-redis. Skip the step that creates the VM; you are on it.\n\nYou are done when all of these are true. Check each one yourself:\n- Redis 8, started at boot, listening on localhost only, with a memory limit sized to the VM and every write logged to disk.\n- No anonymous access, an admin user for you, and an `app` user whose settings are in `~/redis/app.env`.\n- Redis Insight at the VM's private URL, open only to the owner's exe.dev email.\n- Nightly snapshot backups, one restored into a scratch Redis and checked.\n\nRead the whole recipe, including the closed details. For initial setup,\nfollow \"Install by hand\" from top to bottom: the Redis repository and\nserver, the users and lock-down, tuning (leave mode=store), the app\nuser, Redis Insight on port 8000, the backup timer, and the scratch\nrestore test. The walkthrough sections are for the owner afterwards:\ndon't import data, switch to cache mode, set up Tailscale or Docker\naccess, or run the Restore or Update instructions during initial setup.\nNever overwrite an existing ~/redis/*.env file or /etc/redis/users.acl.\nAllow only the owner's email in Redis Insight, read from the reflection\nintegration; if that fails, ask the owner for it. Check Redis Insight on\nlocalhost with no email, a wrong email, and the owner's email.\nLeave the VM private and do not reboot. Don't paste passwords into the\nchat; say they are in ~/redis/app.env.\n\nFinish with the URLs I should open and these commands, which only I can run, from my own computer (with this VM's name in them):\n  ssh my-redis.exe.xyz cat redis/app.env\n  ssh -N -L 6380:localhost:6379 my-redis.exe.xyz\n",
    "prompt_url": "https://exe.dev/deploy/redis/prompt.txt"
  },
  "updated": "2026-10-31",
  "verified": "2026-10-31",
  "related": [
    "postgres",
    "mysql",
    "rails",
    "laravel",
    "django",
    "mongodb"
  ],
  "files": [
    "https://exe.dev/deploy/redis/copy-keys.py"
  ]
}
