<img align="left" src="https://www.erlang-solutions.com/sites/all/themes/erlang/img/mongoose/MongooseIM_blue.png"
MongooseIM is Erlang Solutions' robust and efficient XMPP server aimed at large installations. Specifically designed for enterprise purposes, it is fault-tolerant, can utilize resources of multiple clustered machines and easily scale in need of more capacity (by just adding a box/VM).
MongooseIM can accept client sessions over vanilla XMPP, Websockets, and HTTP long-polling (a.k.a. BOSH).
Its home on GitHub is at http://github.com/esl/MongooseIM.
For a quick start just download the pre-built package that suits your platform: Ubuntu, Debian, CentOS, and Mac OS X.
An experimental Docker image exists on: https://registry.hub.docker.com/u/mongooseim/mongooseim-docker/ You can contribute on: https://github.com/ppikula/mongooseim-docker
This project began its life as a fork of ejabberd v.2.1.8 and later underwent some major cleanup, refactorization and optimization.
Major steps performed:
- bringing the project source tree to compliance with OTP project structure recommendations,
- swapping
autotoolsfor the Erlang community-standard build toolrebar, - removal of obsolete and/or rarely used modules to reduce maintenance burden,
- reduction of runtime memory consumption by refactoring the code to use Erlang's binary data type for string manipulation and storage instead of operating on linked lists of characters,
- functional test coverage of the system according to corresponding RFCs and XEPs.
Up-to-date documentation for the MongooseIM master branch can be found on ReadTheDocs:
- http://mongooseim.readthedocs.org/en/latest/
- Older versions:
When developing new features/modules, please take care to add basic documentation
to the doc/ directory, and add a link to your document in doc/README.md.
Original documentation for Ejabberd-2.1.8, from which MongooseIM was forked, is preserved
in doc/ejabberd-2.1.8-OLD.
- XMPP Core: RFC 3920, RFC 6120
- Client connections over TCP (with TLS/STARTTLS available), Websockets, and HTTP(S) (BOSH).
- Configurable database backends: MySQL, Postgres, generic ODBC. Mnesia and Redis for transient data.
- Supports XEPs:
-
Requirements.
To compile MongooseIM you need:
- GNU Make,
- GCC,
- Libexpat 1.95 or higher,
- Erlang/OTP R15B02 or higher,
- Reltool 0.5.4 or higher,
- OpenSSL 0.9.8 or higher, for STARTTLS, SASL and SSL encryption,
- Zlib 1.2.3 or higher for Stream Compression support (XEP-0138). Optional,
- PAM library. Optional. For Pluggable Authentication Modules (PAM).
-
Compiling on UNIX-like systems.
To compile MongooseIM, go to the main repo directory
$REPOand execute the command ($stands for the shell prompt):$ makeor
$ ./rebar get-deps $ ./rebar compileTo generate minimal MongooseIM release (without mysql, pgsql or other deps):
$ make relor
$ ./rebar generateIf more advanced relase is required (with mysql or pgsql support) a
make configurescript with appropirate option(s) has to be run beforemake relor./rebar generate.make configrewithout any option will print following help message.
specifies which 3rd party deps will be included in release possible options: with-mysql include mysql driver with-pgsql include pgsql driver with-odbc include standard ODBC driver shipped with Erlang/OTP with-redis include redis driver with-riak include riak driver with-cassandra include cassandra driver full include all above deps ```
For example if mysql and redis support has to be added to the release, following command has to be run before `make rel`:
$ make configure with-mysql with-redis
The `make configure` command has to be run only once (unless one need to change the relase config and include some other dependecies).
Take a look [here](http://mongooseim.readthedocs.org/en/latest/advanced-configuration/database-backends-configuration/)
for instructions how to setup the external databases.
`make rel` or `./rebar generate` commands will generate a self-contained OTP system image in the
project's `rel/mongooseim` subdirectory. The contents of that directory are as
follows:
* `rel/mongooseim/bin` - startup/administration scripts,
* `rel/mongooseim/etc` - configuration files,
* `rel/mongooseim/lib` - MongooseIM binary, header and runtime files,
* `rel/mongooseim/var` - spool directory,
* `rel/mongooseim/log` - log file directory,
* `rel/mongooseim/releases` - release files directory.
-
Running MongooseIM.
To run MongooseIM from the project tree after compiling it, change to
$REPO/rel/mongooseim.There you can use the
mongooseimcommand line administration script to start and stop MongooseIM. For example:$ bin/mongooseim startwill start the server.
You can also run the server in interactive mode:
$ bin/mongooseim liveThere's also a tool called
mongooseimctlallowing you to perform some operations on a running instance, e.g.:$ bin/mongooseimctl status The node mongooseim@localhost is started with status: started MongooseIM version 1.3.1 is running on that node -
Building the testing target and running tests.
For testing purposes there's a different make target available:
$ make devrelwhich will generate releases in
$REPO/dev/and prepare them for testing and generating coverage reports.To run the tests (from project's root directory, i.e.
$REPO):$ cd test $ make quicktestThe test results will show up in the console`.
In order to test and validate your XMPP servers, here are useful tools:
Continuous integration: https://travis-ci.org/esl/MongooseIM
Code coverage: https://coveralls.io/github/esl/MongooseIM
In case of any suggestions, questions or any thoughts on this project, please feel free to contact us by the standard GitHub ways or at mongoose-im@erlang-solutions.com.
Want to discuss MongooseIM, problems with your deployement or anything else? Try: https://erlangcentral.org/forum/mongooseim/.