Jump toUpdate content
How to deploy a Zulip server
Zulip is an open-source communications platform, similar to Mattermost, Slack or Rocket.Chat, but providing unique features by combining the immediacy of real-time chat with an email threading model.
Its aim is to make communications in larger groups easier by focusing on important messages and the possibility to ignore less important messages. The application provides apps for every major computing platform and is available as web application or by using native clients for Desktop (Windows, MacOS, and Linux) and Mobile devices (Android and iOS), powered by Electron and React Native. The software is very lightweight and an instance with 2GB RAM and 10GB of disk can handle a small community. For larger communities 4GB RAM and 50GB of disk are recommendend.
More than 90 integrations are available for Zulip, including GitHub, Jira, Zendesk and more. Zulip’s powerful API allows you to create your own integration as well.
Connect to your virtual instance using SSH:
aptpackage manager and upgrade the software already installed on the instance to the lastest version available in Ubuntu’s repositories:
apt update && apt upgrade -y
Download and unpack the latest stable build of Zulip:
cd $(mktemp -d)
tar -xf zulip-server-latest.tar.gz
Run the automated Zulip installer:
./zulip-server-*/scripts/setup/install --certbot --email=YOUR_EMAIL --hostname=YOUR_HOSTNAME
The following flags are available when running the installer:
--certbot: With this option the installer will automatically a Let’s Encrypt issued TLS certificate for your domain name using the certbot tool.
--self-signed-cert: When setting this option, the Zulip installer generates a self-signed SSL certificate for the instance. While this is not suitable for production use, it might be handy for some testing purposes.
--email=YOUR_EMAIL: The email address of the Zulip administrator. The automatic installer will automatically create a first administrator user with this email address.
--hostname=YOUR_HOSTNAME: A valid domain or subdomain for your Zulip server (e.g.
zulip.yourdomain.com). Make sure that it points to the IP address of your virtual instance, as it is required for the hostname validation done by certbot.
Depending on the performance of your instance, the installation of the Zulip server may take some time.
The automatic installer executes the following actions on your system:
- It creates the
zulipuser, which the various Zulip servers will run as.
- It creates the directory
/home/zulip/deployments/, which will contain all the code of this and any future Zulip deployment. The latest deployment is reachable via a symbolic link at
- It installs Zulip’s various dependencies.
- It configures automatically the various third-party services Zulip uses (these include Postgres, RabbitMQ, Memcached and Redis).
- It initializes Zulip’s database.
At the end of the installation a unique link displays. Copy this link and open it in a browser to complete the setup of your Zulip instance:
Please visit the following secure single-use link to register your
new Zulip organization:
The link is a secure one-time-use link. If you have lost it or if you need another one later, you can generate a new one by running
/home/zulip/deployments/current/manage.py generate_realm_creation_linkin the Zulip main directory.
Open your web browser and point it to your Zulip activation link. Enter your email address to create new organization. Confirm by clicking Create Organization:
Complete the registration by providing your organization’s name and additional information, such as a secure password. Once completed, you see Zulip’s main screen:
Your Zulip is now running, however, it cannot send any email notifications in its current state. To send emails we configure a transactional email provider using SMTP which will take care of the delivery of all notifications Zulip sends out. In this tutorial we use the free-tier offer from SendInBlue, but you are free to use any transactional email provider. Please be aware that using SMTP credentials of an inbound email provider (like Google Mail) may flag your mails as spam and have an impact on the delivery reliability of the notifications.
Open the Zulip configuration file in a text editor:
Edit the SMTP settings as provided by your transactional email provider. In this example we use SendInBlue:
- The SMTP hostname:
EMAIL_HOST = 'smtp-relay.sendinblue.com'
- The SMTP username:
EMAIL_HOST_USER = 'email@example.com'
- Activate TLS for outgoing mails:
EMAIL_USE_TLS = True
- Set the SMTP port:
EMAIL_PORT = 587
Save the file by pressing
Oand leave nano by pressing
- The SMTP hostname:
Open Zulip’s secrets file
/etc/zulip/zulip-secrets.confin a text editor like
nanoand add the email password at the end of the file, as shown in the following example:
email_password = s7b_rSpa-gesY&#C
Save the file and exit the text editor.
Test if everything works by running the following command (replace
firstname.lastname@example.org your valid email address):
su zulip -c '/home/zulip/deployments/current/manage.py send_test_email email@example.com'
Zulip sends two emails. One from your recipient’s email address and one using a secret token for bouncing mails. A message like the following displays once the mails are sent:
If you run into any trouble, read:
The most common error is not setting `ADD_TOKENS_TO_NOREPLY_ADDRESS=False` when
using an email provider that doesn't support that feature.
Sending 2 test emails from:
Successfully sent 2 emails to firstname.lastname@example.org!
You can also verify if the emails have been sent and delivered to the recipient from your SendInBlue dashboard:
Your Zulip instance is now ready for basic use. However there are many additional features you can configure for your organization. To do so, click the menu button and then on Manage Organization:
Zulip provides features such as user groups (e.g. you can talk to/highlight all team members of the marketing team by using their
@marketing group), you can manage your organization security settings, add custom emojis, manage your users and a lot more.
Zulip provides a self-hosted and open-source alternative to commercial solutions like Slack. You have set up your instance with the Zulip application, configured a transactional email provider to send outgoing emails and you can now invite your friends and colleagues to your new communications platform. For more information about Zulip, refer to the official documentation.