81 Commits

Author SHA1 Message Date
65ac99ca25 . 2024-04-08 12:50:57 +02:00
3f1f57f4ba initial commit 2024-04-03 19:08:37 +02:00
fa23766aa8 make Federation page more pretty 2024-02-22 21:12:38 +01:00
661366e2c0 intro: adjust Who's behind the project? 2024-02-22 21:12:22 +01:00
0cc43b15d3 add links and sentences to Comparisons 2024-02-22 21:02:50 +01:00
b726ce8837 added Autonomic text to 'Why Docker Swarm?' and adjust sidebar titles 2024-02-22 20:35:08 +01:00
8e40a141d9 adjust Minutes sidebar title 2024-02-22 20:35:08 +01:00
3455295f9f add minutes for 2023-05-03 and 2024-02-01 2024-02-22 20:35:08 +01:00
4c778a154f Remove link to non-existant federation faq page 2024-02-22 11:14:23 +00:00
4278b1779c remove link in Comparisons -> Docker-compose 2024-02-22 11:45:06 +01:00
dde7d2aeb3 remove warning about abra WSL / docker errors as issues are resolved 2024-02-21 21:28:25 +01:00
a29593b573 fix Issue reporting URL in Operators Tutorial 2024-02-21 21:12:58 +01:00
fd6c41ee91 merging branch style-widgets in
Reviewed-on: coop-cloud/docs.coopcloud.tech#246
2024-02-21 20:05:11 +00:00
df70cfcaa0 fixing merge conflict on mkdocs.yml 2024-02-21 21:02:10 +01:00
623a0be0b0 fix Resolution state in sidebar 2024-02-21 20:51:34 +01:00
a1d9cf8940 fix missing --- in Resolution 017 2024-02-21 20:51:34 +01:00
b9c7ebd500 update Moving Parts flow chart 2024-02-21 16:27:03 +00:00
ac6cf7b5dc Improvements to Operators docs (manal verifying, CLI setup)
- Move 'Validating abra binary checksums' to abra/install.md
- Flatten #command-line-setup sub headings in Operators Handbook
2024-02-21 16:27:03 +00:00
ee39912c88 Small improvements to Operators tutorial
- Made info boxes collapsible (default: closed)
- Put links at end of sentences for clarity
2024-02-21 16:27:03 +00:00
655400877a migrate The Moving Parts into Intro area, stylize 2024-02-21 16:27:03 +00:00
650735a40b fix merge-conflict in Resolution 017 2024-02-21 17:14:30 +01:00
0ddd0bff66 add Maadix to Comparisons page 2024-02-21 17:02:03 +01:00
c3cc6fc1c6 add Stackspin Comparison 2024-02-21 16:10:36 +01:00
8c85a7928d move 'What about -> Comparisons page 2024-02-21 15:17:52 +01:00
d4c39ab074 maintainers handbook, fix mispelling 2024-02-14 11:26:33 +01:00
1172da919c add emoji sprinkles to Maintainers Handbook :) 2024-02-14 10:05:10 +01:00
3ae0ac10b3 fix Join The Federation on Support Us page 2024-02-13 23:21:27 +01:00
4960b301e0 Add first pass of a Support Us page 2024-02-12 12:09:56 +01:00
306639f733 fix conflict with Dockerfile 2024-02-12 11:10:17 +01:00
568c27dc9a spelling, word choice, and link fixes to new Abra -> Recipes page 2024-02-12 11:05:00 +01:00
ab5ac034e9 fix: bump also Dockerfile deps 2024-02-12 11:05:00 +01:00
1b3c788722 fix: dates 2024-02-07 11:23:57 +01:00
24b996acb9 maintainers handbook: fix typo 2024-02-06 09:39:19 +00:00
b926d3d975 fix: use single source of deps
Closes coop-cloud/organising#564
2024-02-06 00:54:27 +01:00
75583c32e2 fixing merge conflict 2024-02-05 20:38:40 +01:00
05f12b7555 Tidy up titles of Resolutions into unique lines of content 2024-02-05 19:57:18 +01:00
99a31ac3b7 Remove undeed Resolutions index.md files, adjst Template 2024-02-05 19:56:15 +01:00
43211efebd renamed Federation: FAQ to Bylaws; added intro sentence 2024-02-05 19:54:48 +01:00
3wc
01e65bef1b Explain auto recipe catalogue generation 2024-02-05 12:51:38 -03:00
3wc
2221b23144 013 → in progress 2024-02-05 12:38:51 -03:00
0187af4e8d Improve Get In Touch cpage 2024-02-05 15:58:00 +01:00
b5afd99f66 Reduce UI clutter & improve Recipes
- Remove word ___ Guide from various pages
- Camel Case titles
- Move Recipes sub-page of Abra
2024-02-05 15:27:57 +01:00
39ab74b9b8 fix: bump also Dockerfile deps 2024-02-05 13:39:03 +01:00
f919f0c10b add Grid style to Operators, Maintainers, and Organisers 2024-02-04 23:21:40 +01:00
d683a7e33e add & update theme dependencies 2024-02-04 23:20:30 +01:00
7f50082972 expand info in README 2024-02-03 16:00:40 +01:00
31a502cf6f feat: R017 2024-01-30 07:32:19 +01:00
304143d151 fix: woops too soon 2024-01-29 16:06:27 +01:00
1c09d09eeb docs: add new collectives 2024-01-29 16:03:26 +01:00
72e1c448df feat: R015 passed 2024-01-28 11:06:08 +01:00
259ece5a9f fix: budget number 2024-01-27 18:57:30 +01:00
dec3335a87 fix: budget number 2024-01-27 18:56:36 +01:00
7be11d48a1 fix: lol lists & separator - chaos 2024-01-27 14:51:42 +01:00
02002fcde5 fix: lists 2024-01-27 14:50:01 +01:00
0478269b31 fix: typo 2024-01-27 14:47:37 +01:00
d0fd7403d1 fix: titles 2024-01-27 14:44:52 +01:00
861eddaa71 feat: R016 2024-01-27 14:41:27 +01:00
139147d23d feat: add R015 2024-01-25 13:58:21 +01:00
3wc
2f21edf2b9 Update resolution 013 2024-01-09 23:13:03 -03:00
3wc
f5cfe1f92b Fix index for moved resolution 014 2024-01-09 23:07:05 -03:00
3wc
f6798cbe2d Move 014 to "passed" 2024-01-09 01:00:53 -03:00
47b07ff342 fix: mention ssh authetication agent in abra trouble 2024-01-06 00:24:26 +01:00
1363a20979 docs: flag stepping out 2024-01-02 23:09:09 +01:00
cfa79f6581 docs: 014 passed, d1 not implementing 2024-01-02 23:08:09 +01:00
57bb79d716 document releases/next file 2023-12-12 15:41:25 +01:00
89581f5f87 docs: add date 2023-12-06 12:19:22 +01:00
588ee4e9d9 docs: fix title 2023-12-06 12:15:50 +01:00
833660e47c Add resolution 014 to mkdocs.yml 2023-12-06 11:13:19 +00:00
e21939fcb8 Add resolution 014 2023-12-06 12:02:26 +01:00
42ee2e15f9 docs: update fork
See coop-cloud/abra#391.
2023-12-02 13:01:27 +01:00
cd1d5d7490 Revert "docs: remove 013 for now"
This reverts commit b05b577695.
2023-11-27 11:31:48 +01:00
5ffed62021 chore(deps): update squidfunk/mkdocs-material docker tag to v9.4.14 2023-11-27 09:47:15 +00:00
485339ee7f document running integration tests localy 2023-11-27 09:46:54 +00:00
9ca3b9ae5f chore(deps): update dependency mkdocs-material to v9.4.14 2023-11-27 08:01:54 +00:00
954dab7e30 chore(deps): update squidfunk/mkdocs-material docker tag to v9.4.11 2023-11-24 08:02:05 +00:00
3daba2da3a chore(deps): update dependency mkdocs-material to v9.4.11 2023-11-24 08:01:49 +00:00
b67dab1299 docs-improvements
Reviewed-on: coop-cloud/docs.coopcloud.tech#237
2023-11-23 20:08:18 +00:00
34185e36ce docs: add context to wsl installation warning 2023-11-23 20:08:18 +00:00
a6b7b6fb86 docs: update make instructions with correct commands and further instructions 2023-11-23 20:08:18 +00:00
fe0525f4ee docs: add reference to "hack" in installation guide 2023-11-23 20:08:18 +00:00
e01863c161 chore(deps): update dependency mkdocs-material-extensions to v1.3.1 2023-11-23 08:01:59 +00:00
49 changed files with 1531 additions and 436 deletions

293
Backupbottwo.md Normal file
View File

@ -0,0 +1,293 @@
---
title: Backupbot-two
---
# For Operators
## Deployment
**1. Create a new app:**
```
abra app new backup-bot-two
```
**2. Configure :**
## Usage
Run the cronjob that creates a backup, including the push notifications and docker logging: abra app cmd <backupbot_name> app run_cron
### Create a backup of all apps:
```
abra app run <backupbot_name> app -- backup create
```
The apps to backup up need to be deployed
### Create an individual backup:
```
abra app run <backupbot_name> app -- backup --host <target_app_name> create
```
### Create a backup to a local repository:
```
abra app run <backupbot_name> app -- backup create -r /backups/restic
```
It is recommended to shutdown/undeploy an app before restoring the data
### Restore the latest snapshot of all including apps:
```
abra app run <backupbot_name> app -- backup restore
```
### Restore a specific snapshot of an individual app:
```
abra app run <backupbot_name> app -- backup --host <target_app_name> restore --snapshot <snapshot_id>
```
### Show all snapshots:
```
abra app run <backupbot_name> app -- backup snapshots
```
### Show all snapshots containing a specific app:
```
abra app run <backupbot_name> app -- backup --host <target_app_name> snapshots
```
### Show all files inside the latest snapshot (can be very verbose):
```
abra app run <backupbot_name> app -- backup ls
```
### Show specific files inside a selected snapshot:
```
abra app run <backupbot_name> app -- backup ls --snapshot <snapshot_id> --path /var/lib/docker/volumes/
```
### Download files from a snapshot:
filename=$(abra app run <backupbot_name> app -- backup download --snapshot <snapshot_id> --path <absolute_path>)
abra app cp <backupbot_name> app:$filename .
# For Maintainers
TODO:
pre/post hooks
- Simple command
- accessing secrets
- more complex scripts mounted in the container
From the perspective of the recipe maintainer, backup/restore is just more
`deploy: ...` labels. Tools can read these labels and then perform the
backup/restore logic.
## Tools
Two of the current "blessed" options are
[`backup-bot-two`](https://git.coopcloud.tech/coop-cloud/backup-bot-two) &
[`abra`](https://git.coopcloud.tech/coop-cloud/abra).
### `backup-bot-two`
`backup-bot-two` is a recipe which gets deployed on the server, it can perform automatic backups.
Please see the [`README.md`](https://git.coopcloud.tech/coop-cloud/backup-bot-two#backupbot-ii) for the full docs.
### `abra`
`abra` will read labels and store backups in `~/.abra/backups/...` .
## Backup
Unless otherwise stated all labels should be added to the main service (which should be named `app`).
1. Enable backups for the recipe:
You need to enable backups for the recipe by adding the following label:
```
backupbot.backup=true
```
2. Decide wich volumes should be backed up:
By default all volumes will be backed up. To disable a certain volume you can add the following label:
```
backupbot.backup.volumes.{volume_name}=false
```
3. Decide which path should be backed up on each volume
By default all files get backed up for a volume. To only include certain paths you can add the following label:
```
backupbot.backup.volumes.{volume_name}.path=/mypath1/foo,/mypath2/bar
```
Note: You cann include multiple paths by providing a comma seperated list
Note: All paths are specified relativ to the volume root
4. Run commands before the backup
For certain services like a database it is not reccomend to just backup files, because the backup might end up in a corrupted state. Instead it is reccomended to make a database dump. You can run arbitrary commands in any container before the files are backed up.
To do this add the following label to the service on which you want the command being run:
```
backupbot.backup.pre-hook=mysqldump -u root -pghost ghost --tab /var/lib/foo
```
5. Run commands after the backup
Sometimes you want to clean up after the backup. You can run arbitrary commands in any container after the files were backed up.
To do this add the following label to the service on which you want the command being run:
```
backupbot.backup.post-hook=rm -rf /var/lib/mysql-files/*
```
### Testing the backup
That's it your recipe can now be backed up. But how can you make sure your configuration is correct?
TODO:
### Examples
## Restore
Restore, in this context means, "moving a compressed archive back to the
container backup paths". So, if you set
`backupbot.backup.path=/var/lib/foo,/var/lib/bar` and you have a backed up
archive, tooling will unzip files in the archive back to those paths.
In the case of restoring database tables, you can use the `pre-hook` &
`post-hook` commands to run the insertion logic.
## Configuration Examples
### Mysql
### Postgres
# Specification
TODO:
- should the post hook be executed when the backup/restore fails?
## Summary
Creating automated backups of docker swarm services is an often needed task. This specification describes how backups can be configured via [service labels](https://docs.docker.com/compose/compose-file/compose-file-v3/#labels-1) in a standardised way.
## Requirements
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this specification are to be interpreted as described in [RFC-2119].
When backing up a docker stack you MUST first check if the `backupbot.backup`. It MUST be set to true, for the backup to happen.
## Backup
To enable backups for a docker stack, the `backupbot.backup=true` label MUST be on any of its services. It SHOULD be declared on the first service.
A `backupbot.backup.pre-hook` MAY be set on a service. When set the command MUST be executed inside the running container of the service before backup up files.
By default all volumes MUST be backed up. A volume MAY be excluded from backing up when `backupbot.backup.volumes.{volume_name}=false` is set, where `{volume_name}` is the name of the volume.
By default all files MUST be backed up on a volume. `backupbot.backup.volumes.{volume_name}.path` MAY be set to limit the paths for that volume. The value MUST be a valid path relative to the volume root. It MAY contain multiple paths which get seperated by a comma.
A `backupbot.backup.post-hook` MAY be set on a service. When set the command MUST be executed inside the running container of the service after backing up all files.
A backup implementation SHOULD provide the backup of one or multiple stacks in a `.tar.gz` format.
## Restore
A `backupbot.restore.pre-hook` MAY be set on a service. When set the command MUST be executed inside the running container of the service before restoring backup files.
By default all files MUST be restored into their volume. A volume or path MAY be excluded from restoring.
A `backupbot.restore.post-hook` MAY be set on a service. When set the command MUST be executed inside the running container of the service after restoring backup files.
## Labels
### `backupbot.backup`
**Type:** boolean
**Default:** false
**Description:**
Enables backupbot for this compose stack. The labe should be added to the main service of the compose stack.
**Example:**
```
backupbot.backup: true
```
### `backupbot.backup.volumes.{volume_name}`
**Type:** boolean
**Default:** true
**Description:** When set to false the volume is excluded from backups.
**Example:**
```
backupbot.backup.volumes.{volume_name}: false
```
### `backupbot.backup.volumes.{volume_name}.path`
**Type:** string
**Default:** ""
**Description:**
A comma seperated list of paths. When one or more paths are set, it only backups up those on the given volume instead of the whole volume.
**Example:**
```
backupbot.backup.volumes.{volume_name}.path: '/var/lib/mariadb/dump.sql.gz'
```
### `backupbot.backup.pre-hook`
**Type:** string
**Default:** ""
**Description:**
A command, that gets executed before the files are backed up.
**Example:**
```
backupbot.backup.pre-hook: 'mysqldump -u root -p"$(cat /run/secrets/db_root_password)" -f /volume_path/dump.db'
```
### `backupbot.backup.post-hook`
**Type:** string
**Default:** ""
**Description:**
A command, that gets executed after the files are backuped.
**Example:**
```
backupbot.backup.post-hook: "rm -rf /volume_path/dump.db"
```
### `backupbot.restore.pre-hook`
**Type:** string
**Default:** ""
**Description:**
A command, that gets executed before the files are restored.
**Example:**
```
backupbot.restore.pre-hook: "lock db"
```
### `backupbot.restore.post-hook`
**Type:** string
**Default:** ""
**Description:**
A command, that gets executed after the files are restored.
**Example:**
```
backupbot.restore.post-hook: "sqldump dump.sql && unlock db && rm dump.sql"
```

View File

@ -1,4 +1,4 @@
FROM squidfunk/mkdocs-material:9.4.10
FROM squidfunk/mkdocs-material:9.5.7
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 -r requirements.txt

View File

@ -1,13 +1,21 @@
# docs.coopcloud.tech
# docs.coopcloud.tech :open_book:
[![Build Status](https://build.coopcloud.tech/api/badges/coop-cloud/docs.coopcloud.tech/status.svg)](https://build.coopcloud.tech/coop-cloud/docs.coopcloud.tech)
> https://docs.coopcloud.tech
View: [docs.coopcloud.tech](https://docs.coopcloud.tech)
## hacking
## Developing / Hacking
Co-op Cloud's docs are created with the [mkdocs-material](https://squidfunk.github.io/mkdocs-material/) framework.
To install dependencies and serve local build of site, simply run:
```
make
```
Theme docs are [here](https://squidfunk.github.io/mkdocs-material/setup/changing-the-colors/) and [there](https://squidfunk.github.io/mkdocs-material/reference/).
Useful docs for theming and content reference:
- [Changing the colors](https://squidfunk.github.io/mkdocs-material/setup/changing-the-colors/)
- [Reference](https://squidfunk.github.io/mkdocs-material/reference/)

View File

@ -10,10 +10,11 @@ Install [direnv](https://direnv.net), run `cp .envrc.sample .envrc`, then run `d
Install [Go >= 1.16](https://golang.org/doc/install) and then:
- `make build` to build
- `make build` to build. If this fails, run `go mod tidy`.
- `./abra` to run commands
- `make test` will run tests
- `make install` will install it to `$GOPATH/bin`
- `make install-abra` will install abra to `$GOPATH/bin`
- `make install-kadabra` will install kadabra 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.
@ -61,14 +62,16 @@ cd bats-core
sudo ./install.sh /usr/local
```
### Run tests
### Setup Test Server
Then you can run the integration test suite with the following.
For many tests an actual server is needed, where apps can be deployed. You can
either use a local one or a remote test server.
#### With remote test server
```
export ABRA_TEST_DOMAIN="test.example.com"
export ABRA_DIR="$HOME/.abra_test"
bats -Tp tests/integration # DO NOT run this just yet, read below...
```
`ABRA_TEST_DOMAIN` should also have a DNS A record for `*.test.example.com`
@ -80,6 +83,32 @@ Traefik for you. Then you'll have more stable results.
You probably don't want to run the entire test suite though, it takes a while.
Try the following for starters.
#### With local swarm
When running the test suite localy you need a running docker swarm setup:
```
docker swarm init
docker network create -d overlay proxy
```
To use the local swarm set the foloowing env var:
```
export TEST_SERVER=default
export ABRA_DIR="$HOME/.abra_test"
```
### Run tests
Now you can run the whole test suite:
```
bats -Tp tests/integration
```
Or you can run a single test file:
```
bats -Tp tests/integration/autocomplete.bats
```
@ -224,7 +253,7 @@ For developers, while using this `-beta` format, the `y` part is the "major" ver
### `godotenv`
We maintain a fork of [godotenv](https://github.com/Autonomic-Cooperative/godotenv) because we need inline comment parsing for environment files. You can upgrade the version here by running `go get github.com/Autonomic-Cooperative/godotenv@<commit>` where `<commit>` is the latest commit you want to pin to. At time of writing, `go get github.com/Autonomic-Cooperative/godotenv@b031ea1211e7fd297af4c7747ffb562ebe00cd33` is the command you want to run to maintain the above functionality.
We maintain a fork of [godotenv](https://git.coopcloud.tech/coop-cloud/godotenv) because we need inline comment parsing for environment files. You can upgrade the version here by running `go get git.coopcloud.tech/coop-cloud/godotenv@0<COMMID>` where `<commit>` is the latest commit you want to pin to. See [`abra#391`](https://git.coopcloud.tech/coop-cloud/abra/pulls/391) for more.
### `docker/client`

View File

@ -2,10 +2,6 @@
title: Install
---
!!! warning
We've seen reports that `abra` under [WSL](https://learn.microsoft.com/en-us/windows/wsl/about) doesn't work due to an underlying bug in Docker context handling. See [`coop-cloud/organising#406`](https://git.coopcloud.tech/coop-cloud/organising/issues/406) and [`docker/for-win#13180`](https://github.com/docker/for-win/issues/13180) for more.
## Stable release
```
@ -18,6 +14,28 @@ curl https://install.abra.coopcloud.tech | bash
curl https://install.abra.coopcloud.tech | bash -s -- --rc
```
## Manual verification
You can download the `abra` binary yourself from the [releases
page](https://git.coopcloud.tech/coop-cloud/abra/releases) along with the
`checksums.txt` file and verify it's integrity with the following command.
```bash
sha256sum -c checksums.txt --ignore-missing
```
If you see a line starting with `abra_...` which matches the filename you downloaded and it ends with `OK` - you're good to go!
```
abra_X.X.X-beta_linux_x86_64: OK
```
Otherwise, you downloaded a corrupted file and you should re-download it.
## Compile from source
Follow the guide [here](https://docs.coopcloud.tech/abra/hack/)
## Installer script source
You can view that [here](https://git.coopcloud.tech/coop-cloud/abra/src/branch/main/scripts/installer/installer).

View File

@ -4,8 +4,16 @@ title: Quick start
There are a few ways to get started, here are some entrypoints listed below:
- If you're new around here and you'd like to learn how to deploy apps with `abra`, then a good place to start is the [new operators tutorial](/operators/tutorial). If you've already deployed some apps and would like to learn how to maintain them, then the [operators handbook](/operators/handbook) is the right place.
<div class="grid cards" markdown>
- If you're installing `abra` so you can do recipe packaging, take a look at the [new maintainers tutorial](/maintainers/tutorial). `abra` can help you check the quality of the recipe you've packaged and help you publish it to the public recipe catalogue. Then others can deploy your configuration :rocket:
- __Operators__
If you're new around here and you'd like to learn how to deploy apps with `abra`, then a good place to start is the [new operators tutorial](/operators/tutorial). If you've already deployed some apps and would like to learn how to maintain them, then the [operators handbook](/operators/handbook) is the right place.
- __Maintainers__
If you're installing `abra` so you can do recipe packaging, take a look at the [new maintainers tutorial](/maintainers/tutorial). `abra` can help you check the quality of the recipe you've packaged and help you publish it to the public recipe catalogue. Then others can deploy your configuration :rocket:
</div>
If you run into any issues, please see the [troubleshooting page](/abra/trouble) :bomb:

107
docs/abra/recipes.md Normal file
View File

@ -0,0 +1,107 @@
---
title: Recipes
---
_Recipes_ are what we call the configuration file used to deploy apps with our `abra` CLI tool. A longer explanation is in the [glossary](/glossary#recipe). Our _Catalogue_ is a web interface for exploring the currently available configurations, therefore which apps can be deployed.
### Catalogue
Our catalogue is located at [recipes.coopcloud.tech](https://recipes.coopcloud.tech/) and regularly updated :cooking:
[Browse Our Recipes](https://recipes.coopcloud.tech/){ .md-button .md-button--primary }
The catalogue is a helpful place to easily understand the status of app recipes and the link to the source-code of the recipe. To understand the various scores on recipes, read further.
## Status, Features, Score
Each recipe `README.md` has a "metadata" section, to help communicate the overall status of the recipe, and which features are supported. Here's an example, from [the Wordpress recipe](https://git.coopcloud.tech/coop-cloud/wordpress/):
```
<!-- metadata -->
* **Category**: Apps
* **Status**: 3, stable
* **Image**: [`wordpress`](https://hub.docker.com/_/wordpress), 4, upstream
* **Healthcheck**: Yes
* **Backups**: Yes
* **Email**: 3
* **Tests**: 2
* **SSO**: No
<!-- endmetadata -->
```
Currently, recipe maintainers need to update the scores in this section manually. The specific meanings of the scores are:
### Status (overall score)
| Score | Description |
| ----- | ------------------------------------ |
| [5](#){ .md-score .md-score-5 } | Everything in 4 + Single-Sign-On |
| [4](#){ .md-score .md-score-4 } | Upstream image, backups, email, healthcheck, integration testing |
| [3](#){ .md-score .md-score-3 } | Upstream image, missing 1-2 items from 4 |
| [2](#){ .md-score .md-score-2 } | Missing 3-4 items from 4 or no upstream image |
| [1](#){ .md-score .md-score-1 } | Alpha |
### Image
| Score | Description |
| ----- | ------------------------------------ |
| 4 | Official upstream image |
| 3 | Semi-official / actively-maintained image |
| 2 | 3rd-party image |
| 1 | Our own custom image |
### Email
| Score | Description |
| ----- | ------------------------------------ |
| 3 | Automatic (using environment variables) |
| 2 | Mostly automatic |
| 1 | Manual |
| 0 | None |
| N/A | App doesn't send email |
### CI (Continuous Integration)
| Score | Description |
| ----- | ------------------------------------ |
| 3 | As 2, plus healthcheck |
| 2 | Auto secrets + networks |
| 1 | Basic deployment using `stack-ssh-deploy`, manual secrets + networks |
| 0 | None |
### Single-Sign-On
| Score | Description |
| ----- | ------------------------------------ |
| 3 | Automatic (using environment variables) |
| 2 | Mostly automatic |
| 1 | Manual |
| 0 | None |
| N/A | App doesn't support SSO |
## Requesting Recipes
If you'd like to see a new recipe packaged there are two options for you. First is to contribte one as a _Maintainer_
The second option is to make a request on the [`recipes-wishlist`](https://git.coopcloud.tech/coop-cloud/recipes-wishlist) repository issue tracker.
If no one is around to help, you can always take a run at it yourself, go to the [Maintainers](/maintainers/) section to help you on your way.
<div class="grid cards" markdown>
- __Contribute Recipes__
Do you not see the recipe for the app you use or make? We especially love recipe maintainers :heart:
[Create a Recipe](/maintainers/){ .md-button .md-button--primary }
- __Request A Recipe__
Don't feel up to the task? Open an issue in the `recipes-wishlist` repository
[Request Recipe](https://git.coopcloud.tech/coop-cloud/recipes-wishlist){ .md-button .md-button--primary }
</div>
We've seen nice things happen when the requesters are also willing to take an active role in testing the new recipe. Teaming up with whoever volunteers to help do the packaging is best.

View File

@ -20,6 +20,12 @@ Host example.com
IdentityFile ~/.ssh/example@somewhere
```
and your IdentityFile should be added to the authentication agent:
```
ssh-add ~/.ssh/example@somewhere
```
## "abra server ls" shows the wrong details?
You can use `abra server rm` to remove the incorrect details. Make sure to take a backup of your `~/.abra/servers/<domain>` first. You can then try to re-create by using `abra server add ...` again.

View File

@ -1,7 +1,10 @@
---
title: FAQ
title: Bylaws
---
The following are the bylaws which the _Co-op Cloud: Federation_ has decided
democratically and layout our governance processes :classical_building: :fist:
## What is the Co-op Cloud Federation?
> We're still working things out, here's what know so far!

View File

@ -6,9 +6,36 @@ 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 🔌
<div class="grid cards" markdown>
- __Resolutions__
Our drafts, in-progress and passed resolutions
[Read More](/federation/resolutions){ .md-button .md-button--primary }
- __Finance__
Learn about how we deal with money and how to get paid 💸
[Read More](/federation/finance){ .md-button .md-button--primary }
- __Membership__
See who's already joined us 🥰
[Our Members](/federation/membership){ .md-button .md-button--primary }
- __Minutes__
All minutes from our meetings 📒
[Past Meetings](/federation/minutes){ .md-button .md-button--primary }
- __Digital Tools__
Tools we use to organise online 🔌
[Tools We Use](/federation/tools){ .md-button .md-button--primary }
</div>

View File

@ -15,3 +15,4 @@ title: Membership
| ruangrupa | - | - | Henry `@babystepper:matrix.org` |
| UTAW | - | - | `@javielico:matrix.org` |
| ??? | - | - | `@mirsal:1312.media` |
| Klasse & Methode | - | - | `@p4u1_f4u1:matrix.org` |

View File

@ -0,0 +1,82 @@
---
title: 2023-05-03
---
# Co-op Cloud Federation Meeting 2023-05-03
Notes from last meeting: https://docs.coopcloud.tech/federation/minutes/2022-03-03/
Metadata
* Time / date: May 3 @ 1500-1630 UTC https://time.is/0330PM_3_May_2023_in_UTC
* Location: https://meet.jit.si/coop-cloud-federation-meeting
* Attending: Autonomic (trav, 3wc), Local-IT (yksflip, Moritz), decentral1se (🐺 /free agent)
* Facilitation: Calix
* Notes: trav
Agenda
_(All times UTC, as sharp as possible)_
* Introductions / checkins (5m)
* How you're doing
* Which organisation are you attached to? (if applicable)
* a fun (or terrible) Co-op Cloud experience you've had recently
* Packaging Rustdesk server 🥳
* Realising backupbot labels didn't work 😱
* Upgrading with missing backups 😅 Deployed 18-20 apps at once, wrote a script 🤯
* Immovable force meets unstoppable bug, no deployments ⛔
* Decisions - what passed, any new proposals? (10m) https://docs.coopcloud.tech/federation/resolutions/
* we review the existing resolutions
* Resolution 005 / process
* trav: sticking to 2 week deadline for proposals?
* d1: there was a meeting where we talked about it being a small decision but then it became medium. G
* trav: ahh mixups happen, I don't feel strongly ultimately.
* yksflip: maybe check-in with cas but call it passed (?). 2 weeks is a good amount of time but can understand you'd want to move on more quickly.
* 3wc: 2 week default good. Very async coordination, espeically if folks have to go back to their co-op to check-in. Fewer people will see it the shorter it is.
* Moritz: how to know size of the decision?
* 3wc: smallest decision size that seems fair.
* d1 in chat: 'who is affected by the decision'
* d1: 2 weeks seems good, simpler to stick to that going forward. Super duper emergency budget
* What does the second point of Resolution 004 mean
* 3wc: first Budget is a budget for these meetings.
* Superduperemergencybudget
* Trav: For emergency work?
* d1: yes, but the part that's missing is to know what is super duper emergency. There are a lot of P1 bugs but they're not all show-stoppers. There are a number of things that need to be fixed quicker than 2 weeks
* 3wc: emergency firefighter. Up to whoever proposes the budget as to what the structure would look like.
* abra fixes Budget / proposal thingy
* https://pad.autonomic.zone/Fp6Zi846TNqATulYFqcJqw
* d1: if this was proposed today, wait 2 weeks and then I'd fix them. Or standing budget?
* trav: suggestion is wait 2 weeks then implement? or agree standing budget?
* 3wc: yes, but also passing emergency budget would also take 2 weeks, no?
* d1: propose this and do 10 hours or do a "10 hours" proposal and fit this into it. Not show-stopping bugs but 2 weeks wont kill us.
* trav: might be worth passing 10h/mo, something/month for fixes, maintenance / emergency. non-binding poll / gitea voting → what to work on. vs having to package bug work together. less bureaucracy.
* d1: can re-work decision 6 into a maintenance budget. Curious how we want to bubble-up the bugs. Board? Label?
* yksflip: standing maintenance makes sense to me.
* federation bootstrap funds 🤑
* trav: there's money leftover from donor
* d1: 6k in the pot, get the work funded.
* trav: buffer tho?
* Moritz: I'm paid from Local IT. How to decide who is doing which fixes?
* d1: people tend to do stuff they want to see done. Some way to share would be good....?
* 3wc: tags. Tickets labeled as part of maintenance budget. If assigned to someone, they are point person. Plot twist: time expectation. Someone takes something on and it's unclear when that's going to happen. Claim things for up to a week or 2 but don't claim it until you're ready to work on it.
* ** we love it **
* **d1 to roll into maintenance proposal**
* doop coop dues waiver https://pad.autonomic.zone/xgd7lLxzT520O4KRXuWyuQ#
* 3wc: yusef posted, side project, low income, would like to participate. 1 year waiver of dues. They seem enthusiastic and helpful person to be around.
* trav: can decide now? " Individuals/groups wanting to join Co-op Cloud who arent able to make a financial contribution may request a solidarity free membership." doesn't say how to make decision
* d1: medium seems fine
* Moritz: instead of dues perhaps doing some abra fixes
* Philip: agree on waiving fees for them. How to define time to spend on project. Alternative membership fee, donate time?
* 3wc: part of inspiration for fedration is Co-op Cycle: too complicated to track work and money. Have to track money so wont track work. Like the simplicity. Wage is €20/h, in-kind work contribution would be 30 minutes of work contribution per month.
* d1: reflecting on unions etc, pay dues and also contribute. Something to think about.
* Checkouts
didn't get to:
* Breakout groups?
* Software tools
* Finances
* Outreach
* Development
* next meeting? Is it monthly? I forget.

View File

@ -0,0 +1,79 @@
---
title: 2024-02-01
---
# Co-op Cloud Federation meeting 2024-02
Date poll: https://crab.fit/coop-cloud-federation-february-2024-576238
Previous notes: https://docs.coopcloud.tech/federation/minutes/2023-05-03/
## Agenda
- check-in
- name
- pronouns
- organisation
- how we're feeling
- anything we want to get out of today
- emotional support for abra bugs
- missed october 2023 membership dues review ([R002](https://docs.coopcloud.tech/federation/resolutions/passed/002/)), what now?
- [backup restore / testing update](https://pad.riseup.net/p/UEC2JUPGb6tmRCZ7RX9X-keep)
- collective abra next release planning
- ✅ bonfire co-op network hosting proposal
- ✅ next meeting
- check-out
- how was the meeting?
- recommendations for next meeting
- what are you doing for the rest of the day?
## Notes
Here: Calix, Mayel, Moritz, p4u1, d1
Facilitating: Calix
Notes: Mayel
- local-it has test framework with Playwright to test deployment, eg. testing customised configs or modified recipes - not testing app functionality but rather customisation or integrations between apps, eg. SSO - so can check if an upgrade would break - would be nice to integrate the tests into the recipes to they can be linked to the version (ie. update recipe when updating a recipe/app) - in future want to automate into CI (eg drone runner) to auto-update recipes and check for failure - will publish test framework next week on coopcloud gitea - run them first on test deployments to check in advance if update works but also then run in prod to make sure thing runs correctly in prod (eg. if email notifs are working in each app) - this does require extra thinking (eg. deleting data created by tests)
- sounds really cool! going to look into playwright. could be handy for federated apps
- sounds like something that orgs like nlnet may fund, maybe can merge these into a proposal to fund this + the more boring coopcloud maintainance
## organise meeting schedule
- would be nice to find a regular rythm for federation meetings instead of needing date polls
- same time? once a month?
- in social.coop TWG they've been getting 2-3 people showing up, maybe just because haven't polled for new regular meeting time for a while
- need someone with capacity to organise (coordination role), whether it's setting up poll or prompting people to join, to get us all in the room
- will someone set up a date poll for march? or re. meeting frequency / how we decide -> Moritz volunteered
### bonfire co-op network hosting proposal
- https://bonfirenetworks.org/hosting/
what co-op cloud combined with servers.coop would do. idea comes from a need from bonfire team, people who are looking to adopt bonfire, individuals, small collectives, large organisations who might not have tech savvy to set up and maintain own hosting / instances, would rather have as a service .. but we decided early on we didn't want to offer hosting ourselves. and we don't want to host any flagship instances (because centralisation). calls for easy way for people to set up and maintain instances. not just infrastructure, labour, savvy, mnaintenance and support, backups. like community-supported agriculture, "community-supported software" = community gets a say in software, have a say in prioritising. large part of funds goes into infra and labour of maintaining / operating. split among participants.
last funding from NLNet, included milestone. prototype instance setup wizard and management dashboard. €3k to start. small tech component, organisational and infra.
what would m like from CC at this stage?
participants help with prototyping
start small - organisational & infrastructural side is
communities already want instances!
not setup wizard required, just send us an email etc. do it by hand
budget avail now
one group focused on open science, one on digital radios, online communities around music. possibilities of them finding grants, other sources of income. donations from community members? assume = there would be funds eventually. might have to be a bit of upfront freebie service, especially as we're prototyping. closed beta as we're trying things out.
### missed october 2023 membership dues
- we were going to review who's paying, how's the amount. we didn't! what to do.
### backup restore / testing update
- after meeting about backup bot in januarry, need to document what already exists and what has been decided, there was a proposal - will followup async
### collective abra next release planning
- some are in process of improving backup/restore (still WIP) and some bugs were also found, so now it's difficult to make a release - many are self-building abra so not an issue for them, but would be good to make a plan first (next time) to avoid large refactors that block releases
- also plan around how long features take to implement, maybe during federation meetings
- proposal for next abra release: some bugs are fixed in main branch but release blocked by backup stuff, so could create a new branch from point where backup stuff was not merged and create release from there, so don't need to worry about incomplete backup stuff, should be pretty easy, that way can finish backup with no rush
- if we do so, need 1 or 2 people to run integration tests + fix any bugs that appear and then do the release - ideally 1 person who has released before (d1 volunteers) + another who hasn't (p4u1 volunteers)
## check out
- in future need to talk about how long meeting can go before starting + agenda prioritisation

View File

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

View File

@ -0,0 +1,75 @@
---
title: "Resolution 013"
---
!!! note
This resolution has been amended! The main change was to remove automatic
git synchronisation; please see [the file
history](https://git.coopcloud.tech/coop-cloud/docs.coopcloud.tech/commits/branch/main/docs/federation/resolutions/in-progress/013.md) for a full run-down.
- Budget 007: Operator sync
- Date: 2024-01-??
- Deadline: 2024-01-XX
- Size: Large
### Summary
As highlighted in several tickets (e.g. [`#434`](https://git.coopcloud.tech/coop-cloud/organising/issues/434), [`#467`](https://git.coopcloud.tech/coop-cloud/organising/issues/467)), several operators working together on the same server routinely run into deployment instability. This is due to the fact that we do not store the deployment version of the apps.
With this proposal, we would like to address the synchronisation of app deployment versions. This is being called "Operator sync". What follows is the design proposal which has already received feedback from operators on [this pad](https://pad.riseup.net/p/IebZQkpe3OOpYyVT8f1j-keep).
### Details (Budget 007)
We add support a config file (`$ABRA_DIR/config.yml`) which has these defaults:
We also add a `abra config` command which has the following shape:
```
🌻 ./abra config -h
NAME:
abra config - Manage system-wide Abra configuration
USAGE:
abra config command [command options]
COMMANDS:
generate, g Generate default configuration
OPTIONS:
--help, -h show help
```
If there is no `$ABRA_DIR/config.yml` or `sync: false`, nothing changes. When `sync: true`, *only* the `abra app deploy / upgrade / rollback` commands have new behaviour.
There is also a new command `abra app sync <domain>` which triggers a synchronisation.
When `abra app deploy/upgrade/rollback/sync` is run, here's what we do:
* Read the `OPERATOR_SYNC_VERSION` env var as the version to deploy / upgrade from / rollback from
* upgrade: if deployed version does not match `OPERATOR_SYNC_VERSION`, warn before overview
* rollback: same as above!
* Run the deployment
* if successful, record a new `OPERATOR_SYNC_VERSION`
* if unsuccessful, do not record a `OPERATOR_SYNC_VERSION` and ask operator to resolve
If `--chaos` is passed, we use the short commit hash instead of the version label.
Here's an example of the `OPERATOR_SYNC_VERSION` env var:
```
# in ~/.abra/servers/example.com/matrix.example.com.env
TYPE=matrix-synapse
OPERATOR_SYNC_VERSION=4.0.0+v1.93.0 # managed by Abra
```
Operator documentation will also be provided.
**Budget amount**: 200 EUR (10 hrs * 20 EUR/hr)
**Who will implement this**: (someone?)
**When will the money be spent**: Before mid-February 2024
**What is the money for**: Implementing the first steps of operator sync.

View File

@ -0,0 +1,48 @@
---
title: "Resolution 016"
---
- Topic: Budget 008: Backup-bot-two Documentation and Specification
- Date: 27-01-2024
- Deadline: 10th February 2024
- Size: Large
### Summary
> (Co-written by p4u1 & d1)
The new backup-bot-two implementation is nearly finished. The only remaining step is to implement restore functionality. In a recently meeting with Moritz, p4u1 & d1, we discussed how to design and implement it. The mintues are [here](https://pad.riseup.net/p/UEC2JUPGb6tmRCZ7RX9X-keep).
In this meeting, we realised that there is already a lot of implicit, undocumented knowledge about how backup-bot-two & abra work together. How the restore interface will work is more or less designed in the meeting, with general agreement.
In order to communicate that design, we feel we need to have clear documentation and a specification on how things work. This will make sure we have consensus before commiting more budget to implementing the final step. It will also help operators pick up, use & extend backup-bot-two in the future.
In this resolution, we want to propose to write the initial documentation and specification for the new [backup-bot-two](https://git.coopcloud.tech/coop-cloud/backup-bot-two/).
The existing documentation for the old backupbot should be taken into account wherever possible.
### Details (Budget 008)
Documentation should be for:
- Operators using the backup-bot-two
- Maintainers of recipes
The documentation should have:
- Examples on using Abra with the backupbot
- Examples of recipe configurations
- Detailed explanation of features and their limitations
The Specification should include:
- Detailed specification on how annotations work
- With the specification it should be possible to implement backup and restore
without looking at the backupbot-two code
---
- Budget amount: 200 EUR (10 hrs * 20 EUR/hr)
- Who will implement this: p4u1
- When will the money be spent: Before the end of February
- What is the money for: Writing documentation and specification for backup-bot-two

View File

@ -0,0 +1,21 @@
---
title: "Resolution 017"
---
- Topic: BeWater joins the Co-op Cloud Federation
- Date: 30-01-2024
- Deadline: 21-02-2024
- Size: Large
### Summary
[BeWater Co-op](https://bewater.contact).
`@decentral1se` is a member and has been active in Abra hacking & coordination
on several issues. BeWater maintains several small-scale Co-op Cloud
deployments.
### Details
BeWater is just starting and we're currently unable to pay the membership fees
at this time and ask for a waiver for 1 year. To be revisited on 30-01-2025.

View File

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

View File

@ -4,15 +4,21 @@ title: Resolutions
### Resolution Template
```javascript
## Resolution <number>: <title> - <date>
``` yaml
---
title: Resolution <number>
---
- Topic: <title>
- Date: 13-12-2023
- Deadline: Date
- Size: large or medium
### Summary
Who this affects, and what it does
Who this affects, and what it does...
### Details
A narrative with details
A narrative with details...
```

View File

@ -1,7 +1,9 @@
---
title: "Proposal 001: Decision Making Process - 2023-03-03"
title: "Resolution 001"
---
- Topic: Decision Making Process
- Date: 2023-03-03
- Deadline: 2023-03-03 (live voting)
- Size: large

View File

@ -1,7 +1,9 @@
---
title: "Resolution 002: Membership/Dues - 2023-03-22"
title: "Resolution 002"
---
* Topic: Membership/Dues
* Date: 2023-03-22
* Deadline: 2023-04-11
* Passed on 2023-04-13
* Size: Large

View File

@ -1,7 +1,9 @@
---
title: "Resolution 003: Paid work - 2023-03-22"
title: "Resolution 003"
---
* Topic: Paid work
* Date: 2023-03-22
* Deadline: 2023-04-11
* Passed on 2023-04-13
* Size: Large

View File

@ -1,7 +1,9 @@
---
title: "Resolution 004: Budget 001: Budgeting - 2023-03-22"
title: "Resolution 004"
---
* Topic: Budget 001: Budgeting
* Date: 2023-03-22
* Deadline: 2023-04-11
* Passed on 2023-04-13
* Size: Large

View File

@ -1,7 +1,9 @@
---
title: "Resolution 005: Public federation membership, notes and decisions - 2023-04-14"
title: "Resolution 005"
---
* Topic: Public federation membership, notes and decisions
* Date: 2023-04-14
* Deadline: 2023-04-17
* Passed: 2023-04-18
* Size: medium

View File

@ -1,9 +1,9 @@
---
title: "Resolution 006: Budget 002: Resolution Writing-up - 2023-05-29"
title: "Resolution 006"
---
# Resolution 006: Budget 002: Resolution Writing-up - 2023-05-29
- Budget 002: Resolution Writing-up
- Date: 2023-05-29
- Deadline: 2022-06-12
- Size: Large

View File

@ -1,7 +1,9 @@
---
title: "Resolution 007: 1 year dues waiver for Doop.coop - 2023-06-19"
title: "Resolution 007"
---
- Topic: 1 year dues waiver for Doop.coop
- Date: 2023-06-19
- Deadline: 2023-07-03
- Size: Medium

View File

@ -1,7 +1,9 @@
---
title: "Resolution 008: Budget 003: Paying invoices - 2023-06-19"
title: "Resolution 008"
---
- Topic: Budget 003 Paying invoices
- Date: 2023-06-19
- Deadline: 2022-07-03
- Size: Large

View File

@ -1,9 +1,9 @@
---
title: "Resolution 009: Federation common fund buffer - 2023-07-03"
title: "Resolution 009"
---
## Resolution 009: Federation common fund buffer - 2023-07-03
- Topic: Federation common fund buffer
- Date: 2023-07-03
- Deadline: 2023-07-17
- Size: Large

View File

@ -1,9 +1,9 @@
---
title: "Resolution 010: Budget 004: Critical fixes - 2023-07-03"
title: "Resolution 010"
---
## Resolution 010: Budget 004: Critical fixes - 2023-07-03
- Topic: Budget 004: Critical fixes
- Date: 2023-07-03
- Deadline: 2023-07-17
- Size: Large

View File

@ -1,7 +1,9 @@
---
title: "Resolution 011: Budget 005: Backup improvements - 2023-07-23"
title: "Resolution 011"
---
- Topic: Budget 005: Backup improvements
- Date: 2023-07-23
- Deadline: 2022-08-06
- Size: Large

View File

@ -1,7 +1,9 @@
---
title: "Resolution 012: Budget 006: Abra integration test suite - 2023-09-09"
title: "Resolution 012"
---
- Budget 006: Abra integration test suite
- Date: 2023-09-09
- Deadline: 2023-09-23
- Size: Large

View File

@ -0,0 +1,45 @@
---
title: "Resolution 014"
---
- Topic: Budget 008: Critical Fixes
- Date: 2023-12-06
- Deadline: 2023-12-24
- Size: Large
## Summary
We (decentral1se, wykwit, moritz, knoflook) have identified bugs and lacking features that are a big obstacle to using abra.
We have roughly estimated the work to fix the bugs to take between 27 and 75 hours. We would also like to request onboarding budget for two new developers to smoothly get started on the bug fixes (10 hours per person).
We'd like to request no more than 1900€ of budget to cover the labor and onboarding. If less than 95 hours is spent, the remaining budget will not be paid out.
## Details
estimating: small (1-3 hours), medium (3-8 hours), large (8-15 hours) & order is priority.
| NAME | estimation |
| ---- | ----- |
| [#535 Comment parsing and modifiers](https://git.coopcloud.tech/coop-cloud/organising/issues/535) | Large |
| [#519 abra app new `[<recipe>]` `[<version>]`](https://git.coopcloud.tech/coop-cloud/organising/issues/519) | Medium |
| [#518 Abra fails silently if required image doesn't exist](https://git.coopcloud.tech/coop-cloud/organising/issues/518) | Medium |
| [#527 abra catalogue generate `<recipe name>` ignores the specified recipe](https://git.coopcloud.tech/coop-cloud/organising/issues/527) | Small |
| [#509 abra app remove could wait until volume is not in use](https://git.coopcloud.tech/coop-cloud/organising/issues/509) | Medium |
| [#530 abra recipe fetch can only fetch a single recipe](https://git.coopcloud.tech/coop-cloud/organising/issues/530) | Medium |
| [#525 prevent abra app cp from applying file permissions.](https://git.coopcloud.tech/coop-cloud/organising/issues/525) | Medium |
| [#537 Fix the operators tutorial](https://git.coopcloud.tech/coop-cloud/organising/issues/537) | Medium |
Estimation: best case: (8 * 1) + (3 * 6) + (1 * 1) = 27 hours
Estimation: worst case: (15 * 1) + (8 * 6) + (1 * 3) = 73 hours
+ 10 hours for onboarding * 2 people = 47-93 hours
**Budget amount**: 1900€/95 hours at maximum
**Who will implement this:** p4u1, wykwit, moritz, knoflook
**When will the money be spent:** Before the end of February 2024.
**What is the money for:** Fixing bugs and improving operator docs.

View File

@ -0,0 +1,21 @@
---
title: "Resolution 015"
---
- Topic: Klasse & Methode joins the Co-op Cloud Federation
- Date: 25-01-2024
- Deadline: 08-02-2024
- Size: Large
### Summary
[Klasse & Methode - IT Kollektiv Stuttgart](https://codeberg.org/Klasse-Methode).
`@p4u1` has been active in Abra hacking & coordination on several issues. K & M
manage a Co-op Cloud deployment with 9 apps running at the time of the
proposal.
### Details
K & M is volunteer based and are unable to pay the membership fees at this time
and ask for a waiver for 1 year. To be revisited on 25-01-2025.

View File

@ -0,0 +1,25 @@
---
title: "Support Us"
---
If you like what you see whilst browsing Co-op Cloud and would like to
contribute financially, as opposed to with code, we currently receive donations
via an [Open Collective account](https://opencollective.com/coop-cloud).
<div class="grid cards" markdown>
- __Infrastructure Support__
If you make use of our digital infrastructure and want to help out with
maintenance costs, we wold be grateful :heart:
[Donate Now](https://opencollective.com/coop-cloud/contribute/infrastructure-sustainability-29878/checkout){ .md-button .md-button--primary }
- __Join The Federation__
If you want to be more actively involved as a supporter, consider joining
our Federation :handshake_tone2:
[Learn More](/federation/){ .md-button .md-button--primary }
</div>

180
docs/intro/comparisons.md Normal file
View File

@ -0,0 +1,180 @@
---
title: Comparisons
---
We think it's important to understand that *Co-op Cloud* is more than just
software and technical configurations. It is also a novel organization of *how*
to [create technology socially](https://docs.coopcloud.tech/federation).
However, strictly technically speaking you may be wondering:
### What about `$alternative`?
We have various technical critiques of other similar projects which are already up-and-running in the ecosystem, as they don't necessarily meet our needs as a small tech co-op. However, Co-op Cloud isn't meant to be a replacement for these other projects.
Here is a short overview of the pros/cons we see, in relation to our goals and needs.
### Cloudron
[Cloudron](https://www.cloudron.io) is complete solution for running apps on your own server
**Pros**
- 👍 Decent web interface for app, domain & user management.
- 👍 Large library of apps.
- 👍 Built-in SSO using LDAP, which is compatible with more apps and often has a better user interface than OAuth.
- 👍 Apps are actively maintained by the Cloudron team.
**Cons**
- 👎 Moving away from open source. The core is now proprietary software.
- 👎 Libre tier has a single app limit.
- 👎 Based on Docker images, not stacks, so multi-process apps (e.g. parsoid visual editor for Mediawiki) are a non-starter.
- 👎 Difficult to extend apps.
- 👎 Only supported on Ubuntu LTS.
- 👎 Upstream libre software communities aren't involved in packaging.
- 👎 Limited to vertical scaling.
- 👎 Tension between needs of hosting provider and non-technical user.
- 👎 LDAP introduces security problems - one vulnerable app can expose a user's password for all apps.
- 👎 Bit of a [black box](https://en.wikipedia.org/wiki/Black_box).
### YunoHost
[YunoHost](https://yunohost.org) is an operating system aiming for the simplest administration of a server
**Pros**
- 👍 Lovely web interface for app, domain & user management.
- 👍 Bigger library of apps.
- 👍 Awesome backup / deploy / restore continuous integration testing.
- 👍 Supports hosting apps in subdirectories as well as subdomains.
- 👍 Doesn't require a public-facing IP.
- 👍 Supports system-wide mutualisation of resources for apps (e.g. sharing databases by default)
**Cons**
- 👎 Upstream libre software communities aren't involved in packaging.
- 👎 Uninstalling apps leaves growing cruft.
- 👎 Limited to vertical scaling.
- 👎 Not intended for use by hosting providers.
### Caprover
[CapRover](https://caprover.com) is an easy to use app/database deployment & web server manager for applications
**Pros**
- 👍 Bigger library of apps.
- 👍 Easy set-up using a DigitalOcean one-click app.
- 👍 Works without a domain name or a public IP, in non-HTTPS mode (good for homeservers).
- 👍 Deploy any app with a `docker-compose.yml` file as a "One Click App" via the web interface.
- 👍 Multi-node (multi-server) set-up works by default.
**Cons**
- 👎 Single-file app definition format, difficult to tweak using entrypoint scripts.
- 👎 Nginx instead of Traefik for load-balancing.
- 👎 Command-line client requires NodeJS / `npm`.
- 👎 [Requires 512MB RAM for a single app](https://github.com/caprover/caprover/issues/28).
- 👎 [Backup/restore is "experimental"](https://caprover.com/docs/backup-and-restore.html), and doesn't currently help with backing up Docker volumes.
- 👎 Exposes its bespoke management interface to the internet via HTTPS by default.
### Ansible
[Ansible](https://www.ansible.com) mature automation and deployment tool.
**Pros**
- 👍 Includes server creation and bootstrapping.
**Cons**
- 👎 Upstream libre software communities aren't publishing Ansible roles.
- 👎 Lots of manual work involved in things like app isolation, backups, updates.
### Kubernetes
[Kubernetes](https://kubernetes.io) (or K8s) is a system for automating deployment, scaling, and
management of containerized applications.
**Pros**
- 👍 Helm charts are available for some key apps already.
- 👍 Scale all the things.
**Cons**
- 👎 Too big -- requires 3rd party tools to run a single-node instance.
- 👎 Not suitable for a small to mid size hosting provider.
### Docker-compose
[Docker Compose](https://docs.docker.com/compose/) is a tool for defining and running multi-container applications.
**Pros**
- 👍 Quick to set up and familiar for many developers.
**Cons**
- 👎 Manual work required for process monitoring.
- 👎 Secret storage not available yet.
- 👎 Swarm is the new best practice.
### Doing it Manually (Old School)
If you are an absolute Shaman in a Shell and learning new gadgets just slows you down,
have it, but maybe ask how old [is old enough](https://en.wikipedia.org/wiki/Printing_press)?
**Pros**
- 👍 Simple - just follow upstream instructions to install and update.
**Cons**
- 👎 Loads of manual work required for app isolation and backups.
- 👎 Array of sysadmin skills required to install and maintain apps.
- 👎 Hard to share configurations into the commons.
- 👎 No idea who has done what change when.
### Stackspin
[Stackspin](https://www.stackspin.net) deployment and management stack for a
handful of popular team collaboration apps.
**Pros**
- 👍 Easy instructions to install & upgrade multiple tightly integrated apps.
- 👍 Offers a unified SSO user experience.
- 👍 Offers tightly integrated logging, monitoring, and maintenance.
- 👍 Has a strong focus and attention to security.
**Cons**
- 👎 Upstream libre software communities aren't involved in packaging.
- 👎 It is not designed to be a general specification.
- 👎 Hard to share configurations into the commons.
- 👎 Significantly limited library of eight apps.
- 👎 Additional apps are treated as "External Apps" with only OAuth2/OpenID integration.
- 👎 Requires a Kubernetes cluster.
### Maadix
[Maadix](https://maadix.net) managed hosting and deployment of popular privacy preserving applications.
**Pros**
- 👍 Nice looking web interface for app, domain & user management.
- 👍 Offers a paid hosting service to get up and running easily.
**Cons**
- 👎 Upstream libre software communities aren't involved in packaging.
- 👎 It is not designed to be a general specification.
- 👎 Hard to share configurations into the commons.
- 👎 Limited library of apps.
- 👎 Uses *OpenNebula*, *Ansible*, and *Puppet* as underlying technologies.
- 👎 Appears to be only a team of two people.
- 👎 Appears to be inactive on Mastodon and limited GitLab activity.

View File

@ -2,16 +2,33 @@
title: Get in touch
---
## Email
We welcome developers, sys-admins, designers, UX folks, Q&A testers, and passionate users to join us.
Pick the right medium for your interests.
[`helo@coopcloud.tech`](mailto:helo@coopcloud.tech)
<div class="grid cards" markdown>
## Chat
- __Chat__
### Matrix
[Matrix](https://matrix.org) is our chat platform of choice, we are happy to hear from you there :speech_left:
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.
[Join Chats](https://matrix.to/#/!xSMwGbdVehScXcIFwS:autonomic.zone?via=autonomic.zone&via=matrix.org&via=1312.media){ .md-button .md-button--primary }
## Forum
- __Codebases__
[`community.coops.tech`](https://community.coops.tech/)
Get straight to looking at our code or filing issues, hop to our Gitea instance :sunglasses:
[Browse Code](https://git.coopcloud.tech/coop-cloud){ .md-button .md-button--primary }
- __Forum__
If you prefer communicating asynchronously with topical categories :tropical_drink:
[Our Forum](https://community.coops.tech/){ .md-button .md-button--primary }
- __Email__
If you like it old school, feel free to fire up port 25 and send us a `HELO` message :email:
[Email Us](mailto:helo@coopcloud.tech){ .md-button .md-button--primary }
</div>

View File

@ -8,7 +8,12 @@ Co-op Cloud aims to make hosting libre software apps simple for small service pr
## Who is behind the project?
The project was started by workers at [Autonomic](https://autonomic.zone/) which is a [worker-owned co-operative](https://en.wikipedia.org/wiki/Worker_cooperative). We provide technologies and infrastructure to empower users to make a positive impact on the world. We're using Co-op Cloud in production, amongst other systems.
The project was started by workers at [Autonomic](https://autonomic.zone/) which
is a [worker-owned co-operative](https://en.wikipedia.org/wiki/Worker_cooperative) who provides
technologies and infrastructure to empower users to make a positive impact on
the world. Numerous other like minded co-ops have since joined our
[Federation](/federation/) and rely *Co-op Cloud* in production.
## Why Co-op Cloud?
@ -32,126 +37,14 @@ The project was started by workers at [Autonomic](https://autonomic.zone/) which
## Why start another project?
We think our carefully chosen blend of technologies and our [social approach](/federation/) is quite unique in today's technology landscape.
Please read our [initial project announcement post](https://autonomic.zone/blog/co-op-cloud/) for more on this.
Also see our [strategy page](../strategy/).
## How do I make a recipe for (package) an app?
See ["Package your first recipe"](/maintainers/tutorial/#package-your-first-recipe) for more.
Head on over to **Maintainers** section and see ["Package your first recipe"](/maintainers/tutorial/#package-your-first-recipe) for more.
## What about `$alternative`?
We have various technical critiques of other similar projects which are already up-and-running in the ecosystem, as they don't necessarily meet our needs as a small tech co-op. However, Co-op Cloud isn't meant to be a replacement for these other projects.
Here is a short overview of the pros/cons we see, in relation to our goals and needs.
### Cloudron
#### Pros
- 👍 Decent web interface for app, domain & user management.
- 👍 Large library of apps.
- 👍 Built-in SSO using LDAP, which is compatible with more apps and often has a better user interface than OAuth.
- 👍 Apps are actively maintained by the Cloudron team.
#### Cons
- 👎 Moving away from open source. The core is now proprietary software.
- 👎 Libre tier has a single app limit.
- 👎 Based on Docker images, not stacks, so multi-process apps (e.g. parsoid visual editor for Mediawiki) are a non-starter.
- 👎 Difficult to extend apps.
- 👎 Only supported on Ubuntu LTS.
- 👎 Upstream libre software communities aren't involved in packaging.
- 👎 Limited to vertical scaling.
- 👎 Tension between needs of hosting provider and non-technical user.
- 👎 LDAP introduces security problems - one vulnerable app can expose a user's password for all apps.
- 👎 Bit of a [black box](https://en.wikipedia.org/wiki/Black_box).
### YunoHost
#### Pros
- 👍 Lovely web interface for app, domain & user management.
- 👍 Bigger library of apps.
- 👍 Awesome backup / deploy / restore continuous integration testing.
- 👍 Supports hosting apps in subdirectories as well as subdomains.
- 👍 Doesn't require a public-facing IP.
- 👍 Supports system-wide mutualisation of resources for apps (e.g. sharing databases by default)
#### Cons
- 👎 Upstream libre software communities aren't involved in packaging.
- 👎 Uninstalling apps leaves growing cruft.
- 👎 Limited to vertical scaling.
- 👎 Not intended for use by hosting providers.
### Caprover
#### Pros
- 👍 Bigger library of apps.
- 👍 Easy set-up using a DigitalOcean one-click app.
- 👍 Works without a domain name or a public IP, in non-HTTPS mode (good for homeservers).
- 👍 Deploy any app with a `docker-compose.yml` file as a "One Click App" via the web interface.
- 👍 Multi-node (multi-server) set-up works by default.
#### Cons
- 👎 Single-file app definition format, difficult to tweak using entrypoint scripts.
- 👎 Nginx instead of Traefik for load-balancing.
- 👎 Command-line client requires NodeJS / `npm`.
- 👎 [Requires 512MB RAM for a single app](https://github.com/caprover/caprover/issues/28).
- 👎 [Backup/restore is "experimental"](https://caprover.com/docs/backup-and-restore.html), and doesn't currently help with backing up Docker volumes.
- 👎 Exposes its bespoke management interface to the internet via HTTPS by default.
### Ansible
#### Pros
- 👍 Includes server creation and bootstrapping.
#### Cons
- 👎 Upstream libre software communities aren't publishing Ansible roles.
- 👎 Lots of manual work involved in things like app isolation, backups, updates.
### Kubernetes
#### Pros
- 👍 Helm charts are available for some key apps already.
- 👍 Scale all the things.
#### Cons
- 👎 Too big -- requires 3rd party tools to run a single-node instance.
- 👎 Not suitable for a small to mid size hosting provider.
### Docker-compose
#### Pros
- 👍 Quick to set up and familiar for many developers.
#### Cons
- 👎 Manual work required for process monitoring.
- 👎 Secret storage not available yet.
- 👎 [Swarm is the new best practice](https://github.com/BretFisher/ama/issues/8#issuecomment-367575011).
### Doing it Manually (Old School)
#### Pros
- 👍 Simple - just follow upstream instructions to install and update.
#### Cons
- 👎 Loads of manual work required for app isolation and backups.
- 👎 Array of sysadmin skills required to install and maintain apps.
- 👎 Hard to share configurations into the commons.
- 👎 No idea who has done what change when.
## Which technologies are used?
@ -214,13 +107,28 @@ We are happy to see the compose specification emerging as a new open standard be
## Why Docker Swarm?
While many have noted that "swarm is dead" it is in fact [not dead](https://www.mirantis.com/blog/mirantis-will-continue-to-support-and-develop-docker-swarm/). As detailed in the [architecture overview](/operators/tutorial/#container-orchestrator), swarm offers an appropriate feature set which allows us to support zero-down time upgrades, seamless app rollbacks, automatic deploy failure handling, scaling, hybrid cloud setups and maintain a decentralised design.
While many have noted that "swarm is dead" it is in fact [not dead](https://www.mirantis.com/blog/mirantis-will-continue-to-support-and-develop-docker-swarm/) (2020). As detailed in the [architecture overview](/intro/strategy/#container-orchestrator), *Swarm* offers an appropriate feature set which allows us to support zero-down time upgrades, seamless app rollbacks, automatic deploy failure handling, scaling, hybrid cloud setups and maintain a decentralised design.
While the industry is bordering on a [k8s](https://kubernetes.io/) obsession and the need to [scale down](https://microk8s.io/) a tool that was fundamentally built for massive scale, we are going with swarm because it is the tool most suitable for [small technology](https://small-tech.org/).
While the industry is bordering on a [k8s](https://kubernetes.io/) obsession and the need to [scale down](https://microk8s.io/) a tool that was fundamentally built for massive scale, we are going with *Swarm* because it is the tool most suitable for [small technology](https://small-tech.org/).
The _Co-op Cloud Communitys_ forecast at the start of 2024 for the future of *Docker Swarm* is positive after five years after *Mirantiss* acquisition of Docker Enterprise
in 2018. Since then, their strategy has developed towards using *Docker Swarm* as an intermediary step between Docker/Docker-Compose, and *Kubernetes* where
previously it seemed like their aim was to migrate all their customers [deployments to Kubernetes](https://www.mirantis.com/blog/kubernetes-vs-swarm-these-companies-use-both) (Oct, 2022).
*Mirantis* acquired Docker Enterprise in 2019 and today delivers enterprise-grade Swarm—either as a managed service or with enterprise support through Mirantis Kubernetes Engine.
There is reasonably healthy activity in their issue tracker with label [`area/swarm`](https://github.com/moby/moby/issues?q=+label%3Aarea%2Fswarm+).
Additionally, we see it as reassuring that *Mirantis* has a growing number of pages relating to *Docker Swarm*:
- [Mirantis' Product Page](https://www.mirantis.com/software/swarm/)
- [What's next for Swarm: New features, the same world-class support](https://www.mirantis.com/blog/what-s-next-for-swarm) (Oct, 2022)
- [Docker Swarm Still Thriving Three Years after Mirantis Acquisition](https://www.mirantis.com/company/press-center/company-news/docker-swarm-still-thriving-three-years-after-mirantis-acquisition-often-running-side-by-side-with-kubernetes/) (Nov, 2022)
Lastly, its worth mentioning that much of the configuration involved in setting up *Docker Swarm*, particularly in terms of preparing images, and in managing the conceptual side, are transferable to other orchestration engines.
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.
See also this list of [`awesome-swarm`](https://github.com/BretFisher/awesome-swarm) by Bret Fisher.
## What licensing model do you use?

View File

@ -1,19 +1,105 @@
---
title: Project strategy
title: Project Strategy
---
!!! note "Yes, we are blog"
From our experiences working and organising as Autonomic, the tech co-op who [initiated Co-op Cloud](https://autonomic.zone/blog/co-op-cloud/), we know that the progressive tech movement lack reliable and cost-effective technical means for providing a sustainable alternative to _Big Tech_© services which are marketed as "[cloud computing](https://en.wikipedia.org/wiki/Cloud_computing)".
Some leading thoughts are outlined in the [project launch blog post](https://autonomic.zone/blog/co-op-cloud/) also.
From our experiences working and organising as Autonomic, the tech co-op who initiated Co-op Cloud, we know that the progressive tech movement lack reliable and cost-effective technical means for providing an alternative to “Big Tech” cloud services.
## Technological Saviors?
The urgency for providing an alternative comes out of the understanding that the concentration of our digital lives within the private sphere of corporate providers (e.g. [GAFAM](https://degooglisons-internet.org/en/)) represents a loss of freedom due to the threat to our privacy and self-determination through surveillance and monopolisation.
As a movement, we cannot compete with corporate providers in terms of cost and scale. Their network effects and available capital means that no one project, product or organisation can create the required shift to a more widespread public interest technology.
Technology alone will not save us. Simply deploying libre software is not enough.
> Technology alone will not save us
>
> Simply deploying libre software is not enough.
Our strategy is to mutualise our resources to facilitate this shift. Co-op Cloud is an attempt to create a new shared resource - an open and democratically managed, open standards based, copyleft licensed, libre software infrastructure project.
Our strategy is to mutualise our resources to facilitate this shift. _Co-op Cloud_ is an attempt to create a new shared resource - an open and democratically managed, open standards based, copyleft licensed, libre software infrastructure project.
From this base, we can focus on the urgent and necessary social organising work that goes beyond the technical question.
## The Moving Parts
_Co-op Cloud_ is made up of a few simple, composable pieces. The system does not rely on any one specific implementation: each part may be replaced and/or extended as needed. We want to build a resilient and long-term sustainable project and that means allowing for different implementations, open formats and a diverse project organisation. Here are the main technical concepts listed below,
``` mermaid
graph LR
A[Libre Software\n Apps] --> B{Recipe Packaging};
B --> C[CLI Tool];
C --> D[Container\n Orchestrator];
```
Once you [grok](https://en.wikipedia.org/wiki/Grok) this, you grok the moving parts of the entire project. You can then move on to [deploying your first app](/operators/tutorial/#deploy-your-first-app).
### Libre Software Apps
Libre software apps are tools- they take the shape of websites, mobile apps, and software clients that you may already use in your daily life, for example...
<div class="grid cards" markdown>
- :simple-nextcloud: __Nextcloud__
- :simple-jitsi: __Jitsi__
- :simple-wikimediacommons: __Mediawiki__
- :fontawesome-solid-rocket: __Rocket.chat__
</div>
...and many more. These apps are also often referred to as _open-Source_ or _Free-Software_. These are tools that are created by volunteer communities who use [free software licenses] in order to build up the public software commons and offer more digital alternatives to [proprietary systems].
The communities who develop these softwares also publish them using [containers]. For example, here is the [Nextcloud hub.docker.com account] which allows end-users to quickly deploy a new Nextcloud instance.
There is a growing consensus in the free software community that containers are a useful and time saving format for distribution.
!!! question "Why did you choose to use containers?"
Learn more [in the FAQ section](/intro/faq/#why-containers).
[free software licenses]: https://www.gnu.org/philosophy/free-sw.html
[nextcloud hub.docker.com account]: https://hub.docker.com/_/nextcloud
[proprietary systems]: https://en.wikipedia.org/wiki/Proprietary_software
[containers]: https://www.docker.com/resources/what-container
### Recipe Packaging Format
However, just having a container of an app is often not enough. The work required to deploy that app in a "production ready" setup is still too time intensive and often involves a duplication of effort.
Each service provider needs to deal with the same problems: stable versioning, backup plan, secret management, upgrade plan, monitoring and the list goes on.
Individual free software projects can't take on all this responsibility. They provide the containers as is, in a secure and ready-to-go manner but it is up to service providers to worry about how the app is deployed.
Therefore, Co-op Cloud proposes a packaging format, which we refer to as a recipe, that describes the entire production state of the app in a single place. This format uses the existing [standards based compose specification].
This is a file format which is most commonly used by the [Docker compose] tool but Co-op Cloud **does not** require the use of Docker compose itself. Furthermore, as described below, we also don't rely on the actual Docker CLI itself either. We do however use a lot of the underlying libraries.
!!! question "Why did you choose to use the compose specificiation?"
Learn more [in the FAQ section](/intro/faq/#why-use-the-compose-specification).
[Each recipe] that Co-op cloud provides is described using the compose specification and makes use of the upstream project published container when possible (sometimes they don't publish one!).
This is the core of our approach to working with the ecosystem of free software communities. We want to maximise the chances of sharing work, knowledge and build solidarity through concrete co-operation.
[standards based compose specification]: https://compose-spec.io
[docker compose]: https://docs.docker.com/compose/
[each recipe]: /recipes/
### Container Orchestrator
Once we have our app packaged as a recipe, we need a deployment environment (e.g. a server & something to keep the containers running). Production deployments are typically expected to support a number of features which give hosters and end-users guarantees for stability.
The Co-op cloud makes use of [Docker swarm] as a deployment environment. It offers an approriate feature set which allows us to support zero-down time upgrades, seamless app rollbacks, automatic deploy failure handling, scaling, hybrid cloud setups and maintain a decentralised design.
!!! question "Why did you choose to use Docker Swarm?"
Learn more [in the FAQ section](/intro/faq/#why-docker-swarm).
[docker swarm]: https://docs.docker.com/engine/swarm/
### Command-line tool
Finally, we need a tool to read the recipe package format and actually deploy the app. For this, we have developed and published the [abra] command-line tool.
`abra` aims at providing a simple command-line interface for managing your own Co-op Cloud. You can bootstrap machines with the required tools, create new apps and deploy them. `abra` is written in [Go](https://go.dev/) and uses a lot of the libraries that the `docker` and `docker-compose` CLIs use but does not rely on those interfaces directly.
`abra` is our flagship command-line client but it does not need to be the only client. `abra` was designed in such a way that it complements a workflow which can still be done completely manually. If Co-op Cloud goes away tomorrow, our configuration commons would still be useful and usable.
[abra]: /abra/

View File

@ -27,7 +27,7 @@ This is a [compose specification](https://compose-spec.io/) compliant file that
### `.env.sample`
This file is a skeleton for environmental variables that should be adjusted by the user. Examples include: domain or php extention list. Whenever you create a new app with `abra app new` this file gets copied to the `~/.abra/servers/<server-domain>/<app-domain>.env` and when you run `abra app config <app-domain>` you're editing this file.
This file is a skeleton for environmental variables that should be adjusted by the user. Examples include: domain or PHP extension list. Whenever you create a new app with `abra app new` this file gets copied to the `~/.abra/servers/<server-domain>/<app-domain>.env` and when you run `abra app config <app-domain>` you're editing this file.
### `abra.sh`
@ -396,6 +396,8 @@ mkdir -p releases
And then create a text file which corresponds to the version release, e.g. `1.1.0+5.9.0` and write some notes. `abra` will show these when another operator runs `abra app deploy` / `abra app upgrade`.
You can also add release notes for the next release into a special file `releases/next`. This file will be used when running `abra recipe release`.
## How do I generate the recipe catalogue
To generate an entire new copy of the catalogue:
@ -425,6 +427,34 @@ You can pass `--publish` to have `abra` automatically publish those changes.
In order to have `abra` publish changes for you automatically, you'll have to have write permissons to the git.coopcloud.tech repository and your account must have a working SSH key configuration. `abra` will use the SSH based URL connection details for Git by automagically creating an `origin-ssh` remote in the repository and pushing to it.
## How is I make the catalogue automatically regenerate after new versions are published?
"I'd like to make it so that whenever I push a new git tag to the
[`coop-cloud/rallly` repository](https://git.coopcloud.tech/coop-cloud/rallly)
(probably [using `abra recipe
release`](#how-do-i-release-a-new-recipe-version)), it automatically does the
[recipe catalogue generation steps](#how-do-i-generate-the-recipe-catalogue)"
1. Check whether tag builds are already trying to run: go to
https://build.coopcloud.tech, search for the recipe name (in this case taking
you to https://build.coopcloud.tech/coop-cloud/rallly/settings). If there are
failing builds, or if you see builds succeeding but catalogue regeneration
doesn't seem to be happening, then either dive in and try and fix it, or ask
for help in [`#coopcloud-tech`](https://matrix.to/#/#coopcloud-tech:autonomic.zone)
2. Otherwise, click "activate repository". You probably want to set the "disable pull
requests" and "disable forks" options; they won't work anyway, but the
failures might be confusing.
3. Make sure there is a `generate recipe catalogue` step in the recipe's
`.drone.yml` -- if there isn't, you can copy [the one from
`coop-cloud/rallly`](https://git.coopcloud.tech/coop-cloud/rallly/src/branch/main/.drone.yml#L24-L38) unchanged.
4. That's it! Now, when you push a new tag, the recipe catalogue will regenerate
automatically. You can test this by re-pushing a tag (e.g. `git push origin
:0.5.0+3.5.1 && git push 0.5.0+3.5.1`)
## How does automatic catalogue regeneration work?
TODO
## How do I enable healthchecks
A healthcheck is an important and often overlooked part of the recipe configuration. It is part of the configuration that the runtime uses to figure out if a container is really up-and-running. You can tweak what command to run, how often and how many times to try until you assume the container is not up.

View File

@ -1,8 +1,23 @@
---
title: Maintainers guide
title: Maintainers
---
Welcome to the maintainers guide! Maintainers are typically individuals who have a stake in building up and maintaining our digital configuration commons, the recipe configurations. Maintainers help keep recipes configurations up to date, respond to issues in a timely manner, help new users within the community and recruit new maintainers when possible.
- [New maintainers tutorial](/maintainers/tutorial): If you want to package a recipe and/or become a maintainer, start here :rocket:
- [Packaging handbook](/maintainers/handbook): One-stop shop for all you need to know to package recipes :package:
<div class="grid cards" markdown>
- __New Maintainers Tutorial__
If you want to package a recipe and/or become a maintainer, start here :rocket:
[Get Started](/maintainers/tutorial){ .md-button .md-button--primary }
- __Packaging Handbook__
One-stop shop for all you need to know to package recipes :package:
[Read Handbook](/maintainers/handbook){ .md-button .md-button--primary }
</div>
Maintainers are encouraged to submit documentation patches! Sharing is caring :sparkling_heart:

View File

@ -16,10 +16,10 @@ Depending on your familiarity with recipes, it might be worth reading [how a rec
The ideal scenario is when the upstream project provides both the packaged image and a compose configuration which we can build from. If you're in luck, you'll typically find a `Dockerfile` and a `docker-compose.yml` file in the root of the upstream Git repository for the app.
- **Tired**: Write your own image and compose file from scratch
- **Wired**: Use someone else's image (& maybe compose file)
- **Inspired**: Upstream image, someone else's compose file
- **On fire**: Upstream image, upstream compose file
- **Tired**: Write your own image and compose file from scratch :sleeping:
- **Wired**: Use someone else's image (& maybe compose file) :smirk_cat:
- **Inspired**: Upstream image, someone else's compose file :exploding_head:
- **On fire**: Upstream image, upstream compose file :fire:
### Writing / adapting the `compose.yml`

View File

@ -1,5 +1,5 @@
---
title: Operations handbook
title: Operators Handbook
---
## Understanding `~/.abra`
@ -205,18 +205,6 @@ At time of writing (Jan 2022), we think there is a limitation in our design whic
This may be possible to overcome if someone really needs it, we encourage people to investigate. We've found that often there are limitations in the actual software which don't support this anyway and several of the current operators simply use a new domain per app.
## Validating `abra` binary checksums
You can download `abra` yourself from the [releases page](https://git.coopcloud.tech/coop-cloud/abra/releases) along with the `checksums.txt` file.
```bash
grep $(sha256sum abra_[version]_[platform]) checksums.txt > /dev/null && echo "checksum OK"
```
If "checksum OK" appears in your terminal - you're good to go!
Otherwise, you have downloaded a corrupted file.
## Creating a new server
`abra server new` can create servers if you have an account with a supported 3rd party integration. We currently support [Servers.coop](https://servers.coop) & [Hetzner](https://hetzner.com). The process of creating a new server usually goes like this:

View File

@ -1,8 +1,23 @@
---
title: Operators Guide
title: Operators
---
Welcome to the operators guide! Operators are typically individuals, members of tech co-ops or collectives who provide services powered by Co-op Cloud. This documentation is meant to help new & experienced operators manage their deployments as well as provide a space for sharing tricks & tips for keeping things running smoothly. Operators are encouraged to submit documentation patches! Sharing is caring :sparkling_heart:
Welcome to the operators guide! Operators are typically individuals, members of tech co-ops or collectives who provide services powered by Co-op Cloud. This documentation is meant to help new & experienced operators manage their deployments as well as provide a space for sharing tricks & tips for keeping things running smoothly.
- [New operators tutorial](/operators/tutorial): If you want to become an operator, start here :rocket:
- [Operations handbook](/operators/handbook): One-stop shop for all you need to know to manage a deployment :ribbon:
<div class="grid cards" markdown>
- __New Operators Tutorial__
If you want to become an operator, start your journey here :rocket:
[Get started](tutorial.md){ .md-button .md-button--primary }
- __Operators Handbook__
One-stop shop for all you need to know to manage a deployment :ribbon:
[Read Handbook](handbook.md){ .md-button .md-button--primary }
</div>
Operators are encouraged to submit documentation patches! Sharing is caring :sparkling_heart:

View File

@ -1,83 +1,8 @@
---
title: New operators tutorial
title: New Operators Tutorial
---
## The moving parts
Co-op Cloud is made up of a few simple, composable pieces. The system does not rely on any one specific implementation: each part may be replaced and/or extended as needed.
We want to build a resilient and long-term sustainable project and that means allowing for different implementations, open formats and a diverse project organisation.
Here are the main technical concepts listed below, once you [grok](https://en.wikipedia.org/wiki/Grok) this, you grok the moving parts of the entire project. You can then move on to [deploying your first app](/operators/tutorial/#deploy-your-first-app).
### Libre software apps
Libre software apps are tools, websites & software clients that you may already use in your daily life: [Nextcloud], [Jitsi], [Mediawiki], [Rocket.chat] and [many more]!
These are tools that are created by volunteer communities who use [free software licenses] in order to build up the public software commons and offer more digital alternatives to [proprietary systems].
The communities who develop these softwares also publish them using [containers]. For example, here is the [Nextcloud hub.docker.com account] which allows end-users to quickly deploy a new Nextcloud instance.
There is a growing consensus in the free software community that containers are a useful and time saving format for distribution.
!!! question "Why did you choose to use containers?"
Learn more [in the FAQ section](/intro/faq/#why-containers).
[nextcloud]: https://nextcloud.com
[jitsi]: https://jitsi.org
[mediawiki]: https://mediawiki.org
[rocket.chat]: https://rocket.chat
[many more]: /recipes/
[free software licenses]: https://www.gnu.org/philosophy/free-sw.html
[nextcloud hub.docker.com account]: https://hub.docker.com/_/nextcloud
[proprietary systems]: https://en.wikipedia.org/wiki/Proprietary_software
[containers]: https://www.docker.com/resources/what-container
### The recipe packaging format
However, just having a container of an app is often not enough. The work required to deploy that app in a "production ready" setup is still too time intensive and often involves a duplication of effort.
Each service provider needs to deal with the same problems: stable versioning, backup plan, secret management, upgrade plan, monitoring and the list goes on.
Individual free software projects can't take on all this responsibility. They provide the containers as is, in a secure and ready-to-go manner but it is up to service providers to worry about how the app is deployed.
Therefore, Co-op Cloud proposes a packaging format, which we refer to as a recipe, that describes the entire production state of the app in a single place. This format uses the existing [standards based compose specification].
This is a file format which is most commonly used by the [Docker compose] tool but Co-op Cloud **does not** require the use of Docker compose itself. Furthermore, as described below, we also don't rely on the actual Docker CLI itself either. We do however use a lot of the underlying libraries.
!!! question "Why did you choose to use the compose specificiation?"
Learn more [in the FAQ section](/intro/faq/#why-use-the-compose-specification).
[Each recipe] that Co-op cloud provides is described using the compose specification and makes use of the upstream project published container when possible (sometimes they don't publish one!).
This is the core of our approach to working with the ecosystem of free software communities. We want to maximise the chances of sharing work, knowledge and build solidarity through concrete co-operation.
[standards based compose specification]: https://compose-spec.io
[docker compose]: https://docs.docker.com/compose/
[each recipe]: /recipes/
### Container orchestrator
Once we have our app packaged as a recipe, we need a deployment environment (e.g. a server & something to keep the containers running). Production deployments are typically expected to support a number of features which give hosters and end-users guarantees for stability.
The Co-op cloud makes use of [Docker swarm] as a deployment environment. It offers an approriate feature set which allows us to support zero-down time upgrades, seamless app rollbacks, automatic deploy failure handling, scaling, hybrid cloud setups and maintain a decentralised design.
!!! question "Why did you choose to use Docker Swarm?"
Learn more [in the FAQ section](/intro/faq/#why-docker-swarm).
[docker swarm]: https://docs.docker.com/engine/swarm/
### Command-line tool
Finally, we need a tool to read the recipe package format and actually deploy the app. For this, we have developed and published the [abra] command-line tool.
`abra` aims at providing a simple command-line interface for managing your own Co-op Cloud. You can bootstrap machines with the required tools, create new apps and deploy them. `abra` is written in [Go](https://go.dev/) and uses a lot of the libraries that the `docker` and `docker-compose` CLIs use but does not rely on those interfaces directly.
`abra` is our flagship command-line client but it does not need to be the only client. `abra` was designed in such a way that it complements a workflow which can still be done completely manually. If Co-op Cloud goes away tomorrow, our configuration commons would still be useful and usable.
[abra]: /abra/
This tutorial assumes you understand the [frequently asked questions](/intro/faq/) as well as [the moving parts](/intro/strategy/) of the technical problems _Co-op Cloud_ solves. If yes, proceed :smile:
## Deploy your first app
@ -86,11 +11,14 @@ In order to deploy an app you need two things:
1. a server with SSH access and a public IP address
2. a domain name pointing to that server
The tutorial tries to help you make choices about which server and which DNS setup you need to run a Co-op Cloud deployment but it does not go into great depth about how to set up a new server.
This tutorial tries to help you make choices about which server and which DNS setup you need to run a _Co-op Cloud_ deployment but it does not go into great depth about how to set up a new server.
!!! question "Can `abra` help automate this?"
??? question "Can `abra` help automate this?"
`abra` can help bootstrap new servers & configure DNS records for you. We'll skip that for now since we're just getting started. See the [operators handbook](/operators/handbook) for more on these topics after you finish the tutorial.
Our `abra` tool can help bootstrap new servers & configure DNS records for
you. We'll skip that for now since we're just getting started. For more on
these topics after you finish the tutorial see the [operators
handbook](/operators/handbook).
### Server setup
@ -116,7 +44,7 @@ docker swarm init
docker network create -d overlay proxy
```
!!! question "Do you support multiple web proxies?"
??? question "Do you support multiple web proxies?"
We do not know if it is feasible and convenient to set things up on an existing server with another web proxy which uses ports `:80` & `:443`. We'd happily receive reports and documentation on how to do this if you manage to set it up!
@ -131,36 +59,43 @@ Your entries in your DNS provider setup might look like the following.
Where `116.203.211.204` can be replaced with the IP address of your server.
!!! question "How do I know my DNS is working?"
??? question "How do I know my DNS is working?"
You can use a tool like `dig` on the command-line to check if your server has the necessary DNS records set up. Something like `dig +short <domain>` should show the IP address of your server if things are working.
### Command-line setup
### Install `abra`
#### Install `abra`
Now we can install [`abra`](/abra) locally on your machine and hook it up to your server.
We support a script-based installation method (script source [here](https://git.coopcloud.tech/coop-cloud/abra/src/branch/main/scripts/installer/installer)):
Now we can install [`abra`](/abra) locally on your machine and hook it up to
your server. We support a script-based installation method ([script source](https://git.coopcloud.tech/coop-cloud/abra/src/branch/main/scripts/installer/installer)):
```bash
curl https://install.abra.coopcloud.tech | bash
```
The installer will verify the downloaded binary checksum. You may need to add the `~/.local/bin/` directory with your `$PATH` in order to run the executable. You can validate that everything is in working order by listing the default help output:
The installer will verify the downloaded binary checksum. If you prefer, you can
[manually verify](/abra/install/#manual-verification) the binary, and then
manally place it in one the directories in your `$PATH` variable. To validate
that everything is working try listing the `--help` command or `-h` to view
output:
```bash
abra -h
```
You may need to add the `~/.local/bin/` directory to your `$PATH` variable, in
order to run the executable.
```bash
export PATH=$PATH:$HOME/.local/bin
abra -h # check it works
```
If you run into issues during installation, [please report a ticket](https://git.coopcloud.tech/coop-cloud/abra/issues/new) :pray: Once you're all set up, we **highly** recommend configuring command-line auto-completion for `abra`. See `abra autocomplete -h` for more on how to do this.
If you run into issues during installation, [please report a ticket](https://git.coopcloud.tech/coop-cloud/organising/issues/new) :pray: Once you're all set up, we **highly** recommend configuring command-line auto-completion for `abra`. See `abra autocomplete -h` for more on how to do this.
!!! question "Can I install `abra` on my server?"
??? question "Can I install `abra` on my server?"
Yes, this is possible, see [this handbook entry](/operators/handbook/#running-abra-server-side) for more. The instructions for setup are a little different however.
Yes, this is possible. However, the instructions for this setup are different. For more info see [this handbook entry](/operators/handbook/#running-abra-server-side).
#### Add your server
### Add your server
Now you can connect `abra` with your server. You should have a working SSH configuration before you can do this (e.g. a matching `Host <server-domain>` entry in `~/.ssh/config` with the correct SSH connection details). That means you can run `ssh <server-domain>` on your command-line and everything Works :tm:.
@ -173,21 +108,26 @@ It is important to note that `<domain>` here is a publicy accessible domain name
You will now have a new `~/.abra/` folder on your local file system which stores all the configuration of your Co-op Cloud instance.
`abra` should now register this server as managed in your server listing:
By now `abra` should have registered this server as managed. To confirm this run:
```
abra server ls
```
!!! warning "Beware of SSH dragons"
??? warning "Beware of SSH dragons :dragon_face:"
`abra` uses plain 'ol SSH under the hood and aims to make use of your existing SSH configurations in `~/.ssh/config` and interfaces with your running `ssh-agent` for password protected secret key files.
Under the hood `abra` uses plain 'ol `ssh` and aims to make use of your
existing SSH configurations in `~/.ssh/config` and interfaces with your
running `ssh-agent` for password protected secret key files.
Running `server add` with `-d/--debug` should help you debug what is going on under the hood. It's best to take a moment to read [this troubleshooting entry](/abra/trouble/#ssh-connection-issues) if you're running into SSH connection issues with `abra`.
Running `server add` with `-d` or `--debug` should help you debug what is going
on under the hood. If you're running into SSH connection issues with `abra`
take a moment to read [this troubleshooting
entry](/abra/trouble/#ssh-connection-issues).
!!! question "How do I share my configs in `~/.abra`?"
??? question "How do I share my configs in `~/.abra`?"
It's possible and quite easy, see [this handbook entry](/operators/handbook/#understanding-app-and-server-configuration) for more.
It's possible and quite easy, for more see [this handbook entry](/operators/handbook/#understanding-app-and-server-configuration).
### Web proxy setup
@ -227,7 +167,7 @@ abra app new nextcloud -S
The `-S` or `--secrets` flag is used to generate secrets for the app: database connection password, root password and admin password.
!!! warning "Beware of password dragons"
??? warning "Beware of password dragons :dragon:"
Take care, these secrets are only shown once on the terminal so make sure to take note of them! `abra` makes use of the [Docker secrets](/operators/handbook/#managing-secret-data) mechanism to ship these secrets securely to the server and store them as encrypted data. Only the apps themselves have access to the values from here on, they're placed in `/run/secrets` on the container file system.

View File

@ -1,9 +1,23 @@
---
title: Organisers Guide
title: Organisers
---
Welcome to the organisers guide! Organisers are folks who focus on the social work in the project. Speaking for the project at talks, helping new tech co-ops & collectives join, keeping an eye out for funding opportunities, seeing what things come up in the community chats, etc. It's important work.
We're still working out what it looks like to do this kind of work in the project. If you like the idea of this kinda of work and/or are already doing it, please send patches to improve this documentation :rocket:
<div class="grid cards" markdown>
- [Organising handbook](/organisers/handbook): One-stop shop for all you need to know to organise in the community :sparkles:
- __Organisers Handbook__
One-stop shop for all you need to know to organise in the community :sparkles:
[Read Handbook](/organisers/handbook){ .md-button .md-button--primary }
- __Say Hello First__
If you like what you see, but are not sure how to best contribute :speech_left:
[Get In Touch](/get-involved/){ .md-button .md-button--primary }
</div>
We're still working out what it looks like to do this kind of work in the project. If you like the idea of this kinda of work and/or are already doing it, please send patches to improve this documentation :rocket:

View File

@ -1,83 +0,0 @@
---
title: Recipes
---
!!! note "Unsure of what a "recipe" is exactly?"
Not to worry, we've got you covered, check out our [glossary page entry](/glossary#recipe).
## Catalogue
The recipe catalogue is a web interface for exploring
what kind of configurations we have available in the project and therefore what apps can be deployed.
It aims to be a helpful place to understand the status of apps, who is taking care of the configs and who is maintaining deployed instances of which app.
The recipe catalogue is available on [recipes.coopcloud.tech](https://recipes.coopcloud.tech/).
## Status / features / scoring
Each recipe README has a "metadata" section, to help communicate the overall status of the recipe, and which features are supported. Here's an example, from [the Wordpress recipe](https://git.coopcloud.tech/coop-cloud/wordpress/):
```
<!-- metadata -->
* **Category**: Apps
* **Status**: 3, stable
* **Image**: [`wordpress`](https://hub.docker.com/_/wordpress), 4, upstream
* **Healthcheck**: Yes
* **Backups**: Yes
* **Email**: 3
* **Tests**: 2
* **SSO**: No
<!-- endmetadata -->
```
Currently, recipe maintainers need to update the scores in this section manually. The specific meanings of the scores are:
### Status (overall score)
- 5: everything in 4 + Single-Sign-On
- 4: upstream image, backups, email, healthcheck, integration testing
- 3: upstream image, missing 1-2 items from 4
- 2: missing 3-4 items from 4 or no upstream image
- 1: alpha
### Image
- 4: official upstream image
- 3: semi-official / actively-maintained image
- 2: 3rd-party image
- 1: our own custom image
### Email
- 3: automatic (using environment variables)
- 2: mostly automatic
- 1: manual
- 0: none
- N/A: app doesn't send email
### CI
- 3: as 2, plus healthcheck
- 2: auto secrets + networks
- 1: basic deployment using `stack-ssh-deploy`, manual secrets + networks
- 0: none
### Single-Sign-On
- 3: automatic (using environment variables)
- 2: mostly automatic
- 1: manual
- 0: none
- N/A: app doesn't support SSO
## Wishlist
If you'd like to see a new recipe packaged, make a request on the [recipes-wishlist](https://git.coopcloud.tech/coop-cloud/recipes-wishlist) repository issue tracker.
We've seen nice things happen when the requesters are also willing to take an active role in testing the new recipe. Teaming up with whoever volunteers to help do the packaging is best.
If no one is around to help, you can always take a run at it yourself, we have [a section](/maintainers/) ready to help you on your way.

View File

@ -4,6 +4,14 @@
--md-primary-fg-color--dark: #ee4a33;
}
/* Button styling tweaks */
.md-button {
margin: .25em !important;
padding: .15em .6em !important;
font-size: .85em !important;
}
/* Navbar styling tweaks */
.md-search__form {
@ -38,3 +46,37 @@
background-color: #6A9CFF !important;
color: var(--md-primary-bg-color) !important;
}
.md-score {
display: inline-block;
padding: .15em .75em;
cursor: normal;
border-radius: .25em;
font-size: .85em;
font-weight: 700;
}
.md-score-5 {
color: #ffffff !important;
background-color: #28a745;
}
.md-score-4 {
color: #ffffff !important;
background-color: #007bff;
}
.md-score-3 {
color: #ffffff !important;
background-color: #ffc107;
}
.md-score-2 {
color: #ffffff !important;
background-color: #dc3545;
}
.md-score-1 {
color: #ffffff !important;
background-color: #343a40;
}

View File

@ -1,6 +1,6 @@
---
site_author: Co-op Cloud
site_name: "Co-op Cloud: Public Interest Infrastructure"
site_name: "Co-op Cloud: Docs"
site_url: https://docs.coopcloud.tech
use_directory_urls: true
@ -26,41 +26,56 @@ theme:
copyright: Copyleft 2023 Co-op Cloud
markdown_extensions:
- meta
- admonition
- attr_list
- codehilite:
guess_lang: false
- def_list
- footnotes
- md_in_html
- meta
- toc:
permalink: true
- attr_list
- pymdownx.tabbed
- pymdownx.superfences
- pymdownx.tilde
- pymdownx.magiclink
- pymdownx.betterem:
smart_enable: all
- pymdownx.details
- pymdownx.emoji:
emoji_index: !!python/name:materialx.emoji.twemoji
emoji_generator: !!python/name:materialx.emoji.to_svg
emoji_generator: !!python/name:material.extensions.emoji.to_svg
emoji_index: !!python/name:material.extensions.emoji.twemoji
- pymdownx.magiclink
- pymdownx.mark
- pymdownx.smartsymbols
- pymdownx.snippets
- pymdownx.superfences
- pymdownx.tabbed
- pymdownx.tilde
- pymdownx.superfences:
custom_fences:
- name: mermaid
class: mermaid
format: !!python/name:pymdownx.superfences.fence_code_format
nav:
- "Introduction":
- index.md
- "Frequently asked questions": intro/faq.md
- "Project strategy": intro/strategy.md
- "Project status": intro/bikemap.md
- "Managed hosting": intro/managed.md
- "Get in touch": intro/contact.md
- "Frequently Asked Questions": intro/faq.md
- "Project Strategy": intro/strategy.md
- "Comparisons": intro/comparisons.md
- "Project Status": intro/bikemap.md
- "Managed Hosting": intro/managed.md
- "Get In Touch": intro/contact.md
- "Credits": intro/credits.md
- "Operators Guide":
- "Operators":
- operators/index.md
- "New operators tutorial": operators/tutorial.md
- "Operations handbook": operators/handbook.md
- "Maintainers Guide":
- "New Operators Tutorial": operators/tutorial.md
- "Operations Handbook": operators/handbook.md
- "Maintainers":
- maintainers/index.md
- "New maintainers tutorial": maintainers/tutorial.md
- "Packaging handbook": maintainers/handbook.md
- "Organisers Guide":
- "New Maintainers Tutorial": maintainers/tutorial.md
- "Packaging Handbook": maintainers/handbook.md
- "Organisers":
- organisers/index.md
- "Organising handbook": organisers/handbook.md
- "Organisers Handbook": organisers/handbook.md
- "Funding applications":
- organisers/funding-applications/index.md
- organisers/funding-applications/culture-of-solidarity.md
@ -71,21 +86,23 @@ nav:
- "Proposals":
- organisers/proposals/index.md
- organisers/proposals/federation.md
- "Recipes":
- recipes/index.md
- "Abra":
- abra/index.md
- "Install": abra/install.md
- "Quick start": abra/quickstart.md
- "Quick Start": abra/quickstart.md
- "Upgrade": abra/upgrade.md
- "Recipes": abra/recipes.md
- "Hack": abra/hack.md
- "Troubleshoot": abra/trouble.md
- "Cheat Sheet": abra/cheat-sheet.md
- "Get Involved":
- get-involved/index.md
- "Support Us": get-involved/support.md
- "Federation":
- federation/index.md
- "FAQ": federation/faq.md
- "Bylaws": federation/bylaws.md
- "Finance": federation/finance.md
- "Membership": federation/membership.md
- "Resolutions":
- federation/resolutions/index.md
- "Passed":
@ -101,17 +118,20 @@ nav:
- federation/resolutions/passed/010.md
- federation/resolutions/passed/011.md
- federation/resolutions/passed/012.md
- "In progress":
- federation/resolutions/in-progress/index.md
- "Draft":
- federation/resolutions/drafts/index.md
- "Finance": federation/finance.md
- "Membership": federation/membership.md
- federation/resolutions/passed/014.md
- federation/resolutions/passed/015.md
- "In Progress":
- federation/resolutions/in-progress/013.md
- federation/resolutions/in-progress/016.md
- federation/resolutions/in-progress/017.md
- "Minutes":
- federation/minutes/index.md
- "2022":
- "Recently":
- federation/minutes/2024-02-01.md
- "Archive":
- federation/minutes/2022-03-03.md
- "Digital tools": federation/tools.md
- federation/minutes/2023-05-03.md
- "Digital Tools": federation/tools.md
- "Glossary":
- glossary/index.md

View File

@ -1,4 +1,15 @@
markdown~=3.2
mkdocs~=1.5.3
mkdocs-material~=9.5.7
mkdocs-material-extensions~=1.3.1
mkdocs-awesome-pages-plugin==2.9.2
mkdocs-material-extensions==1.3
mkdocs-material==9.4.10
mkdocs==1.5.3
pygments~=2.16
pymdown-extensions~=10.2
# Requirements for plugins
babel~=2.10
colorama~=0.4
paginate~=0.5
regex>=2022.4
requests~=2.26