Go to file
Greg Price bf5f1b5f20 install: Start on an LXC-based dev/test environment for the installer.
In order to do development on the installer itself in a sane way,
we need a reasonably fast and automatic way to get a fresh environment
to try to run it in.

This calls for some form of virtualization.  Choices include

 * A public cloud, like EC2 or Digital Ocean.  These could work, if we
   wrote some suitable scripts against their APIs, to manage
   appropriate base images (as AMIs or snapshots respectively) and to
   start fresh instances/droplets from a base image.  There'd be some
   latency on starting a new VM, and this would also require the user
   to have an account on the relevant cloud with API access to create
   images and VMs.

 * A local whole-machine VM system (hypervisor) like VirtualBox or
   VMware, perhaps managing the configuration through Vagrant.  These
   hypervisors can be unstable and painfully slow.  They're often the
   only way to get development work done on a Mac or Windows machine,
   which is why we use them there for the normal Zulip development
   environment; but I don't really want to find out how their
   instability scales when constantly spawning fresh VMs from an image.

 * Containers.  The new hotness, the name on everyone's lips, is Docker.
   But Docker is not designed for virtualizing a traditional Unix server,
   complete with its own init system and a fleet of processes with a
   shared filesystem -- in other words, the platform Zulip's installer
   and deployment system are for.  Docker brings its own quite
   different model of deployment, and someday we may port Zulip from
   the traditional Unix server to the Docker-style deployment model,
   but for testing our traditional-Unix-server deployment we need a
   (virtualized) traditional Unix server.

 * Containers, with LXC.  LXC provides containers that function as
   traditional Unix servers; because of the magic of containers, the
   overhead is quite low, and LXC offers handy snapshotting features
   so that we can quickly start up a fresh environment from a base
   image.  Running LXC does require a Linux base system.  For
   contributors whose local development machine isn't already Linux,
   the same solutions are available as for our normal development
   environment: the base system for running LXC could be e.g. a
   Vagrant-managed VirtualBox VM, or a machine in a public cloud.

This commit adds a first version of such a thing, using LXC to manage
a base image plus a fresh container for each test run.  The test
containers function as VMs: once installed, all the Zulip services run
normally in them and can be managed in the normal production ways.

This initial version has a shortage of usage messages or docs, and
likely has some sharp edges.  It also requires familiarity with the
basics of LXC commands in order to make good use of the resulting
containers: `lxc-ls -f`, `lxc-attach`, `lxc-stop`, and `lxc-start`,
in particular.
2018-01-19 17:27:04 -08:00
.circleci circleci: Run frontend tests in circleci. 2018-01-08 19:38:23 -08:00
.tx Revert "locale: Fix incorrect locale name for zh-Hans." 2017-10-06 10:09:08 -07:00
analytics logging: Reduce `create_logger` to new `log_to_file`. 2017-12-12 17:17:08 -08:00
confirmation confirmation: Add Confirmation.realm. 2017-11-29 22:18:05 -08:00
corporate corporate: Remove unused imports (F401). 2017-11-07 16:37:04 -08:00
docs docs/production: Revise doc on authentication methods. 2018-01-18 17:45:03 -08:00
frontend_tests reminders: Add UI for setting up reminders for messages in the feed. 2018-01-19 11:33:11 -05:00
pgroonga py3: Remove all `from __future__ import unicode_literals`. 2017-10-17 23:07:42 -07:00
puppet schedulemessages: Add delivery system for scheduled message. 2018-01-10 09:18:02 -05:00
requirements requirements: Note one requirement as needed only for zilencer. 2018-01-17 16:44:04 -08:00
scripts reminder_bot: Add infra for adding reminder bot to every realm. 2018-01-19 11:33:11 -05:00
static lightbox: Fix responsiveness issues with image description. 2018-01-19 17:12:38 -08:00
templates compose: Extract the 'Sending...' from template to be added with Js. 2018-01-19 11:33:11 -05:00
tools install: Start on an LXC-based dev/test environment for the installer. 2018-01-19 17:27:04 -08:00
zerver stream settings: Add period at the end of error messages. 2018-01-19 13:05:43 -05:00
zilencer billing: Simplify logging of Stripe errors. 2018-01-17 18:10:17 -08:00
zproject datetimepicker: Add flatpickr lib as dependancy. 2018-01-19 11:33:11 -05:00
.codecov.yml Try to avoid codecov spam. 2017-12-29 07:23:26 -05:00
.editorconfig Editing (minor): Add .pyi to .editorconfig. 2017-12-18 07:35:58 -05:00
.eslintignore zulip_ops: Delete the long-disused `stats1.zulip.net` config and its dependencies. 2017-08-15 17:30:31 -07:00
.eslintrc.json datetimepicker: Add flatpickr lib as dependancy. 2018-01-19 11:33:11 -05:00
.gitattributes gitattributes: Set .jpeg files as binary. 2017-10-26 22:25:39 -07:00
.gitignore eslint: add --cache flag for faster linting 2017-12-07 15:14:51 -08:00
.gitlint linter: Update commit title regex to match uppercase for the first letter. 2017-12-18 09:36:47 -05:00
.isort.cfg python: Add settings for isort. 2017-11-14 12:31:14 -08:00
.npmignore Add proxy notes to new README.dev.md troubleshooting section. 2016-03-29 21:54:05 -07:00
.travis.yml travis: Try returning to the just-deprecated base image for now. 2017-12-12 14:40:22 -08:00
CODE_OF_CONDUCT.md repository: Add CODE_OF_CONDUCT.md. 2017-06-14 18:43:08 -07:00
CONTRIBUTING.md docs: Split 'git-guide.md`. 2017-11-23 16:04:18 -08:00
Dockerfile-dev Move Dockerfile to Dockerfile-dev. 2017-09-25 12:32:33 -07:00
LICENSE docs: Move license declaration from README.md to LICENSE. 2017-11-14 16:04:23 -08:00
README.md version: Update mentions of latest release to reflect 1.7.1. 2017-11-22 18:11:20 -08:00
Vagrantfile nfs: Allow read and write in NFS share. 2017-12-01 07:15:32 -08:00
manage.py Remove `from __future__ import absolute_import`. 2017-10-17 22:59:42 -07:00
package.json datetimepicker: Add flatpickr lib as dependancy. 2018-01-19 11:33:11 -05:00
version.py version: Belatedly bump PROVISION_VERSION. 2018-01-18 17:46:37 -08:00
yarn.lock datetimepicker: Add flatpickr lib as dependancy. 2018-01-19 11:33:11 -05:00

README.md

Zulip overview

Zulip is a powerful, open source group chat application that combines the immediacy of real-time chat with the productivity benefits of threaded conversations. Zulip is used by open source projects, Fortune 500 companies, large standards bodies, and others who need a real-time chat system that allows users to easily process hundreds or thousands of messages a day. With over 300 contributors merging over 500 commits a month, Zulip is also the largest and fastest growing open source group chat project.

Build Status Coverage Status Mypy coverage docs Zulip chat Twitter

Getting started

Click on the appropriate link below. If nothing seems to apply, join us on the Zulip community server and tell us what's up!

You might be interested in:

You may also be interested in reading our blog or following us on twitter. Zulip is distributed under the Apache 2.0 license.