- Notifications
You must be signed in to change notification settings - Fork0
3axig-net/wire-server
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
This repository is part of the source code of Wire. You can find more information atwire.com or by contactingopensource@wire.com.
You can find the published source code atgithub.com/wireapp/wire.
For licensing information, see the attached LICENSE file and the list of third-party licenses atwire.com/legal/licenses/.
No license is granted to the Wire trademark and its associated logos, all of which will continue to be owned exclusively by Wire Swiss GmbH. Any use of the Wire trademark and/or its associated logos is expressly prohibited without the express prior written consent of Wire Swiss GmbH.
This repository contains the source code for the Wire server. It contains all libraries and services necessary to run Wire.
For documentation on how to self host your own Wire-Server seethis section. Federation is on our long term roadmap.
See more in "Open sourcing Wire server code".
This repository contains the following source code:
services
- nginz: Public API Reverse Proxy (Nginx with custom libzauth module)
- galley: Conversations and Teams
- brig: Accounts
- gundeck: Push Notification Hub
- cannon: WebSocket Push Notifications
- cargohold: Asset (image, file, ...) Storage
- proxy: 3rd Party API Integration
- restund: STUN/TURN server for use in Audio/Video calls
- spar: Single-Sign-On (SSO)
tools
- api-simulations: Run automated smoke and load tests
- makedeb: Create Debian packages
- bonanza: Transform and forward log data
- db/: Migration tools (e.g. when new tables are added)
- stern/: Backoffice tool (basicSwagger based interface)
libs: Shared libraries
It also contains
- build: Build scripts and Dockerfiles for some platforms
- deploy: (Work-in-progress) - how to run wire-server in an ephemeral, in-memory demo mode
- doc: Documentation
- hack: scripts and configuration for kuberentes helm chart development/releases mainly used by CI
- charts: Kubernetes Helm charts. The charts are mirroed to S3 and can be used with
helm repo add wire https://s3-eu-west-1.amazonaws.com/public.wire.com/charts. See theAdministrator's Guide for more info.
The following diagram gives a high-level outline of the (deployment) architectureof the components that make up a Wire Server as well as the main internal andexternal dependencies between components.
Communication between internal components is currently not guarded bydedicated authentication or encryption and is assumed to be confined to aprivate network.
There are two options:
This requires a range of dependencies that depend on your platform/OS, such as:
- Haskell & Rust compiler and package managers
- Some package dependencies (libsodium, openssl, protobuf, icu, geoip, snappy,cryptobox-c, ...) that depend on your platform/OS
Seedocs/developer/dependencies.md for details.
Once all dependencies are set up, the following should succeed:
# build all haskell servicesmake# build one haskell service, e.g. brig:cd services/brig&& make
The default make target (fast) compiles unoptimized (faster compilation time, slower binaries), which should be fine for development purposes. Usemake install to get optimized binaries.
For building nginz, seeservices/nginz/README.md
If you don't wish to build all docker images from scratch (e.g. thealpine-builder takes a very long time), ready-built images can be downloaded fromhere.
If you wish to build your own docker images, you needdocker version >= 17.05 andmake. Then,
# optionally:# make docker-builder # if you don't run this, it pulls the alpine-builder image from quay.iomake docker-deps docker-intermediate docker-services# subsequent times, after changing code, if you wish to re-create docker images, it's sufficient tomake docker-intermediate docker-services
will, eventually, have built a range of docker images. Make sure togive Docker enough RAM; if you seemake: *** [builder] Error 137, it might be a sign that the build ran out of memory. You can also mix and match – e.g. pull thealpine-builder image and build the rest locally.
See theMakefiles andDockerfiles, as well asbuild/alpine/README.md for details.
Integration tests require all of the haskell services (brig, galley, cannon, gundeck, proxy, cargohold, spar) to be correctly configured and running, before being able to execute e.g. thebrig-integration binary. The test for brig also starts nginz, so make sure it has been built before.These services require most of the deployment dependencies as seen in the architecture diagram to also be available:
- Required internal dependencies:
- cassandra (with the correct schema)
- elasticsearch (with the correct schema)
- redis
- Required external dependencies are the following configured AWS services (or "fake" replacements providing the same API):
- SES
- SQS
- SNS
- S3
- DynamoDB
- Required additional software:
- netcat (in order to allow the services being tested to talk to the dependencies above)
Setting up these real, but in-memory internal and "fake" external dependencies is done easiest usingdocker-compose. Run the following in a separate terminal (it will block that terminal, C-c to shut all these docker images down again):
deploy/dockerephemeral/run.shThen, to run all integration tests:
make integration
Or, alternatively,make on the top-level directory (to produce all the service's binaries) followed by e.gcd services/brig && make integration to run one service's integration tests only.
You can use$WIRE_STACK_OPTIONS to pass arguments to stack through theMakefiles. This is useful to e.g. pass arguments to a unit test suite or temporarily disable-Werror without the risk of accidentally committing anything, like this:
WIRE_STACK_OPTIONS='--ghc-options=-Wwarn --test-arguments="--quickcheck-tests=19919 --quickcheck-replay=651712"' make -C services/gundeckIntegration tests are run via/services/integration.sh, which does not know about stack or$WIRE_STACK_OPTIONS. Here you can use$WIRE_INTEGRATION_TEST_OPTIONS:
cd services/sparWIRE_INTEGRATION_TEST_OPTIONS="--match='POST /identity-providers'" make i
Alternatively, you can usetasty's support for passing arguments vie shell variables directly. Or, in the case of spar, thehspec equivalent, whichis less helpful at times.
You have two options:
- Option 1. (recommended) Install wire-server on kubernetes using the configuration and instructions provided inwire-server-deploy. This is the best option to run it on a server and recommended if you want to self-host wire-server.
- Option 2. Compile everything in this repo, then you can use thedocker-compose based demo. This option is intended as a way to try out wire-server on your local development machine and is less suited when you want to install wire-server on a server.
About
🇪🇺 Wire back-end services
Resources
License
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Languages
- Haskell87.0%
- HTML10.3%
- Shell1.0%
- Makefile0.8%
- Rust0.3%
- Smarty0.1%
- Other0.5%

