{"id":131806,"date":"2026-07-31T01:32:36","date_gmt":"2026-07-31T01:32:36","guid":{"rendered":"https:\/\/www.hostinger.com\/my\/tutorials\/how-to-install-buzz\/"},"modified":"2026-07-31T10:46:35","modified_gmt":"2026-07-31T10:46:35","slug":"how-to-install-buzz","status":"publish","type":"post","link":"\/my\/tutorials\/how-to-install-buzz\/","title":{"rendered":"How to install Buzz on a VPSHow to self-host Buzz on a serverHow to install Buzz on a VPS"},"content":{"rendered":"<p class=\"wp-block-paragraph\">To install Buzz (by Block), set up the prerequisites, download and install Buzz, configure your domain and secrets, enable secure access with HTTPS, and register as the first member.<\/p><p class=\"wp-block-paragraph\">While you can install Buzz on your computer and join an existing community as a regular member, self-hosting it on a virtual private server (VPS) gives you full control over your conversations, identities, and files by keeping them on infrastructure that you manage.<\/p><p class=\"wp-block-paragraph\">Follow these steps to self-host Buzz and configure your server:<\/p><ol class=\"wp-block-list\">\n<li>Connect to your server and set up Docker.<\/li>\n\n\n\n<li>Download the Buzz files.<\/li>\n\n\n\n<li>Generate secrets and configure the <strong>.env<\/strong> file.<\/li>\n\n\n\n<li>Start Buzz&rsquo;s services using Docker Compose.<\/li>\n\n\n\n<li>Enable HTTPS with Caddy.<\/li>\n\n\n\n<li>Register as the first member and connect.<\/li>\n\n\n\n<li>Configure automatic backups.<\/li>\n<\/ol><p class=\"wp-block-paragraph\">Some VPS providers, including Hostinger, offer a Buzz application template that lets you deploy Buzz on your server in just a few clicks. This approach is faster and easier than running all the commands manually.<\/p><p class=\"wp-block-paragraph\"><\/p><h2 class=\"wp-block-heading\" id=\"h-prerequisites-for-installing-buzz\"><strong>Prerequisites for installing Buzz<\/strong><\/h2><p class=\"wp-block-paragraph\">Before installing <a href=\"\/my\/tutorials\/what-is-buzz\/\">Buzz<\/a> (an open-source team chat app where people and AI agents share the same channels), prepare a Linux VPS with the recommended specifications, a domain that points to your server, and a Buzz identity key in both <strong>npub<\/strong> and <strong>hex<\/strong> formats.<\/p><ul class=\"wp-block-list\">\n<li><strong>Linux VPS.<\/strong> Your Linux <a href=\"\/my\/tutorials\/what-is-vps-hosting\/\">VPS<\/a> needs at least two CPU cores and 4 GB of RAM to run Buzz reliably. Ubuntu Long Term Support (LTS) releases receive security updates for five years, and Docker&rsquo;s official installation instructions target Ubuntu, making it the simplest choice for this deployment. Before continuing, <a href=\"\/my\/tutorials\/how-to-set-up-vps\/\">prepare your server to host an app<\/a> like Buzz.<\/li>\n\n\n\n<li><strong>Domain.<\/strong> You need a domain name to access the Buzz relay securely over the internet. Make sure you <a href=\"\/my\/tutorials\/how-to-point-domain-to-vps\/\">point the domain to your VPS&rsquo;s IP address<\/a>. If your VPS provider offers a free subdomain, you can use that instead, as it typically already points to your server.<\/li>\n\n\n\n<li><strong>Buzz public key.<\/strong> You&rsquo;ll register as the relay owner with a Buzz identity key, which acts as your identity in the Buzz workspace. Instead of a username and password, Buzz uses a key pair that the app generates for you.<\/li>\n<\/ul><p class=\"wp-block-paragraph\">You&rsquo;ll need the public key in two formats:<\/p><ul class=\"wp-block-list\">\n<li><strong>Hex<\/strong> for the server configuration file.<\/li>\n\n\n\n<li><strong>npub<\/strong> for member registration.<\/li>\n<\/ul><p class=\"wp-block-paragraph\">Follow these steps to generate your Buzz identity key:<\/p><ol class=\"wp-block-list\">\n<li>Go to the <a href=\"https:\/\/buzz.xyz\" target=\"_blank\" rel=\"noopener\">official Buzz website<\/a> and download the desktop app for your operating system.<\/li>\n\n\n\n<li>Install and open the app, then select <strong>Create a new identity key<\/strong> on the welcome screen.<\/li>\n\n\n\n<li>On the community join screen, select <strong>Copy your public ID<\/strong>. This is your <strong>npub<\/strong> key, which starts with <strong>npub1<\/strong> followed by a long string. Save it in a text file.<\/li>\n\n\n\n<li>Open the <a href=\"https:\/\/nostrtool.com\" target=\"_blank\" rel=\"noopener\">NostrTool page<\/a> to convert the <strong>npub<\/strong> key.<\/li>\n\n\n\n<li>Select <strong>Load a pubkey from npub\/hex<\/strong>, paste your <strong>npub<\/strong> key into the <strong>Paste pubkey hex or npub<\/strong> field, and click <strong>Load<\/strong>.<\/li>\n\n\n\n<li>Copy the value from the <strong>Nostr public key (hex)<\/strong> field at the bottom of the page and save it in the same text file.<\/li>\n<\/ol><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a6cba7020b73\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a6cba7020b73\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2026\/07\/nostrtool-npub-hex-public-key-conversion.png\/w=1024,h=1024,fit=scale-down\" alt=\"NostrTool key converter showing a loaded npub with the corresponding hex public key\" class=\"wp-image-153532\" title=\"nostrtool-npub-hex-public-key-conversion\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><h2 class=\"wp-block-heading\" id=\"h-how-to-self-host-buzz-with-docker-compose\"><strong>How to self-host Buzz with Docker Compose<\/strong><\/h2><p class=\"wp-block-paragraph\">You can self-host Buzz with <a href=\"\/my\/tutorials\/what-is-docker-compose\/\">Docker Compose<\/a>, which starts its four required services, the relay, PostgreSQL, Redis, and MinIO, with a single command. This removes the need to install and configure each service separately.<\/p><p class=\"wp-block-paragraph\">The Buzz relay handles messages and ties everything together; PostgreSQL stores message and search data; Redis supports real-time features, and MinIO stores shared files and images.<\/p><h3 class=\"wp-block-heading\"><strong>1. Connect to the server and install Docker<\/strong><\/h3><p class=\"wp-block-paragraph\">Open a terminal on your computer and connect to the server over SSH. Replace <strong>your-server-ip<\/strong> with the IP address provided by your VPS provider:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ssh root@your-server-ip<\/pre><p class=\"wp-block-paragraph\">Update your server&rsquo;s software:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo apt update &amp;&amp; sudo apt upgrade -y<\/pre><p class=\"wp-block-paragraph\">The <strong>apt update<\/strong> command checks for available package updates, while <strong>apt upgrade<\/strong> installs them. These are two of the most common <a href=\"\/my\/tutorials\/linux-commands\/\">commands for managing a Linux server<\/a>.<\/p><p class=\"wp-block-paragraph\">Next,<a href=\"\/my\/tutorials\/how-to-install-docker-on-ubuntu\/\"> install Docker<\/a> on your server. Once done, install the Docker Compose plugin:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo apt install -y docker-compose-plugin<\/pre><p class=\"wp-block-paragraph\">Verify that both are installed correctly. Each command should return a version number:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker --version\ndocker compose version<\/pre><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a6cba702431e\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a6cba702431e\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2026\/07\/terminal-docker-compose-version-output.png\/w=1024,h=1024,fit=scale-down\" alt=\"Terminal output showing installed Docker and Docker Compose version numbers\" class=\"wp-image-153535\" title=\"terminal-docker-compose-version-output\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><h3 class=\"wp-block-heading\"><strong>2. Download the Buzz deployment files<\/strong><\/h3><p class=\"wp-block-paragraph\">Buzz&rsquo;s production deployment files are available on GitHub. Clone the repository with the <a href=\"\/my\/tutorials\/basic-git-commands\/\">git command<\/a>, then open the deployment folder:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git clone https:\/\/github.com\/block\/buzz.git\ncd buzz\/deploy\/compose<\/pre><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a6cba7028400\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a6cba7028400\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2026\/07\/terminal-git-clone-buzz-repository.png\/w=1024,h=1024,fit=scale-down\" alt=\"Terminal output of cloning the Buzz repository from GitHub\" class=\"wp-image-153536\" title=\"terminal-git-clone-buzz-repository\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p class=\"wp-block-paragraph\">You&rsquo;re now in the <strong>buzz\/deploy\/compose<\/strong> folder, which contains the files needed to run Buzz on a production server.<\/p><p class=\"wp-block-paragraph\">To view all files in the folder, run:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ls -a<\/pre><h3 class=\"wp-block-heading\"><strong>3. Generate secrets and configure the environment<\/strong><\/h3><p class=\"wp-block-paragraph\">Buzz uses an environment file (<strong>.env<\/strong>) to store your domain, owner key, and passwords for each service. You need to add these values before starting the relay.<\/p><p class=\"wp-block-paragraph\">First, generate seven random secrets by running the following command seven times. Save each result in a text file, labeled with the field it belongs to, because you&rsquo;ll add them to the configuration shortly:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">openssl rand -hex 32<\/pre><p class=\"wp-block-paragraph\">Copy the environment template, then open the new file with the <a href=\"\/my\/tutorials\/how-to-install-and-use-nano-text-editor\/\">nano text editor<\/a>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cp .env.example .env\nnano .env<\/pre><p class=\"wp-block-paragraph\">In the <strong>.env<\/strong> file, update three groups of values: your domain, owner public key, and secrets.<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a6cba702b14d\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a6cba702b14d\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2026\/07\/nano-editor-buzz-env-configuration-file.png\/w=1024,h=1024,fit=scale-down\" alt=\"The Buzz .env configuration file open in the nano text editor\" class=\"wp-image-153531\" title=\"nano-editor-buzz-env-configuration-file\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><ul class=\"wp-block-list\">\n<li><strong>Domain.<\/strong> Update the following five lines. Replace the placeholder domain in each line with your actual domain:<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">BUZZ_DOMAIN=buzz.example.com\nRELAY_URL=wss:\/\/buzz.example.com\nBUZZ_MEDIA_BASE_URL=https:\/\/buzz.example.com\/media\nBUZZ_MEDIA_SERVER_DOMAIN=buzz.example.com\nBUZZ_CORS_ORIGINS=https:\/\/buzz.example.com<\/pre><ul class=\"wp-block-list\">\n<li><strong>Owner public key.<\/strong> Find the following line and replace the placeholder with the 64-character <strong>hex<\/strong> key you generated before:<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">RELAY_OWNER_PUBKEY=CHANGE_ME_OWNER_PUBKEY_HEX<\/pre><ul class=\"wp-block-list\">\n<li><strong>Secrets.<\/strong> Replace the remaining <strong>CHANGE_ME<\/strong> placeholders with the random values you generated earlier. Use a different value for each variable:<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">BUZZ_RELAY_PRIVATE_KEY=CHANGE_ME_64_HEX_PRIVATE_KEY\nBUZZ_GIT_HOOK_HMAC_SECRET=CHANGE_ME_RANDOM_64_HEX\nPOSTGRES_PASSWORD=CHANGE_ME_RANDOM_PASSWORD\nREDIS_PASSWORD=CHANGE_ME_RANDOM_PASSWORD\nTYPESENSE_API_KEY=CHANGE_ME_RANDOM_API_KEY\nBUZZ_S3_ACCESS_KEY=CHANGE_ME_RANDOM_ACCESS_KEY\nBUZZ_S3_SECRET_KEY=CHANGE_ME_RANDOM_SECRET_KEY<\/pre><p class=\"wp-block-paragraph\">Leave all other values, including ports, the database name, bucket name, and log levels, unchanged because they&rsquo;re already configured correctly.<\/p><p class=\"wp-block-paragraph\">To save the file and close <strong>nano<\/strong>, press <strong>Ctrl+X<\/strong> &rarr; <strong>Y<\/strong> &rarr; <strong>Enter<\/strong>.<\/p><h3 class=\"wp-block-heading\"><strong>4. Start the Buzz services<\/strong><\/h3><p class=\"wp-block-paragraph\">Start the Buzz relay, database, cache, and file storage with a single <strong>docker compose<\/strong> command:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker compose up -d<\/pre><p class=\"wp-block-paragraph\">The first run may take a few minutes because Docker needs to download the required images. Once it finishes, verify that every service is running:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker compose ps<\/pre><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a6cba702e905\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a6cba702e905\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2026\/07\/terminal-docker-compose-ps-buzz-services.png\/w=1024,h=1024,fit=scale-down\" alt=\"Terminal output of docker compose ps showing all four Buzz services running\" class=\"wp-image-153534\" title=\"terminal-docker-compose-ps-buzz-services\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p class=\"wp-block-paragraph\">Each service should show a status of <strong>Up<\/strong> or <strong>healthy<\/strong>. It&rsquo;s normal for the <strong>minio-init<\/strong> service to show <strong>Exited<\/strong> because it runs only once to create the storage bucket, then stops.<\/p><p class=\"wp-block-paragraph\">If the relay shows <strong>Restarting<\/strong>, check its logs:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker compose logs relay<\/pre><p class=\"wp-block-paragraph\">A leftover placeholder in the <strong>.env<\/strong> file is the most common cause. Check for any remaining placeholders with these commands:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">grep CHANGE_ME .env\ngrep buzz.example.com .env<\/pre><p class=\"wp-block-paragraph\">If either command prints any lines, reopen the <strong>.env<\/strong> file and replace the remaining placeholders.<\/p><h3 class=\"wp-block-heading\"><strong>5. Enable HTTPS with Caddy<\/strong><\/h3><p class=\"wp-block-paragraph\">Your Buzz relay is running, but it isn&rsquo;t secure for public access yet.<\/p><p class=\"wp-block-paragraph\">The separate <strong>compose.caddy.yml<\/strong> configuration file adds Caddy, which gets a free TLS certificate from Let&rsquo;s Encrypt, routes traffic to the relay, and keeps your database and file storage inaccessible from the internet.<\/p><p class=\"wp-block-paragraph\">Caddy uses the domain you already set in the <strong>.env<\/strong> file, so you don&rsquo;t need any additional configuration. Stop the Buzz services, then restart them with Caddy:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker compose down\ndocker compose -f compose.yml -f compose.caddy.yml up -d<\/pre><p class=\"wp-block-paragraph\">Open your domain in a browser to verify the setup. If Caddy configured the certificate correctly, your browser should show <strong>Connection is secure<\/strong> without any warnings.<\/p><p class=\"wp-block-paragraph\">If the page doesn&rsquo;t load or shows a certificate error, check the Caddy logs:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker compose logs caddy<\/pre><p class=\"wp-block-paragraph\">The most common causes are DNS propagation delays or blocked firewall ports. When <a href=\"\/my\/tutorials\/how-to-configure-firewall-on-ubuntu-using-ufw\/\">configuring Uncomplicated Firewall (UFW)<\/a> on your server, make sure ports <strong>80<\/strong> and <strong>443<\/strong> are open.<\/p><h3 class=\"wp-block-heading\"><strong>6. Add yourself as a relay member and connect<\/strong><\/h3><p class=\"wp-block-paragraph\">Buzz blocks all connections by default, so you need to register yourself as a member before you can connect.<\/p><p class=\"wp-block-paragraph\">Run the following command and replace <strong>npub1yourkeyhere<\/strong> with your actual <strong>npub<\/strong> key:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker compose exec relay buzz-admin add-member --pubkey npub1yourkeyhere<\/pre><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a6cba7031ca5\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a6cba7031ca5\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2026\/07\/terminal-buzz-admin-add-member-output.png\/w=1024,h=1024,fit=scale-down\" alt=\"Terminal output confirming a new member added to the Buzz relay\" class=\"wp-image-153533\" title=\"terminal-buzz-admin-add-member-output\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p class=\"wp-block-paragraph\">Open the Buzz desktop app on your computer. It should still display the community join screen.<\/p><p class=\"wp-block-paragraph\">Enter your relay URL using the <strong>wss:\/\/<\/strong> prefix, followed by the domain you configured in the <strong>.env<\/strong> file. The prefix tells the app to connect securely through your HTTPS setup. For example:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">wss:\/\/buzz.example.com<\/pre><p class=\"wp-block-paragraph\">The app should connect and display your workspace. If the connection fails, check that you entered the URL correctly and verify that the relay is running:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker compose ps<\/pre><h3 class=\"wp-block-heading\"><strong>7. Set up automatic backups<\/strong><\/h3><p class=\"wp-block-paragraph\">Most of your Buzz workspace data, including messages and metadata, is stored in the Buzz relay&rsquo;s PostgreSQL database. Without backups, you could lose that data if something goes wrong.<\/p><p class=\"wp-block-paragraph\">First, create a backup folder and test a manual backup:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mkdir -p \/backups\ncd \/root\/buzz\/deploy\/compose\ndocker compose exec -T postgres pg_dump -U buzz buzz &gt; \/backups\/buzz-test.sql\nls -la \/backups\/<\/pre><p class=\"wp-block-paragraph\">The <strong>buzz-test.sql<\/strong> file should have a size greater than <strong>0 bytes<\/strong>. If it does, the backup was created successfully.<\/p><p class=\"wp-block-paragraph\">To automate backups, open your <a href=\"\/my\/tutorials\/crontab-syntax\/\">crontab<\/a>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">crontab -e<\/pre><p class=\"wp-block-paragraph\">Choose <strong>nano<\/strong> if prompted to select an editor. Then add the following line at the bottom of the file. This example creates a backup every night at <strong>2:00 AM<\/strong> based on your server&rsquo;s clock (most VPS providers default to UTC):<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">0 2 * * * cd \/root\/buzz\/deploy\/compose &amp;amp;&amp;amp; docker compose exec -T postgres pg_dump -U buzz buzz &amp;gt; \/backups\/buzz-$(date +%Y%m%d).sql<\/pre><p class=\"wp-block-paragraph\">To save the file, press <strong>Ctrl+X<\/strong> &rarr; <strong>Y<\/strong> &rarr; <strong>Enter<\/strong>. The database will now back up automatically every night.<\/p><h2 class=\"wp-block-heading\" id=\"h-how-to-deploy-buzz-with-hostingers-application-template\"><strong>How to deploy Buzz with Hostinger&rsquo;s application template<\/strong><\/h2><p class=\"wp-block-paragraph\">To deploy Buzz with Hostinger&rsquo;s template, open the <a href=\"\/my\/applications\/buzz\">Buzz application page<\/a> and select your preferred VPS plan. <strong>KVM 2<\/strong> at <strong>RM35.99\/month<\/strong> with two vCPU cores and 8 GB of RAM is a good starting point for day-to-day performance.<\/p><p class=\"wp-block-paragraph\">After choosing the server location closest to your team and completing your purchase, you&rsquo;ll be prompted to enter your 64-character <strong>hex<\/strong> public key (the one you generated from the Buzz desktop app using NostrTool).<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a6cba7034f73\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a6cba7034f73\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2026\/07\/hpanel-buzz-configuration-relay-owner-pubkey.png\/w=1024,h=1024,fit=scale-down\" alt=\"Hostinger Buzz configuration page with the relay owner public key field and Deploy button\" class=\"wp-image-153528\" title=\"hpanel-buzz-configuration-relay-owner-pubkey\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p class=\"wp-block-paragraph\">The template installs Ubuntu, Docker, and all required Buzz services automatically. When the installation finishes, you&rsquo;ll be redirected to the <strong>Docker Manager<\/strong> page. Hover over <strong>Open<\/strong> to view your Buzz domain.<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a6cba703941f\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a6cba703941f\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2026\/07\/hpanel-docker-manager-buzz-open-highlighted.png\/w=1024,h=1024,fit=scale-down\" alt=\"hPanel Docker Manager page showing the Buzz project status and access link\" class=\"wp-image-153530\" title=\"hpanel-docker-manager-buzz-open-highlighted\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p class=\"wp-block-paragraph\">Next, open the Buzz desktop app and enter your relay URL using the <strong>wss:\/\/<\/strong> prefix followed by your domain. For example:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">wss:\/\/buzz-ab12.srv1234567.hstgr.cloud<\/pre><p class=\"wp-block-paragraph\">If you already have a Hostinger VPS, you can also switch to the Buzz application template. Keep in mind that changing the operating system reinstalls the server and permanently removes all existing data. <a href=\"\/support\/1583232-how-to-back-up-or-restore-a-vps-at-hostinger\/\">Back up your VPS<\/a> before continuing.<\/p><p class=\"wp-block-paragraph\">To switch to the Buzz template:<\/p><ol class=\"wp-block-list\">\n<li>Open hPanel and go to <strong>VPS<\/strong> &rarr; <strong>Manage<\/strong> &rarr; <strong>OS &amp; Panel<\/strong> &rarr; <strong>Operating system<\/strong>.<\/li>\n\n\n\n<li>In the <strong>Change OS<\/strong> section, search for <strong>Buzz<\/strong> and select it.<\/li>\n<\/ol><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"6a6cba703c7dd\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a6cba703c7dd\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2026\/07\/hpanel-change-os-buzz-highlighted.png\/w=1024,h=1024,fit=scale-down\" alt=\"hPanel Change OS section with the Applications tab and Buzz template selected\" class=\"wp-image-153529\" title=\"hpanel-change-os-buzz-highlighted\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><ol start=\"3\" class=\"wp-block-list\">\n<li>Enter your 64-character <strong>hex<\/strong> public key when prompted, then follow the remaining setup instructions.<\/li>\n<\/ol><p class=\"wp-block-paragraph\">When the installation finishes, open the <strong>Docker Manager<\/strong> page to find your Buzz domain. Then connect from the Buzz desktop app using <strong>wss:\/\/<\/strong> followed by your domain.<\/p><figure class=\"wp-block-image size-large\"><a href=\"\/my\/vps-hosting\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/2\/2023\/02\/VPS-hosting-banner.png\/w=1024,h=1024,fit=scale-down\" alt=\"\" class=\"wp-image-77934\" srcset=\"https:\/\/www.hostinger.com\/my\/tutorials\/wp-content\/uploads\/sites\/45\/2023\/02\/VPS-hosting-banner.png 1024w, https:\/\/www.hostinger.com\/my\/tutorials\/wp-content\/uploads\/sites\/45\/2023\/02\/VPS-hosting-banner-300x88.png 300w, https:\/\/www.hostinger.com\/my\/tutorials\/wp-content\/uploads\/sites\/45\/2023\/02\/VPS-hosting-banner-150x44.png 150w, https:\/\/www.hostinger.com\/my\/tutorials\/wp-content\/uploads\/sites\/45\/2023\/02\/VPS-hosting-banner-768x225.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><h2 class=\"wp-block-heading\" id=\"h-why-install-buzz-on-your-own-server\"><strong>Why install Buzz on your own server<\/strong><\/h2><p class=\"wp-block-paragraph\">Self-hosting Buzz gives you full control over the relay, your workspace data, and who can join.<\/p><ul class=\"wp-block-list\">\n<li><strong>Your data stays on your server.<\/strong> The Buzz relay stores every message and activity event in its PostgreSQL database, and any uploaded files in a separate MinIO store. When you host the relay yourself, the database runs on infrastructure you manage instead of Block&rsquo;s servers or another third party&rsquo;s infrastructure. No one can access, analyze, or delete your workspace data unless you give them permission.<\/li>\n\n\n\n<li><strong>You control who joins.<\/strong> The relay&rsquo;s member list determines who can connect. You can add or remove people and AI agents with the <strong>add-member<\/strong> and <strong>remove-member<\/strong> commands, so there&rsquo;s no approval process, waitlist, or external platform policy between you and your team.<\/li>\n\n\n\n<li><strong>You set your own rules.<\/strong> A self-hosted relay lets you decide what agents can do, how long to keep data, which services the relay can connect to, and when to update to a newer version. When you use someone else&rsquo;s relay, they control those decisions.<\/li>\n<\/ul><p class=\"wp-block-paragraph\">However, self-hosting Buzz isn&rsquo;t for everyone. If you just want to use Buzz without managing a server, download the desktop or mobile app and join a relay that accepts new members. You&rsquo;ll still be able to communicate with other members and AI agents without dealing with Docker, configuration files, or backups.<\/p><h2 class=\"wp-block-heading\" id=\"h-how-to-troubleshoot-buzz-installation-issues\"><strong>How to troubleshoot Buzz installation issues<\/strong><\/h2><p class=\"wp-block-paragraph\">Most Buzz installation issues come from leftover placeholder values in the environment file, an incorrectly formatted owner key, or blocked firewall ports. Here&rsquo;s how to identify and fix each of these problems:<\/p><ul class=\"wp-block-list\">\n<li><strong>The relay restarts with &ldquo;BUZZ_GIT_HOOK_HMAC_SECRET must be at least 32 characters.&rdquo;<\/strong> One or more secrets in your <strong>.env<\/strong> file still use placeholder values. Run <strong>grep CHANGE_ME .env<\/strong> to find them. Generate a new random value for each placeholder with <strong>openssl rand -hex 32<\/strong>, update the file with <strong>nano .env<\/strong>, and restart the services with <strong>docker compose -f compose.yml -f compose.caddy.yml up -d<\/strong>.<\/li>\n\n\n\n<li><strong>The relay restarts with &ldquo;RELAY_OWNER_PUBKEY required.&rdquo;<\/strong> The owner key is missing or uses the wrong format. The relay requires the 64-character <strong>hex<\/strong> string, which contains only letters and numbers, not the <strong>npub<\/strong> version. If you pasted a key that starts with <strong>npub1<\/strong>, convert it to <strong>hex<\/strong> on the NostrTool page, update the value in the <strong>.env<\/strong> file, and restart the services.<\/li>\n\n\n\n<li><strong>The desktop app can&rsquo;t connect.<\/strong> Verify that your domain points to the correct IP address by running <strong>ping<\/strong> followed by your domain on your computer. Then confirm that Caddy is running by using <strong>docker compose ps<\/strong> on the server. If both look correct, make sure your firewall allows traffic on ports <strong>80<\/strong> and <strong>443<\/strong>. These ports must be open for HTTPS traffic to reach the relay.<\/li>\n\n\n\n<li><strong>The mobile app shows a QR code that disappears immediately.<\/strong> The pairing service may be unreachable. Make sure the Caddy Compose file is included in the startup command and that the <strong>\/pair<\/strong> path is routed correctly. Check the Caddy logs for routing errors with <strong>docker compose logs caddy<\/strong>.<\/li>\n<\/ul><h3 class=\"wp-block-heading\"><strong>How to update Buzz to a newer version<\/strong><\/h3><p class=\"wp-block-paragraph\">To update Buzz to the latest version, pull the newest source code and service images.<\/p><p class=\"wp-block-paragraph\">Run these commands on the server:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cd \/root\/buzz\ngit pull\ncd deploy\/compose\ndocker compose -f compose.yml -f compose.caddy.yml pull\ndocker compose -f compose.yml -f compose.caddy.yml up -d<\/pre><p class=\"wp-block-paragraph\">Updating the services won&rsquo;t affect your stored messages, files, or database records. Your data remains intact because Docker stores it in volumes that are separate from the running services.<\/p><h2 class=\"wp-block-heading\" id=\"h-what-to-do-after-installing-buzz\"><strong>What to do after installing Buzz<\/strong><\/h2><p class=\"wp-block-paragraph\">Now that your Buzz relay is running, the next steps are to add your team, organize the workspace, and secure the setup.<\/p><ul class=\"wp-block-list\">\n<li><strong>Manage members.<\/strong> Ask each new member to generate a Buzz identity key in the desktop or mobile app, then add them using their <strong>npub<\/strong> key. You can also list or remove members:<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Add a new member\ndocker compose exec relay buzz-admin add-member --pubkey npub1yourkeyhere\n\n# View all registered members\ndocker compose exec relay buzz-admin list-members\n\n# Remove a member\ndocker compose exec relay buzz-admin remove-member --pubkey npub1yourkeyhere<\/pre><ul class=\"wp-block-list\">\n<li><strong>Add AI agents.<\/strong> Buzz lets you connect AI agents through its ACP harness, which works with tools such as Goose, Codex, and Claude Code. Each agent gets its own identity key and joins channels as a member. Buzz also keeps a full audit trail, so you can track what each agent did and where.<\/li>\n\n\n\n<li><strong>Secure the workspace.<\/strong> The production deployment enables membership enforcement and authentication by default. Review the <strong>BUZZ_REQUIRE_RELAY_MEMBERSHIP<\/strong> and <strong>BUZZ_REQUIRE_AUTH_TOKEN<\/strong> values in your <strong>.env<\/strong> file and confirm that both are set to <strong>true<\/strong>. Keep your relay URL private until you&rsquo;ve added your team.<\/li>\n\n\n\n<li><strong>Protect the server.<\/strong> Your Buzz relay is only as secure as the server it runs on. Follow <a href=\"\/my\/tutorials\/vps-security\/\">basic VPS security practices<\/a>, such as setting up SSH key authentication, configuring firewall rules, enabling automatic security updates, and restricting root access.<\/li>\n<\/ul><p class=\"wp-block-paragraph\">There are also many ways to use your new Buzz workspace, from setting up team workflows to running AI-assisted code reviews. Check out the top Buzz use cases for practical ideas on what you can do next.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>To install Buzz (by Block), set up the prerequisites, download and install Buzz, configure your domain and secrets, enable secure access with HTTPS, and register as the first member. While you can install Buzz on your computer and join an existing community as a regular member, self-hosting it on a virtual private server (VPS) gives [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/my\/tutorials\/how-to-install-buzz\/\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":411,"featured_media":131813,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"How to install Buzz on a VPS","rank_math_description":"Learn how to install Buzz on a VPS manually with Docker Compose commands or deploy it in just a few clicks using Hostinger\u2019s application template.","rank_math_focus_keyword":"how to install buzz","footnotes":""},"categories":[22639],"tags":[],"class_list":["post-131806","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vps"],"hreflangs":[{"locale":"en-US","link":"https:\/\/www.hostinger.com\/tutorials\/how-to-install-buzz","default":0},{"locale":"en-PH","link":"https:\/\/www.hostinger.com\/ph\/tutorials\/how-to-install-buzz","default":0},{"locale":"en-MY","link":"https:\/\/www.hostinger.com\/my\/tutorials\/how-to-install-buzz","default":0},{"locale":"en-GB","link":"https:\/\/www.hostinger.com\/uk\/tutorials\/how-to-install-buzz","default":0},{"locale":"en-IN","link":"https:\/\/www.hostinger.com\/in\/tutorials\/how-to-install-buzz","default":0},{"locale":"en-CA","link":"https:\/\/www.hostinger.com\/ca\/tutorials\/how-to-install-buzz","default":0},{"locale":"en-AU","link":"https:\/\/www.hostinger.com\/au\/tutorials\/how-to-install-buzz","default":0},{"locale":"en-NG","link":"https:\/\/www.hostinger.com\/ng\/tutorials\/how-to-install-buzz","default":0}],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/posts\/131806","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/users\/411"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/comments?post=131806"}],"version-history":[{"count":1,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/posts\/131806\/revisions"}],"predecessor-version":[{"id":131812,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/posts\/131806\/revisions\/131812"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/media\/131813"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/media?parent=131806"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/categories?post=131806"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/tags?post=131806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}