1
- # Welcome to docker-zulip!
1
+ # Zulip Docker image overview
2
2
3
3
[ ![ ] ( 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 )
4
4
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 ) :
8
9
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
+ ```
10
13
11
14
Current Zulip version: ` 9.2 `
12
15
Current Docker image version: ` 9.2-0 `
13
16
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 ] . 
20
22
21
23
[ 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
-
39
24
[ zulip-architecture ] : https://zulip.readthedocs.io/en/latest/overview/architecture-overview.html
40
25
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
-
68
26
## Prerequisites
69
27
70
28
To use ` docker-zulip ` , you need the following:
@@ -86,11 +44,57 @@ To use `docker-zulip`, you need the following:
86
44
descriptions via ` ulimit ` (which is important for it to handle
87
45
thousands of connected clients).
88
46
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
+
89
58
[ install-docker ] : https://docs.docker.com/install/
90
59
[ install-docker-compose ] : https://docs.docker.com/compose/install/
91
60
[ prod-overview ] : https://zulip.readthedocs.io/en/latest/production/overview.html
92
61
[ prod-requirements ] : https://zulip.readthedocs.io/en/latest/production/requirements.html
93
62
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
+
94
98
## Running a Zulip server with docker-compose
95
99
96
100
To use this project, we recommend starting by cloning the repo (since
@@ -102,9 +106,9 @@ cd docker-zulip
102
106
# Edit `docker-compose.yml` to configure; see docs below
103
107
```
104
108
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.
108
112
109
113
### Configuration
110
114
@@ -122,20 +126,20 @@ discussion in the main [Zulip installation docs][install-normal]):
122
126
- ` SETTING_ZULIP_ADMINISTRATOR ` : The email address to receive error
123
127
and support emails generated by the Zulip server and its users.
124
128
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.
127
133
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
132
137
synced to the Zulip container on every boot, ` POSTGRES_PASSWORD ` is
133
138
only accessed by the postgres container on first boot, so if you
134
139
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!).
139
143
- ` RABBITMQ_DEFAULT_PASS ` and ` SECRETS_rabbitmq_password ` are similar,
140
144
just for the RabbitMQ container.
141
145
- ` MEMCACHED_PASSWORD ` and ` SECRETS_memcached_password ` are similar,
0 commit comments