> Source: https://meetrix.io/blogs/zulip-gcp-developer-guide/
> Markdown copy of that page. Cite the URL above, not this file.

Development

# Zulip on GCP - Developer Guide

[By Binuka Ranatunga](https://meetrix.io/blogs/authors/binuka-ranatunga/) • October 2, 2026 • 8 min read

Welcome to the Meetrix Zulip developer guide for Google Cloud Platform! Zulip is an open-source team chat where every message belongs to a channel and a topic, so conversations stay threaded and easy to catch up on. With the Meetrix pre-configured GCP image, you can run it inside your own GCP project in minutes, without per-seat SaaS pricing.

This guide walks you through finding the product on GCP Marketplace, configuring the deployment, pointing DNS, creating your first organization, and managing the server. If you are still weighing your options, our [Rocket.Chat vs Mattermost comparison](https://meetrix.io/blogs/rocketchat-vs-mattermost/) and [Mattermost vs Slack breakdown](https://meetrix.io/blogs/mattermost-vs-slack/) cover the other popular self-hosted choices. For pricing, features, and the AWS option side by side, see the [Zulip store page](https://meetrix.io/store/zulip/).

### Related Article

[

Zulip - Developer Guide (AWS)

Step-by-step guide for deploying Zulip on AWS using the Meetrix pre-configured AMI and CloudFormation.

Meetrix.IO • Binuka Ranatunga

![Zulip developer guide for AWS thumbnail](https://meetrix.io/blog-images/paas-dev-guides/zulip/zulip-image.png)](https://meetrix.io/blogs/zulip-developer-guide/)

Prerequisites

Before you begin, make sure you have the following:

-   Basic Google Cloud Platform knowledge.
-   An active Google account with a GCP project and billing enabled.
-   A domain name you can manage DNS records for.
-   SMTP credentials (host, port, username and password) so Zulip can send sign-up and invitation emails.

## Launch Zulip from GCP Marketplace

### Step 1: Find the Product

1.  Log in to your Google account.
2.  Go directly to the product page: [Zulip Team Chat on GCP Marketplace](https://console.cloud.google.com/marketplace/product/meetrix-public/zulip)
3.  You can also browse all Meetrix products at the [Meetrix Solutions Page](https://console.cloud.google.com/marketplace/browse?filter=partner:Meetrix%20Pte%20Ltd&ref=meetrix.io).
4.  You will see the following product listing page. Click **Launch**.

![Zulip Team Chat product listing on GCP Marketplace by Meetrix Pte Ltd, showing the 5-day trial badge and the Launch button](https://meetrix.io/blog-images/paas-dev-guides/zulip-gcp/zulip-gcp-1.png)

### Step 2: Accept the Agreement

1.  Select your GCP project from the project selector at the top.
2.  Tick the terms and agreements checkbox.
3.  Click **AGREE**.

![GCP Marketplace agreements screen with the project selector, the terms checkbox ticked, and the AGREE button](https://meetrix.io/blog-images/paas-dev-guides/zulip-gcp/zulip-gcp-2.png)

### Free Trial

This product includes a **5-day free trial** with up to USD 50.00 in licence fee credits. To activate it, tick **I accept the solution trial Terms and Conditions** at the bottom of the deployment form before you click Deploy.

![Checkbox to accept the Zulip solution trial Terms and Conditions on GCP](https://meetrix.io/blog-images/paas-dev-guides/zulip-gcp/zulip-gcp-3.png)

Trial note

Infrastructure charges (VM, disk) still apply during the trial. Only the Meetrix licence fee is credited. You can cancel the trial at any time by deleting the deployment.

## Configure Your Zulip Deployment on GCP

You will see the deployment configuration form. Fill in the fields across the following sections:

![New Zulip Team Chat deployment form on GCP showing the deployment name zulip-1, an existing deployment service account, the zone us-central1-a, and the product trial terms](https://meetrix.io/blog-images/paas-dev-guides/zulip-gcp/zulip-gcp-4.png)

### General

-   **Deployment name**: A unique name for this deployment.
-   **Deployment Service Account**: Use an existing account with the required roles, or create a new one.
-   **Zone**: Select the GCP zone closest to your users.
-   **Machine type**: Zulip needs at least 2 GB of memory (see the [Zulip server requirements](https://zulip.readthedocs.io/en/latest/production/requirements.html)). `e2-medium` (2 shared vCPU, 4 GB memory) is a good baseline for a small team. Go larger as your user count and message history grow.

### Networking

-   **Network / Subnetwork**: Leave as `default` unless you have a custom VPC.
-   **External IP**: Leave as `Ephemeral` so the chat server is reachable from the internet.
-   **Allow SSH (TCP port 22)**: Enabled by default. Restrict the source IP range if you want to limit SSH access to specific IPs.

![Zulip GCP networking settings with the default network and subnetwork, an Ephemeral external IP, and SSH allowed from 0.0.0.0/0](https://meetrix.io/blog-images/paas-dev-guides/zulip-gcp/zulip-gcp-6.png)

### Application Settings

-   **Domain name**: The domain for your chat server (e.g. `zulip.yourdomain.com`). Point your DNS A record to the instance IP before or shortly after deploying.
-   **Admin email**: Used for SSL certificate registration via Let's Encrypt.

### Outgoing Email (SMTP)

-   **SMTP host**: Your SMTP server (for example, `smtp.gmail.com`).
-   **SMTP port**: Leave as `587` for STARTTLS unless your provider says otherwise.
-   **SMTP username**: Usually the full sending email address.
-   **SMTP password**: For Gmail, use an [app password](https://support.google.com/accounts/answer/185833) rather than your account password.

The SMTP host is marked optional, but Zulip emails a confirmation link before anyone can finish creating an account, including the first administrator. Without working SMTP, nobody can sign up. If you would rather send mail through a server you also control, our [Mailcow on GCP developer guide](https://meetrix.io/blogs/mailcow-gcp-developer-guide/) sets one up in the same project.

![Zulip GCP Application Settings with the domain name and admin email fields, the Outgoing Email SMTP host, port 587, username and password fields, the trial terms checkbox, and the Deploy button](https://meetrix.io/blog-images/paas-dev-guides/zulip-gcp/zulip-gcp-5.png)

Click **Deploy** and wait a few minutes for the deployment to complete.

## Point DNS to Your Zulip Server

### Step 1: Get the External IP

1.  Once deployment is complete, click the VM instance resource name in the deployment details.
2.  Copy the **External IP** from the Network interfaces section.

![Network interfaces section of the GCP VM instance showing the ephemeral external IP address](https://meetrix.io/blog-images/paas-dev-guides/zulip-gcp/zulip-gcp-11.png)

### Step 2: Create a DNS A Record

1.  Go to your DNS provider.
2.  Add an **A record** pointing your Zulip domain (e.g. `zulip.yourdomain.com`) to the copied external IP.
3.  Wait for DNS propagation before proceeding (typically a few minutes to 1 hour).

DNS must propagate first

The image issues SSL via Let's Encrypt, which verifies domain ownership over HTTP. Make sure your DNS A record points to the server IP and has propagated before the certificate request runs.

## Access Zulip

Once DNS has propagated, visit your domain. A fresh Zulip server has no organization yet, so the first page you see is **"No organization found"**. This is expected.

![Zulip No organization found page on a freshly deployed server](https://meetrix.io/blog-images/paas-dev-guides/zulip-gcp/zulip-gcp-7.png)

Clicking **"New organization"** will not help yet either. Zulip requires a secure, single-use link before anyone can create an organization on the server.

![Zulip Organization creation link required page at the /new/ URL](https://meetrix.io/blog-images/paas-dev-guides/zulip-gcp/zulip-gcp-8.png)

502 Bad Gateway Error?

If you see a "502 Bad Gateway" error, Zulip is still starting up. Wait about 5 minutes and refresh the page.

### Step 1: SSH into the Server

1.  Go to the VM instance page in the GCP console.
2.  Click **SSH** to open a browser-based terminal and authorize access.

![GCP VM instance details page with the SSH button at the top](https://meetrix.io/blog-images/paas-dev-guides/zulip-gcp/zulip-gcp-12.png)

### Step 2: Generate an Organization Creation Link

Run Zulip's [management command](https://zulip.readthedocs.io/en/latest/production/management-commands.html) to generate the link:

```bash
sudo -u zulip /home/zulip/deployments/current/manage.py generate_realm_creation_link
```

![GCP SSH-in-browser terminal showing generate\_realm\_creation\_link output with a secure single-use link to register a new Zulip organization](https://meetrix.io/blog-images/paas-dev-guides/zulip-gcp/zulip-gcp-9.png)

### Step 3: Create Your Organization

Open the link in your browser. Enter the **Organization name**, choose the **Organization type** and **language**, enter your email, and click **"Create organization"**. Zulip sends a confirmation email to finish creating your admin account, which is why the SMTP settings need to be correct.

![Create a new Zulip organization form with organization name, type, language, URL and email fields](https://meetrix.io/blog-images/paas-dev-guides/zulip-gcp/zulip-gcp-10.png)

The link works once. If you need another organization or the link expires, run the command again. If your team already uses a central identity provider, Zulip also supports SAML and OpenID Connect login, so you can put it behind the same SSO as your other tools with [Authentik](https://meetrix.io/blogs/authentik-developer-guide/).

## Generate an SSL Certificate for Zulip Manually

The image automatically tries to issue SSL for the domain name you provided during deployment. If that fails, for example because DNS had not propagated yet, SSH into the server as shown above and run Zulip's [certbot setup script](https://zulip.readthedocs.io/en/latest/production/ssl-certificates.html), replacing the admin email and domain with your own:

```bash
sudo /home/zulip/deployments/current/scripts/setup/setup-certbot --email=<admin-email> --agree-tos <your-domain>
```

## Check Zulip Server Logs

SSH into the server, check that Zulip's services are running, then read the server and error logs:

```bash
sudo supervisorctl status

sudo tail -n 100 /var/log/zulip/server.log

sudo tail -n 100 /var/log/zulip/errors.log
```

## Manage Your Zulip Deployment on GCP

### Shut Down the VM

To stop the VM without deleting it, go to **Compute Engine → VM Instances** in the GCP console, select your instance, and click **Stop**. You can restart it later by clicking **Start/Resume**.

### Delete the Deployment

To fully remove the deployment and stop all billing:

1.  Go to **[Solution deployments](https://console.cloud.google.com/products/solutions/deployments)** in the GCP console.
2.  Find your Zulip deployment.
3.  Click **Delete** to remove all associated resources.

### Upgrades

When there is an upgrade, we update the product with a newer version. You can check the product version in GCP Marketplace. If a newer version is available, back up your server data, delete the current deployment, and launch the product again using the newer version.

## Troubleshoot Zulip on GCP

### Insufficient Capacity Error

If you see an error stating there is not sufficient capacity for the selected machine type while deploying, try a different zone or try again later.

### Emails Not Arriving

If new users never receive their confirmation or invitation emails, check the SMTP host, port, username and password you entered during deployment, then look for SMTP errors in **/var/log/zulip/errors.log**.

### Storage Full Error

Uploaded files and message history grow steadily on an active Zulip server. If the application becomes unresponsive, SSH into the server and run:

```bash
df -h
```

If the root volume is between 90-100%, resize the boot disk from the Compute Engine console, then reboot the instance.

## Conclusion

You now have a self-hosted Zulip server running in your own GCP project, with SSL, your own domain, and your first organization. From here, invite your team, set up channels, and connect the integrations you need. For another self-hosted tool in the same project, our [Zammad on GCP developer guide](https://meetrix.io/blogs/zammad-gcp-developer-guide/) sets up a help desk, and the roundup of [self-hosted Microsoft Teams alternatives](https://meetrix.io/blogs/self-hosted-microsoft-teams-alternatives/) compares the wider chat field.

For questions about Zulip itself rather than the GCP deployment, the [Zulip server documentation](https://zulip.readthedocs.io/en/latest/production/index.html), the [Zulip GitHub repository](https://github.com/zulip/zulip), and [zulip.com](https://zulip.com/) are the best starting points.

## Technical Support

If you run into any issues, our support team is here to help. Reach out to us at [support@meetrix.io](mailto:support@meetrix.io) and we will respond within 12 hours.

## Frequently Asked Questions

What is Zulip?

Zulip is an open-source team chat application. Its conversations are organized into channels and topics, so each discussion stays in its own thread and people can catch up on what matters to them without scrolling through one long stream of messages.

What are the prerequisites for deploying Zulip on GCP?

You need basic Google Cloud knowledge, a GCP project with billing enabled, a domain name you can manage DNS records for, and SMTP credentials so Zulip can send sign-up and invitation emails.

Which machine type should I choose for Zulip?

Zulip needs at least 2 GB of memory. e2-medium (2 shared vCPU, 4 GB memory) is a comfortable baseline for a small team. Move up to e2-standard-2 or larger as your user count and message history grow.

Is there a free trial?

Yes. The Meetrix Zulip listing includes a 5-day free trial with up to USD 50.00 in licence fee credits. Infrastructure charges for the VM and disk still apply during the trial.

Why does my Zulip URL say "No organization found"?

A fresh Zulip server has no organization yet, and it will not let anyone create one without a secure link. SSH into the VM, run the generate\_realm\_creation\_link command, and open the link it prints to create your first organization.

Why do I need to provide SMTP settings?

Zulip sends email for account confirmation, invitations, and password resets. Without working SMTP settings, new users cannot finish signing up. If you use Gmail, create an app password for the SMTP password field instead of using your normal account password.

How do I get technical support?

Reach out to Meetrix Support at [support@meetrix.io](mailto:support@meetrix.io) for help with the Zulip GCP deployment.

## Deploy Zulip on GCP in Minutes

Launch a production-ready, self-hosted Zulip team chat on Google Cloud with a pre-configured Meetrix image.

[Get Started on GCP Marketplace](https://console.cloud.google.com/marketplace/product/meetrix-public/zulip)

Meetrix Store

Zulip

Team chat organised by topic, a Slack alternative

[Deploy it](https://meetrix.io/store/zulip/)

Meetrix Store New

Deploy what this guide covers, pre-configured.

-    [Zulip Team chat organised by topic, a Slack alternative](https://meetrix.io/store/zulip/)
-    [Mattermost Team chat, a self-hosted Slack alternative](https://meetrix.io/store/mattermost/)
-    [Rocket.Chat Messaging, calls and omnichannel support](https://meetrix.io/store/rocket-chat/)
-    [Jitsi Meet Self-hosted video calls for 50 to 500 users](https://meetrix.io/store/jitsi-meet/)
-    [RustDesk Remote desktop AMI, a TeamViewer alternative](https://meetrix.io/store/rustdesk/)
-    [Coturn TURN/STUN for WebRTC, no per-minute relay fees](https://meetrix.io/store/coturn/)

[Browse all products](https://meetrix.io/store/)
