1"use strict";(self.webpackChunkrabbitmq_website=self.webpackChunkrabbitmq_website||[]).push([["18215"],{99295(e,n,a){a.r(n),a.d(n,{metadata:()=>r,default:()=>m,frontMatter:()=>b,contentTitle:()=>h,toc:()=>p,assets:()=>u});var r=JSON.parse('{"id":"install-debian","title":"Installing on Debian and Ubuntu","description":"\x3c!--","source":"@site/versioned_docs/version-4.1/install-debian.md","sourceDirName":".","slug":"/install-debian","permalink":"/docs/4.1/install-debian","draft":false,"unlisted":false,"editUrl":"https://github.com/rabbitmq/rabbitmq-website/tree/main/versioned_docs/version-4.1/install-debian.md","tags":[],"version":"4.1","frontMatter":{"title":"Installing on Debian and Ubuntu","displayed_sidebar":"docsSidebar"},"sidebar":"docsSidebar","previous":{"title":"Supported Platforms","permalink":"/docs/4.1/platforms"},"next":{"title":"RedHat","permalink":"/docs/4.1/install-rpm"}}'),s=a(74848),t=a(28453),i=a(72526),l=a.n(i),o=a(50773),d=a(57250),c=a(28412);let b={title:"Installing on Debian and Ubuntu",displayed_sidebar:"docsSidebar"},h="Installing on Debian and Ubuntu",u={},p=[{value:"Overview",id:"overview",level:2},{value:"Install RabbitMQ from Team RabbitMQ's apt Repositories, Avoid Standard Debian and Ubuntu Repositories",id:"install-rabbitmq-from-team-rabbitmqs-apt-repositories-avoid-standard-debian-and-ubuntu-repositories",level:2},{value:"How to Install Latest RabbitMQ on Debian and Ubuntu",id:"installation-methods",level:2},{value:"With Apt",id:"with-apt",level:3},{value:"Manually Using Dpkg",id:"manually-using-dpkg",level:3},{value:"Supported Distributions",id:"supported-distributions",level:2},{value:"Where to Get Recent Erlang Version on Debian and Ubuntu",id:"erlang-repositories",level:2},{value:"Apt with Team RabbitMQ's Repositories: a Quick Start Script",id:"apt-quick-start",level:2},{value:"Using Apt with Team RabbitMQ's Repositories",id:"apt-repositories",level:2},{value:"Install Essential Dependencies",id:"install-essential-dependencies",level:3},{value:"Enable apt HTTPS Transport",id:"enable-apt-https-transport",level:3},{value:"Add Repository Signing Key(s)",id:"signing-keys",level:3},{value:"Add a Repository (Apt Source List) File",id:"add-a-repository-apt-source-list-file",level:3},{value:"Install Packages",id:"install-packages",level:4},{value:"Debian Package Version and Repository Pinning",id:"apt-pinning",level:2},{value:"Manual Installation with Dpkg",id:"manual-installation",level:2},{value:"User Privilege Requirements",id:"sudo-requirements",level:2},{value:"Run RabbitMQ Server",id:"running-debian",level:2},{value:"Start the Server",id:"start-the-server",level:4},{value:"Configuring RabbitMQ",id:"configuration",level:2},{value:"Port Access",id:"ports",level:2},{value:"Default User Access",id:"default-user-access",level:2},{value:"Controlling System Limits on Linux",id:"kernel-resource-limits",level:2},{value:"With systemd (Recent Linux Distributions)",id:"max-open-files-limit",level:3},{value:"With Docker",id:"with-docker",level:3},{value:"Verifying the Limit",id:"verifying-limits",level:3},{value:"Managing the Service",id:"managing-service",level:2},{value:"Log Files and Management",id:"server-logs",level:2},{value:"Log Rotation",id:"log-rotation",level:3},{value:"Install Erlang from an Apt Repository (PPA) on Launchpad",id:"apt-launchpad-erlang",level:2},{value:"Modern Erlang on Ubuntu",id:"modern-erlang-on-ubuntu",level:3},{value:"Install Essential Dependencies",id:"install-essential-dependencies-1",level:3},{value:"Add Repository Signing Key",id:"erlang-apt-repo-signing-key",level:3},{value:"Enable apt HTTPS Transport",id:"erlang-apt-https-transport",level:3},{value:"Add a Source List File",id:"erlang-source-list-file",level:3},{value:"Install Erlang Packages",id:"installing-erlang-package",level:3}];function g(e){let n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"installing-on-debian-and-ubuntu",children:"Installing on Debian and Ubuntu"})}),"\n",(0,s.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(n.p,{children:"This guide covers RabbitMQ installation on Debian, Ubuntu and distributions based on one of them."}),"\n",(0,s.jsx)(n.p,{children:"Key sections of this guide are"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"#installation-methods",children:"Ways of installing"})," the latest RabbitMQ version on Debian and Ubuntu"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#supported-distributions",children:"Supported Ubuntu and Debian distributions"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#sudo-requirements",children:"Privilege requirements"})}),"\n",(0,s.jsxs)(n.li,{children:["Quick start installation snippet that ",(0,s.jsx)(n.a,{href:"#apt-quick-start",children:"uses Team RabbitMQ's apt repositories"})," repositories"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"#managing-service",children:"Manage the service"})," (start it, stop it, and get its status)"]}),"\n",(0,s.jsxs)(n.li,{children:["How to ",(0,s.jsx)(n.a,{href:"#server-logs",children:"inspect node and service logs"})]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"./which-erlang",children:"Supported Erlang versions"})," will be provisioned from one of the ",(0,s.jsx)(n.a,{href:"#erlang-repositories",children:"modern Erlang apt repositories"}),"\non ",(0,s.jsx)(n.a,{href:"https://launchpad.net/~rabbitmq",children:"Launchpad"})," or ",(0,s.jsx)(n.a,{href:"#apt-repositories",children:"Team RabbitMQ's apt repositories"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Those looking for a more detailed description of the installation steps performed\nshould refer to"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Manual installation using ",(0,s.jsx)(n.a,{href:"#apt-repositories",children:"apt and the Team RabbitMQ's apt repositories"})," repository"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"More advanced topics include"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"#apt-pinning",children:"Version Pinning"})," of apt packages"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"install-rabbitmq-from-team-rabbitmqs-apt-repositories-avoid-standard-debian-and-ubuntu-repositories",children:"Install RabbitMQ from Team RabbitMQ's apt Repositories, Avoid Standard Debian and Ubuntu Repositories"}),"\n",(0,s.jsxs)(n.p,{children:["Team RabbitMQ produces our own Debian packages for every release, including patch releases, and distributes them ",(0,s.jsx)(n.a,{href:"#apt-quick-start",children:"using Team RabbitMQ's apt repositories"}),"."]}),"\n",(0,s.jsxs)(n.admonition,{type:"danger",children:[(0,s.jsxs)(n.p,{children:["Standard Debian and Ubuntu repositories include a RabbitMQ package, ",(0,s.jsx)(n.code,{children:"rabbitmq-server"}),"."]}),(0,s.jsxs)(n.p,{children:["However, the ",(0,s.jsx)(n.a,{href:"https://packages.ubuntu.com/search?keywords=rabbitmq-server&searchon=names&suite=all§ion=all",children:"versions included"})," are\nmany releases behind latest, and usually are ",(0,s.jsx)(n.a,{href:"/release-information",children:"out of community support"})," or even have reached their End of Life."]}),(0,s.jsxs)(n.p,{children:["For RabbitMQ, the multi-year gaps between Debian releases mean that the standard RabbitMQ package in those distributions usually ",(0,s.jsx)(n.a,{href:"./upgrade#rabbitmq-version-upgradability",children:"cannot be upgraded directly"})," from the version available in the previous release."]}),(0,s.jsxs)(n.p,{children:["Learn more in ",(0,s.jsx)(n.a,{href:"./feature-flags#graduation",children:"Feature Flag Graduation"}),"."]})]}),"\n",(0,s.jsx)(n.h2,{id:"installation-methods",children:"How to Install Latest RabbitMQ on Debian and Ubuntu"}),"\n",(0,s.jsx)(n.h3,{id:"with-apt",children:"With Apt"}),"\n",(0,s.jsxs)(n.p,{children:["Currently, the recommended option for installing modern RabbitMQ on Debian and Ubuntu\nis using Team RabbitMQ's apt repositories (",(0,s.jsx)(n.a,{href:"#apt-quick-start",children:"quick start script"}),", more detailed ",(0,s.jsx)(n.a,{href:"#apt-repositories",children:"step-by-step instructions"}),")."]}),"\n",(0,s.jsxs)(n.p,{children:["The repositories provide a ",(0,s.jsx)(n.a,{href:"./which-erlang",children:"modern version of Erlang"}),". Alternatively, the latest\nversion of Erlang is available ",(0,s.jsx)(n.a,{href:"#erlang-repositories",children:"via a Launchpad PPA and other repositories"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"manually-using-dpkg",children:"Manually Using Dpkg"}),"\n",(0,s.jsxs)(n.p,{children:["Alternatively, the package can be downloaded manually and ",(0,s.jsx)(n.a,{href:"#manual-installation",children:"installed "})," with ",(0,s.jsx)(n.code,{children:"dpkg -i"}),".\nThis option will require manual installation of all RabbitMQ package dependencies and is ",(0,s.jsx)(n.strong,{children:"highly discouraged"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"supported-distributions",children:"Supported Distributions"}),"\n",(0,s.jsx)(n.p,{children:'RabbitMQ is supported on several major Debian-based distributions that are still covered\nby general ("full", available at no extra cost) support by their primary vendor or developer group.'}),"\n",(0,s.jsxs)(n.p,{children:["For Debian, this means that the RabbitMQ core team's packaging focus is on the current and prior release of Debian-based distributions,\nin line with the ",(0,s.jsx)(n.a,{href:"https://wiki.debian.org/DebianReleases",children:"Debian distribution EOL policy"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Currently the list of supported Debian-based distributions includes"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ubuntu 20.04 (Focal), 22.04 (Jammy) and 24.04 (Noble)"}),"\n",(0,s.jsx)(n.li,{children:"Debian Bullseye (11), Bookworm (12), and Trixie (13)"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The package may work on other Debian-based distributions\nif ",(0,s.jsx)(n.a,{href:"#manual-installation",children:"dependencies"})," are satisfied (e.g. using a backports repository)\nbut their testing and support is done on a best effort basis."]}),"\n",(0,s.jsx)(n.h2,{id:"erlang-repositories",children:"Where to Get Recent Erlang Version on Debian and Ubuntu"}),"\n",(0,s.jsxs)(n.p,{children:["RabbitMQ needs Erlang/OTP to run. Erlang/OTP packages in\nstandard Debian and Ubuntu repositories can be significantly out of date\nand not ",(0,s.jsx)(n.a,{href:"./which-erlang",children:"supported by modern RabbitMQ versions"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Most recent Erlang/OTP release series are available from a number of alternative\napt repositories:"}),"\n",(0,s.jsxs)("table",{children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:(0,s.jsx)("strong",{children:"Erlang Release Series"})}),(0,s.jsx)("td",{children:(0,s.jsx)("strong",{children:"Apt Repositories that provide it"})}),(0,s.jsx)("td",{children:(0,s.jsx)("strong",{children:"Notes"})})]})}),(0,s.jsxs)("tbody",{children:[(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"27.x"}),(0,s.jsx)("td",{children:(0,s.jsxs)("ul",{children:[(0,s.jsxs)("li",{children:[(0,s.jsx)("a",{href:"#apt-launchpad-erlang",children:"Debian packages of Erlang"})," from Team RabbitMQ on Launchpad."]}),(0,s.jsxs)("li",{children:[(0,s.jsx)("a",{href:"#apt-repositories",children:"Debian packages of Erlang"})," from Team RabbitMQ. Provides ",(0,s.jsx)(n.code,{children:"amd64"})," packages only."]})]})}),(0,s.jsx)("td",{children:(0,s.jsxs)(n.p,{children:[(0,s.jsxs)("strong",{children:["Supported ",(0,s.jsx)("a",{href:"https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.0.1",children:"starting with 4.0.0"})]}),".\nSee ",(0,s.jsx)("a",{href:"./which-erlang",children:"Erlang compatibility guide"}),"."]})})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:"26.x"}),(0,s.jsx)("td",{children:(0,s.jsxs)("ul",{children:[(0,s.jsxs)("li",{children:[(0,s.jsx)("a",{href:"#apt-launchpad-erlang",children:"Debian packages of Erlang"})," from Team RabbitMQ on Launchpad. Provides ",(0,s.jsx)(n.code,{children:"arm64"})," (",(0,s.jsx)(n.code,{children:"aarch64"}),") packages"]}),(0,s.jsxs)("li",{children:[(0,s.jsx)("a",{href:"#apt-repositories",children:"Debian packages of Erlang"})," from Team RabbitMQ. Provides ",(0,s.jsx)(n.code,{children:"amd64"})," packages only."]})]})}),(0,s.jsx)("td",{children:(0,s.jsxs)(n.p,{children:[(0,s.jsxs)("strong",{children:["Supported ",(0,s.jsx)("a",{href:"https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.12.0",children:"starting with 3.12.0"})]}),", and is required starting with ",(0,s.jsx)("a",{href:"https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.13.0",children:"3.13.0"}),".\nSee ",(0,s.jsx)("a",{href:"./which-erlang",children:"Erlang compatibility guide"}),"."]})})]})]})]}),"\n",(0,s.jsxs)(n.p,{children:["This guide will focus on the ",(0,s.jsx)("a",{href:"#apt-quick-start",children:"apt repositories maintained by Team RabbitMQ"}),"\nas well as the repositories on ",(0,s.jsx)("a",{href:"#apt-launchpad-erlang",children:"on Launchpad"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"apt-quick-start",children:"Apt with Team RabbitMQ's Repositories: a Quick Start Script"}),"\n",(0,s.jsxs)(n.p,{children:["Below is a shell snippet that performs the steps explained in this guide. It provisions\nRabbitMQ and Erlang from a ",(0,s.jsx)(n.a,{href:"#apt-repositories",children:"Team RabbitMQ-hosted"})," apt repository."]}),"\n",(0,s.jsx)(n.admonition,{type:"important",children:(0,s.jsxs)(n.p,{children:["This repository only provides ",(0,s.jsx)(n.code,{children:"amd64"})," (",(0,s.jsx)(n.code,{children:"x86-64"}),") Erlang packages. For ",(0,s.jsx)(n.code,{children:"arm64"})," (",(0,s.jsx)(n.code,{children:"aarch64"}),"),\nthis script must be modified to provision a supported Erlang series ",(0,s.jsx)(n.a,{href:"#apt-launchpad-erlang",children:"from Launchpad"}),"."]})}
1),"\n",(0,s.jsxs)(o.A,{groupId:"distribution-specific",children:[(0,s.jsx)(d.A,{value:"ubuntu-noble",label:"Ubuntu 24.04",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'#!/bin/sh\n\nsudo apt-get install curl gnupg apt-transport-https -y\n\n## Team RabbitMQ\'s signing key\ncurl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null\n\n## Add apt repositories maintained by Team RabbitMQ\nsudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF\n## Modern Erlang/OTP releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/ubuntu/noble noble main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/ubuntu/noble noble main\n\n## Latest RabbitMQ releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/ubuntu/noble noble main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/ubuntu/noble noble main\nEOF\n\n## Update package indices\nsudo apt-get update -y\n\n## Install Erlang packages\nsudo apt-get install -y erlang-base \\\n erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \\\n erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \\\n erlang-runtime-tools erlang-snmp erlang-ssl \\\n erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl\n\n## Install rabbitmq-server and its dependencies\nsudo apt-get install rabbitmq-server -y --fix-missing\n'})})}),(0,s.jsx)(d.A,{value:"ubuntu-jammy",label:"Ubuntu 22.04",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'#!/bin/sh\n\nsudo apt-get install curl gnupg apt-transport-https -y\n\n## Team RabbitMQ\'s signing key\ncurl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null\n\n## Add apt repositories maintained by Team RabbitMQ\nsudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF\n## Modern Erlang/OTP releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/ubuntu/jammy jammy main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/ubuntu/jammy jammy main\n\n## Latest RabbitMQ releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/ubuntu/jammy jammy main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/ubuntu/jammy jammy main\nEOF\n\n## Update package indices\nsudo apt-get update -y\n\n## Install Erlang packages\nsudo apt-get install -y erlang-base \\\n erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \\\n erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \\\n erlang-runtime-tools erlang-snmp erlang-ssl \\\n erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl\n\n## Install rabbitmq-server and its dependencies\nsudo apt-get install rabbitmq-server -y --fix-missing\n'})})}),(0,s.jsx)(d.A,{value:"ubuntu-focal",label:"Ubuntu 20.04",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'#!/bin/sh\n\nsudo apt-get install curl gnupg apt-transport-https -y\n\n## Team RabbitMQ\'s signing key\ncurl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null\n\n## Add apt repositories maintained by Team RabbitMQ\nsudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF\n## Modern Erlang/OTP releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/ubuntu/focal focal main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/ubuntu/focal focal main\n\n## Latest RabbitMQ releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/ubuntu/focal focal main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/ubuntu/focal focal main\nEOF\n\n## Update package indices\nsudo apt-get update -y\n\n## Install Erlang packages\nsudo apt-get install -y erlang-base \\\n erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \\\n erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \\\n erlang-runtime-tools erlang-snmp erlang-ssl \\\n erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl\n\n## Install rabbitmq-server and its dependencies\nsudo apt-get install rabbitmq-server -y --fix-missing\n'})})}),(0,s.jsx)(d.A,{value:"debian-trixie",label:"Debian Trixie",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'#!/bin/sh\n\nsudo apt-get install curl gnupg apt-transport-https -y\n\n## Team RabbitMQ\'s signing key\ncurl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null\n\n## Add apt repositories maintained by Team RabbitMQ\nsudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF\n## Latest RabbitMQ releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie trixie main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/debian/trixie trixie main\nEOF\n\n## Update package indices\nsudo apt-get update -y\n\n## Install Erlang packages\nsudo apt-get install -y erlang-base \\\n erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \\\n erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \\\n erlang-runtime-tools erlang-snmp erlang-ssl \\\n erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl\n\n## Install rabbitmq-server and its dependencies\nsudo apt-get install rabbitmq-server -y --fix-missing\n'})})}),(0,s.jsx)(d.A,{value:"debian-bookworm",label:"Debian Bookworm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'#!/bin/sh\n\nsudo apt-get install curl gnupg apt-transport-https -y\n\n## Team RabbitMQ\'s signing key\ncurl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null\n\n## Add apt repositories maintained by Team RabbitMQ\nsudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF\n## Modern Erlang/OTP releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/debian/bookworm bookworm main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/debian/bookworm bookworm main\n\n## Latest RabbitMQ releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/debian/bookworm bookworm main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/debian/bookworm bookworm main\nEOF\n\n## Update package indices\nsudo apt-get update -y\n\n## Install Erlang packages\nsudo apt-get install -y erlang-base \\\n erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \\\n erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \\\n erlang-runtime-tools erlang-snmp erlang-ssl \\\n erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl\n\n## Install rabbitmq-server and its dependencies\nsudo apt-get install rabbitmq-server -y --fix-missing\n'})})}),(0,s.jsx)(d.A,{value:"debian-bullseye",label:"Debian Bullseye",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'#!/bin/sh\n\nsudo apt-get install curl gnupg apt-transport-https -y\n\n## Team RabbitMQ\'s signing key\ncurl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null\n\n## Add apt repositories maintained by Team RabbitMQ\nsudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF\n## Modern Erlang/OTP releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/debian/bullseye bullseye main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/debian/bullseye bullseye main\n\n## Latest RabbitMQ releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/debian/bullseye bullseye main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/debian/bullseye bullseye main\nEOF\n\n## Update package indices\nsudo apt-get update -y\n\n## Install Erlang packages\nsudo apt-get install -y erlang-base \\\n erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \\\n erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \\\n erlang-runtime-tools erlang-snmp erlang-ssl \\\n erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl\n\n## Install rabbitmq-server and its dependencies\nsudo apt-get install rabbitmq-server -y --fix-missing\n'})})})]}),"\n",(0,s.jsx)(n.h2,{id:"apt-repositories",children:"Using Apt with Team RabbitMQ's Repositories"}),"\n",(0,s.jsx)(n.p,{children:"Team RabbitMQ maintains two apt repositories. They provide packages for most recent RabbitMQ and modern Erlang releases."}),"\n",(0,s.jsxs)(n.p,{children:["Both repositories are signed using the same ",(0,s.jsx)(n.a,{href:"./signatures",children:"signing key"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"This part of the guide will focus on a more traditional and explicit way of setting up additional apt repositories\nand installing packages."}),"\n",(0,s.jsxs)(n.p,{children:["All steps covered below are ",(0,s.jsx)(n.strong,{children:"mandatory"})," unless otherwise specified."]}),"\n",(0,s.jsx)(n.h3,{id:"install-essential-dependencies",children:"Install Essential Dependencies"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-get update -y\n\nsudo apt-get install curl gnupg -y\n"})}),"\n",(0,s.jsx)(n.h3,{id:"enable-apt-https-transport",children:"Enable apt HTTPS Transport"}),"\n",(0,s.jsxs)(n.p,{children:["In order for apt to be able to download RabbitMQ and Erlang packages from the Team RabbitMQ apt repositories or Launchpad,\nthe ",(0,s.jsx)(n.code,{children:"apt-transport-https"})," package must be installed:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-get install apt-transport-https\n"})}),"\n",(0,s.jsx)(n.h3,{id:"signing-keys",children:"Add Repository Signing Key(s)"}),"\n",(0,s.jsx)(n.p,{children:"In order to use the repositories, first their signing key(s) must be added to the system.\nThis will enable apt to trust packages signed by that key."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'sudo apt-get install curl gnupg apt-transport-https -y\n\n## Team RabbitMQ\'s signing key\ncurl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null\n'})}),"\n",(0,s.jsxs)(n.p,{children:["See the ",(0,s.jsx)(n.a,{href:"./signatures",children:"guide on signatures"})," to learn more."]}),"\n",(0,s.jsx)(n.h3,{id:"add-a-repository-apt-source-list-file",children:"Add a Repository (Apt Source List) File"}),"\n",(0,s.jsx)(n.admonition,{type:"important",children:(0,s.jsx)(n.p,{children:"The contents of the file described
1in this section will vary slightly based on the target Debian-based distribution.\nMake sure to switch to the appropriate tab."})}),"\n",(0,s.jsxs)(n.p,{children:["As with all 3rd party apt repositories, a file describing the RabbitMQ and Erlang package repositories\nmust be placed under the ",(0,s.jsx)(n.code,{children:"/etc/apt/sources.list.d/"})," directory.\n",(0,s.jsx)(n.code,{children:"/etc/apt/sources.list.d/rabbitmq.list"})," is the recommended location."]}),"\n",(0,s.jsx)(n.p,{children:"The contents of the file will vary slightly based on the distribution used."}),"\n",(0,s.jsxs)(o.A,{groupId:"distribution-specific",children:[(0,s.jsx)(d.A,{value:"ubuntu-noble",label:"Ubuntu 24.04",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF\n## Modern Erlang/OTP releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/ubuntu/noble noble main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/ubuntu/noble noble main\n\n## Provides modern RabbitMQ releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/ubuntu/noble noble main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/ubuntu/noble noble main\nEOF\n"})})}),(0,s.jsx)(d.A,{value:"ubuntu-jammy",label:"Ubuntu 22.04",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF\n## Modern Erlang/OTP releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/ubuntu/jammy jammy main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/ubuntu/jammy jammy main\n\n\n## Provides modern RabbitMQ releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/ubuntu/jammy jammy main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/ubuntu/jammy jammy main\nEOF\n"})})}),(0,s.jsx)(d.A,{value:"ubuntu-focal",label:"Ubuntu 20.04",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF\n## Modern Erlang/OTP releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/ubuntu/focal focal main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/ubuntu/focal focal main\n\n## Provides modern RabbitMQ releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/ubuntu/focal focal main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/ubuntu/focal focal main\nEOF\n"})})}),(0,s.jsx)(d.A,{value:"debian-trixie",label:"Debian Trixie",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"## Add apt repositories maintained by Team RabbitMQ\nsudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF\n## Latest RabbitMQ releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie trixie main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/debian/trixie trixie main\nEOF\n"})})}),(0,s.jsx)(d.A,{value:"debian-bookworm",label:"Debian Bookworm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF\n## Modern Erlang/OTP releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/debian/bookworm bookworm main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/debian/bookworm bookworm main\n\n## Provides modern RabbitMQ releases\n##\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/debian/bookworm bookworm main\ndeb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/debian/bookworm bookworm main\n"})})}),(0,s.jsx)(d.A,{value:"debian-bullseye",label:"Debian Bullseye",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"## Add apt repositories maintained by Team RabbitMQ\nsudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF\n## Modern Erlang/OTP releases\n##\ndeb [signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/debian/bullseye bullseye main\ndeb [signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/debian/bullseye bullseye main\n\n## Latest RabbitMQ releases\n##\ndeb [signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/debian/bullseye bullseye main\ndeb [signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/debian/bullseye bullseye main\nEOF\n"})})})]}),"\n",(0,s.jsx)(n.h4,{id:"install-packages",children:"Install Packages"}),"\n",(0,s.jsxs)(n.p,{children:["After updating the list of ",(0,s.jsx)(n.code,{children:"apt"})," sources it is necessary to run ",(0,s.jsx)(n.code,{children:"apt-get update"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-get update -y\n"})}
1),"\n",(0,s.jsx)(n.p,{children:"Then install the package with"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"## Install Erlang packages\nsudo apt-get install -y erlang-base \\\n erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \\\n erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \\\n erlang-runtime-tools erlang-snmp erlang-ssl \\\n erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl\n\n## Install rabbitmq-server and its dependencies\nsudo apt-get install rabbitmq-server -y --fix-missing\n"})}),"\n",(0,s.jsx)(n.h2,{id:"apt-pinning",children:"Debian Package Version and Repository Pinning"}),"\n",(0,s.jsxs)(n.p,{children:["Version pinning is an ",(0,s.jsx)(n.strong,{children:"optional"})," step. If not used, ",(0,s.jsx)(n.code,{children:"apt"})," will install the most recent version\navailable."]}),"\n",(0,s.jsxs)(n.p,{children:["When the same package (e.g. ",(0,s.jsx)(n.code,{children:"erlang-base"}),") is available from multiple apt repositories operators need\nto have a way to indicate what repository should be preferred. It may also be desired to restrict Erlang version to avoid undesired upgrades.\n",(0,s.jsx)(n.a,{href:"https://wiki.debian.org/AptPreferences",children:"apt package pinning"})," feature can be used to address both problems."]}),"\n",(0,s.jsxs)(n.p,{children:["Package pinning is configured with a file placed under the ",(0,s.jsx)(n.code,{children:"/etc/apt/preferences.d/"})," directory, e.g. ",(0,s.jsx)(n.code,{children:"/etc/apt/preferences.d/erlang"}),".\nAfter updating apt preferences it is necessary to run ",(0,s.jsx)(n.code,{children:"apt-get update"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-get update -y\n"})}),"\n",(0,s.jsxs)(n.p,{children:["To pin using the origin value of the Team RabbitMQ repositories, use ",(0,s.jsx)(n.code,{children:"Origin: RabbitMQ"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["To determine the exact version string to use for pinning (including any package epoch), consult ",(0,s.jsx)(n.code,{children:"apt-cache policy"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"apt-cache policy rabbitmq-server\napt-cache policy erlang-base\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The following preference file example will configure ",(0,s.jsx)(n.code,{children:"apt"})," to install ",(0,s.jsx)(n.code,{children:"erlang-*"})," packages from the Team RabbitMQ apt\nrepository used in the examples above:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ini",children:"# /etc/apt/preferences.d/erlang\nPackage: erlang*\nPin: origin RabbitMQ\n# Note: priority of 1001 (greater than 1000) allows for downgrading.\n# To make package downgrading impossible, use a value of 999\nPin-Priority: 1001\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following is similar to the example above but prefers Launchpad:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ini",children:"# /etc/apt/preferences.d/erlang\nPackage: erlang*\nPin: origin ppa.launchpad.net\n# Note: priority of 1001 (greater than 1000) allows for downgrading.\n# To make package downgrading impossible, use a value of 999\nPin-Priority: 1001\n"})}),"\n",(0,s.jsx)(n.p,{children:"Effective package pinning policy can be verified with"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-cache policy\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The following preference file example will pin all ",(0,s.jsx)(n.code,{children:"erlang-*"})," packages to 26.2.5.13:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ini",children:'# /etc/apt/preferences.d/erlang\nPackage: erlang*\n# Note: Erlang packages from Team RabbitMQ use a package epoch.\n# It MUST be included in the version pinning, using the format "1:{version}-{revision}"\nPin: version 1:26.2.5.13-1\n# Note: priority of 1001 (greater than 1000) allows for downgrading.\n# To make package downgrading impossible, use a value of 999\nPin-Priority: 1001\n'})}),"\n",(0,s.jsxs)(n.p,{children:["The following preference file example will pin ",(0,s.jsx)(n.code,{children:"rabbitmq-server"})," package to ",(0,s.jsx)(c.AR,{}),":"]}),"\n",(0,s.jsx)(l(),{children:`# /etc/apt/preferences.d/rabbitmq 2Package: rabbitmq-server 3# Note: RabbitMQ server packages do not use a package epoch 4Pin: version ${(0,c.AR)()}-${(0,c.VK)({packageType:"debian"})} 5# Note: priority of 1001 (greater than 1000) allows for downgrading. 6# To make package downgrading impossible, use a value of 999 7Pin-Priority: 1001`}),"\n",(0,s.jsx)(n.h2,{id:"manual-installation",children:"Manual Installation with Dpkg"}),"\n",(0,s.jsxs)(n.p,{children:["In some cases it may be easier to download the package directly from GitHub and install it manually using ",(0,s.jsx)(n.code,{children:"sudo dpkg -i"}),".\nBelow is a download link."]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Download"}),(0,s.jsx)(n.th,{children:"Signature"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[".deb for Debian-based Linux (from ",(0,s.jsx)("a",{href:"https://github.com/rabbitmq/rabbitmq-server/releases",children:"GitHub"}),")"]}),(0,s.jsx)(n.td,{children:(0,s.jsx)("a",{href:(0,c.bh)({packageType:"debian"}),children:(0,c.n3)({packageType:"debian"})})}),(0,s.jsx)(n.td,{children:(0,s.jsx)("a",{href:(0,c.ci)({packageType:"debian"}),children:"Signature"})})]})})]}),"\n",(0,s.jsxs)(n.p,{children:["When installing manually with ",(0,s.jsx)(n.code,{children:"dpkg"}),", it is necessary to install package dependencies first.\n",(0,s.jsx)(n.code,{children:"dpkg"}),", unlike ",(0,s.jsx)(n.code,{children:"apt"}),", does not resolve or manage dependencies."]}),"\n",(0,s.jsxs)(n.p,{children:["Here's an example that does that, installs ",(0,s.jsx)(n.code,{children:"wget"}),", downloads the RabbitMQ package and installs it:"]}),"\n",(0,s.jsx)(l(),{language:"bash",children:`# sync package metadata 8sudo apt-get update 9# install dependencies manually 10sudo apt-get -y install logrotate init-system-helpers adduser 11 12# download the package 13sudo apt-get -y install wget 14wget ${(0,c.bh)({packageType:"debian"})} 15 16# install the package with dpkg 17sudo dpkg -i ${(0,c.n3)({packageType:"debian"})} 18 19rm ${(0,c.n3)({packageType:"debian"})}`}),"\n",(0,s.jsxs)(n.p,{children:["Installation via ",(0,s.jsx)(n.a,{href:"#apt-repositories",children:"apt repositories"})," is recommended\nover downloading the package directly and installing via ",(0,s.jsx)(n.code,{children:"dpkg -i"}),". When the RabbitMQ\npackage is installed manually with ",(0,s.jsx)(n.code,{children:"dpkg -i"})," the operator is responsible for making sure\nthat all package dependencies are met."]}),"\n",(0,s.jsx)(n.h2,{id:"sudo-requirements",children:"User Privilege Requirements"}),"\n",(0,s.jsxs)(n.p,{children:["RabbitMQ Debian package will require ",(0,s.jsx)(n.code,{children:"sudo"})," privileges to install and manage.\nIn environments where ",(0,s.jsx)(n.code,{children:"sudo"})," isn't available, consider using the\n",(0,s.jsx)(n.a,{href:"./install-generic-unix",children:"generic binary build"})," instead."]}),"\n",(0,s.jsx)(n.h2,{id:"running-debian",children:"Run RabbitMQ Server"}),"\n",(0,s.jsx)(n.h4,{id:"start-the-server",children:"Start the Server"}),"\n",(0,s.jsxs)(n.p,{children:["The server is started as a daemon by default when the\nRabbitMQ server package is installed. It will run as a non-privileged user ",(0,s.jsx)(n.code,{children:"rabbitmq"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"As an administrator, start and stop the\nserver as usual for Debian-based systems:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"systemctl start rabbitmq-server\n"})}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuring RabbitMQ"}),"\n",(0,s.jsxs)(n.p,{children:["On most systems, a node should be able to start and run with all defaults.\nPlease refer to the ",(0,s.jsx)(n.a,{href:"./configure",children:"Configuration guide"})," to learn more\nand ",(0,s.jsx)(n.a,{href:"./production-checklist",children:"Deployment Guidelines"})," for guidelines beyond\ndevelopment environments."]}),"\n",(0,s.jsxs)(n.p,{children:["Note: the node is set up to run as system user ",(0,s.jsx)(n.code,{children:"rabbitmq"}),".\nIf ",(0,s.jsx)(n.a,{href:"./relocate",children:"location of the node database or the logs"})," is changed,\nthe files and directories must be owned by this user."]}),"\n",(0,s.jsx)(n.h2,{id:"ports",children:"Port Access"}),"\n",(0,s.jsxs)(n.p,{children:["RabbitMQ nodes bind to ports (open server TCP sockets) in order to accept client\nand CLI tool connections. Other processes and tools such as SELinux may prevent\nRabbitMQ from binding to a port. When that happens, the node will fail to start.\nRefer to the ",(0,s.jsx)(n.a,{href:"./networking#ports",children:"Networking Guide"})," for more details."]}),"\n",(0,s.jsx)(n.h2,{id:"default-user-access",children:"Default User Acce
19ss"}),"\n",(0,s.jsxs)(n.p,{children:["The broker creates a user ",(0,s.jsx)(n.code,{children:"guest"})," with password\n",(0,s.jsx)(n.code,{children:"guest"}),". Unconfigured clients will in general use these\ncredentials. ",(0,s.jsx)("strong",{children:"By default, these credentials can only be\nused when connecting to the broker as localhost"})," so you\nwill need to take action before connecting from any other\nmachine."]}),"\n",(0,s.jsxs)(n.p,{children:["See the documentation on ",(0,s.jsx)(n.a,{href:"./access-control",children:"access control"})," for information on how to create more users and delete\nthe ",(0,s.jsx)(n.code,{children:"guest"})," user."]}),"\n",(0,s.jsx)(n.h2,{id:"kernel-resource-limits",children:"Controlling System Limits on Linux"}),"\n",(0,s.jsxs)(n.p,{children:["RabbitMQ installations running production workloads may need system\nlimits and kernel parameters tuning in order to handle a decent number of\nconcurrent connections and queues. The main setting that needs adjustment\nis the max number of open files, also known as ",(0,s.jsx)(n.code,{children:"ulimit -n"}),".\nThe default value on many operating systems is too low for a messaging\nbroker (",(0,s.jsx)(n.code,{children:"1024"})," on several Linux distributions). We recommend allowing\nfor at least 65536 file descriptors for user ",(0,s.jsx)(n.code,{children:"rabbitmq"})," in\nproduction environments. 4096 should be sufficient for many development\nworkloads."]}),"\n",(0,s.jsxs)(n.p,{children:["There are two limits in play: the maximum number of open files the OS kernel\nallows (",(0,s.jsx)(n.code,{children:"fs.file-max"}),") and the per-user limit (",(0,s.jsx)(n.code,{children:"ulimit -n"}),").\nThe former must be higher than the latter."]}),"\n",(0,s.jsx)(n.h3,{id:"max-open-files-limit",children:"With systemd (Recent Linux Distributions)"}),"\n",(0,s.jsxs)(n.p,{children:["On distributions that use systemd, the OS limits are controlled via\na configuration file at ",(0,s.jsx)(n.code,{children:"/etc/systemd/system/rabbitmq-server.service.d/limits.conf"}),".\nFor example, to set the max open file handle limit (",(0,s.jsx)(n.code,{children:"nofile"}),") to ",(0,s.jsx)(n.code,{children:"64000"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ini",children:"[Service]\nLimitNOFILE=64000\n"})}),"\n",(0,s.jsxs)(n.p,{children:["If the limits above are set to a value higher than 65536,\n",(0,s.jsxs)(n.a,{href:"./networking#erl-max-ports",children:["the ",(0,s.jsx)(n.code,{children:"ERL_MAX_PORTS"})," environment variable"]})," must be updated accordingly to increase a ",(0,s.jsx)(n.a,{href:"./runtime",children:"runtime"})," limit."]}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"https://www.freedesktop.org/software/systemd/man/systemd.exec.html",children:"systemd documentation"})," to learn about\nthe supported limits and other directives."]}),"\n",(0,s.jsx)(n.h3,{id:"with-docker",children:"With Docker"}),"\n",(0,s.jsxs)(n.p,{children:["To configure kernel limits for Docker contains, use the ",(0,s.jsx)(n.code,{children:'"default-ulimits"'})," key in ",(0,s.jsx)(n.a,{href:"https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file",children:"Docker daemon configuration file"}),".\nThe file has to be installed on Docker hosts at ",(0,s.jsx)(n.code,{children:"/etc/docker/daemon.json"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "default-ulimits": {\n "nofile": {\n "Name": "nofile",\n "Hard": 64000,\n "Soft": 64000\n }\n }\n}\n'})}),"\n",(0,s.jsxs)(n.p,{children:["If the limits above are set to a value higher than 65536,\n",(0,s.jsxs)(n.a,{href:"./networking#erl-max-ports",children:["the ",(0,s.jsx)(n.code,{children:"ERL_MAX_PORTS"})," environment variable"]})," must be updated accordingly to increase a ",(0,s.jsx)(n.a,{href:"./runtime",children:"runtime"})," limit."]}),"\n",(0,s.jsx)(n.h3,{id:"verifying-limits",children:"Verifying the Limit"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"./management",children:"RabbitMQ management UI"})," displays the number of file descriptors available\nfor it to use on the Overview tab."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"rabbitmq-diagnostics status\n"})}),"\n",(0,s.jsx)(n.p,{children:"includes the same value."}),"\n",(0,s.jsx)(n.p,{children:"The following command"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cat /proc/$RABBITMQ_BEAM_PROCESS_PID/limits\n"})}),"\n",(0,s.jsxs)(n.p,{children:["can be used to display effective limits of a running process. ",(0,s.jsx)(n.code,{children:"$RABBITMQ_BEAM_PROCESS_PID"}),"\nis the OS PID of the Erlang VM running RabbitMQ, as returned by ",(0,s.jsx)(n.code,{children:"rabbitmq-diagnostics status"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"managing-service",children:"Managing the Service"}),"\n",(0,s.jsxs)(n.p,{children:["To start and stop the server, use the ",(0,s.jsx)(n.code,{children:"systemctl"})," tool.\nThe service name is ",(0,s.jsx)(n.code,{children:"rabbitmq-server"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# stop the local node\nsudo systemctl stop rabbitmq-server\n\n# start it back\nsudo systemctl start rabbitmq-server\n"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"systemctl status rabbitmq-server"})," will report service status\nas observed by systemd (or similar service manager):"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# check on service status as observed by service manager\nsudo systemctl status rabbitmq-server\n"})}),"\n",(0,s.jsx)(n.p,{children:"It will produce output similar to this:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ini",children:'Redirecting to /bin/systemctl status rabbitmq-server.service\n\u25CF rabbitmq-server.service - RabbitMQ broker\n Loaded: loaded (/usr/l
19ib/systemd/system/rabbitmq-server.service; enabled; vendor preset: disabled)\n Drop-In: /etc/systemd/system/rabbitmq-server.service.d\n \u2514\u2500limits.conf\n Active: active (running) since Wed 2021-05-07 10:21:32 UTC; 25s ago\n Main PID: 957 (beam.smp)\n Status: "Initialized"\n CGroup: /system.slice/rabbitmq-server.service\n \u251C\u2500 957 /usr/lib/erlang/erts-10.2/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -K true -- -root /usr/lib/erlang -progname erl -- -home /var/lib/rabbitmq -- ...\n \u251C\u25001411 /usr/lib/erlang/erts-10.2/bin/epmd -daemon\n \u251C\u25001605 erl_child_setup 400000\n \u251C\u25002860 inet_gethost 4\n \u2514\u25002861 inet_gethost 4\n\nAug 26 10:21:30 localhost.localdomain rabbitmq-server[957]: ## ##\nAug 26 10:21:30 localhost.localdomain rabbitmq-server[957]: ## ## RabbitMQ 4.1.4. Copyright (c) 2005-2026 Broadcom. All Rights Reserved. The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.\nAug 26 10:21:30 localhost.localdomain rabbitmq-server[957]: ########## Licensed under the MPL 2.0. Website: https://www.rabbitmq.com/\nAug 26 10:21:30 localhost.localdomain rabbitmq-server[957]: ###### ##\nAug 26 10:21:30 localhost.localdomain rabbitmq-server[957]: ########## Logs: /var/log/rabbitmq/[email protected]\nAug 26 10:21:30 localhost.localdomain rabbitmq-server[957]: /var/log/rabbitmq/rabbit@localhost_upgrade.log\nAug 26 10:21:30 localhost.localdomain rabbitmq-server[957]: Starting broker...\nAug 26 10:21:32 localhost.localdomain rabbitmq-server[957]: systemd unit for activation check: "rabbitmq-server.service"\nAug 26 10:21:32 localhost.localdomain systemd[1]: Started RabbitMQ broker.\nAug 26 10:21:32 localhost.localdomain rabbitmq-server[957]: completed with 6 plugins.\n'})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"rabbitmqctl"}),", ",(0,s.jsx)(n.code,{children:"rabbitmq-diagnostics"}),",\nand other ",(0,s.jsx)(n.a,{href:"./cli",children:"CLI tools"})," will be available in ",(0,s.jsx)(n.code,{children:"PATH"})," and can be invoked by a ",(0,s.jsx)(n.code,{children:"sudo"}),"-enabled user:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# checks if the local node is running and CLI tools can successfully authenticate with it\nsudo rabbitmq-diagnostics ping\n\n# prints enabled components (applications), TCP listeners, memory usage breakdown, alarms\n# and so on\nsudo rabbitmq-diagnostics status\n\n# prints cluster membership information\nsudo rabbitmq-diagnostics cluster_status\n\n# prints effective node configuration\nsudo rabbitmq-diagnostics environment\n"})}),"\n",(0,s.jsxs)(n.p,{children:["All ",(0,s.jsx)(n.code,{children:"rabbitmqctl"})," commands will report an error if no node is running.\nSee the ",(0,s.jsx)(n.a,{href:"./cli",children:"CLI tools"})," and ",(0,s.jsx)(n.a,{href:"./monitoring",children:"Monitoring"})," guides to learn more."]}),"\n",(0,s.jsx)(n.h2,{id:"server-logs",children:"Log Files and Management"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"./logging",children:"Server logs"})," can be found under the ",(0,s.jsx)(n.a,{href:"./relocate",children:"configurable"})," directory, which usually\ndefaults to ",(0,s.jsx)(n.code,{children:"/var/log/rabbitmq"})," when RabbitMQ is installed via a Linux package manager."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"RABBITMQ_LOG_BASE"})," can be used to override ",(0,s.jsx)(n.a,{href:"./relocate",children:"log directory location"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Assuming a ",(0,s.jsx)(n.code,{children:"systemd"}),"-based distribution, system service logs can be\ninspected using"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"journalctl --system\n"})}),"\n",(0,s.jsx)(n.p,{children:"which requires superuser privileges.\nIts output can be filtered to narrow it down to RabbitMQ-specific entries:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo journalctl --system | grep rabbitmq\n"})}),"\n",(0,s.jsx)(n.p,{children:"The output will look similar to this:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ini",children:'Aug 26 11:03:04 localhost rabbitmq-server[968]: ## ##\nAug 26 11:03:04 localhost rabbitmq-server[968]: ## ## RabbitMQ 4.1.4. Copyright (c) 2005-2026 Broadcom. All Rights Reserved. The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.\nAug 26 11:03:04 localhost rabbitmq-server[968]: ########## Licensed under the MPL 2.0. Website: https://www.rabbitmq.com/\nAug 26 11:03:04 localhost rabbitmq-server[968]: ###### ##\nAug 26 11:03:04 localhost rabbitmq-server[968]: ########## Logs: /var/log/rabbitmq/[email protected]\nAug 26 11:03:04 localhost rabbitmq-server[968]: /var/log/rabbitmq/rabbit@localhost_upgrade.log\nAug 26 11:03:04 localhost rabbitmq-server[968]: Starting broker...\nAug 26 11:03:05 localhost rabbitmq-server[968]: systemd unit for activation check: "rabbitmq-server.service"\nAug 26 11:03:06 localhost rabbitmq-server[968]: completed with 6 plugins.\n'})}),"\n",(0,s.jsx)(n.h3,{id:"log-rotation",children:"Log Rotation"}),"\n",(0,s.jsxs)(n.p,{children:["The broker always appends to the ",(0,s.jsx)(n.a,{href:"./logging",children:"log files"}),", so a complete log history is retained."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://linux.die.net/man/8/logrotate",children:"logrotate"})," is the recommended way of log file rotation and compression.\nBy default, the package will set up ",(0,s.jsx)(n.code,{children:"logrotate"})," to run weekly on files located in default\n",(0,s.jsx)(n.code,{children:"/var/log/rabbitmq"})," directory. Rotation configuration can be found in\n",(0,s.jsx)(n.code,{children:"/etc/logrotate.d/rabbitmq-server"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"apt-launchpad-erlang",children:"Install Erlang from an Apt Repository (PPA) on Launchpad"}),"\n",(0,s.jsxs)(n.p,{children:["This additional section covers installation of modern Erlang packages from Launchpad. To install\nmodern Erlang and RabbitMQ, please refer to ",(0,s.jsx)(n.a,{href:"#apt-repositories",children:"Install RabbitMQ from Team RabbitMQ's apt repositories"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"modern-erlang-on-ubuntu",children:"Modern Erlang on Ubuntu"}),"\n",(0,s.jsx)(n.admonition,{type:"important",children:(0,s.jsxs)(n.p,{children:["The apt repositories described
19in this section are specific to Ubuntu.\nThey ",(0,s.jsx)(n.strong,{children:"cannot"})," be used with Debian distributions."]})}),"\n",(0,s.jsxs)(n.p,{children:["Standard Debian and Ubuntu repositories tend to provide outdated versions of Erlang/OTP. Team RabbitMQ maintains\nseveral apt repositories that includes ",(0,s.jsx)(n.a,{href:"https://launchpad.net/~rabbitmq/",children:"packages of latest Erlang/OTP releases"}),"\non Launchpad:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["For ",(0,s.jsx)(n.a,{href:"https://launchpad.net/~rabbitmq/+archive/ubuntu/rabbitmq-erlang",children:"the latest Erlang"})," major supported by RabbitMQ"]}),"\n",(0,s.jsxs)(n.li,{children:["For ",(0,s.jsx)(n.a,{href:"https://launchpad.net/~rabbitmq/+archive/ubuntu/rabbitmq-erlang-27",children:"Erlang 27.x"})]}),"\n",(0,s.jsxs)(n.li,{children:["For ",(0,s.jsx)(n.a,{href:"https://launchpad.net/~rabbitmq/+archive/ubuntu/rabbitmq-erlang-26",children:"Erlang 26.x"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"The Erlang repositores on Launchpad currently target the following Ubuntu distributions:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ubuntu 24.04 (Noble)"}),"\n",(0,s.jsx)(n.li,{children:"Ubuntu 22.04 (Jammy)"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Alternatively, Team RabbitMQ's apt repositories (see above) support the same versions\nand also can be used on Debian distributions, not just Ubuntu."}),"\n",(0,s.jsx)(n.p,{children:"In order to use the repository, it is necessary to"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Install prerequisites needed to download signing keys and packages over HTTPS"}),"\n",(0,s.jsxs)(n.li,{children:["Add repository signing key to your system. ",(0,s.jsx)(n.code,{children:"apt"})," will verify package signatures during installation."]}),"\n",(0,s.jsx)(n.li,{children:"Add a source list file for the repository"}),"\n",(0,s.jsx)(n.li,{children:"Update package metadata"}),"\n",(0,s.jsx)(n.li,{children:"Install Erlang packages required by RabbitMQ"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"install-essential-dependencies-1",children:"Install Essential Dependencies"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-get update -y\n\nsudo apt-get install curl gnupg -y\n"})}),"\n",(0,s.jsx)(n.h3,{id:"erlang-apt-repo-signing-key",children:"Add Repository Signing Key"}),"\n",(0,s.jsxs)(n.p,{children:["In order to use the repository, add ",(0,s.jsx)(n.a,{href:"./signatures",children:"RabbitMQ signing key"})," to the system.\nThis will enable apt to trust packages signed by that key."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# primary RabbitMQ signing key\ncurl -1sLf "https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.github.rabbitmq.signing.gpg > /dev/null\n\n# Launchpad PPA signing key for apt\ncurl -1sLf "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xf77f1eda57ebb1cc" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg > /dev/null\n'})}),"\n",(0,s.jsxs)(n.p,{children:["See the ",(0,s.jsx)(n.a,{href:"./signatures",children:"guide on signatures"})," to learn more."]}),"\n",(0,s.jsx)(n.h3,{id:"erlang-apt-https-transport",children:"Enable apt HTTPS Transport"}),"\n",(0,s.jsxs)(n.p,{children:["In order for apt to be able to download RabbitMQ and Erlang packages from the Team RabbitMQ apt repositories or Launchpad,\nthe ",(0,s.jsx)(n.code,{children:"apt-transport-https"})," package must be installed:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-get install apt-transport-https\n"})}),"\n",(0,s.jsx)(n.h3,{id:"erlang-source-list-file",children:"Add a Source List File"}),"\n",(0,s.jsx)(n.admonition,{type:"important",children:(0,s.jsx)(n.p,{children:"The contents of the file described in this section will vary slightly based on the target Debian-based distribution.\nMake sure to switch to the appropriate tab."})}),"\n",(0,s.jsxs)(n.p,{children:["As with all 3rd party Apt (Debian) repositories, a file describing the repository\nmust be placed under the ",(0,s.jsx)(n.code,{children:"/etc/apt/sources.list.d/"})," directory.\n",(0,s.jsx)(n.code,{children:"/etc/apt/sources.list.d/erlang.list"})," is the recommended location."]}),"\n",(0,s.jsx)(n.p,{children:"The file should have a repository (apt source file) definition line. Its\ncontents will vary from Ubuntu version to Ubuntu version."}
19),"\n",(0,s.jsxs)(o.A,{groupId:"distribution-specific",children:[(0,s.jsx)(d.A,{value:"ubuntu-noble",label:"Ubuntu 24.04",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# This Launchpad PPA repository provides Erlang packages produced by the RabbitMQ team\n#\n# Replace $distribution with the name of the Ubuntu release used\ndeb [arch=amd64 signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu noble main\ndeb-src [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu noble main\n"})})}),(0,s.jsx)(d.A,{value:"ubuntu-jammy",label:"Ubuntu 22.04",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# This Launchpad PPA repository provides Erlang packages produced by the RabbitMQ team\n#\n# Replace $distribution with the name of the Ubuntu release used\ndeb [arch=amd64 signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu jammy main\ndeb-src [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu jammy main\n"})})}),(0,s.jsx)(d.A,{value:"ubuntu-focal",label:"Ubuntu 20.04",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# This Launchpad PPA repository provides Erlang packages produced by the RabbitMQ team\n#\n# Replace $distribution with the name of the Ubuntu release used\ndeb [arch=amd64 signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu focal main\ndeb-src [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu focal main\n"})})})]}),"\n",(0,s.jsx)(n.h3,{id:"installing-erlang-package",children:"Install Erlang Packages"}),"\n",(0,s.jsxs)(n.p,{children:["After updating the list of ",(0,s.jsx)(n.code,{children:"apt"})," sources it is necessary to run ",(0,s.jsx)(n.code,{children:"apt-get update"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-get update -y\n"})}),"\n",(0,s.jsx)(n.p,{children:"Then packages can be installed just like with the standard Debian repositories:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# This is recommended. Metapackages such as erlang and erlang-nox must only be used\n# with apt version pinning. They do not pin their dependency versions.\nsudo apt-get install -y erlang-base \\\n erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \\\n erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \\\n erlang-runtime-tools erlang-snmp erlang-ssl \\\n erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl\n"})})]})}function m(e={}){let{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(g,{...e})}):g(e)}},57250(e,n,a){a.d(n,{A:()=>l});var r=a(74848);a(96540);var s=a(34164),t=a(57663);function i({children:e,className:n,hidden:a}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.A)("tabItem_Ymn6",n),hidden:a,children:e})}function l({children:e,className:n,value:a}){let{selectedValue:s,lazy:o}=(0,t.uc)(),d=a===s;return!d&&o?null:(0,r.jsx)(i,{className:n,hidden:!d,children:e})}},50773(e,n,a){a.d(n,{A:()=>h});var r=a(74848);a(96540);var s=a(34164),t=a(88287),i=a(57663),l=a(28584),o=a(19863);function d({className:e}){let{selectedValue:n,selectValue:a,tabValues:t,block:o}=(0,i.uc)(),c=[],{blockElementScrollPositionUntilNextRender:b}=(0,l.a_)(),h=e=>{let r=e.currentTarget,s=t[c.indexOf(r)].value;s!==n&&(b(r),a(s))},u=e=>{let n=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{let a=c.indexOf(e.currentTarget)+1;n=c[a]??c[0];break}case"ArrowLeft":{let a=c.indexOf(e.currentTarget)-1;n=c[a]??c[c.length-1]}}n?.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":o},e),children:t.map(({value:e,label:a,attributes:t})=>(0,r.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>{c.push(e)},onKeyDown:u,onClick:h,...t,className:(0,s.A)("tabs__item","tabItem_LNqP",t?.className,{"tabs__item--active":n===e}),children:a??e},e))})}function c({children:e}){return(0,r.jsx)("div",{className:"margin-top--md",children:e})}function b({className:e,children:n}){return(0,r.jsxs)("div",{className:(0,s.A)(t.G.tabs.container,"tabs-container","tabList__CuJ"),children:[(0,r.jsx)(d,{className:e}),(0,r.jsx)(c,{children:n})]})}function h(e){let n=(0,o.A)(),a=(0,i.OC)(e);return(0,r.jsx)(i.O_,{value:a,children:(0,r.jsx)(b,{className:e.className,children:(0,i.vT)(e.children)})},String(n))}},57663(e,n,a){a.d(n,{OC:()=>h,O_:()=>g,uc:()=>p,vT:()=>c});var r=a(74848),s=a(96540),t=a(56347),i=a(99989),l=a(96629),o=a(80618),d=a(41367);function c(e){return s.Children.toArray(e).filter(e=>"\n"!==e)}function b({value:e,tabValues:n}){return n.some(n=>n.value===e)}function h(e){let n,{defaultValue:a,queryString:r=!1,groupId:c}=e,h=function(e){let{values:n,children:a}=e;return(0,s.useMemo)(()=>{let e=n??s.Children.toArray(a).flatMap(e=>{if(!e)return[];if((0,s.isValidElement)(e)&&function(e){let{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return[e];
19let n="string"==typeof e.type?e.type:e.type.name;throw Error(`Docusaurus error: Bad <Tabs> child <${n}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop. 20If you do not want to pass on a "value" prop to the direct children of <Tabs>, you can also pass an explicit <Tabs values={...}> prop.`)}).map(({props:{value:e,label:n,attributes:a,default:r}})=>({value:e,label:n,attributes:a,default:r})),r=(0,o.XI)(e,(e,n)=>e.value===n.value);if(r.length>0)throw Error(`Docusaurus error: Duplicate values "${r.map(e=>`'${e.value}'`).join(", ")}" found in <Tabs>. Every value needs to be unique.`);return e},[n,a])}(e),[u,p]=(0,s.useState)(()=>(function({defaultValue:e,tabValues:n}){if(0===n.length)throw Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}let a=n.find(e=>e.default)??n[0];if(!a)throw Error("Unexpected error: 0 tabValues");return a.value})({defaultValue:a,tabValues:h})),[g,m]=function({queryString:e=!1,groupId:n}){let a=(0,t.W6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,l.aZ)(r),(0,s.useCallback)(e=>{if(!r)return;let n=new URLSearchParams(a.location.search);n.set(r,e),a.replace({...a.location,search:n.toString()})},[r,a])]}({queryString:r,groupId:c}),[x,j]=function({groupId:e}){let n=e?`docusaurus.tab.${e}`:null,[a,r]=(0,d.Dv)(n);return[a,(0,s.useCallback)(e=>{n&&r.set(e)},[n,r])]}({groupId:c}),f=b({value:n=g??x,tabValues:h})?n:null;return(0,i.A)(()=>{f&&p(f)},[f]),{selectedValue:u,selectValue:(0,s.useCallback)(e=>{if(!b({value:e,tabValues:h}))throw Error(`Can't select invalid tab value=${e}`);p(e),m(e),j(e)},[m,j,h]),tabValues:h,lazy:e.lazy??!1,block:e.block??!1}}let u=(0,s.createContext)(null);function p(){let e=s.useContext(u);if(!e)throw Error("useTabsContext() must be used within a Tabs component");return e}function g(e){return(0,r.jsx)(u.Provider,{value:e.value,children:e.children})}},28412(e,n,a){a.d(n,{AR:()=>d,EF:()=>c,TJ:()=>o,VK:()=>u,bh:()=>b,ci:()=>h,lx:()=>g,n3:()=>p,ue:()=>m}),a(96540);var r=a(83384),s=a(80698);function t({branch:e}={branch:void 0}){return void 0===e&&(e=(0,s.ir)().label),e}function i(e){let n=t(e);return(0,r.CA)(n)}function l(e){let n=t(e),a=(0,r.Z0)(n);if(void 0===a)return;let{packageType:s}=e;return"package_revs"in a&&s in a.package_revs?a.package_revs[s]:"1"}function o(e={}){return t(e)}function d(e={}){return i(e)||"<unreleased>"}function c(e={}){let n=i(e);return void 0===n?"<unreleased>":`v${n}`}function b(e){let{packageType:n}=e,a=i(e);if(void 0===a)return"#";let r=c(),s=`https://github.com/rabbitmq/rabbitmq-server/releases/download/${r}`;switch(n){case"debian":let t=l(n);return`${s}/rabbitmq-server_${a.replaceAll("-",".")}-${t}_all.deb`;case"rpm-el8":let o=l(n);return`${s}/rabbitmq-server-${a.replaceAll("-",".")}-${o}.el8.noarch.rpm`;case"rpm-suse":let d=l(n);return`${s}/rabbitmq-server-${a.replaceAll("-",".")}-${d}.suse.noarch.rpm`;case"generic-unix":return`${s}/rabbitmq-server-generic-unix-${a}.tar.xz`;case"windows-installer":return`${s}/rabbitmq-server-${a}.exe`;case"windows-zip":return`${s}/rabbitmq-server-windows-${a}.zip`;default:throw Error(`Unknown RabbitMQ server package type ${package_type}`)}}function h(e){let n=b(e);return"#"!=n?`${n}.asc`:n}function u(e){let{packageType:n}=e;switch(n){case"debian":case"rpm-el8":case"rpm-suse":return l(n);default:throw Error(`No package revision for package type ${package_type}`)}}function p(e){let n=b(e);return"#"!=n?n.split("/").reverse()[0]:"<unreleased>"}function g(e={}){let n=i(e);return void 0===n?"<unreleased>":`rabbitmq_${n}`}function m(e={}){return g(e)}},83384(e,n,a){a.d(n,{Z0:()=>y,Az:()=>f,J3:()=>k,CA:()=>v});var r,s,t,i,l,o,d=a(74848),c=a(96540),b=a(10898),h=a(80698);function u(){return(u=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var a=arguments[n];for(var r in a)({}).hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e}).apply(null,arguments)}let p=({title:e,titleId:n,...a})=>c.createElement("svg",u({width:6,height:12,viewBox:"0 0 1.5875 3.175",id:"svg1",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":n},a),e?c.createElement("title",{id:n},e):null,r||(r=c.createElement("defs",{id:"defs1"})),s||(s=c.createElement("g",{id:"layer1",transform:"translate(-43.445422,-75.511109)"},c.createElement("path",{d:"m 43.445422,75.511109 v 3.175 l 1.5875,-1.5875 z",id:"path1",fill:"#000000",fillOpacity:1,stroke:"none",strokeWidth:"0.0214907px",strokeLinecap:"butt",strokeLinejoin:"miter",strokeOpacity:1}))));function g(){return(g=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var a=arguments[n];for(var r in a)({}).hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e}).apply(null,arguments)}let m=({title:e,titleId:n,...a})=>c.createElement("svg",g({width:740,height:740,viewBox:"0 0 22.2 22.2",id:"svg1",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":n},a),e?c.createElement("title",{id:n},e):null,t||(t=c.createElement("defs",{id:"defs1"})),i||(i=c.createElement("path",{d:"m 11.1,3.9157895 v 1.580518 H 2.7331443 V 20.019638 l 14.5231687,-1.6e-5 v -8.367004 l 1.580528,1.4e-5 v 8.36699 c 0,0.944268 -0.6712,1.580378 -1.580528,1.580378 H 2.7331443 C 1.8914216,21.6 1.152
206319,20.879784 1.1526319,20.019622 V 5.4963075 c 0,-0.7831956 0.7534712,-1.580518 1.5805124,-1.580518 z m 0,11.7426205 v 1.520537 H 5.5736844 V 15.65841 Z m 3.315789,-3.31578 v 1.520528 H 5.5736844 V 12.34263 Z m 0,-3.31578 v 1.520518 H 5.5736844 V 9.02685 Z M 17.731578,2.8105264 18.767762,5.0901316 21.047368,6.1263158 18.767762,7.1625 17.731578,9.4421053 16.695394,7.1625 14.415789,6.1263158 16.695394,5.0901316 Z M 14.41579,0.6 15.10658,2.1197369 16.626316,2.8105264 15.10658,3.5013158 14.41579,5.0210527 13.725,3.5013158 12.205263,2.8105264 13.725,2.1197369 Z",id:"path1",strokeWidth:.75,strokeDasharray:"none",fillOpacity:1})));function x(){return(x=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var a=arguments[n];for(var r in a)({}).hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e}).apply(null,arguments)}let j=({title:e,titleId:n,...a})=>c.createElement("svg",x({fill:"#000000",width:740,height:740,viewBox:"0 0 29.6 29.6",enableBackground:"new 0 0 32 32",id:"Layer_3",xmlSpace:"preserve",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":n},a),e?c.createElement("title",{id:n},e):null,l||(l=c.createElement("defs",{id:"defs4"})),o||(o=c.createElement("g",{id:"g4",transform:"translate(-1.2,-1.1996259)"},c.createElement("path",{d:"m 5.063,19.369 0.521,4.602 c 0.007,0.067 0.021,0.133 0.042,0.197 0.412,1.266 1.591,2.072 2.855,2.072 0.308,0 0.619,-0.048 0.927,-0.148 1.572,-0.512 2.436,-2.208 1.924,-3.781 l -0.83,-2.551 h 0.261 l 7.789,3.895 c 0.142,0.07 0.294,0.105 0.447,0.105 0.183,0 0.365,-0.05 0.525,-0.149 C 19.82,23.429 20,23.107 20,22.76 v -4.142 c 1.721,-0.447 3,-2 3,-3.858 0,-1.858 -1.279,-3.411 -3,-3.858 V 6.76 C 20,6.413 19.82,6.092 19.525,5.909 19.23,5.726 18.862,5.71 18.552,5.865 L 10.764,9.76 H 7 c -2.757,0 -5,2.243 -5,5 0,2.071 1.265,3.851 3.063,4.609 z M 9.43,22.93 C 9.601,23.454 9.314,24.019 8.789,24.19 8.29,24.353 7.757,24.101 7.558,23.628 L 7.119,19.76 H 8.398 Z M 21,14.76 c 0,0.737 -0.405,1.375 -1,1.722 v -3.443 c 0.595,0.346 1,0.984 1,1.721 z m -3,6.382 -6,-3 v -6.764 l 6,-3 z M 7,11.76 h 3 v 6 H 7 c -1.654,0 -3,-1.346 -3,-3 0,-1.654 1.346,-3 3,-3 z",id:"path1"}),c.createElement("path",{d:"m 27,15.76 h 2 c 0.553,0 1,-0.448 1,-1 0,-0.552 -0.447,-1 -1,-1 h -2 c -0.553,0 -1,0.448 -1,1 0,0.552 0.447,1 1,1 z",id:"path2"}),c.createElement("path",{d:"m 27,10.467 c 0.256,0 0.512,-0.098 0.707,-0.293 L 29.121,8.76 c 0.391,-0.391 0.391,-1.023 0,-1.414 -0.391,-0.391 -1.023,-0.391 -1.414,0 L 26.293,8.76 c -0.391,0.391 -0.391,1.023 0,1.414 0.195,0.196 0.451,0.293 0.707,0.293 z",id:"path3"}),c.createElement("path",{d:"m 27.707,22.174 c 0.195,0.195 0.451,0.293 0.707,0.293 0.256,0 0.512,-0.098 0.707,-0.293 0.391,-0.391 0.391,-1.023 0,-1.414 l -1.414,-1.414 c -0.391,-0.391 -1.023,-0.391 -1.414,0 -0.391,0.391 -0.391,1.023 0,1.414 z",id:"path4"}))));function f(){let{siteConfig:{customFields:{releaseBranches:{rabbitmq:e}}}}=(0,b.default)();return e}function y(e){let n=f()[e]||{};if(void 0!==n.releases)return n.releases[0]||void 0}function v(e){let n=y(e);if(void 0!==n)return n.version}function k(){let e=f(),n=(0,h.jh)(),a=Date.now(),r={year:"numeric",month:"short",day:"numeric",timeZone:"UTC"};var s=!1;let[t,i]=(0,c.useState)(void 0);var l=[];for(let c in e){let h=n.find(e=>e.name===c),f=e[c],T=f.releases||[],R=void 0!==f.end_of_support;var o=!0;for(let e in s=!!R&&void 0===b,T){let n=T[e],A=t===c?"show-release":"hide-release";var b,u,g,x,y,v,k="";(s?k="latest-release":R||(k="future-release"),R)?(u=[{type:"relnotes",url:`https://github.com/rabbitmq/rabbitmq-server/releases/tag/v${n.version}`}],n.links&&(u=u.concat(n.links)),u=(0,d.jsx)("ul",{children:u.map(function(e){switch(e.type){case"relnotes":return(0,d.jsx)("li",{children:(0,d.jsxs)("a",{href:e.url,className:`release-link release-link-${e.type}`,children:[(0,d.jsx)(m,{title:"Release Notes"}),(0,d.jsx)("span",{children:"Release Notes"})]})});case"announcement":return(0,d.jsx)("li",{children:(0,d.jsxs)("a",{href:e.url,className:`release-link release-link-${e.type}`,children:[(0,d.jsx)(j,{title:"Announcement"}),(0,d.jsx)("span",{children:"Announcement"})]})})}})})):u=(0,d.jsx)(d.Fragment,{}),g=R?(g=new Date(n.release_date)).toLocaleDateString("en-GB",r):"-";var q="-";let M="-";var w=!1;let E=!1;if(f.end_of_support){if(f.end_of_community_support)q=new Date(f.end_of_community_support);else if(b){let e=b.releases,n=new Date(e[e.length-1].release_date);q=new Date(Date.UTC(n.getUTCFullYear(),n.getUTCMonth()+1,0))}else w=!0,q=(0,d.jsx)("abbr",{title:"Supported until the next major or minor release branch is published.",children:"Next release"});M=new Date(f.end_of_support)}{let e=q;e instanceof Date?(x=e>a?"supported-release":"unsupported-release",y=e.toLocaleDateString("en-GB",r)):(x=w?"supported-release":"unsupported-release",y=e),q=(0,d.jsx)("div",{className:["release-eos release-eos-community",x,k,o?"":A].join(" "),children:y})}M instanceof Date&&(E=M>a,M=M.toLocaleDateString("en-GB",r)),o&&(v=h?h.label:c,l.push((0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:["release-toggle",k,A].join(" "),onClick:e=>{i(t===c?void 0:c)},children:(0,d.jsx)(p,{})}),(0,d.jsx)("div",{className:["release-branch",k,o?"":A].join(" "),children:v})]}))),l.push((0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:["release-version",k,o?"":A].join(" "),children:n.version||"-"}),(0,d.jsx)("div",{className:["release-links",k,o?"":A].join(" "),children:u}),(0,d.jsx)("div",{className:["release-reldate",k,o?"":A].join(" "),children:g}),q,(0,d.jsx)("div",{className:["release-eos release-eos-commercial",E?"supported-release latest-release":"unsupported-release",o?"":A].join(" "),children:M})]})),o=!1}R&&(b=f)}return(0,d.jsxs)("div",{className:"release-information",children:[(0,d.jsx)("div",{className:"release-info-overflow",children:(0,d.jsxs)("div",{className:"release-info-grid",children:[(0,d.jsx)("div",{className:"release-info-header release-branch",children:"Release"}),(0,d.jsx)("div",{className:"release-info-header release-version",children:"Patch and associated docs"}),(0,d.jsx)("div",{className:"release-info-header release-reldate",children:"Date of Release"}),(0,d.jsx)("div",{className:"release-info-header release-eos release-eos-community",children:"End of Community Supp
20ort"}),(0,d.jsx)("div",{className:"release-info-header release-eos release-eos-commercial",children:"End of Commercial Support*"}),l]})}),(0,d.jsx)("strong",{children:"Legend:"}),(0,d.jsxs)("dl",{className:"release-legend",children:[(0,d.jsx)("dt",{className:"supported-release latest-release"}),(0,d.jsx)("dd",{children:"Latest release series, fully supported"}),(0,d.jsx)("dt",{className:"unsupported-release"}),(0,d.jsx)("dd",{children:"Older release series, unsupported"}),void 0!==e.current.releases&&e.current.releases.length>0?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("dt",{className:"unsupported-release future-release"}),(0,d.jsx)("dd",{children:"Future version, unsupported"})]}):(0,d.jsx)(d.Fragment,{})]})]})}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.