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:
* A ``Public cloud`` project 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 ``AMS2`` rather the ``AMS`` OpenStack region.
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=*****