# How to Deploy Zulip with xCloud One Click Apps

> Deploy Zulip team chat with xCloud One Click Apps: set the organization and owner, sign in, change the first password and move to your own domain.

Zulip is an open-source team chat app that keeps every conversation in a channel and a topic, so people can catch up without reading everything. In xCloud, you install it from **One Click Apps**. You choose the organization name and owner, and xCloud creates both, generates the passwords and puts Zulip on a domain with HTTPS.

Zulip has **one domain and no public ports**. Its supporting services run alongside it and stay private to the app, so you don't need a firewall rule or extra domains.

This install doesn't set up outgoing email, so Zulip can't send invitations or password resets until email is set up. This guide doesn't cover that setup. See [Inviting your team](#inviting-your-team).

## Before you start

You need:

- An xCloud server that uses Nginx, with at least **4 GB of RAM, 2 CPU cores and 20 GB of free disk**. Plan for more disk as uploads and message history grow.
- An email address for the first organization owner. You sign in with it.

If you don't have your domain ready, start with a **Demo Site** and [move to your own domain](#move-from-a-demo-domain-to-your-own) later.

## Step 1: Choose Zulip

Open **Servers**, open the menu for your server and click **Add New Site**. Click the **One Click Apps** tab, type `Zulip` in the search box and click its card.

![Click the Zulip card in the One Click Apps tab of Add Your New Site](/_landing/docs/deploy-zulip-with-xcloud-image-1.png)

**Expected result:** The **Install Zulip** page opens for your server.

## Step 2: Set the site and first owner

Enter a **Site Title**. Under **Domain Setup**, choose **Demo Site** to use a generated test domain, or **Go Live** to use your own. Then fill in **Initial Organization Owner**:

| Field | What to enter |
|---|---|
| **Organization Name** | The name your team sees in Zulip |
| **Owner Full Name** | The display name of the first owner |
| **Owner Email** | The address the first owner signs in with |

![Fill in Organization Name, Owner Full Name and Owner Email on the Install Zulip page](/_landing/docs/deploy-zulip-with-xcloud-image-2.png)

Click **Next**.

**Expected result:** xCloud shows the install progress. Zulip starts several services, so it can take longer than a smaller app. When it finishes, the site is ready to open.

## Step 3: Find your login

Open the site and go to **Access Data → Credentials**. The **Zulip Credentials** card lists the **Zulip URL**, **Owner Email** and **Initial Owner Password**. Click the eye icon to show the password.

![The Initial Owner Password on the Zulip Credentials card](/_landing/docs/deploy-zulip-with-xcloud-image-3.png)

**Expected result:** The **Zulip Credentials** card shows your login details.

## Step 4: Sign in and change the password

Open the **Zulip URL** and sign in with the owner email and initial password. Zulip shows a **Welcome to Zulip** page the first time. Make sure the email address shown is yours, then click **Continue**.

![Click Continue on the Welcome to Zulip page after your first sign-in](/_landing/docs/deploy-zulip-with-xcloud-image-5.png)

Then change the password. Click the gear icon at the top right and open **Personal settings**.

![Open Personal settings from the gear menu in Zulip](/_landing/docs/deploy-zulip-with-xcloud-image-6.png)

On the **Account & privacy** tab, click **Change your password**. Enter your **Old password** and **New password**, then click **Change**.

**Expected result:** You can sign in with the new password. The value on the **Credentials** card doesn't change with it, and it won't work once you've changed your password.

## Move from a demo domain to your own

If you installed on a **Demo Site**, do this before your team starts using Zulip, so that everyone starts on the final address.

1. Open the site and go to **Domain → Domain**.
2. On the **Demo Site Domain** card, click **Go Live**.
3. Enter your domain and point an A record for it to your server.
4. Click **Verify My DNS**, then click **Go Live**.

![Click Go Live on the Demo Site Domain card of the Zulip site](/_landing/docs/deploy-zulip-with-xcloud-image-4.png)

**Expected result:** xCloud shows **Domain update request is sent for processing.** When the move finishes, open **Access Data → Credentials** and check that **Zulip URL** shows your domain. Open that address and confirm you can sign in.

For more detail, see [how to manage One Click App domains and public endpoints](/docs/manage-one-click-app-domains-and-public-endpoints-in-xcloud/).

## Inviting your team

Invitations and password resets need email setup that this guide doesn't cover. This install has no outgoing email, so until it's set up, those emails won't be sent.

An **Invitation link** doesn't avoid this, because Zulip sends each new person a confirmation email when they sign up through the link.

Keep your new owner password somewhere safe, because a password reset email won't reach you either.

## Backups and updates

**Backups:** Zulip keeps its data in four volumes: `zulip_data`, `zulip_postgres`, `zulip_rabbitmq` and `zulip_redis`. xCloud backs up all four together. xCloud stops the app while it takes the backup and starts it again afterwards. Refresh Zulip's own backup first, so that `zulip_data` holds an up-to-date copy of the database.

Connect to your server over SSH, run `docker ps` to find the name of the Zulip container, and run:

```bash
docker exec ZULIP_CONTAINER_NAME /sbin/entrypoint.sh app:backup
```

**Expected result:** The command ends with `Backup process succeeded.` Then take the backup in xCloud. See [how to back up and restore Docker apps](/docs/backup-and-restore-docker-apps/).

**Updates:** Your app stays on its current version. **App Actions → Update** alone reinstalls that same version. To move to a newer one, change the version in the **Compose** page first. On the `image` line, change both the version and the `sha256` value after it, because that value fixes the exact image. Back up first, because database changes in a new version may not be reversible. See [how to update a One Click App](/docs/update-a-one-click-app-and-edit-its-docker-compose-in-xcloud/) and [Zulip's Docker documentation](https://zulip.readthedocs.io/projects/docker/en/latest/).

## Frequently asked questions

### Does Zulip need a firewall rule or extra domains?

No. Zulip uses one domain with HTTPS and no public ports of its own. Its supporting services run alongside it and stay private to the app.

### Can I change the first owner password from the Environment page?

No. xCloud uses that value only when it creates the organization. Change the password inside Zulip, under Personal settings.

### What is the largest file my team can upload?

100 MB per file. Larger files are rejected before they reach Zulip, and changing Zulip's own upload setting does not raise this limit.

If you run into any issues with Zulip, feel free to reach out to our [support team](/docs/access-built-in-support-portal-in-xcloud/).
