Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

The most predictable way to run ejabberd on a single Ubuntu or Debian VPS is the official self-contained Linux RUN installer: it includes the required Erlang runtime, creates a systemd service, and starts the server for you. After installation, point a DNS name at the VPS, set that name in ejabberd.yml, install a readable TLS certificate, open TCP ports 5222 and 5269 only when your configuration needs them, create an account, and verify the node with systemctl and ejabberdctl.

What you will have at the end

This procedure gives you a self-hosted XMPP service on a Linux VPS. Clients connect to the server’s XMPP domain, authenticate with accounts stored by ejabberd, and exchange messages over encrypted connections. The same ejabberd platform can also provide MQTT and SIP services, but this guide concentrates on XMPP chat.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • A supported Ubuntu or Debian VPS with sudo or root access.
  • A DNS name such as chat.example.com resolving to the VPS address.
  • ejabberd installed as a system service.
  • A configured XMPP host, TLS certificate, and firewall rules.
  • At least one account with administrator rights and a second account for testing.

Keep an SSH session open while changing firewall rules. A mistake in the firewall or configuration should not remove your only route back into the machine.

Choose an installation method

ejabberd’s installation documentation describes four self-hosted families: the Linux RUN installer, DEB or RPM packages, operating-system packages, containers, and source builds. A managed Fluux.io service is a separate cloud-hosting option. Choose before you create directories or automation, because each method has different paths and upgrade procedures.

#1 Best Overall
Forvencer Server Book, 2 Zipper Pocket, Server Books for Waitress
  • Upgraded Two Zipper Pockets: Forvencer server books feature two secure zipper pockets for better organization of coins, cash, and receipts, ensuring that everything you collect has a safe and secure place
  • Smart Storage & Quick Access: Designed with 8 multi-functional compartments, the right side includes a guest receipt pad, while the left has a money pocket, ticket pocket, and credit card slot. Two small clear pockets store bills, receipts, and other visible items. A stitched pen loop ensures you always have your favorite pen ready
  • High-quality & Easy to Clean: Crafted from high-quality PU leather with heavy-duty stitching, this server book is built to last. It resists tears, scratches, and its waterproof surface makes cleaning easy with just a damp cloth or a non-chlorine sanitizer
  • Perfect Fit for Your Apron: Measuring 5” x 8”, this compact organizer is slightly smaller than other models, making it ideal for bending or sitting while carrying in your server apron. It holds everything a waitress needs—a place for everything
  • What's Included: This server organizer comes with multiple open and zippered pockets to store money, receipts, tips, etc. Clear sleeves are perfect for keeping menus or special lists while serving. Available in a variety of colors, allowing you to express yourself even when in uniform
Method Dependency isolation Filesystem and service model Upgrade control Best fit
Official Linux RUN High; the installer includes a stripped-down Erlang runtime Root installs use an /opt/ejabberd-XX.YY/ program directory and an /opt/ejabberd/ area for configuration, Mnesia data, and logs; a systemd unit is created You select the installer version and perform upgrades deliberately A single VPS where predictable dependencies and a vendor-maintained build matter
DEB/RPM package Managed by the package ecosystem; dependencies are separate packages Paths and service integration follow the package; Debian uses /etc/ejabberd/ejabberd.yml and /var/log/ejabberd Controlled through package repositories and normal package operations Administrators who want operating-system conventions and updates
Distribution package Integrated with the distribution’s Erlang and libraries Uses the distribution’s unit, configuration, data, and log locations Follows the distribution release lifecycle, which may lag the upstream project Servers already standardized on distribution packages
Container Image isolates userspace dependencies You must persist configuration and Mnesia data, publish listener ports, and supervise the container Image tags and your orchestration system determine upgrade timing Existing Docker or orchestration environments
Source build Lowest; you maintain the compiler, Erlang/OTP, and build chain Layout and service unit are your responsibility Maximum control, maximum maintenance burden Developers or operators who need patches or build-time customization
Managed Fluux.io hosting Provider-managed Provider controls the service environment; confirm data-location and backup arrangements Provider controls the platform lifecycle Teams that do not want to operate a VPS, firewall, upgrades, and backups

For the remainder of this guide, the Linux RUN path is the reference installation. A later section explains the differences you must apply when using a Debian package or a container.

Prepare the VPS before installing

Confirm access and operating-system support

Log in over SSH with an account that can use sudo, or use a root shell for the installer. Record the VPS architecture so you download the matching Linux build. Update the operating system before installing ejabberd; the exact update command depends on the distribution and release you selected.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Keep SSH available and note the SSH port before touching the firewall.
  • Set the system clock correctly; TLS validation and log correlation depend on accurate time.
  • Decide whether the VPS will run only XMPP or additional services. Unneeded listeners should remain disabled.
  • Plan backups for the ejabberd configuration and Mnesia data before you create production accounts.

Create DNS records

Create an address record for the name clients will use, for example chat.example.com, pointing to the VPS address. Allow DNS propagation and verify the name from a separate machine before troubleshooting ejabberd. If you will publish separate service names for server-to-server discovery, decide those names now and ensure they resolve to the same service or to the intended peers.

The hostname in DNS, the value in hosts, and the certificate’s name must agree. A client can reach an open port and still reject the connection when those identities do not match.

Install ejabberd with the official Linux RUN installer

Download the architecture-matched installer

Download the Linux RUN file from the official ejabberd release channel, choosing the architecture and version that match the VPS. The release filename contains the version and architecture; do not run an installer built for a different CPU architecture.

  1. Save the installer in a temporary directory such as /tmp or your home directory.
  2. Make it executable: chmod +x ejabberd-<version>-linux-x86_64.run (use the actual filename and architecture).
  3. Run it with root privileges: sudo ./ejabberd-<version>-linux-x86_64.run.

When run as root, the installer places program files in an /opt/ejabberd-XX.YY/ directory, keeps configuration, Mnesia data, and logs under /opt/ejabberd/, creates a systemd unit named ejabberd, and starts the service automatically. The bundled Erlang runtime means you do not need to install Erlang separately for this installation path.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Check the first start

sudo systemctl status ejabberd
sudo ejabberdctl status

A successful status check reports a started node. If the service is inactive or failed, do not continue with account creation. Use the failure procedure below, correct the cause, and check the status again.

Install from Debian or Ubuntu packages instead

If your VPS policy requires distribution packages, install ejabberd with the package manager and use the service unit supplied by that package. Package names and repository versions vary by release, so follow the package instructions for your exact Ubuntu or Debian version rather than mixing files from the RUN installer with package-managed files.

Rank #2
LINTRU 5x8 Server Book, 7 Pocket Zipper Organizer, Fits Apron, Black
  • Built for Heavy-Duty Shifts — Unlike Vinyl, PU Leather Won't Crack: This server books for waitress for Reinforced odorless PU leather with double-stitched seams resists tears and scratches far better than vinyl, which cracks and peels over time. The textured surface adds grip and an anti-slip effect on counters and tabletops for steadier writing. The thickened rigid writing surface stays perfectly flat for comfortable order-taking in high-traffic dining rooms and busy bars. This waitress book design works for both left- and right-handed users — built to withstand fast-paced service without warping.
  • Wipes Clean in Seconds — Water-Resistant Surface, Hand Wipe Only: This black server book spill-resistant surface wipes clean with a damp cloth between tables — coffee spills and food grease come right off. Avoid alcohol-based sanitizers; for stubborn oil stains, wipe with mild soapy water, let sit 2 minutes, then wipe. This waitress book is not machine washable — hand wipe only to preserve the PU leather finish. Maintains a sharp, professional look shift after shift.
  • 7 Compartments Keep Cash, Cards & Tips Organized: This serving book Secure zipper pocket (1,000+ open/close cycles) is designed for coins and small bills (For maximum security, keep coin pocket moderately filled) — use the main compartment for unfolded bills up to 6.75 inches. Clear receipt windows are made from thickened, scratch-resistant PVC for lasting clarity and durability. The waitress books for servers Clear card slots that hold multiple cards and an elastic pen loop keep everything visible and accessible. Fits standard 3.5" x 6.75" guest checks without folding, so cash, cards, and order slips stay organized during rush hours.
  • Slim Apron Fit — Elastic Pen Loop Fits Standard & Jumbo Pens: This server book Compact 5" x 8" slim profile slips into any apron pocket and sits flush against your waist for unrestricted movement — whether bending, sitting, or rushing through a busy dining room. The elastic pen loop stretches to fit both standard pens and jumbo markers, so you always have your preferred writing tool ready. The waitress book Holds all shift essentials without adding weight or bulk.(Pen is not included and must be purchased separately)
  • Professional Server Gear for Waitstaff, Bartenders & Cashiers: Streamline orders, tips, and payments with a server book built for waitstaff, bartenders, cashiers, and fast-food crews — not just waitresses. This server books for waitress is Ideal for fine dining, busy cafes, high-volume bars, and fast-food counters. A practical gift for new staff or a reliable upgrade for seasoned teams who demand professional appearance and secure cash handling. This waitress book built for daily professional use with durable construction that holds up shift after shift.

On Debian, the principal configuration file is documented as /etc/ejabberd/ejabberd.yml, and logs are under /var/log/ejabberd. The package may use a different executable path for ejabberdctl; locate the script provided by the package and use that consistently.

sudo systemctl status ejabberd
sudo systemctl restart ejabberd

Do not install the RUN build on top of a package installation. Doing so can create two configurations, two data locations, or a service unit that points at the wrong executable.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Understand container and source-build differences

Container deployment

A container removes host-library work but does not remove operations. Persist the directory containing ejabberd.yml and the Mnesia database, publish the XMPP listener ports from the container to the VPS, and retain logs in a place your runtime will not delete with the container. Use one configuration source and one persistent data volume; replacing a container without those volumes can look like a data-loss event.

Run the container under a supervisor that restarts it after a host reboot. Restrict the container’s Erlang distribution and epmd exposure to localhost or trusted cluster peers, just as you would on a host installation.

Source build

A source build requires a compatible Erlang/OTP toolchain, compilation dependencies, an installation prefix, a service unit, log rotation, and an upgrade plan. It is appropriate when you need a specific patch or build option, not as the shortest route to a working single-VPS server.

Configure the XMPP domain in ejabberd.yml

Find the active configuration

Use the path created by your chosen installation. For a Debian package this is normally /etc/ejabberd/ejabberd.yml; the RUN installer keeps its configuration below /opt/ejabberd/. Inspect the example file shipped with that build and edit it instead of creating a minimal file from memory. The example contains listener and module options that must remain compatible with your ejabberd version.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Set hosts to the client-facing name

Set the hosts entry to the DNS name clients will enter in their XMPP account settings:

hosts:
  - "chat.example.com"

YAML indentation is syntax. Use spaces consistently, preserve the nesting shown by the example configuration, and quote a value when the example does so. Unknown option names, invalid values, or malformed indentation can prevent ejabberd from starting. A configuration reload is atomic: if validation rejects the new file, the running configuration remains in place rather than being partially applied.

Rank #3
Forvencer Server Book High Volume, Expandable Waitress Book with 2 Zipper
  • Upgraded Magnetic Closure Pocket and Two Zipper Pockets: Unlike other brands, Forvencer server books are designed with two secure zipper pockets and two expandable magnetic pockets. These allow you to easily store and organize a large number of coins, cash, and receipts.
  • Smart Storage & Quick Lookup: 10 multi-functional compartments. On the right side has a check pad, and on the other has a Money Pocket, Tickets Pocket and Credit Card Slot. Two small clear pockets can store bills, receipts and other items to be viewed. A stitched pen loop to store your favorite pen.
  • Long-Lasting and Easy to Clean: Serving book features high-quality PU leather and heavy-duty stitching. PU is extremely strong with high tensile strength and good resistance to tearing, abrasion and scratching. Waterproof leather makes it simple to wipe down your server book with warm water or non-chlorine sanitizer solution to remove any dirt, soil, grime, or soda residue to keep it clean.
  • Fit Perfectly in your Apron: Our 5" x 9" server book is designed to accommodate regular checks and fit easily in your apron pocket.
  • What You Get: Forvencer server book in strict quality control, our worry-free 1-Year warranty, and friendly customer service.

Keep listeners aligned with the ports you intend to expose

Use the shipped configuration to enable the client-to-server and server-to-server listeners. A typical deployment uses TCP 5222 for client-to-server connections and TCP 5269 for server-to-server traffic. Confirm the actual listen entries in your file before opening a firewall port; a port that is not configured does not become useful merely because it is allowed through the firewall.

Do not expose Erlang distribution or epmd to the public internet. Keep those interfaces on localhost or limit them to explicitly trusted cluster peers.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Install and reference a TLS certificate

Choose certificate names that match DNS

Obtain a valid certificate for the hostname clients use. Place the certificate and private key where the ejabberd service account can read them, while preventing ordinary users from reading the private key. The exact file names and configuration keys depend on the ejabberd example shipped with your version; follow that example rather than guessing a key option.

If you use a certificate-management client that renews files in place, ensure the resulting permissions still allow the ejabberd service to read the renewed files. A certificate can be valid on disk yet unusable because the service account cannot traverse a parent directory.

Reload after every certificate change

At startup or reload, ejabberd reads the configured certificate files, matches private keys, removes duplicate certificates, and rebuilds certificate chains for TLS connections. After installing or renewing a certificate, reload the configuration when your service unit supports it; otherwise restart the service:

sudo systemctl restart ejabberd
sudo systemctl status ejabberd

Test with an XMPP client using the exact DNS name on the certificate. If the client reports a hostname or chain error, check the name first, then the certificate chain and file permissions. Changing firewall rules cannot repair a certificate mismatch.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Open only the required network ports

Allow TCP 5222 for client-to-server traffic when clients connect directly to ejabberd. Allow TCP 5269 when you need server-to-server federation. The ports are a reference configuration, not a promise that every installation uses both; verify the listeners in ejabberd.yml first.

For a VPS using UFW, the corresponding rules are:

sudo ufw allow 5222/tcp
sudo ufw allow 5269/tcp
sudo ufw status

Use your provider’s security-group or network-firewall controls as well if they sit in front of the VPS. Keep SSH allowed before enabling UFW, and restrict administrative interfaces to your management network. There is no reason to expose an unused listener or the Erlang distribution ports to all internet addresses.

Rank #4
Sale
Slohif Waitress Server Book, Cute Black Polka Dot Restaurant Organizer
  • Eye-Catching & Stylish Design: Designed with unique and fun patterns that add personality to your work essentials. The stylish server book helps you stand out from coworkers while creating a more professional and enjoyable work experience
  • Durable Vegan Leather Material: Made from quality PU vegan leather that is soft, durable, water-resistant, and easy to clean. Reinforced metal corner protectors help prevent daily wear and extend the life of the server book
  • 7 Organized Storage Compartments: Features 7 functional storage spaces including card slots, cash pocket, zipper coin pocket, guest check holder, menu pocket, receipt section, and pen holder to keep everything organized and easy to access
  • Perfect Size for Aprons & Daily Work: Compact and lightweight design fits comfortably into most server aprons without adding bulk. Helps keep your hands free while staying organized during busy shifts
  • Ideal for Restaurants, Bars & Cafes: Perfect for waiters, waitresses, bartenders, servers, cafes, food trucks, and restaurants. A practical work accessory that helps improve efficiency and customer service

Start, stop, and inspect the node

The Linux installers include ejabberdctl; containers normally include it inside the running container. The script provides a direct control path in addition to systemd.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Task Command Expected use
Start the service sudo systemctl start ejabberd or sudo ejabberdctl start Use after a clean shutdown or host maintenance
Stop the service sudo systemctl stop ejabberd or sudo ejabberdctl stop Use before maintenance that requires the node to be offline
Check service state sudo systemctl status ejabberd Shows the systemd result and recent unit messages
Check node state sudo ejabberdctl status Confirms that the Erlang node reports started
Run in the foreground for diagnostics sudo ejabberdctl live Prints Erlang startup and configuration diagnostics directly

Use one control method at a time during troubleshooting. If systemd reports a failure but ejabberdctl appears to start another instance, stop both and verify which executable and configuration path the unit uses.

Create the first account and grant administrator rights

Register an account on the configured host

Register the account only after the hosts value is set and the node is running. The command takes a local username, the configured host, and a password:

sudo ejabberdctl register admin chat.example.com 'use-a-unique-long-password'

The resulting full JID is admin@chat.example.com. Avoid putting a production password directly into shell history; use a temporary shell with restricted history or clear the history entry immediately, and rotate the password if it was exposed.

Add the full JID to the administrator rule

Edit the access-control section in ejabberd.yml and add the full JID to the administrator rule used by your example configuration. A common shape is:

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
acl:
  admin:
    user:
      - "admin@chat.example.com"

The exact rule name and indentation can differ between ejabberd releases, so extend the existing administrator rule instead of replacing unrelated access rules. Save the file, validate it by reloading or restarting, and confirm that the service remains started. Administrator rights apply to the exact JID; adding only admin or only the domain does not grant the same identity.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Verify an end-to-end login

  1. Run sudo systemctl status ejabberd and sudo ejabberdctl status. Both should report a running node.
  2. Configure an XMPP client with the full JID admin@chat.example.com, its password, and the DNS name used in the certificate.
  3. Confirm that the client establishes a TLS connection on the configured client port, normally TCP 5222.
  4. Create a second test account with ejabberdctl register and sign in from a separate client.
  5. Send messages in both directions. This proves authentication, session routing, and basic stanza delivery rather than merely proving that a TCP port is open.
  6. If federation is required, test the second server separately on TCP 5269 and verify that both DNS and certificates identify the intended server names.

When a login fails, check DNS resolution, certificate hostname matching, listener binding, and firewall counters before changing authentication or module settings.

Troubleshoot common installation failures

The systemd unit fails immediately

Run sudo ejabberdctl live to display Erlang diagnostics, then inspect the service log and the ejabberd log directory. A malformed YAML file, unknown option, invalid value, or unreadable certificate commonly prevents startup. Restore the last known-good configuration, correct one issue at a time, and rerun the status checks.

Best Value
ZPARIK 6 Pack Guest Checks Books, Server Note Pads, Pink
  • Standard size: 6 pink server note pads, Each Book Comes with 50 bound order slips - that's 300 ticket sheets total! Check Pads Size 6.75 x 3.5 inch.
  • Convenient Work: These guest check books for servers have a tear-free dotted line that is easy to rip off. You can give as a customer copy or keep for record keeping. We've provided extra rows on the back for additional note taking.Perfect For Restaurants, Lounges, Hotels, Cafes, And Waiters To Use.
  • Record Important Information: These server note pads can record important information.Each ticket has a unique serial number printed at the top, dates, order details, number of guests, order amount, table numbers etc. They are lightweight, small and can fit most aprons. They can be used on-demand and can help decrease errors in orders, while improving work efficiency.
  • High Quality: Sturdy, Not Drop Powder, It's Thick, You Can Write On The Back And Front Easily.Their whole page printing has clear handwriting and a reasonable layout. On the customer retention part of each guest check, "THANK YOU" on the back to make customers feel appreciated.
  • Contact Us: We're confident that the quality of the server note pads will go beyond your expectation. If you experience an issue, feel free to contact us, we'll appreciate it to learn from your experience, and we'll make it better

A reload is rejected

Check indentation, list markers, quotation marks, and option spelling against the shipped example. Because reloads are atomic, a rejected reload leaves the previous running configuration active. This lets you fix the file without first losing existing sessions, but it also means a change you expected to be live may not have been applied.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The service cannot read the certificate

Verify the complete path, file ownership, directory traversal permissions, and that the private key matches the certificate. Ensure the certificate chain is present as required by your ejabberd version. Restart or reload after correcting permissions so ejabberd reads the updated files.

Clients cannot connect

  • Resolve the DNS name from the client network and confirm it returns the VPS address.
  • Check that the listener binds to the expected address and port.
  • Check both the VPS firewall and any provider-level security group for TCP 5222.
  • Confirm that the client uses the same hostname placed in hosts and on the certificate.
  • Inspect logs while attempting a new connection; a rejected TLS handshake and a blocked TCP connection produce different evidence.

Federation fails while local chat works

Local accounts use the client listener; federation requires the server-to-server listener, normally TCP 5269, plus correct DNS and certificate identities for both servers. Confirm that 5269 is configured and reachable in both directions and that you have not exposed only the client port.

The administrator account cannot use admin functions

Confirm that the account’s full JID, including the exact host, appears in the administrator ACL. Check YAML indentation and reload the configuration. A successful login proves the account exists, but it does not prove that the ACL was accepted.

Operate the VPS safely after installation

Back up the right data

Back up ejabberd.yml, certificate-management configuration, and the Mnesia data directory used by your installation. A backup of only the program directory will not restore accounts or server state. Test a restore on a separate instance and protect exported private keys as carefully as the live keys.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Plan upgrades

For the RUN installer, record the installed version and the locations below /opt before installing a newer build. For Debian packages, use the package manager’s upgrade path and review configuration changes supplied by the package. For containers, update the image while retaining persistent configuration and Mnesia volumes. In every case, take a backup, read release notes, and verify the node and a test login after the upgrade.

Limit administrative exposure

  • Expose only the listener ports required by your service.
  • Keep Erlang distribution and epmd restricted to localhost or trusted cluster peers.
  • Use a unique administrator password and do not reuse it for SSH or the VPS provider.
  • Review logs and disk usage; a full filesystem can stop writes even when the process still appears running.
  • Keep SSH and operating-system packages updated independently of ejabberd upgrades.

Final installation checklist

  • DNS for the client-facing XMPP name resolves to the VPS.
  • The selected installation method has one clear executable, configuration path, data directory, and service unit.
  • hosts contains the exact name clients use, with valid YAML indentation.
  • The TLS certificate and private key match that name and are readable by the ejabberd service account.
  • TCP 5222 is open only if the client listener uses it; TCP 5269 is open only when federation is required.
  • Erlang distribution and epmd are not publicly exposed.
  • systemctl status ejabberd and ejabberdctl status report a started node.
  • An administrator account and a second test account can log in and exchange messages.
  • Configuration, Mnesia data, and certificates are included in a tested backup plan.

For a single Ubuntu or Debian VPS, the self-contained Linux RUN installer is usually the shortest route because it supplies Erlang and systemd integration. Distribution packages, containers, and source builds remain valid when their dependency, persistence, and upgrade responsibilities fit your operating model.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.