Skip to content

Commit 58c6b26

Browse files
committed
README: Rewrite with better organization, remove alpha label.
This hasn't been alpha software for a long time, and we should stop procrastinating on further more improvements. Fixes #400, since part of this editing clarified that detail a bit more.
1 parent f445fc5 commit 58c6b26

File tree

1 file changed

+72
-68
lines changed

1 file changed

+72
-68
lines changed

README.md

Lines changed: 72 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,28 @@
1-
# Welcome to docker-zulip!
1+
# Zulip Docker image overview
22

33
[![](https://images.microbadger.com/badges/image/zulip/docker-zulip.svg)](https://microbadger.com/images/zulip/docker-zulip "Get your own image badge on microbadger.com") [![**docker-zulip** stream](https://img.shields.io/badge/zulip-join_chat-brightgreen.svg)](https://chat.zulip.org/#narrow/stream/backend/topic/docker)
44

5-
This is a container image for running [Zulip](https://zulip.com)
6-
([GitHub](https://github.com/zulip/zulip)) in
7-
[production][prod-overview]. Image available from:
5+
`docker-zulip` is the official Docker container image for running a
6+
[Zulip server](https://zulip.com) in
7+
[production][prod-overview]. Built images are available from: [Docker
8+
Hub](https://hub.docker.com/r/zulip/docker-zulip):
89

9-
- [**Docker Hub**](https://hub.docker.com/r/zulip/docker-zulip) (`docker pull zulip/docker-zulip:9.2-0`)
10+
```console
11+
$ docker pull zulip/docker-zulip:9.2-0`
12+
```
1013

1114
Current Zulip version: `9.2`
1215
Current Docker image version: `9.2-0`
1316

14-
Project status: **Alpha**. While this project works and is
15-
used by many sites in production, configuring is substantially more
16-
error-prone than the [normal Zulip installer][normal-install] (which
17-
Just Works). We recommend this project if you want to host Zulip
18-
using Docker, but both setting up and maintaining a Zulip server is
19-
simpler and less error-prone with the normal installer than with Docker.
17+
We recommend using the Docker image if your organization has a
18+
preference for deploying services using Docker. Deploying with Docker
19+
moderately increases the effort required to install, maintain, and
20+
upgrade a Zulip installation, compared with the [standard Zulip
21+
installer][normal-install]. 
2022

2123
[normal-install]: https://zulip.readthedocs.io/en/latest/production/install.html
22-
23-
## Overview
24-
25-
This project defines a Docker image for a Zulip server, as well as
26-
sample configuration to run that Zulip web/application server with
27-
each of the major [services that Zulip uses][zulip-architecture] in
28-
its own container: `redis`, `postgres`, `rabbitmq`, `memcached`.
29-
30-
We have configuration and documentation for
31-
[Docker Compose](#running-a-zulip-server-with-docker-compose) and
32-
[Kubernetes](#running-a-zulip-server-with-kubernetes); contributions are welcome for
33-
documenting other container runtimes and flows.
34-
35-
If you aren't already a Docker expert, we recommend starting by
36-
reading our brief overview of how Docker and containers work in the
37-
next section.
38-
3924
[zulip-architecture]: https://zulip.readthedocs.io/en/latest/overview/architecture-overview.html
4025

41-
### The Docker data storage model
42-
43-
Docker and other container systems are built around shareable
44-
container images. An image is a read-only template with instructions
45-
for creating a container. Often, an image is based on another image,
46-
with a bit of additional customization. For example, Zulip's
47-
`zulip-postgresql` image extends the standard `postgresql` image (by
48-
installing a couple `postgres` extensions). And the `zulip` image is
49-
built on top of a standard `ubuntu` image, adding all the code for a Zulip
50-
application/web server.
51-
52-
Every time you boot a container based on a given image, it's like
53-
booting off a CD-ROM: you get the exact same image (and anything
54-
written to the image's filesystem is lost). To handle persistent
55-
state that needs to persist after the Docker equivalent of a reboot or
56-
upgrades (like uploaded files or the Zulip database), container
57-
systems let you configure certain directories inside the container
58-
from the host.
59-
60-
This project's `docker-compose.yml` configuration file uses [Docker managed
61-
volumes][volumes] to store [persistent Zulip data][persistent-data]. If you use
62-
the Docker Compose deployment, you should make sure that Zulip's volumes are
63-
backed up, to ensure that Zulip's data is backed up.
64-
65-
[volumes]: https://docs.docker.com/storage/volumes/
66-
[persistent-data]: https://zulip.readthedocs.io/en/latest/production/maintain-secure-upgrade.html#backups
67-
6826
## Prerequisites
6927

7028
To use `docker-zulip`, you need the following:
@@ -86,11 +44,57 @@ To use `docker-zulip`, you need the following:
8644
descriptions via `ulimit` (which is important for it to handle
8745
thousands of connected clients).
8846

47+
If you aren't already a Docker expert, we recommend starting by
48+
reading our brief overview of how Docker and containers work in the
49+
next section for important background that the rest of this
50+
documentation will assume.
51+
52+
Otherwise, you can jump to our documentation for your preferred
53+
container runtime:
54+
55+
- [Docker Compose](#running-a-zulip-server-with-docker-compose)
56+
- [Kubernetes](#running-a-zulip-server-with-kubernetes)
57+
8958
[install-docker]: https://docs.docker.com/install/
9059
[install-docker-compose]: https://docs.docker.com/compose/install/
9160
[prod-overview]: https://zulip.readthedocs.io/en/latest/production/overview.html
9261
[prod-requirements]: https://zulip.readthedocs.io/en/latest/production/requirements.html
9362

63+
## The Docker data storage model
64+
65+
Docker and other container systems are built around shareable
66+
container images. An image is a read-only template with instructions
67+
for creating a container.
68+
69+
Often, an image is based on another image, with a bit of additional
70+
customization. For example, Zulip's `zulip-postgresql` image extends
71+
the standard `postgresql` image (by installing a couple `postgres`
72+
extensions). Meanwhile, the `zulip` image is built on top of a
73+
standard `ubuntu` image, adding all the code for a Zulip
74+
application/web server.
75+
76+
Every time you boot a container based on a given image, it's like
77+
booting off a CD-ROM: you get the exact same image (and anything
78+
written to the image's filesystem is lost). To handle persistent
79+
state that needs to persist after the Docker equivalent of a reboot or
80+
upgrades (like uploaded files or the Zulip database), container
81+
systems let you configure certain directories inside the container
82+
from the host.
83+
84+
This project's `docker-compose.yml` configuration file uses [Docker
85+
managed volumes][volumes] to store [persistent Zulip
86+
data][persistent-data]. If you use the Docker Compose deployment, you
87+
should make sure that Zulip's volumes are backed up, to ensure that
88+
Zulip's data is backed up.
89+
90+
This project defines a Docker image for a Zulip server, as well as
91+
sample configuration to run that Zulip server with each of the major
92+
[services that Zulip uses][zulip-architecture] in its own container:
93+
`redis`, `postgres`, `rabbitmq`, `memcached`.
94+
95+
[volumes]: https://docs.docker.com/storage/volumes/
96+
[persistent-data]: https://zulip.readthedocs.io/en/latest/production/maintain-secure-upgrade.html#backups
97+
9498
## Running a Zulip server with docker-compose
9599

96100
To use this project, we recommend starting by cloning the repo (since
@@ -102,9 +106,9 @@ cd docker-zulip
102106
# Edit `docker-compose.yml` to configure; see docs below
103107
```
104108

105-
If you're in hurry to try Zulip, you can skip to
106-
[start the Zulip server](#starting-the-server), but for production
107-
use, you'll need to do some configuration.
109+
If you're in hurry to try Zulip, you can skip to [start the Zulip
110+
server](#starting-the-server), but for production use, you'll need to
111+
generate secrets and do some configuration.
108112

109113
### Configuration
110114

@@ -122,20 +126,20 @@ discussion in the main [Zulip installation docs][install-normal]):
122126
- `SETTING_ZULIP_ADMINISTRATOR`: The email address to receive error
123127
and support emails generated by the Zulip server and its users.
124128

125-
**Mandatory settings for serious use**. Before you allow
126-
production traffic, you need to also set these:
129+
**Mandatory settings for produciton use**. Before you allow production
130+
traffic, you need to generate secrets. We recommend using long random
131+
strings of alphanumeric characters for your secrets; not every special
132+
character works.
127133

128-
- `POSTGRES_PASSWORD` and `SECRETS_postgres_password` should both be a
129-
password for the Zulip container to authenticate to the Postgres
130-
container. Since you won't use this directly, you just want a long,
131-
randomly generated string. While `SECRETS_postgres_password` is
134+
- `POSTGRES_PASSWORD` is the password for the PostgreSQL
135+
instance. `SECRETS_postgres_password` configures the Zulip server to
136+
know the PostgreSQL password. While `SECRETS_postgres_password` is
132137
synced to the Zulip container on every boot, `POSTGRES_PASSWORD` is
133138
only accessed by the postgres container on first boot, so if you
134139
later want to change your postgres password after booting the
135-
container, you'll need to either do an
136-
[ALTER ROLE][postgres-alter-role] query inside the `postgres`
137-
container or rebuild the postgres database (only if you don't need
138-
your data!).
140+
container, you'll need to either do an [ALTER
141+
ROLE][postgres-alter-role] query inside the `postgres` container or
142+
rebuild the postgres database (only if you don't need your data!).
139143
- `RABBITMQ_DEFAULT_PASS` and `SECRETS_rabbitmq_password` are similar,
140144
just for the RabbitMQ container.
141145
- `MEMCACHED_PASSWORD` and `SECRETS_memcached_password` are similar,

0 commit comments

Comments
 (0)