As an example, I’ll install Zulip on a clean Ubuntu Server 24 system.
Activate the universe repository:
add-apt-repository universe
apt update
Download and unzip the latest version of Zulip:
cd $(mktemp -d)
curl -fLO https://download.zulip.com/server/zulip-server-latest.tar.gz
tar -xf zulip-server-latest.tar.gz
During the test, my virtual server had only 4GB of RAM, so I added a swapfile:
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
swapon --show
free -h
df -h
Let’s run the installation script, specifying the host name and email address of the administrator; it will be visible to all users as a contact:
./zulip-server-*/scripts/setup/install --push-notifications --certbot \
--email=admin@zulip.ixnfo.com --hostname=zulip.ixnfo.com
We agree to the Zulip Terms of Service and during the installation process you will need to agree again when certbot requests a domain certificate.
After installation, let’s create an organization:
su zulip
cd /home/zulip/deployments/current
./manage.py generate_realm_creation_link
Let’s prohibit the creation of an organization after it has already been created:
nano /etc/zulip/settings.py
REALMS_HAVE_SUBDOMAINS = False
EXTRA_SETTINGS = {
"OPEN_REALM_CREATION": False,
}
Let’s restart:
supervisorctl restart all
Since the test cloud server was at Hetzner, I wrote to support asking them to open port 25 so that Postfix could send notifications from the server.
See also my article:
Elevating user privileges to over the owner
