All Projects → wireapp → Wire Server

wireapp / Wire Server

Licence: agpl-3.0
🇪🇺 Wire back-end services

Programming Languages

rust
11053 projects
haskell
3896 projects
HTML
75241 projects
shell
77523 projects
Makefile
30231 projects
Smarty
1635 projects

Projects that are alternatives of or similar to Wire Server

Supysonic
Supysonic is a Python implementation of the Subsonic server API.
Stars: ✭ 187 (-92.18%)
Mutual labels:  server
Sgo
A dev server for rapid prototyping. Setting a directory to a static server.It provides a 404 neat interface for listing the directory's contents and switching into sub folders.
Stars: ✭ 194 (-91.89%)
Mutual labels:  server
Basically Fullstack Graphql
Code that aims to explain the client and the server side of using GraphQL in apps.
Stars: ✭ 199 (-91.68%)
Mutual labels:  server
Pronote Api
(Tout langage) API compatible Pronote 2020/2021
Stars: ✭ 186 (-92.22%)
Mutual labels:  server
Actionhero
Actionhero is a realtime multi-transport nodejs API Server with integrated cluster capabilities and delayed tasks
Stars: ✭ 2,280 (-4.68%)
Mutual labels:  server
Atlasr
Atlasr is a truly open-source and free map browser.
Stars: ✭ 196 (-91.81%)
Mutual labels:  server
Ego
Ego is a full-stack web framework written in Go, lightweight and efficient front-end component solutions, based on gin. The front-end is compiled, does not affect the back-end.
Stars: ✭ 185 (-92.27%)
Mutual labels:  server
Miniserve
🌟 For when you really just want to serve some files over HTTP right now!
Stars: ✭ 2,894 (+20.99%)
Mutual labels:  server
Deepdetect
Deep Learning API and Server in C++14 support for Caffe, Caffe2, PyTorch,TensorRT, Dlib, NCNN, Tensorflow, XGBoost and TSNE
Stars: ✭ 2,306 (-3.6%)
Mutual labels:  server
Zserver4d
ZServer4D 是一套从商业项目剥离而出的云服务器中间件,可以承载百万级的分布式负载服务,并且支持IoT及内网穿透
Stars: ✭ 199 (-91.68%)
Mutual labels:  server
Simple Web Server
A very simple, fast, multithreaded, platform independent HTTP and HTTPS server and client library implemented using C++11 and Boost.Asio. Created to be an easy way to make REST resources available from C++ applications.
Stars: ✭ 2,261 (-5.48%)
Mutual labels:  server
Bashhub Server
Private cloud shell history. Open source server for bashhub https://github.com/rcaloras/bashhub-client
Stars: ✭ 189 (-92.1%)
Mutual labels:  server
Appium Uiautomator2 Server
Appium UiAutomator/UiObject2-based server for Android UI automation. This module is used by appium-uiautomator2-driver component
Stars: ✭ 196 (-91.81%)
Mutual labels:  server
Autoserver
Create a full-featured REST/GraphQL API from a configuration file
Stars: ✭ 188 (-92.14%)
Mutual labels:  server
Evmongoose
DEPRECATED. Evmongoose is an asynchronous, event(libev) based multi-protocol embedded networking library with functions including TCP, HTTP, WebSocket, MQTT and much more. It's based on mongoose and libev implementation and it's support Lua API.
Stars: ✭ 199 (-91.68%)
Mutual labels:  server
Thin
A very fast & simple Ruby web server
Stars: ✭ 2,170 (-9.28%)
Mutual labels:  server
Qtswissarmyknife
QSAK (Qt Swiss Army Knife) is a multi-functional, cross-platform debugging tool based on Qt.
Stars: ✭ 196 (-91.81%)
Mutual labels:  server
Oksocket
An blocking socket client for Android applications.
Stars: ✭ 2,359 (-1.38%)
Mutual labels:  server
Secure Wireguard Implementation
A guide on implementing a secure Wireguard server on OVH (or any other Debian VPS) with DNSCrypt, Port Knocking & an SSH-Honeypot
Stars: ✭ 200 (-91.64%)
Mutual labels:  server
Httpkit
⚡️ High-level, High-performance HTTP(S) Clients/Servers in Reason/OCaml
Stars: ✭ 198 (-91.72%)
Mutual labels:  server

Wire™

Wire logo

This repository is part of the source code of Wire. You can find more information at wire.com or by contacting [email protected].

You can find the published source code at github.com/wireapp/wire.

For licensing information, see the attached LICENSE file and the list of third-party licenses at wire.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.

Wire server

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 see this section. Federation is on our long term roadmap.

See more in "Open sourcing Wire server code".

Table of contents

Contents of this repository

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 (basic Swagger 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 the Administrator's Guide for more info.

Architecture Overview

The following diagram gives a high-level outline of the (deployment) architecture of the components that make up a Wire Server as well as the main internal and external dependencies between components.

wire-arch

Communication between internal components is currently not guarded by dedicated authentication or encryption and is assumed to be confined to a private network.

Development setup

How to build wire-server binaries

There are two options:

1. Compile sources natively.

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

See docs/developer/dependencies.md for details.

Once all dependencies are set up, the following should succeed:

# build all haskell services
make
# 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. Use make install to get optimized binaries.

For building nginz, see services/nginz/README.md

2. Use docker

If you don't wish to build all docker images from scratch (e.g. the alpine-builder takes a very long time), ready-built images can be downloaded from here.

If you wish to build your own docker images, you need docker version >= 17.05 and make. Then,

# optionally:
# make docker-builder # if you don't run this, it pulls the alpine-builder image from quay.io
make docker-deps docker-intermediate docker-services

# subsequent times, after changing code, if you wish to re-create docker images, it's sufficient to
make docker-intermediate docker-services

will, eventually, have built a range of docker images. Make sure to give Docker enough RAM; if you see make: *** [builder] Error 137, it might be a sign that the build ran out of memory. You can also mix and match – e.g. pull the alpine-builder image and build the rest locally.

See the Makefiles and Dockerfiles, as well as build/alpine/README.md for details.

How to run integration tests

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. the brig-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 using docker-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.sh

Then, 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.g cd services/brig && make integration to run one service's integration tests only.

when you need more fine-grained control over your build-test loops

You can use $WIRE_STACK_OPTIONS to pass arguments to stack through the Makefiles. 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/gundeck

Integration 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/spar
WIRE_INTEGRATION_TEST_OPTIONS="--match='POST /identity-providers'" make i

Alternatively, you can use tasty's support for passing arguments vie shell variables directly. Or, in the case of spar, the hspec equivalent, which is less helpful at times.

How to install and run wire-server

You have two options:

  • Option 1. (recommended) Install wire-server on kubernetes using the configuration and instructions provided in wire-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 the docker-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.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].