Enough is a platform for journalists, sources and human rights defenders to communicate privately and securely. It provides the following services:

  • Nextcloud, a suite of client-server software for creating and using file hosting services.
  • Discourse, a discussion platform built for the next decade of the Internet. Use it as a mailing list, discussion forum, long-form chat room, and more!
  • Mattermost, a flexible messaging platform that enables secure team collaboration.
  • Hugo, a static web site generator.
  • Weblate, a libre web-based translation tool with tight version control integration. It provides two user interfaces, propagation of translations across components, quality checks and automatic linking to source files.
  • Wekan, a kanban board which allows a card-based task and to-do management.
  • Etherpad, a highly customizable online editor providing collaborative editing in really real-time.
  • GitLab, a web-based DevOps lifecycle tool that provides a Git-repository manager providing wiki, issue-tracking and continuous integration/continuous deployment pipeline features.
  • OpenVPN, that implements virtual private network (VPN) techniques to create secure point-to-point or site-to-site connections in routed or bridged configurations and remote access facilities

The enough CLI controls an OpenStack based infrastructure and the services that run on top of it, with Ansible.


Quick start

  • Install Docker.

  • Copy clouds.yml in ~/.enough/ and edit to add password: next to auth_url:, under the production: name. For instance:

    openstack_provider: fuga
          auth_url: ""
          user_id: "ef5cae1b61b8424594a6ddf94a28381c"
          password: "lDk9vOLIXFW09oWcuQEiq0sjB4cV"
          user_domain_id: "b919e18e477a889bf89f89e9d9"
          project_domain_id: "b919e186cb07a889bf89f89e9d9"
          project_id: "25481e67871b4de39ae63fa2008029"
        region_name: "ams"
        interface: "public"
        identity_api_version: 3
  • Add the enough CLI to ~/.bashrc:

    eval "$(docker run --rm enoughcommunity/enough:latest install)"
  • Create the Nextcloud service with:

    $ enough --domain service create cloud


If the command fails, because of a network failure or any other reason, it is safe to run it again. It is idempotent.

  • Login with user admin password mynextcloud

  • Display the hosts that were created and the services they run:

    $ enough --domain info
    bind-host ip= port=22
    cloud-host ip= port=22