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.
An account on a supported OpenStack provider:
Public cloudproject at OVH. A Private network must be created for the project.
- A Fuga account.
The clouds.yml credentials for:
- OVH, found in horizon
- Fuga, found in the Team Credentials tab
Note that the OpenVPN service requires to use the
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
eval "$(docker run --rm enoughcommunity/enough:latest install)"
$ enough --domain myname.d.enough.community 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.
Display the hosts that were created and the services they run:
$ enough --domain myname.d.enough.community info bind-host ip=188.8.131.52 port=22 bind cloud-host ip=184.108.40.206 port=22 cloud https://cloud.myname.d.enough.community nextcloud_admin_user=admin enough_nextcloud_version=23 nextcloud_admin_pass=*****