Introduction

Enough is a self-hostable infrastructure based on libvirt, OpenStack and Ansible. 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.

Requirements

  • An account on a supported OpenStack provider:

  • The clouds.yml credentials for:

Quick start

  • Install Docker.

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

    ---
    openstack_provider: fuga
    clouds:
      production:
        auth:
          auth_url: "https://identity.api.ams.fuga.cloud:443/v3"
          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 myname.d.enough.community service create cloud
    

Note

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

  • Login https://cloud.myname.d.enough.community with user admin password mynextcloud

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

    $ enough --domain myname.d.enough.community info
    bind-host ip=51.168.48.253 port=22
       bind
    cloud-host ip=51.68.77.181 port=22
       cloud   https://cloud.myname.d.enough.community
               nextcloud_admin_user=admin
               enough_nextcloud_version=23
               nextcloud_admin_pass=*****