[{"data":1,"prerenderedAt":386},["ShallowReactive",2],{"\u002Fdocs\u002Fdeployment":3,"docs-nav":354},{"id":4,"title":5,"body":6,"description":346,"extension":347,"meta":348,"navigation":349,"path":350,"seo":351,"stem":352,"__hash__":353},"docs\u002Fdocs\u002F7.deployment.md","Deployment",{"type":7,"value":8,"toc":337},"minimark",[9,13,18,21,84,87,138,152,163,167,170,242,249,253,256,281,285,288,292,309,313,321,325,333],[10,11,12],"p",{},"One Redrive instance can serve a single developer or a whole team; what changes is where it binds and whether the password gate is set.",[14,15,17],"h2",{"id":16},"docker","Docker",[10,19,20],{},"For local use, bind to loopback only:",[22,23,28],"pre",{"className":24,"code":25,"language":26,"meta":27,"style":27},"language-bash shiki shiki-themes github-dark","docker run -d --name redrive \\\n  -p 127.0.0.1:8080:8080 \\\n  -v redrive-data:\u002Fdata \\\n  redrive\u002Fredrive\n","bash","",[29,30,31,56,67,78],"code",{"__ignoreMap":27},[32,33,36,39,43,47,50,53],"span",{"class":34,"line":35},"line",1,[32,37,16],{"class":38},"svObZ",[32,40,42],{"class":41},"sU2Wk"," run",[32,44,46],{"class":45},"sDLfK"," -d",[32,48,49],{"class":45}," --name",[32,51,52],{"class":41}," redrive",[32,54,55],{"class":45}," \\\n",[32,57,59,62,65],{"class":34,"line":58},2,[32,60,61],{"class":45},"  -p",[32,63,64],{"class":41}," 127.0.0.1:8080:8080",[32,66,55],{"class":45},[32,68,70,73,76],{"class":34,"line":69},3,[32,71,72],{"class":45},"  -v",[32,74,75],{"class":41}," redrive-data:\u002Fdata",[32,77,55],{"class":45},[32,79,81],{"class":34,"line":80},4,[32,82,83],{"class":41},"  redrive\u002Fredrive\n",[10,85,86],{},"For a shared instance, bind wide and set the password gate:",[22,88,90],{"className":24,"code":89,"language":26,"meta":27,"style":27},"docker run -d --name redrive \\\n  -p 8080:8080 \\\n  -v redrive-data:\u002Fdata \\\n  -e REDRIVE_PASSWORD=change-me \\\n  redrive\u002Fredrive\n",[29,91,92,106,115,123,133],{"__ignoreMap":27},[32,93,94,96,98,100,102,104],{"class":34,"line":35},[32,95,16],{"class":38},[32,97,42],{"class":41},[32,99,46],{"class":45},[32,101,49],{"class":45},[32,103,52],{"class":41},[32,105,55],{"class":45},[32,107,108,110,113],{"class":34,"line":58},[32,109,61],{"class":45},[32,111,112],{"class":41}," 8080:8080",[32,114,55],{"class":45},[32,116,117,119,121],{"class":34,"line":69},[32,118,72],{"class":45},[32,120,75],{"class":41},[32,122,55],{"class":45},[32,124,125,128,131],{"class":34,"line":80},[32,126,127],{"class":45},"  -e",[32,129,130],{"class":41}," REDRIVE_PASSWORD=change-me",[32,132,55],{"class":45},[32,134,136],{"class":34,"line":135},5,[32,137,83],{"class":41},[139,140,141],"blockquote",{},[10,142,143,147,148,151],{},[144,145,146],"strong",{},"Without a password, anyone who can reach the port can operate every broker you connect."," Set ",[29,149,150],{},"REDRIVE_PASSWORD"," whenever the port is reachable beyond localhost.",[10,153,154,155,158,159,162],{},"The container healthchecks itself against ",[29,156,157],{},"\u002Fhealthz",", so ",[29,160,161],{},"docker ps"," and any orchestrator in front of it can tell when Redrive is ready, not just running.",[14,164,166],{"id":165},"upgrading-the-container","Upgrading the container",[10,168,169],{},"Pull the new image, remove the old container, and start a new one on the same volume:",[22,171,173],{"className":24,"code":172,"language":26,"meta":27,"style":27},"docker pull redrive\u002Fredrive\ndocker rm -f redrive\ndocker run -d --name redrive \\\n  -p 8080:8080 \\\n  -v redrive-data:\u002Fdata \\\n  -e REDRIVE_PASSWORD=change-me \\\n  redrive\u002Fredrive\n",[29,174,175,185,198,212,220,228,237],{"__ignoreMap":27},[32,176,177,179,182],{"class":34,"line":35},[32,178,16],{"class":38},[32,180,181],{"class":41}," pull",[32,183,184],{"class":41}," redrive\u002Fredrive\n",[32,186,187,189,192,195],{"class":34,"line":58},[32,188,16],{"class":38},[32,190,191],{"class":41}," rm",[32,193,194],{"class":45}," -f",[32,196,197],{"class":41}," redrive\n",[32,199,200,202,204,206,208,210],{"class":34,"line":69},[32,201,16],{"class":38},[32,203,42],{"class":41},[32,205,46],{"class":45},[32,207,49],{"class":45},[32,209,52],{"class":41},[32,211,55],{"class":45},[32,213,214,216,218],{"class":34,"line":80},[32,215,61],{"class":45},[32,217,112],{"class":41},[32,219,55],{"class":45},[32,221,222,224,226],{"class":34,"line":135},[32,223,72],{"class":45},[32,225,75],{"class":41},[32,227,55],{"class":45},[32,229,231,233,235],{"class":34,"line":230},6,[32,232,127],{"class":45},[32,234,130],{"class":41},[32,236,55],{"class":45},[32,238,240],{"class":34,"line":239},7,[32,241,83],{"class":41},[10,243,244,245,248],{},"State lives in the ",[29,246,247],{},"redrive-data"," volume, not the container, so it survives the swap.",[14,250,252],{"id":251},"tls","TLS",[10,254,255],{},"Redrive does not terminate TLS; run it behind a reverse proxy. Proxy your domain to the Redrive port with Caddy, which handles certificates on its own:",[22,257,259],{"className":24,"code":258,"language":26,"meta":27,"style":27},"caddy reverse-proxy --from redrive.example.com --to localhost:8080\n",[29,260,261],{"__ignoreMap":27},[32,262,263,266,269,272,275,278],{"class":34,"line":35},[32,264,265],{"class":38},"caddy",[32,267,268],{"class":41}," reverse-proxy",[32,270,271],{"class":45}," --from",[32,273,274],{"class":41}," redrive.example.com",[32,276,277],{"class":45}," --to",[32,279,280],{"class":41}," localhost:8080\n",[14,282,284],{"id":283},"server-mode","Server mode",[10,286,287],{},"Binding beyond loopback turns Redrive into a shared workspace. One password gates the whole instance, and everyone who has it sees every connection. There is no per-user separation, so treat a shared instance as a team tool, not a multi-tenant one.",[14,289,291],{"id":290},"licensed-installs","Licensed installs",[10,293,294,295,298,299,304,305,308],{},"A licensed install needs outbound HTTPS (port 443) to\n",[29,296,297],{},"licensing.redrive.dev"," — one hostname, nothing else. Egress-locked networks\nshould allow exactly that. An install that loses the connection keeps\nworking: paid features carry a 14-day grace window, and the free tier never\ndegrades at all. ",[300,301,303],"a",{"href":302},"\u002Fdocs\u002Fconfiguration","Configuration"," covers\n",[29,306,307],{},"REDRIVE_LICENSE_KEY"," for activating Docker and IaC deployments without\ntouching the UI.",[14,310,312],{"id":311},"downgrades","Downgrades",[139,314,315],{},[10,316,317,320],{},[144,318,319],{},"A database migrated by a newer version does not open in an older one."," If a release breaks something for you, wait for a hotfix or ask for one; downgrading the binary is not a safe way back.",[14,322,324],{"id":323},"next","Next",[10,326,327,328,332],{},"Continue to ",[300,329,331],{"href":330},"\u002Fdocs\u002Fsecurity","Security"," for what Redrive protects and what it doesn't.",[334,335,336],"style",{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":27,"searchDepth":58,"depth":58,"links":338},[339,340,341,342,343,344,345],{"id":16,"depth":58,"text":17},{"id":165,"depth":58,"text":166},{"id":251,"depth":58,"text":252},{"id":283,"depth":58,"text":284},{"id":290,"depth":58,"text":291},{"id":311,"depth":58,"text":312},{"id":323,"depth":58,"text":324},"Running Redrive with Docker, behind TLS, or as a shared team instance.","md",{},true,"\u002Fdocs\u002Fdeployment",{"title":5,"description":346},"docs\u002F7.deployment","k6PwUfpW72DjtYhj0dL5od4T_vMRTdTFeYX2W2NQEbo",[355],{"title":356,"path":357,"stem":358,"children":359,"page":385},"Docs","\u002Fdocs","docs",[360,364,368,372,376,380,382,383],{"title":361,"path":362,"stem":363},"Install","\u002Fdocs\u002Finstall","docs\u002F1.install",{"title":365,"path":366,"stem":367},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F2.getting-started",{"title":369,"path":370,"stem":371},"Queues & messages","\u002Fdocs\u002Fqueues","docs\u002F3.queues",{"title":373,"path":374,"stem":375},"Redriving","\u002Fdocs\u002Fredriving","docs\u002F4.redriving",{"title":377,"path":378,"stem":379},"Publishing & topology","\u002Fdocs\u002Fpublishing","docs\u002F5.publishing",{"title":303,"path":302,"stem":381},"docs\u002F6.configuration",{"title":5,"path":350,"stem":352},{"title":331,"path":330,"stem":384},"docs\u002F8.security",false,1787116432400]