Compare commits

..

1 Commits

Author SHA1 Message Date
93c9f769d0
docs: new ssh consolidation changes
See coop-cloud/abra#255
2023-02-14 08:18:00 +01:00
36 changed files with 105 additions and 1082 deletions

View File

@ -1,4 +1,4 @@
FROM squidfunk/mkdocs-material:9.1.17
FROM squidfunk/mkdocs-material:9.0.12
EXPOSE 8000
@ -8,6 +8,4 @@ WORKDIR /docs
RUN apk add --no-cache curl
RUN pip install \
mkdocs-awesome-pages-plugin==2.9.1 \
mkdocs-material-extensions==1.1.1
RUN pip install mkdocs-awesome-pages-plugin mkdocs-material-extensions

View File

@ -1,61 +1,19 @@
{#-
This file was copied from the Material theme
You can find the file in https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/src/partials/header.html
You can find the file in .venv/lib/python3.10/site-packages/material/partials/header.html
-#}
<!--
Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
-->
<!-- Determine base classes -->
{% set class = "md-header" %}
{% if "navigation.tabs.sticky" in features %}
{% set class = class ~ " md-header--shadow md-header--lifted" %}
{% elif "navigation.tabs" not in features %}
{% set class = class ~ " md-header--shadow" %}
{% set class = class ~ " md-header--lifted" %}
{% endif %}
<!-- Header -->
<header class="{{ class }}" data-md-component="header">
<nav
class="md-header__inner md-grid"
aria-label="{{ lang.t('header') }}"
>
<!-- Link to home -->
<a
href="{{ config.extra.homepage | d(nav.homepage.url, true) | url }}"
title="{{ config.site_name | e }}"
class="md-header__button md-logo"
aria-label="{{ config.site_name }}"
data-md-component="logo"
>
<nav class="md-header__inner md-grid" aria-label="{{ lang.t('header.title') }}">
<a href="{{ config.extra.homepage | d(nav.homepage.url, true) | url }}" title="{{ config.site_name | e }}" class="md-header__button md-logo" aria-label="{{ config.site_name }}" data-md-component="logo">
{% include "partials/logo.html" %}
</a>
<!-- Button to open drawer -->
<label class="md-header__button md-icon" for="__drawer">
{% include ".icons/material/menu" ~ ".svg" %}
</label>
<!-- Header title -->
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
@ -65,7 +23,7 @@
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
{% if page.meta and page.meta.title %}
{% if page and page.meta and page.meta.title %}
{{ page.meta.title }}
{% else %}
{{ page.title }}
@ -74,94 +32,53 @@
</div>
</div>
</div>
<!-- Color palette -->
{% if config.theme.palette %}
{% if not config.theme.palette is mapping %}
<form class="md-header__option" data-md-component="palette">
{% for option in config.theme.palette %}
{% set scheme = option.scheme | d("default", true) %}
{% set primary = option.primary | d("indigo", true) %}
{% set accent = option.accent | d("indigo", true) %}
<input
class="md-option"
data-md-color-media="{{ option.media }}"
data-md-color-scheme="{{ scheme | replace(' ', '-') }}"
data-md-color-primary="{{ primary | replace(' ', '-') }}"
data-md-color-accent="{{ accent | replace(' ', '-') }}"
{% if option.toggle %}
aria-label="{{ option.toggle.name }}"
{% else %}
aria-hidden="true"
{% endif %}
type="radio"
name="__palette"
id="__palette_{{ loop.index }}"
/>
{% if option.toggle %}
<label
class="md-header__button md-icon"
title="{{ option.toggle.name }}"
for="__palette_{{ loop.index0 or loop.length }}"
hidden
>
{% include ".icons/" ~ option.toggle.icon ~ ".svg" %}
</label>
{% endif %}
{% endfor %}
</form>
{% endif %}
{% if not config.theme.palette is mapping %}
<form class="md-header__option" data-md-component="palette">
{% for option in config.theme.palette %}
{% set primary = option.primary | replace(" ", "-") | lower %}
{% set accent = option.accent | replace(" ", "-") | lower %}
<input class="md-option" data-md-color-media="{{ option.media }}" data-md-color-scheme="{{ option.scheme }}" data-md-color-primary="{{ primary }}" data-md-color-accent="{{ accent }}" {% if option.toggle %} aria-label="{{ option.toggle.name }}" {% else %} aria-hidden="true" {% endif %} type="radio" name="__palette" id="__palette_{{ loop.index }}">
{% if option.toggle %}
<label class="md-header__button md-icon" title="{{ option.toggle.name }}" for="__palette_{{ loop.index0 or loop.length }}" hidden>
{% include ".icons/" ~ option.toggle.icon ~ ".svg" %}
</label>
{% endif %}
{% endfor %}
</form>
{% endif %}
<!-- Site language selector -->
{% if config.extra.alternate %}
<div class="md-header__option">
<div class="md-select">
{% set icon = config.theme.icon.alternate or "material/translate" %}
<button
class="md-header__button md-icon"
aria-label="{{ lang.t('select.language') }}"
>
<button class="md-header__button md-icon" aria-label="{{ lang.t('select.language.title') }}">
{% include ".icons/" ~ icon ~ ".svg" %}
</button>
<div class="md-select__inner">
<ul class="md-select__list">
{% for alt in config.extra.alternate %}
<li class="md-select__item">
<a
href="{{ alt.link | url }}"
hreflang="{{ alt.lang }}"
class="md-select__link"
>
<a href="{{ alt.link | url }}" hreflang="{{ alt.lang }}" class="md-select__link">
{{ alt.name }}
</a>
</li>
{% endfor %}
{% endfor %}
</ul>
</div>
</div>
</div>
{% endif %}
<!-- Button to open search modal -->
{% if "material/search" in config.plugins %}
<label class="md-header__button md-icon" for="__search">
{% include ".icons/material/magnify.svg" %}
</label>
<!-- Search interface -->
{% include "partials/search.html" %}
{% endif %}
<!-- Repository information -->
{% if config.repo_url %}
<div class="md-header__source">
{% include "partials/source.html" %}
</div>
{% endif %}
{% if "search" in config["plugins"] %}
<label class="md-header__button md-icon" for="__search">
{% include ".icons/material/magnify.svg" %}
</label>
{% include "partials/search.html" %}
{% endif %}
</nav>
<!-- Navigation tabs (sticky) -->
{% if "navigation.tabs.sticky" in features %}
{% if "navigation.tabs" in features %}
{% include "partials/tabs.html" %}

View File

@ -49,31 +49,3 @@ flags: `-p/--publish`, `-r/--dry-run`, `-x,y,z`
- deploy the changed version to your test instance
- determine how serious your change is (semver.org for reference)
- `abra recipe release $RECIPE [$VERSION]`
### Advanced Listing using `jq`
Several `abra` commands can output JSON formatted tables, and can thus be queried and filtered with the tool [jq](https://stedolan.github.io/jq/ "jq JSON Query tool"). We can also format these outputs with [tv](https://github.com/uzimaru0000/tv "tv Table Viewer") into a pretty table.
Currently, `abra recipe ls`, `abra server ls`, and `abra app ls` support the `-m` machine readable output flag which outputs JSON.
#### Filter recipes by "category"
`abra recipe ls -m | jq '[.[] | select(.category == "Utilities") ]' | tv`
As you can see we, we're selecting all recipes where category is "Utilities".
#### Filter apps by state `deployed`
!!! info
`abra app ls -S` queries each server in your added server list, where as without the `-S` it only lists from your local copy of the sever files (thus providing no information about actual state of the apps)
!!! info
`abra app ls` lists apps grouped into a server object, with statistics about the server. In `jq` we can select the entire apps list with `.[].apps[]`.
`abra app ls -m -S |jq '[.[].apps[] | select(.status == "deployed") | del(.upgrade)]' |tv`
The `del(.upgrade)` filter filters out available versions for the recipe in question for that row. It could be useful to leave in if you want a list of deployed apps that need an upgrade.

View File

@ -16,51 +16,10 @@ Install [Go >= 1.16](https://golang.org/doc/install) and then:
- `make install` will install it to `$GOPATH/bin`
- `go get <package>` and `go mod tidy` to add a new dependency
Our [Drone CI configuration](https://git.coopcloud.tech/coop-cloud/abra/src/branch/main/.drone.yml) runs a number of checks on each pushed commit. See the [Makefile](https://git.coopcloud.tech/coop-cloud/abra/src/branch/main/Makefile) for more handy targets.
Our [Drone CI configuration](https://git.coopcloud.tech/coop-cloud/abra/src/branch/main/.drone.yml) runs a number of sanity on each pushed commit. See the [Makefile](./Makefile) for more handy targets.
Please use the [conventional commit format](https://www.conventionalcommits.org/en/v1.0.0/) for your commits so we can automate our change log.
### Using the `abra` public API
Warning, there is currently no stability promise for the `abra` public API! Most of the internals are exposed in order to allow a free hand for developers to try build stuff. If people start to build things then we can start the discussion on what is useful to have open/closed and keep stable etc. Please let us know if you depend on the APIs!
The `pkg.go.dev` documentation is [here](https://pkg.go.dev/coopcloud.tech/abra). Here's a brief example to get you going:
```go
package main
import (
"context"
"fmt"
"log"
abraClient "coopcloud.tech/abra/pkg/client"
dockerClient "github.com/docker/docker/client"
)
func getClient(serverName string) (*dockerClient.Client, error) {
cl, err := abraClient.New(serverName)
if err != nil {
return nil, fmt.Errorf("getClient: %s", err)
}
return cl, nil
}
func main() {
cl, err := getClient("foo.example.com")
if err != nil {
log.Fatal(err)
}
// do stuff with the client...
// https://pkg.go.dev/github.com/docker/docker/client
}
```
Some tools that are making use of the API so far are:
* [`kadabra`](https://git.coopcloud.tech/coop-cloud/abra/src/branch/main/cmd/kadabra/main.go)
### Cross-compiling
If there's no official release for the architecture you use, you can cross-compile `abra` very easily. Clone the source code from [here](https://git.coopcloud.tech/coop-cloud/abra) and then:
@ -79,7 +38,7 @@ For developers, while using this `-beta` format, the `y` part is the "major" ver
### Making a new release
- Change `ABRA_VERSION` in [`scripts/installer/installer`](https://git.coopcloud.tech/coop-cloud/abra/src/branch/main/scripts/installer/installer) to match the new tag (use [semver](https://semver.org))
- Change `ABRA_VERSION` to match the new tag in [`scripts`](./scripts/installer/installer) (use [semver](https://semver.org))
- Commit that change (e.g. `git commit -m 'chore: publish next tag x.y.z-beta'`)
- Make a new tag (e.g. `git tag -a x.y.z-beta`)
- Push the new tag (e.g. `git push && git push --tags`)
@ -95,7 +54,7 @@ We maintain a fork of [godotenv](https://github.com/Autonomic-Cooperative/godote
### `docker/client`
A number of modules in [pkg/upstream](https://git.coopcloud.tech/coop-cloud/abra/src/branch/main/pkg/upstream) are copy/pasta'd from the upstream [docker/docker/client](https://pkg.go.dev/github.com/docker/docker/client). We had to do this because upstream are not exposing their API as public.
A number of modules in [pkg/upstream](./pkg/upstream) are copy/pasta'd from the upstream [docker/docker/client](https://pkg.go.dev/github.com/docker/docker/client). We had to do this because upstream are not exposing their API as public.
### `github.com/schultz-is/passgen`

View File

@ -4,10 +4,6 @@ title: Abra
<a href="https://github.com/egonelbre/gophers"><img align="right" width="250" src="https://github.com/egonelbre/gophers/raw/master/.thumb/sketch/adventure/poking-fire.png"/></a>
[![Build Status](https://build.coopcloud.tech/api/badges/coop-cloud/abra/status.svg?ref=refs/heads/main)](https://build.coopcloud.tech/coop-cloud/abra)
[![Go Report Card](https://goreportcard.com/badge/git.coopcloud.tech/coop-cloud/abra)](https://goreportcard.com/report/git.coopcloud.tech/coop-cloud/abra)
[![Go Reference](https://pkg.go.dev/badge/coopcloud.tech/abra.svg)](https://pkg.go.dev/coopcloud.tech/abra)
`abra` is the flagship client & command-line for Co-op Cloud. It has been developed specifically for the purpose of making the day-to-day operations of operators and maintainers pleasant & convenient. It is libre software, written in Go and maintained and extended by the community :heart:
Once you've got `abra` installed, you can start your own Co-op Cloud deployment. `abra` allows you to create, deploy and maintain libre software apps. It supports working with existing servers or can create new servers (supported providers: [Servers.coop](https://servers.coop/) & [Hetzner](https://hetzner.com)). It can also help you manage your DNS configuration (supported providers: [Gandi](https://gandi.net)).

View File

@ -4,7 +4,7 @@ title: Troubleshoot
## Where do I report `abra` bugs / feature requests?
You can use [this issue tracker](https://git.coopcloud.tech/coop-cloud/organising/issues/new/choose).
You can use [this issue tracker](https://git.coopcloud.tech/coop-cloud/abra/issues/new).
## SSH connection issues?
@ -69,11 +69,3 @@ You can install it alongside the [supported version of Abra](https://git.coopclo
git clone https://git.coopcloud.tech/coop-cloud/abra-bash ~/.abra/bash-src
ln -s ~/.abra/bash-src/abra ~/.local/bin/babra
```
## "Network not found" when deploying?
This appears to be an upstream issue for which we can't do much in `abra` to solve. See [`coop-cloud/organising#420`](https://git.coopcloud.tech/coop-cloud/organising/issues/420) for more info. The work-around is to leave more time in between undeploy/deploy operations so the runtime can catch up.
## Caller path in debug stacktrace doesn't exist
Debug stacktrace currently begins with `/drone/` due to CI. Remove the initial `/drone/` and the path is relative to the abra project root.

View File

@ -20,17 +20,32 @@ abra upgrade --rc
### `0.6.x-beta` -> `0.7.x-beta`
> General release notes are [here](https://git.coopcloud.tech/coop-cloud/abra/releases/tag/0.7.0-beta)
> **ALERTA, ALERTA**: this is currently only available via the release
> candidate channel, using `abra upgrade --rc`. There has been a lot of churn
> and we're being cautious about releasing this one. Please help us test! We're
> currently on `0.7.0-rc2-beta`.
- `kadabra`, the app auto-updater is available for general alpha testing! See [these docs](https://docs.coopcloud.tech/operators/tutorial/#automatic-upgrades) for how to get started. Binaries can be found [here](https://git.coopcloud.tech/coop-cloud/abra/releases/tag/0.7.0-rc2-beta).
- **ALERTA, ALERTA**, security related issue: all `$domain.env` env vars are now exposed to the deployment via the `app` service container. Each `FOO=BAR` is exported within the context of the container. If you have any privately committed secrets in your `.env` files, please migrate them to the `secrets: ...` configuration in the recipe. This change was made to facilitate tooling which can support auto-upgrading of apps in a deployment.
- `abra` can no longer install Docker, initialise swarm mode and the proxy network. It will check if a Docker install exists and is in swarm mode or not and error out accordingly. We leave the provisioning to tools that are designed for that and reduce the command-line surface that we have to maintain going forward.
- `abra server add <host> <args>` 👉 `abra server add <host>`. We have finally removed the custom SSH handling code and now solely rely on invoking `/usr/bin/ssh` directly and reading from the `~/.ssh/config`. The `<host>` argument should correspond to a `Host <host>` entry in your `~/.ssh/config` or in an `Include <file>` statement (hosts are retrieved via `ssh -G <host>`). This means "how does `abra` interact with SSH is 1) do you have an `~/.ssh/config` entry for `<host>` 2) can you `ssh <host>` successfully? 3) there is no 3. It's an easier mental model and also the way `abra-bash` works, hence, less weird obscure errors. `<host>` being public a domain name is still required.
- `abra server add <host> <args>` 👉 `abra server add <host>`. We have finally removed the custom SSH handling code and now solely rely on invoke `/usr/bin/ssh` directly and reading from the `~/.ssh/config`. The `<host>` argument should correspond to a `Host <host>` entry in your `~/.ssh/config` or in an `Include <file>` statement (hosts are retrieved via `ssh -G <host>`). This means "how does `abra` interact with SSH is 1) do you have an `~/.ssh/config` entry for `<host>` 2) can you `ssh <host>` successfully? 3) there is no 3. It's an easier mental model and also the way `abra-bash` works, hence, less weird obscure errors. `<host>` being public a domain name is still required.
- `abra` no longer tries to do the TOFU host key verification prompt. We follow the praxis of the Docker CLI and just give up when host keys are not validated. We leave it to folks to SSH in and verify themselves.
- Digests have been removed from the catalogue generation. They are not being used elsewhere and were significantly slowing down generation.
- On the way to [`kadabra`](https://git.coopcloud.tech/coop-cloud/abra/pulls/268), several changes regarding labelling deployments have been merged in this release. This will allow tooling to understand a deployment without having the context of a `~/.abra/...` configuration. This will pave the way for server-side tooling, like `kadabra` which can help operators with different kinds of maintenance tasks.
- Welcome `abra recipe fetch`, which helps retrieve a recipe repository to your local work-station.
- Also say hello to `abra app services <domain>`, which lists the in-deployment service names and corresponding image, e.g. `foo_example_com`.
- Digests have been removed from the catalogue generation.
- Backup files generated by `abra` have a much more human-friendly format.
- Linting for domains is disabled when no `DOMAIN=...` is discovered in the `$odmain.env` file.
### `0.5.x-beta` -> `0.6.x-beta`

View File

@ -0,0 +1,5 @@
---
title: Decisions
---
Placeholder for all the wonderful decisions we will make together.

5
docs/democracy/index.md Normal file
View File

@ -0,0 +1,5 @@
---
title: Democracy
---
Placeholder for all the wonderful things we will do together.

View File

@ -1,28 +0,0 @@
---
title: FAQ
---
## What is the Co-op Cloud Federation?
> We're still working things out, here's what know so far!
* It's membership based
* It's operates democratically
* It's about mutualising resources and sharing
* We want to do nice things together
## How many votes makes quorom for a Large Decision?
According to [Resolution 001](/federation/resolutions/passed/001), large decisions can pass when:
> more than 50% of total number of federation members :+1: votes
Please see [the membership docs](/federation/membership) to get the up-to-date membership listing and find the final count for quorom.
## How do I join the federation?
According to [Resolution 002](/federation/resolutions/passed/002):
> To join the federation an existing member must create a large decision to approve of the new member (paid or solidarity).
So, please [get in touch](/intro/contact) if you'd like to join!

View File

@ -1,75 +0,0 @@
---
title: Finance
---
> If you have any questions or run into problems, please chat with us on
> `#coopcloud-finance:autonomic.zone`
## Agreeing to spend money (Budgets)
## Sending and receiving money
It's slightly complicated, because money is complicated, but here's how it works. There are two moving parts:
* The Co-op Cloud Open Collective
* The Autonomic Wise account
Autonomic is [the fiscal host](https://docs.opencollective.com/help/fiscal-hosts/fiscal-hosts) for the Co-op Cloud Open Collective (OC).
OC helps us make all expenses and transfers transparent to the Federation. No actual money is handled via the OC interface. All payments are done via the Autonomic [Wise](https://wise.com) account. The total sum of the available funds shows on the OC page is the actual amount that is held in the Autonomic Wise account.
Autonomic Co-op members commit to support the federation by doing the financial adminstration work for the time being. Autonomic is publicy registered, has a bank account, files taxes etc. All financial comings/goings are kept on the books internally at Autonomic. This could be further mutualised or another collective could pick this up in the future.
Autonomic does not eat the transfer costs from the Wise account when paying out expense for members. That is charged to the Federation common fund.
### How to get paid via Open Collective
* [Create an account on Open Collective](https://opencollective.com/create-account)
* Go to the [Co-op Cloud Open Collective](https://opencollective.com/coop-cloud)
* Click [SUBMIT EXPENSE](https://opencollective.com/coop-cloud/expenses/new)
**Important** Please include bank details in your expense so that we can make a bank transfer. We do not currently support payments via Paypal and other platforms.
If you urgently need the money, please let us know on the Co-op Cloud Finance channel.
Finally, please let us know what your username/email is for your Open Collective account so we can add you to the team. This helps us build up the view of our community from the perspective of our Open Collective page.
### How to pay someone via Wise
> **Note**: only Autonomic Co-op members can do this
* First off, be wary of two things: 1) the currency conversion 2) the transaction fees of Wise. For 1) we have the complicating factor that the OC represents the common fund in GBP but our internal Wise jar is EUR. Then you're getting deeper into trouble if someone wants to get paid in e.g. USD.
* In order to cover the transaction fee, you need to fake do the transfer to see what you'll be charged and then add that to what you withdraw from the jar. This is because Autonomic does not eat the cost of the transfer from Wise, that is charged to the Federation.
* First step is to withdraw cash from the Co-op Cloud jar. It will automatically be transferred to the general EUR jar because the Co-op Cloud jar is also in EUR.
* To transfer to USD, you don't have to use USD, you can use GBP/EUR directly. It's easier to make the direct payment from the jar you transferred it to. This is purely because it is easier to follow it in the accounting bookkeeping later on.
* When making the payment, do the following:
* Select international transfer, choose your requird `$currency`
* Put correct amount in "recipient gets exactly" to get Wise to figure out the correct amount
* Open the invoice in Open Collective and look for the expense number, e.g. "Expense #132373" and put this in the reference number of the payment
* Note how long the transfer will take (Wise should tell you)
* Mark the expense as paid in Open Collective. Use the "manual" method.
* Let the member know the payment is on the way and how long it will take (if you have time).
#### FAQ
##### Where are the bank details of federation members?
Please see [`Finance.md` in the internal Federation Wiki](https://git.coopcloud.tech/Federation/organising/wiki/Finance)
##### What transfer type do we use for USD?
`ACH`. If you see `Abartn`, that is the `ACH routing number`.
### Tiers on Open Collective
* Infrastructure Sustainability: Folks who are making use of Co-op Cloud digital infrastructure (e.g. [git.coopcloud.tech](https://git.coopcloud.tech)) and want to help out with maintenance costs. All recurring donations are spent directly on running costs and system adminstration labour. Thanks for considering!
* Federation Membership: Dues paid by members of the Co-op Cloud Federation. Please see "Resolution 002: Membership/Dues 2023-03-22" for more information. There may be further decisions made around dues, please refer to the Federation documentation on [docs.coopcloud.tech/federation](https://docs.coopcloud.tech/federation).

View File

@ -1,14 +0,0 @@
---
title: Federation
---
Welcome to the Co-op Cloud Federation documentation!
This is the public facing page where we publish all things federation in the open.
- [FAQ](/federation/faq): Take a look if you're curious about the Federation is about 🤓
- [Resolutions](/federation/resolutions): All draft, in-progress and passed resolutions ✊
- [Finance](/federation/finance): How we deal with money 💸
- [Membership](/federation/membership): See who's already joined in 🥰
- [Minutes](/federation/minutes): All minutes from our meetings 📒
- [Digital tools](/federation/tools): Tools we use to organise online 🔌

View File

@ -1,17 +0,0 @@
---
title: Membership
---
> Are you also interested in joining the federation? Please see [Resolution 002](/federation/resolutions/passed/002/) for our process on how to join. If you have any questions, [drop us a line](/intro/contact/) with us for a chat
| Name | Dues paid up? | Notes | Contact |
| -------- | -------- | -------- |-------- |
| Agaric | - | - | `@wolcen:matrix.org` |
| Flancia | - | - | `@vera:fairydust.space` |
| Autonomic | - | - | `@3wc` `@cas` `@decentral1se` `@knoflook` `@travvy` |
| Bonfire | - | - | `@mayel:matrix.org` + Ivan (`@cambriale:matrix.org`) |
| Doop.coop | - | - | `@yusf:gottsnack.net` |
| Local IT | - | - | Philipp (`@yksflip:matrix.kaputt.cloud`) + `@moritz:matrix.local-it.org` |
| ruangrupa | - | - | Henry `@babystepper:matrix.org` |
| UTAW | - | - | `@javielico:matrix.org` |
| ??? | - | - | `@mirsal:1312.media` |

View File

@ -1,319 +0,0 @@
---
title: 2022-03-03
---
## Co-op Cloud Federation Bootstrapping
_Please add any suggested agenda items here. We'll add meeting notes to this page after the meeting has happened_
## Metadata
* Time / date: March 3 @ 1500-1630 UTC https://time.is/0300PM_3_Mar_2023_in_UTC
* Location: https://meet.jit.si/coop-cloud-federation-bootstrap-meeting
* Real-time note taking will happen at: https://pad.autonomic.zone/XVhRKvAaRHmaEIR14KBxLA# (and be migrated here after the meeting)
## Agenda
(All times UTC, as sharp as possible)
| Start | End | Topic | Time |
| -------- | -------- | -------- | -------- |
| 1500 | - | Meeting opens | - |
| 1500 | 1510 | introductions | 10m |
| 1510 | 1520 | confirming the agenda | 10m |
| 1520 | 1540 | decision-making process | 20m |
| 1540 | 1450 | break | 10m |
| 1450 | 1610 | small-group discussions | 20m |
| 1610 | 1630 | report-back / next steps | 20m |
Suggested topics for small-group discussions:
1. What software tools do we want to use for our organising?
2. How should the finances of the federation work?
3. Where else can we promote Co-op Cloud?
4. Development priorities
## Meeting notes
### Agenda
(All times UTC, as sharp as possible)
| Start | End | Topic | Time |
| -------- | -------- | -------- | -------- |
| 1500 | - | Meeting opens | - |
| 1500 | 1510 | introductions | 10m |
| 1510 | 1520 | confirming the agenda | 10m |
| 1520 | 1540 | decision-making process | 20m |
| 1540 | 1450 | break | 10m |
| 1450 | 1610 | small-group discussions | 20m |
| 1610 | 1630 | report-back / next steps | 20m |
Suggested topics for small-group discussions:
1. What software tools do we want to use for our organising?
2. How should the finances of the federation work?
3. Where else can we promote Co-op Cloud?
4. Development priorities
### Introductions
- name
- pronouns
- co-op you're part of
- favorite natural place
Attending:
* Trav (Autonomic) [facilitation]
* dc1 (Autonomic)
* Phillip (Local-IT)
* kawaiipunk (Autonomic)
* V (Flancia [coop] - https://anagora.org [software platform])
* Cas (Autonomic) [main notes]
* Josef (Doop-Coop)
* Wolcen (Agaric)
* Ivan (Bonfire)
* Mayel (Bonfire)
* Calix (Autonomic) [facilitation]
* Jamie (FarmOS)
* Mirsal
### Confirming Agenda
- V: Question about overall objective.
- Calix: Any suggested answers?
- dc1: To see who wants to come with on setting up the fed. Getting going making descisions together. Also how people see themselves participating on an ongoing basis.
- Calix: Any other intentions?
[Mirsal joins]
Recap:
- How to make Decisions
- Wolcen: Is there an existing org or is this the start?
- Trav: This is the kick off. We start here.
- dc1: Points to proposal. Mostly from Autonomic's viewpoint, which we hope to build on.
- V: Asking about transcription bots.
- Calix: Suggests that we table for now for later discussion.
### decision-making process
proposal: https://git.coopcloud.tech/Federation/Federation/wiki/Proposals
- Trav: We adapted an old proposal for descision making process.
- https://pad.autonomic.zone/s/MLafJE2jC#Overview
- https://coopcloud.tech/blog/federation-proposal/
- Trav: We consider this an important step in group formation. Summary: Proposal is written up and posted on channel, voting occurs via emoji reactions and after a time period it is passed.
- dc1: Context: Autonomic has been initiating the project heretofor and has made all descisions, but we want the community to have that power rather than Autonomic.
- Calix: We are in bootstraps as far as descision making so we have hope we can do it ad hoc this time.
- V: Question about using Loomio.
- kawaiipunk: Loomio while it is good seems to have a lot of bloat to it and the complexity of the forum functionality. Proposes we try to the most minimal mechanics possible. Autonomic uses this process.
Calix: We don't have SSO for Coopcloud that we all have access. Gitea is a good platform for bootstrapping since it has its own accounts and almost everyone already has accounts on it for functional reasons.
Wolcen: keeping things in as few places as possible seems better.
- dc1: +1 for minimal. We are at the start, and all things are vague so we perhaps just do the minimal possible and keep going with what we have
- V: As a member of not autonomic lacking context. tnx to dc1 for clarifying.
- Wolcen: Asks about technology for automating the gitea+wiki->matrix crossover.
- dc1: No automation current we can always change that later
- kawaiipunk: Would the voting proposal come into effect after this meeting. Propose that it should. - Explanation that we operate more on a consent basis than exactly a consensus and this proposal continues that.
- Wolcen: Asks about how to determine the magnitude of a descision and when the proposal can be acted on based on votes.
- dc1: General descions are made as more than one person. This informs how to do the calculation for the magnitude.
- kawaiipunk: Medium descisions can pass without everyone interacting with them. Good descisions are transparent and reversable. Controversial things generally have more than one blocker.
### break time
### Roundup about breakouts
### Checking on qualified yes answers on poll about descision making
1 qualified yes. Giving space for the qualifications. No takers.
- V: Suggests that Autonomic lead that choice.
- kawaiipunk: Agrees. If we're following consensus, unless anyone blocks it passes.
**We pass the descision making process.**
### Breakouts
* Calix: Suggestions for other breakout topics?
* Wolcen: 1 & 4 seem closely tied and should be merged.
* dc1: Membership should be a topic.
* We vote on poll now.
#### Breakout 1 + 3 (technology and technology)
> (See notes below)
We summarized where we're at, what technologies are being used for organizing, what are the dependencies for coop cloud, and what is being developed.
A couple of little things that are interesting from the perspective of development priorities:
- debug / entrypoint tools
- catalog normalization
#### Breakout 2 (finances)
> (See notes below)
Summary: Federation model has tried and failed several times. Priority should be getting some money in. Give what you can should be the main thing and we can see if we need to tweak that.
#### Breakout 4 (membership)
> (See notes below)
Broke down what membership means. Three classes of membership and what their powers are.
- Community member (individual level)
- Recipe maintainer
- Federation members - which is the main descion making member.
Discussed the processes involved in creating members, as in notes.
MVP is protection from capital interest. Existing members vote on new members? Minimal and lean.
### We vote on next meeting time
### Checkout process
> How do you feel? What about future?
* Calix: Feeling inspired. Topics would love to talk about: Working groups? What comms channels are needed?
* V: Feeling amazing. In one month?
* dc1: Feeling great, very productive. Looking forward to future.
* Trav: Great! THink this works well. Good that we can actually make descisions. Excited and optimistic for future.
* Mayel: Feel good about meeting. Really good to see energies. Great awesome keep going.
* Wolcen: Feels great. Good to see it making progress. Missed meeting pad - having official links for future meetings would be nice to have.
* Cas: Great. Looking forward to nitty gritty stuff.
* kawaiipunk: Tired, but good. Good discussions. Excited to have it open up to other people. Maybe we could hack on technical stuff. Interested in recipes and doing more formal organization.
* Phillipp: Excited this was really great. Language barrier made it a little challenging. Next meeting has a lot of questions and things to do.
### Poll
* 1 month wins for next meeting.
### Breakout room minutes
#### Breakout room #1
We have a rambling discussion about things related to software.
List of technologies currently in use:
- gitea [wiki, source repo, kanban?]
- matrix [chat, community organization]
Technologies under development/coop cloud
- Abra
- Recipes
- Recipe catalog
Technology dependencies
- Docker + swarm
Technology decision considerations
- What about using other 'containers', 'virtual instances', etc?
- Part of the value proposition is that it operates on current standards.
Development priorities
- Standardizing recipe catalog acquisition
- Debug/other hooks/entrypoints
#### Breakout room #2
Breakout Room #2: How should the finances of the federation work?
* Present: Trav, Mayel, yksflip, d1, V
* trav taking notes
* d1: want to map what we're already doing. At first unpaid then back-paid. Grant money is gone. Now asking clients to contribute 50% of fee towards Co-op Cloud development. Have not dumped money into OC yet.
* V: why tell clients? Transparency?
* d1: yeah transparency, helps get paid out and helps groups understand what they're contributing to.
* m: some part of revenue goes back to maintain commons. we know theres more than the config, we have admin, meetings, more services/tools/etc. besides membership dues, I would draft some suggestions/templates for how hosters can split revenue between infra/config/upstream project development...
* yksflip: contribute time to co-op cloud atm. but happy to shuffle money directly to open collective. main funding is public funding, funders need to see who is working on what, transparency/overview stuff. they also have money to give to freelancers. could we have ways to say we give % of the project to the open collective of the fedi. still trying to make local-it sustainable. funding until july and then open question how to go on sustainably.
* t: concern on finances is, having enough. paying for meetings is noble but we'll lose money fast. having a prioritisation of where money goes would be great. then as we have cash we put it where we want.
* d1: contribute comensurate to number of members in co-op? what would be a practical model? do we attach it to membership (dues?).
* v: dues and per-x contribution? are these two differen things?
* d1: 2 approaches, end goal is the same, have members contribute to the project
* V: we are amalgum, hard to quantify member #s
* yksflip: best to start with something easy. Co-ops of this size/# of instance, guidelines. Try it and then discuss again in a few months. Compensating meetings is great but maybe some things are more urgent.
* V: how does Autonomic do this currently?
* d1: simpler for us as 1 org vs fed. All funds into 1 pot. Tricky to get right. Did call with Co-op Cycle, bike delivery. Start with financial contribution from the start. Money makes things happen.
#### Breakout #3 did not happen
#### Breakout #4: Membership
* Jamie (facilitating)
* Kawaiipunk
* Calix (notes)
What are we hoping to learn / decide?
* kp: 3 levels of membership:
* community member
* maintainers of recipes
* federation members
* question: boundaries around co-operativeness. open to organisations / individuals? what org. structures permitted for members. co-ops only? worker co-ops only? allied orgs? capitalist orgs? do we allow co-ops
* calix: Q: what is the process for deciding any of above questions? new members, dues, etc.
* j: is there a way for e.g. corporate members to be community members? any previous steps towards decision-making with co-op cloud?
* Calix: Cooperative Technologists [...] when someone wants to joing it's a network-wide process, case-by-case, open to anyone to in the group; then w/ Autonomic, it's a 2-step process where someone joins provisionally, then as full member after a period of time.
* j: B-Corp, somewhat controversial category at this point as to whether it means anything or not. Consideration to take network approach to avoid "legalistic" approach, strict "by the books".
* kp: might also be a problem of assessing what counts as a cooperative for international members, different legal formations around the world.
* c: Proposal: the 3 cats, fed-members should be cooperatively run, and aligned with values of the federation. Large decision among federation members to add a new one.
* J: Like it. Open it as a question.
* c: Could use our new decision making process? Ask for comments before it goes live.
* kp: Seems quite fundamental. Best to keep simple and iterate.
* calix: should there be a federation members only matrix channel to discuss federation decisions?
* kp: guess there'd have to be under current plans. or does it set up too much of an "in group"? proposals could be posted publicly, voting could be in secret, results public? emoji voting in a private channel. transparency = positive.
* jamie: public "who voted how"
* kp: maybe literally just collecting of voting

View File

@ -1,3 +0,0 @@
---
title: Minutes
---

View File

@ -1,3 +0,0 @@
---
title: Drafts
---

View File

@ -1,17 +0,0 @@
---
title: "Resolution 007: 1 year dues waiver for Doop.coop"
---
- Deadline: 2023-07-03
- Size: Medium
### Summary
Waive membership dues for Doop.coop for the first year of their membership, from July 2023 to June 2024.
### Details
Yusf said:
> Hai! As our coop is a side gig, we've had a very low turnaround in the coop last fiscal. As such we've hadn't had the time to raise our revenue yet in this cycle so my question for the federation is:
> Is it possible for us (already joined), Doop Coop, to apply for this solidarity free membership the first year after which we'll be able to put in the fee?

View File

@ -1,24 +0,0 @@
---
title: "Resolution 008: Budget 003: Paying invoices"
---
- Deadline: 2022-07-03
- Size: Large
### Summary
Agree Budget 003, for up to €20/month for an Autonomic member to pay invoices submitted for Co-op Cloud Federation work.
### Details (Budget YYY)
**Budget amount**: EUR €20/month
**Who will implement this**: Autonomic
**When will the money be spent**: Monthly
**What is the money for**: Paying for the work involved in paying invoices submitted via OpenCollective.
## A note about decentralisation
Unfortunately, there doesn't seem to be a good way to open this task to other Co-op Cloud Federation members, until we get a dedicated bank account for the Federation, but if anyone has ideas about this, please let us know!

View File

@ -1,3 +0,0 @@
---
title: In progress
---

View File

@ -1,18 +0,0 @@
---
title: Resolutions
---
### Resolution Template
```javascript
## Resolution <number>: <title> - <date>
- Deadline: Date
- Size: large or medium
### Summary
Who this affects, and what it does
### Details
A narrative with details
```

View File

@ -1,59 +0,0 @@
---
title: "Proposal 001: Decision Making Process - 2023-03-03"
---
- Deadline: 2023-03-03 (live voting)
- Size: large
### Summary
Institute descision making process as per below. Special consensus voting in organization meeting rather than the below process.
### Decision Making Process
* Write up a proposal using the below template, and add to the [Proposals wiki page](https://git.coopcloud.tech/Federation/Federation/wiki/Proposals).
* Specify if they are a large or medium proposal
* Votes are done via emoji-reaction in the Community Organising Matrix channel (<https://matrix.to/#/#coopcloud-comm-org:autonomic.zone>)
* List the decision on the [decisions page](https://docs.coopcloud.tech/federation/resolutions) on our documentation
* Decisions can be split intro three categories: Small, Medium and Large.
* Votes can be in favour :+1:, against :-1: (block), or abstain :shrug:
* Announce the result in the [Federation chat (#coop-cloud-fedi:autonomic.zone)](https://docs.coopcloud.tech/intro/contact/#matrix) and record it on the [decisions page](https://docs.coopcloud.tech/federation/resolutions) of the documentation
### Types of Proposals
#### Small - “Get on and do a thing”
* Up to individual members to decide if they should just make the decision, or share it with the rest of the members to seek consensus.
#### Medium - “consensus pending objections”
* Potentially about shared tools, recipes, abra, etc.
* Doesnt have an effect on the direction or operation of Co-op Cloud as a whole.
* If any member of Co-op Cloud thinks its a Large decision, achieve Maximum Consensus™ (see [below](https://pad.autonomic.zone/PtNbWo-7Tt-CKXvC6kxvZQ?view#Large---Maximum-Consensus-%E2%84%A2))
* proposals must have a minimum deadline of 2 weeks from when they are proposed
* Pass requirements:
* at least one :+1: vote
* no :-1: votes
#### Large - “Maximum Consensus ™”
* Important decisions affecting the operation, direction, working conditions and finances of Co-op Cloud.
* proposals must have a minimum deadline of 2 weeks from when they are proposed
* Pass requirements:
* more than 50% of total number of federation members :+1: votes
* no :-1: votes
### Proposal Template
```javascript
## Resolution <number>: <title> - <date>
- Deadline: Date
- Size: large or medium
### Summary
Who this affects, and what it does
### Details
A narritive with details
```

View File

@ -1,25 +0,0 @@
---
title: "Resolution 002: Membership/Dues - 2023-03-22"
---
* Deadline: 2023-04-11
* Passed on 2023-04-13
* Size: Large
### Summary
1. Set membership dues for the Co-op Cloud Federation at EUR 10/month, to be reviewed in 6 months time, in October 2023.
2. Approval of new members requires a Large decision
3. Groups who had a member attend the first federation meeting are all founding members (are already in the federation, do not require a decision to be added)
### Details
Obviously this plan is not long-term financially sustainable. The idea is to use Autonomics remaining funds for the federation to collectivise the process of working this out over the next few months.
#### Dues
Members are required to make a minimum monthly EUR 10 (or EUR 60/year) donation through Open Collective. Members who are able are encouraged to donate more. Individuals/groups wanting to join Co-op Cloud who arent able to make a financial contribution may request a solidarity free membership.
#### Membership
To join the federation an existing member must create a large decision to approve of the new member (paid or solidarity). All collectives who attended the first federation meeting are already granted membership and are asked to setup recurring donations as soon as possible.

View File

@ -1,17 +0,0 @@
---
title: "Resolution 003: Paid work - 2023-03-22"
---
* Deadline: 2023-04-11
* Passed on 2023-04-13
* Size: Large
### Summary
1. Set the wage for Co-op Cloud Federation work at €20/h. Review these numbers in 6 months time, in October 2023.
### Details
Work is paid at EUR 20/hour. This may be increased via future decisions if so desired by the collective.
Members must do their own taxes for wages earned. To get paid, worker members must invoice via the Co-op Cloud Open Collective. Invoices need to include times and descriptions.

View File

@ -1,38 +0,0 @@
---
title: "Resolution 004: Budgeting - 2023-03-22"
---
* Deadline: 2023-04-11
* Passed on 2023-04-13
* Size: Large
### Summary
1. All paid work must be within a Budget
2. The first Budget as 8 hours / month, for member groups participation in organising meetings
### Details
All paid work must be within a Budget, agreed using a Large Decision. Budgets are ideally clumped as much as possible to reduce decision fatigue. Budgets include “who will do the work”. The agreed person can give the task to another Federation member.
Participation in organising meetings is paid for up to one person per member organisation. Additional people are welcome to attend; we encourage member organisations to pay for their additional attendees time themselves, if possible.
#### Budget: Monthly meetings
> **Budget amount:** EUR 960
>
> **Who will implement this:** Up to 1 person from each member organisation
>
> **When will the money be spent:** Over the next 6 months, until the meeting in October 2023.
>
> **What is the money for:** Paying attendees of monthly organising meetings
#### Budget template:
```
**Budget name:** Buying ponies
**Budget amount:** EUR 100,000
**Who will implement this:** Ade from Ponies.coop
**When will the work happen:** Tomorrow
**What is the money for:: Buying one pony for each member organisation
```

View File

@ -1,19 +0,0 @@
---
title: "Resolution 005: Public federation membership, notes and decisions - 2023-04-14"
---
* Deadline: 2023-04-17
* Passed: 2023-04-18
* Size: medium
### Summary
The following federation info will be made public on [`docs.coopcloud.tech/federation`](https://docs.coopcloud.tech/federation/):
- Federation membership
- Meeting minutes
- Decisions which have passed
### Details
This will make the process of documenting easier to mutualise and increase transparency for those interested in joining. The [`git.coopcloud.tech/Federation`](https://git.coopcloud.tech/Federation/Federation/wiki/) wiki can still be used for storing private details such as bank account information. If members do not want to be listed, they can do so even when this decision passes.

View File

@ -1,21 +0,0 @@
# Resolution 006: Budget 002: Resolution Writing-up
- Deadline: 2022-06-12
- Size: Large
### Summary
Agree Budget 002, for €100 for @decentral1se to write up 2 resolutions.
### Details (Budget YYY)
**Budget amount**: EUR 100
**Who will implement this**: @decentral1se
**When will the money be spent**: By 2023-07-03
**What is the money for**: Writing up two Resolutions:
1. A buffer for federation common fund.
2. To set up a standing critical fixes budget each month until the buffer in (1) is hit

View File

@ -1,11 +0,0 @@
---
title: Digital tools
---
- [Public documentation](https://docs.coopcloud.tech/federation)
- [Organising repository (private)](https://git.coopcloud.tech/Federation/organising)
- [Wiki (private)](https://git.coopcloud.tech/Federation/organising/wiki)
- [Git hosting](https://git.coopcloud.tech/)
- [Matrix Space](https://matrix.to/#/#coop-cloud-space:autonomic.zone)
- [Website](https://coopcloud.tech/)
- [Drone CI/CD](https://build.coopcloud.tech)

View File

@ -12,11 +12,11 @@ An app is a libre software that you use, e.g. Wordpress, Gitea, Jitsi, Nextcloud
## Container
A [Docker](#docker) term: a running instance of an [image](#image), running processes that are isolated from the host system.
A [Docker](/glossary#docker) term: a running instance of an [image](/glossary#image), running processes that are isolated from the host system.
## Deployment
When you run `abra app deploy <domain>`, `abra` reads a [recipe](#recipe) configuration and creates an [app](#app).
When you run `abra app deploy <domain>`, `abra` reads a [recipe](/glossary#recipe) configuration and creates an [app](/glossary#app).
## Docker
@ -24,36 +24,36 @@ When you run `abra app deploy <domain>`, `abra` reads a [recipe](#recipe) config
## Environment variables
Variables passed from the shell to processes invoked by it. They are used for configuring [services](#service).
Variables passed from the shell to processes invoked by it. They are used for configuring [services](/glossary#service).
## Environment file
A file contained in a [recipe](#recipe) describing the contents of [environment variables](#environment-variables).
A file contained in a [recipe](/glossary#recipe) describing the contents of [environmental variables](/glossary#environment-variables).
## Image
A [Docker](#docker) term: a template for creating [containers](#container), describing their file structure and installed binaries.
A [Docker](/glossary#docker) term: a template for creating [containers](/glossary#container), describing their file structure and installed binaries.
## Proxy network
A [Docker](#docker) related concept: a virtual network created on the server machine used for communicating between [services](#service). Any [service](#service) can be plugged into more than one [network](#network), allowing for control over data sharing between them.
A [Docker](glossary#docker) related concept: a virtual network created on the server machine used for communicating between [services](/glossary#service). Any [service](/glossary#service) can be plugged into more than one [network](/glossary#network), allowing for control over data sharing between them.
## Recipe
A recipe is what we call the configuration files that are used to deploy an [app](#app). When you run `abra app deploy <domain>`, `abra` is reading a recipe configuration, such as [the gitea recipe](https://git.coopcloud.tech/coop-cloud/gitea), in order to know how to deploy a new Gitea instance. When we speak of a "digital configuration commons", we're primarily referring to the [growing collection of recipes](https://recipes.coopcloud.tech).
A recipe is what we call the configuration files that are used to deploy an [app](/glossary#app). When you run `abra app deploy <domain>`, `abra` is reading a recipe configuration, such as [the gitea recipe](https://git.coopcloud.tech/coop-cloud/gitea), in order to know how to deploy a new Gitea instance. When we speak of a "digital configuration commons", we're primarily referring to the [growing collection of recipes](https://git.coopcloud.tech/coop-cloud).
## Secret
A [Docker](#docker) related concept: A way to store passwords encrypted on disk and mounted inside the [containers](#container) as files that can be read that contain the secret. See the [Docker secrets documentation for more](https://docs.docker.com/engine/swarm/secrets/). `abra` makes use of this approach to store secrets for deployed [apps](#app).
A [Docker](/glossary#docker) related concept: A way to store passwords encrypted on disk and mounted inside the [containers](/glossary#container) as files that can be read that contain the secret. See the [Docker secrets documentation for more](https://docs.docker.com/engine/swarm/secrets/). `abra` makes use of this approach to store secrets for deployed [apps](/glossary#app).
## Service
A [Docker](#docker) term: a single [container](#container) that is a part of a [stack](#stack).
A [Docker](glossary#docker) term: a single [container](/glossary#container) that is a part of a [stack](glossary#stack).
## Stack
A [Docker](#docker) term: one or more [services](#service) running together to provide a functionality.
A [Docker](glossary#docker) term: one or more [services](/glossary#service) running together to provide a functionality.
## Volume
A [Docker](#docker) term: a directory that can be mounted inside a [container](#container) to store data. Because [containers](#container) are meant to be non-changeable and disposable, any data that is supposed to not be lost between updates or restarts is stored in volumes.
A [Docker](/glossary#docker) term: a directory that can be mounted inside a [container](/glossary#container) to store data. Because [containers](/glossary#container) are meant to be non-changeable and disposable, any data that is supposed to not be lost between updates or restarts is stored in volumes.

View File

@ -12,6 +12,14 @@ title: Get in touch
Here is a link to the [Matrix space](https://matrix.to/#/!xSMwGbdVehScXcIFwS:autonomic.zone?via=autonomic.zone&via=matrix.org&via=1312.media) to see all channels.
- [`#coopcloud:autonomic.zone`](https://matrix.to/#/!JSVYWCRXSVMrAzgeKB:autonomic.zone?via=autonomic.zone) General chat and announcements (low traffic)
- [`#coopcloud-tech:autonomic.zone`](https://matrix.to/#/!DfXPgKLoYCvjHithgS:autonomic.zone?via=autonomic.zone) Technical discussions (some techno babble)
- [`#coopcloud-dev:autonomic.zone`](https://matrix.to/#/!IFazIpLtxiScqbHqoa:autonomic.zone?via=autonomic.zone) Intense developer chat (a lot of techno babble)
### XMPP
> Coming Soon :tm:
## Forum
[`community.coops.tech`](https://community.coops.tech/)

View File

@ -6,7 +6,7 @@ title: Credits & thanks
Special thanks to:
- [Doop Coop](mailto:cluck@doop.coop), for making a transparent version of the Co-op Cloud logo, Matrix room avatars and helping with OSX alpha testing.
- [Doop Coop](mailto:cluck@doop.coop), for making a transparent version of the Co-op Cloud logo, and helping with OSX alpha testing.
- [Social.coop](https://social.coop), for warmly welcoming us onto [`social.coop/@coopcloud`](https://social.coop/@coopcloud).
- [Servers.coop](https://servers.coop), for hosting our digital infrastructure (website, builds, git hosting, etc.).
- Every single last one of you heroic & patient beta testers, you are all comrades of the highest order of kropotkin :heart:

View File

@ -34,7 +34,7 @@ The project was started by workers at [Autonomic](https://autonomic.zone/) which
Please read our [initial project announcement post](https://autonomic.zone/blog/co-op-cloud/) for more on this.
Also see our [strategy page](../strategy/).
Also see our [strategy page](/strategy/).
## How do I make a recipe for (package) an app?
@ -182,7 +182,7 @@ These are organisational concerns that Co-op Cloud can't solve for you which any
## What is important to consider when running containers in production?
The Co-op Cloud uses [containers](#why-containers) as a fundamental building block. Therefore it is important to be aware of some general principles for container management in production environments. These are typically things that you will want to discuss within your co-op or democratic collective about how to prioritise and build up process for.
The Co-op Cloud uses [containers](/faq/#why-containers) as a fundamental building block. Therefore it is important to be aware of some general principles for container management in production environments. These are typically things that you will want to discuss within your co-op or democratic collective about how to prioritise and build up process for.
However, as the Co-op Cloud project is still very young, we're also still thinking about how we can make the platform itself mitigate problematic issues and make the maintenance of containers a more stable experience.
@ -216,7 +216,7 @@ While the industry is bordering on a [k8s](https://kubernetes.io/) obsession and
We hope to see a container orchestrator tool that is not directly linked to a for-profit company emerge soon but for now, this is what we have.
If you want to learn more, see [dockerswarm.rocks](https://dockerswarm.rocks/) for a nice guide. See also [`BretFisher/awesome-swarm`](https://github.com/BretFisher/awesome-swarm).
If you want to learn more, see [dockerswarm.rocks](https://dockerswarm.rocks/) for a nice guide.
## What licensing model do you use?
@ -226,7 +226,7 @@ The Co-op Cloud is and will always be available under [copyleft licenses](https:
It is true that if you install 3 apps and each one requires a MySQL database, then you will have 3 installations of MySQL on your system, running in containers.
Systems like [YunoHost](#yunohost) mutualise every part of the system for maximum resource efficiency - if there is a MySQL instance available on the system, then just make a new database there and share the MySQL instance instead of creating more.
Systems like [YunoHost](/faq/#yunohost) mutualise every part of the system for maximum resource efficiency - if there is a MySQL instance available on the system, then just make a new database there and share the MySQL instance instead of creating more.
However, as we see it, this creates a tight coupling between apps on the database level - running a migration on one app where you need to turn the database off takes down the other apps.
@ -251,15 +251,3 @@ Yes! Horizontal scaling is one of the ways Co-op Cloud can really shine. `abra`
We would love to do ARM support and hope to get there! We've been testing this and [ran into some issues](https://git.autonomic.zone/coop-cloud/organising/issues/25). The TLDR; is that a lot of upstream libre app developer communities are not publishing container builds that support ARM. If they are, there are typically subtle differences in the conventions used to build the image as they are mostly done by community members and not directly taken on by the upstream project themselves. Since one of the core goals is to coordinate and reuse upstream packaging work, we see that ARM support requires a lot of organising and community engagement. Perhaps projects themselves will not want to take on this burden? It is not the role of the Co-op Cloud to set up an entire ARM publishing work flow at this moment in time. We see the benefits of supporting ARM and if you've got ideas / thoughts / approaches for how to make progress here, [please get in touch](/intro/contact/).
Update: [Can I run Co-op Cloud on ARM?](/operators/handbook/#can-i-run-co-op-cloud-on-arm)
## Why would an activist group use Co-op Cloud infrastructure over private cloud infrastructure (e.g. AWS, Azure, GCP)?
If your group is powerful enough to have generated opposition, it's not implausible that some law enforcement body may be trying to stymie your group's advances. To do this, law enforcement bodies may and probably will collaborate with big tech. Indeed, Big Tech has consistently shown a quick willingness to cooperate with Law Enforcement agencies (a la Snowden-revealed NSA subpoenas, [disallowing Signal to domain front](https://techcrunch.com/2018/05/02/signal-could-get-kicked-out-of-amazon-web-services/) and other such incidents where [Big Tech aided governments in hunting activists](http://discourse.leagueofconcernedusers.org/t/activist-infrastructures/69?u=themoonisblue)).
If your group has ambitions that generate enough fury in your opposition, you should think twice about where you store your data and whose services you rely on to store your data.
By using Co-op Cloud infrastructure over private cloud infrastructure, you create a few possibilities:
- You may interact with a server provider that is more ethical than Big Tech. Although the server provider may still succumb to law enforcement, you might place more trust in some providers than in private cloud providers (e.g. AWS).
- You may be able to situate your servers in locations that are relatively more impervious to law enforcement attempts to dismantle your infrastructure. Indeed, if you deployed your infrastructure in a relatively secure setting such as Switzerland, then you would weather a greater chance of keeping your infrastructure alive than if you deployed it in, say, the United States. Protonmail and [Extinction Rebellion (XR)](https://www.youtube.com/watch?v=I_O3zj3p52A) choose Switzerland for their servers, for reasons along these lines.

View File

@ -111,16 +111,6 @@ You can also access it in your configs using the following syntax:
{{ env "FOO" }}
```
### Global environment variables
- `TYPE`: specifies the recipe name
- `DOMAIN`: specifies the app domain
- `LETS_ENCRYPT_ENV`: TODO
- `TIMEOUT`: specifies the time in seconds to wait until all services have started and passed the health checks
- `ENABLE_AUTO_UPDATE`: if set to `true`, the auto-updater `kadabra` can update this app (see [this auto updater entry](/operators/tutorial/#automatic-upgrades) for more)
- `POST_DEPLOY_CMDS="<container> <command> <arguments>|<container> <command> <arguments>|... "` specifies commands that should be executed after each `abra app deploy`
- `POST_UPGRADE_CMDS="<container> <command> <arguments>|<container> <command> <arguments>|... "` specifies commands that should be executed after each `abra app upgrade`
## Manage secret data
Adding a secret to your recipe is done:
@ -452,7 +442,7 @@ Best to [read](https://docs.docker.com/engine/reference/builder/#healthcheck) [t
## How do I tune resource limits?
If you don't place resource limits on your app it will assume it can use the entire capacity of the server it is on. This can cause issues such as Out-Of Memory errors for your entire swarm.
If you don't place resource limits on your app it will assume it can use the entire capacity of the server it is on. This can cause issues such as OOM eerors for your entire swarm.
See the [Docker documentation](https://docs.docker.com/config/containers/resource_constraints/) to get into this topic and check the other recipes to see what other maintainers are doing.
@ -467,7 +457,7 @@ If you want to get the highest rating on SSL certs, you can use the following tr
See [this PR](https://git.coopcloud.tech/coop-cloud/traefik/pulls/8/files) for the technical details
## How do I change secret generation length?
## How do I tweak secret generation length?
It is possible to tell `abra` which length it should generate secrets with from your recipe config.
@ -632,7 +622,7 @@ cp -ar /app/client/dist /srv/client
Please note:
1. The `file_env` / `_FILE` hack is to pass secrets into the container runtime without exposing them in plaintext in the configuration. See [this entry](/maintainers/handbook/#exposing-secrets) for more.
1. The `file_env` // `_FILE` hack is to pass secrets into the container runtime without exposing them in plaintext in the configuration. See [this entry](/maintainers/handbook/#exposing-secrets) for more.
1. In order to pass execution back to the original entrypoint, it's a good idea to find the original entrypoint script and run it from your own entrypoint script. If there is none, you may want to reference the `CMD` definition or if that isn't working, try to actually specify `cmd: ...` in the `compose.yml` definition (there are other recipes which do this).

View File

@ -248,10 +248,6 @@ usermod -aG docker $USER
# setup swarm
docker swarm init
docker network create -d overlay proxy
# on debian machines as of 2023-02-17
apt install apparmor
systemctl restart docker containerd
```
## Managing DNS entries
@ -328,7 +324,7 @@ If you need to run a command within a running container you can use `abra app ru
## How do I attach on a non-running container?
If you need to run a command on a container that won't start (eg. the container is stuck in a restart loop) you can temporarily disable its default entrypoint by setting it in `compose.yml` to something like ['tail', '-f', '/dev/null'], then redeploy the stack (with `--force --chaos` so you don't need to commit), then [get into the now running container](#how-do-i-attach-to-a-running-container), do your business, and when done revert the compose.yml change and redeploy again.
If you need to run a command on a container that won't start (eg. the container is stuck in a restart loop) you can temporarily disable its default entrypoint by setting it in `compose.yml` to something like ['tail', '-f', '/dev/null'], then redeploy the stack (with `--force --chaos` so you don't need to commit), then [get into the now running container](#how-do-i-attach-to-a-running-container), do your business, and when done revert the compose.yml change and redeploy again.
## Can I run Co-op Cloud on ARM?
@ -345,7 +341,7 @@ See [`#312`](https://git.coopcloud.tech/coop-cloud/organising/issues/312) for mo
## How do I backup/restore my app?
If you're app [supports backup/restore](/maintainers/handbook/#how-do-i-configure-backuprestore) then you have two options: [`backup-bot-two`](https://git.coopcloud.tech/coop-cloud/backup-bot-two) & [`abra`](https://git.coopcloud.tech/coop-cloud/abra).
If you're app [supports backup/restore](/handbook/#how-do-i-configure-backuprestore) then you have two options: [`backup-bot-two`](https://git.coopcloud.tech/coop-cloud/backup-bot-two) & [`abra`](https://git.coopcloud.tech/coop-cloud/abra).
With `abra`, you can simply run `abra app backup ...` & `abra app restore ...`.
Pass `-h` for more information on the specific flags & arguments.
@ -389,89 +385,3 @@ docker stack deploy -c compose.yml example_com
`abra` makes all of this more cenvenient but other tooling could follow this
approach.
## Proxying apps outside of Co-op Cloud with Traefik?
It's possible! It's actually always been possible but we just didn't have
spoons to investigate. Co-op Cloud can co-exist on the same server as bare
metal apps, non-swarm containers (plain `docker-compose up` deployments!),
Nginx installs etc. It's a bit gnarly with the networking but doable.
Enable the following in your Traefik `$domain.env` configuration:
```
FILE_PROVIDER_DIRECTORY_ENABLED=1
```
You must also have host mode networking enabled for Traefik:
```
COMPOSE_FILE="$COMPOSE_FILE:compose.host.yml"
```
And re-deploy your `traefik` app. You now have full control over the [file
provider](https://doc.traefik.io/traefik/providers/file/#directory)
configuration of Traefik. This also means you lost the defaults of the
`file-provider.yml.tmpl`, so this is a more involved approach.
The main change is that there is now a `/etc/traefik/file-providers` volume
being watched by Traefik for provider configurations. You can re-enable the
recipe defaults by copying the original over to the volume (this assumes you've
deployed `traefik` already without `FILE_PROVIDER_DIRECTORY_ENABLED`, which is
required for the following command):
```
abra app run $your-traefik app \
cp /etc/traefik/file-provider.yml /etc/traefik/file-providers/
```
You don't need to re-deploy Traefik, it should automatically pick this up.
You can route requests to a bare metal / non-docker service by making a
`/etc/traefik/file-providers/$YOUR-SERVICE.yml` and putting something like this in
it:
```yaml
http:
routers:
myservice:
rule: "Host(`my-service.example.com`)"
service: "myservice"
entryPoints:
- web-secure
tls:
certResolver: production
services:
myservice:
loadBalancer:
servers:
- url: "http://$YOUR-HOST-IP:8080/"
```
Where you should replace all instances of `myservice`.
You must use your host level IP address (replace `$YOUR-HOST-IP` in the
example). With host mode networking, your deployment can route out of the swarm
to the host.
If you're running a firewall (e.g. UFW) then it will likely block traffic from
the swarm to the host. You can typically add a specific UFW to route from the
swarm (typically, your `docker_gwbridge`) to the specific port of your bare
metal / non-docker app:
```
docker network inspect docker_gwbridge --format='{{( index .IPAM.Config 0).Gateway}}'
172.18.0.1
ufw allow from 172.18.0.0/16 proto tcp to any port $YOUR-APP-PORT
```
Notice that we turn `172.18.0.1` into `172.18.0.0/16`. It's advised to open the
firewall on a port by port case to avoid expanding your attack surface.
Traefik should handle the usual automagic HTTPS certificate generation and
route requests after. You're free to make as many `$whatever.yml` files in your
`/etc/traefik/file-providers` directory. It should Just Work ™
Please note that we have to hardcode `production` and `web-secure` which are
typically configurable when not using `FILE_PROVIDER_DIRECTORY_ENABLED`.

View File

@ -257,7 +257,10 @@ abra app upgrade <nextcloud-domain>
### Automatic Upgrades
`kadabra` the auto-updater is still under development, use it with care and don't use it in production environments. To setup the auto-updater copy the `kadabra` binary to the server and configure a cronjob for regular app upgrades. The following script will configure ssmtp for email notifications and setup a cronjob. This cronjob checks daily for new app versions, notifies if any kind of update is available and upgrades all apps to the latest patch/minor version.
`kadabra` the auto-updater is still under development, use it with care and don't use it in production environments.
To setup the auto-updater copy the `kadabra` binary to the server and configure a cronjob for regular app upgrades.
The following script will configure ssmtp for email notifications and setup a cronjob.
This cronjob checks daily for new app versions, notifies if any kind of update is available and upgrades all apps to the latest patch/minor version.
```bash
@ -280,12 +283,12 @@ MAILFROM=noreply@example.com
30 4 * * * root ~/kadabra upgrade --all
EOF
```
Add `ENABLE_AUTO_UPDATE=true` to the env config (`abra app config <app name>`) to enable the auto-updater for a specific app.
## Finishing up
Hopefully you got something running! Well done! The [operators handbook](/operators/handbook) would probably be the next place to go check out if you're looking for more help. Especially on topics of ongoing maintenance.
If not, please [get in touch](/intro/contact) or [raise a ticket](https://git.coopcloud.tech/coop-cloud/organising/issues/new/choose) and we'll try to help out. We want our operator onboarding to be as smooth as possible, so we do appreciate any feedback we receive.
If not, please [get in touch](/intro/contact) or [raise a ticket](https://git.coopcloud.tech/coop-cloud/abra/issues/new) and we'll try to help out. We want our operator onboarding to be as smooth as possible, so we do appreciate any feedback we receive.

View File

@ -2,7 +2,6 @@
site_author: Co-op Cloud
site_name: "Co-op Cloud: Public Interest Infrastructure"
site_url: https://docs.coopcloud.tech
use_directory_urls: true
theme:
name: material
@ -13,7 +12,6 @@ theme:
- navigation.tabs
- navigation.tabs.sticky
- navigation.indexes
- content.action.edit
palette:
primary: light pink
accent: purple
@ -21,7 +19,7 @@ theme:
favicon: img/favicon.ico
custom_dir: custom_theme/
copyright: Copyleft 2023 Co-op Cloud
copyright: Copyleft 🄯 2022 Co-op Cloud
markdown_extensions:
- meta
@ -71,40 +69,18 @@ nav:
- "Cheat Sheet": abra/cheat-sheet.md
- "Get Involved":
- get-involved/index.md
- "Federation":
- federation/index.md
- "FAQ": federation/faq.md
- "Resolutions":
- federation/resolutions/index.md
- "Passed":
- federation/resolutions/passed/001.md
- federation/resolutions/passed/002.md
- federation/resolutions/passed/003.md
- federation/resolutions/passed/004.md
- federation/resolutions/passed/005.md
- federation/resolutions/passed/006.md
- "In progress":
- federation/resolutions/in-progress/index.md
- federation/resolutions/in-progress/007.md
- federation/resolutions/in-progress/008.md
- "Draft":
- federation/resolutions/drafts/index.md
- "Finance": federation/finance.md
- "Membership": federation/membership.md
- "Minutes":
- federation/minutes/index.md
- "2022":
- federation/minutes/2022-03-03.md
- "Digital tools": federation/tools.md
- "Democracy":
- democracy/index.md
- "Decisions": democracy/decisions.md
- "Glossary":
- glossary/index.md
plugins:
- awesome-pages
- search
- awesome-pages
repo_name: coop-cloud/docs.coopcloud.tech
repo_url: https://git.coopcloud.tech/coop-cloud/docs.coopcloud.tech/
repo_url: https://git.coopcloud.tech/coop-cloud/docs.coopcloud.tech
edit_uri: _edit/main/docs/
extra_css:

View File

@ -1,4 +1,4 @@
mkdocs-awesome-pages-plugin==2.9.1
mkdocs-awesome-pages-plugin==2.8.0
mkdocs-material-extensions==1.1.1
mkdocs-material==9.1.17
mkdocs==1.4.3
mkdocs-material==9.0.12
mkdocs==1.4.2