Deployment guide

Ergo

Overview

Ergo is a modern IRC server (IRCd) written from scratch in Go. A traditional IRC daemon needs a separate services package for user accounts and channels. Ergo bundles NickServ account registration, ChanServ channel registration, native TLS, persistent message history and modern IRCv3 capabilities into a single self-contained binary. A full-featured chat network runs from one process, with no external database or runtime to manage.

This SecureAnyCloud image installs the official Ergo binary (pinned at build) on Ubuntu 24.04 and runs it under systemd, so an IRC server is listening within minutes of launch.

What you get:

  • Ergo (official pinned binary), run under systemd as the unprivileged ergo user (ergo.service)
  • The standard IRC ports 6667 (plaintext) and 6697 (TLS), listening on all interfaces so the server is reachable inside your VNet
  • Built-in NickServ account registration and ChanServ channel registration, so accounts and channels work with no separate services package
  • No baked operator password. A unique operator password is generated on the machine's first boot, hashed with bcrypt into the configuration, and written to a root-only file. No two machines share it, and none ships inside the image.
  • A per-VM TLS certificate. A unique self-signed TLS certificate for the encrypted 6697 listener is generated on first boot, so the private key is never baked into the image. You can replace it with a certificate from a recognized authority at any time (see Step 9).
  • A fresh datastore per machine. The account and channel database is created on each machine's first boot, so no registrations, accounts or state are carried over inside the image.
  • Persistent message history, always-on clients, IRCv3 capabilities including SASL, and WebSocket support for browser clients
  • Sensible defaults: per-IP connection limits and account registration throttling are left on to blunt abuse
  • Unattended security upgrades, left enabled so the server keeps receiving patches

Prerequisites

Before you deploy, make sure you have:

  • An active Azure subscription, an SSH public key, and a VNet with a subnet in the target region
  • A subscription to the Ergo listing on Azure Marketplace
  • Network Security Group rules that allow TCP 22 (admin), TCP 6667 (plaintext IRC) and TCP 6697 (TLS IRC) from the clients that will connect

Recommended virtual machine size: Standard_B2s (2 vCPU, 4 GB RAM) for a small network. Busy networks should use Standard_D2s_v5 or larger.

1

Deploy from the Azure Portal

Search for Ergo in the Marketplace, select the SecureAnyCloud publisher, and click Create.

Configure the Network Security Group to allow TCP 6697 (TLS IRC) and TCP 6667 (plaintext IRC) from your client networks, and TCP 22 for administration. Prefer 6697 for real users. Where you can, limit 6667 to loopback or VNet traffic.

2

Deploy from the Azure CLI

RG="chat-prod"; LOCATION="eastus"; VM_NAME="ircd1" IMAGE_URN="sac1647283583153:ergo-ubuntu-24-04:default:latest" SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" az group create --name "$RG" --location "$LOCATION"
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:ergo-ubuntu-24-04:default:latest
az vm create \
  --resource-group "$RG" --name "$VM_NAME" \
  --image "$IMAGE_URN" \
  --size Standard_B2s \
  --admin-username azureuser \
  --ssh-key-values "$SSH_KEY" \
  --public-ip-sku Standard
# Open the IRC and admin ports on the VM's NSG:
az vm open-port --resource-group "$RG" --name "$VM_NAME" --port 6697 --priority 1001
az vm open-port --resource-group "$RG" --name "$VM_NAME" --port 6667 --priority 1002
az vm open-port --resource-group "$RG" --name "$VM_NAME" --port 22 --priority 1003
3

First boot

On first boot, the image resolves the VM public IP and generates a per-VM operator password and a per-VM self-signed TLS certificate. It then initializes the account and channel datastore, renders the configuration, and starts Ergo. This completes within a minute.

SSH in as azureuser and read the per-VM details, including the operator password:

sudo cat /root/ergo-credentials.txt
4

Confirm the server is running

Confirm that ergo.service is active and listening on 6667 (plaintext) and 6697 (TLS).

systemctl is-active ergo.service ss -tln | grep -E ':6667|:6697'
5

Prove a full IRC round trip

The image ships a self-test. It connects two IRC clients to the server and has both join a channel. It sends a message from one client and confirms that the other receives it. It then logs in as an operator with the per-VM password and completes a TLS handshake on 6697.

Run it to prove the server is healthy end to end:

sudo python3 /usr/local/lib/sac/ergo-roundtrip.py
6

Confirm the TLS listener

The encrypted listener on 6697 presents the per-VM self-signed certificate. Inspect the handshake and certificate with openssl:

echo | openssl s_client -connect 127.0.0.1:6697 -servername localhost 2>/dev/null | openssl x509 -noout -subject -issuer -dates
7

Connect an IRC client and become an operator

Point any IRC client at the server. Use port 6697 with TLS, and either accept the self-signed certificate or install a CA-issued one as described in Step 9. Use port 6667 for plaintext on trusted networks only. Read <IRC_HOST> and the operator password from /root/ergo-credentials.txt.

In your client, register your nick, then become an operator with the per-VM password (the operator name is admin):

/msg NickServ REGISTER <your-account-password> /OPER admin <OPER_PASSWORD>

A successful OPER returns RPL_YOUREOPER and grants you the server administrator class defined in the configuration.

8

Register a channel with ChanServ

Ergo's built-in ChanServ lets an account own and manage a channel with no separate services package. Register your account and identify to it. Then join a channel and register it:

/join #welcome /msg ChanServ REGISTER #welcome

Message history is retained, so clients that support the CHATHISTORY capability can play back recent messages when they reconnect.

9

Replace the self-signed TLS certificate (recommended)

The image ships a per-VM self-signed certificate so TLS works out of the box. For production, install a certificate issued by a recognized authority.

Place your full chain and private key on the VM, point the 6697 listener at them in /etc/ergo/ircd.yaml, and reload:

server: listeners: ":6697": tls: cert: /etc/ergo/tls.crt key: /etc/ergo/tls.key

Replace /etc/ergo/tls.crt and /etc/ergo/tls.key with your issued certificate and key, and keep the key readable by the ergo group. Then restart the service with sudo systemctl restart ergo.

10

Security recommendations

  • Restrict the NSG. Allow 6697 (and 6667 where you must) only from the client networks that need to connect, and allow TCP 22 for administration only.
  • Prefer TLS. Use port 6697 for real users and install a CA-issued certificate (Step 9). Where you can, limit plaintext 6667 to loopback or VNet traffic.
  • Require SASL for stricter deployments. For a private network, require SASL authentication and disable open account registration in /etc/ergo/ircd.yaml, so only invited accounts can connect.
  • Keep the operator password secret. It lives only in /root/ergo-credentials.txt (root-only) and is unique to this VM. Rotate it by generating a new hash with ergo genpasswd and updating the opers block.
  • Keep the OS and Ergo patched. Unattended security upgrades remain enabled on the running VM.
  • Back up the datastore. Account and channel registrations live in /var/lib/ergo/ircd.db. Include it in your backups.
11

Support and Licensing

Ergo is developed by the ergochat project and distributed under the MIT license. This SecureAnyCloud image bundles the unmodified official Ergo binary.

SecureAnyCloud provides the packaging, the secure-by-default first boot (per-VM operator password, per-VM TLS certificate, fresh datastore), the systemd integration, and 24/7 support with a guaranteed 24-hour response SLA.

SecureAnyCloud is not affiliated with or endorsed by the Ergo project. Ergo is a mark of its respective owner and is used here only to identify the software.

Deploy on Azure

Find Ergo on Ubuntu 24.04 LTS on the Azure Marketplace, published by SecureAnyCloud. Deploy from the Portal or the Azure CLI as shown above.

Need Help?

Email sales@secureanycloud.com for deployment help, configuration questions or licensing inquiries.

Deploy on Azure

Launch Ergo IRC Server on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure