Compare commits
48 Commits
Author | SHA1 | Date | |
---|---|---|---|
e6cb5e39cb | |||
9998906117 | |||
58ff674fc2 | |||
e60523fa58 | |||
fa094f1627 | |||
5ac814e2b6 | |||
4cf01aecbc | |||
fa23766aa8 | |||
661366e2c0 | |||
0cc43b15d3 | |||
b726ce8837 | |||
8e40a141d9 | |||
3455295f9f | |||
d34ae93cb8 | |||
4c778a154f | |||
4278b1779c | |||
dde7d2aeb3 | |||
a29593b573 | |||
fd6c41ee91 | |||
df70cfcaa0 | |||
623a0be0b0 | |||
a1d9cf8940 | |||
b9c7ebd500 | |||
ac6cf7b5dc | |||
ee39912c88 | |||
655400877a | |||
650735a40b | |||
0ddd0bff66 | |||
c3cc6fc1c6 | |||
8c85a7928d | |||
d4c39ab074 | |||
1172da919c | |||
3ae0ac10b3 | |||
4960b301e0 | |||
306639f733 | |||
568c27dc9a | |||
ab5ac034e9 | |||
1b3c788722 | |||
24b996acb9 | |||
b926d3d975 | |||
75583c32e2 | |||
05f12b7555 | |||
99a31ac3b7 | |||
43211efebd | |||
01e65bef1b | |||
2221b23144 | |||
0187af4e8d | |||
b5afd99f66 |
@ -8,7 +8,4 @@ WORKDIR /docs
|
||||
|
||||
RUN apk add --no-cache curl
|
||||
|
||||
RUN pip install \
|
||||
mkdocs-material~=9.5.7 \
|
||||
mkdocs-material-extensions~=1.3.1 \
|
||||
mkdocs-awesome-pages-plugin==2.9.2
|
||||
RUN pip install -r requirements.txt
|
||||
|
@ -2,10 +2,6 @@
|
||||
title: Install
|
||||
---
|
||||
|
||||
!!! warning
|
||||
|
||||
02/2023: 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. However, this might be fixed with newer versions of Docker.
|
||||
|
||||
## Stable release
|
||||
|
||||
```
|
||||
@ -18,6 +14,24 @@ 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/)
|
||||
|
@ -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
107
docs/abra/recipes.md
Normal 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.
|
@ -20,6 +20,10 @@ abra upgrade --rc
|
||||
|
||||
> General release notes are [here](https://git.coopcloud.tech/coop-cloud/abra/releases/)
|
||||
|
||||
### `0.8.x-beta` -> `0.9.x-beta`
|
||||
|
||||
None at this time.
|
||||
|
||||
### `0.7.x-beta` -> `0.8.x-beta`
|
||||
|
||||
- We now have an `--offline` flag instead of relying on internal logic to try
|
||||
|
@ -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!
|
@ -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>
|
||||
|
@ -7,12 +7,12 @@ title: Membership
|
||||
| Name | Dues paid up? | Notes | Contact |
|
||||
| -------- | -------- | -------- |-------- |
|
||||
| Agaric | - | - | `@wolcen:matrix.org` |
|
||||
| Flancia | - | - | `@vera:fairydust.space` |
|
||||
| Autonomic | - | - | `@3wc` `@cas` `@decentral1se` `@knoflook` `@travvy` |
|
||||
| Autonomic | - | - | `@3wc`, `@cas`, `@knoflook`, `@travvy`, `@aadil` |
|
||||
| Bonfire | - | - | `@mayel:matrix.org` + Ivan (`@cambriale:matrix.org`) |
|
||||
| Doop.coop | - | - | `@yusf:gottsnack.net` |
|
||||
| Local IT | - | - | Philipp (`@yksflip:matrix.kaputt.cloud`) + `@moritz:matrix.local-it.org` |
|
||||
| ruangrupa | - | - | Henry `@babystepper:matrix.org` |
|
||||
| UTAW | - | - | `@javielico:matrix.org` |
|
||||
| ??? | - | - | `@mirsal:1312.media` |
|
||||
| Klasse & Methode | - | - | `@p4u1_f4u1:matrix.org` |
|
||||
| Local IT | - | - | Philipp (`@yksflip:matrix.kaputt.cloud`) + `@moritz:matrix.local-it.org` |
|
||||
| Mirsal ™ | - | - | `@mirsal:1312.media` |
|
||||
| UTAW | - | - | `@javielico:matrix.org` |
|
||||
| [BeWater](https://bewater.contact) | Waiver | - | `@decentral1se` |
|
||||
| ruangrupa | - | - | Henry `@babystepper:matrix.org` |
|
||||
|
82
docs/federation/minutes/2023-05-03.md
Normal file
82
docs/federation/minutes/2023-05-03.md
Normal 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 aren’t 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.
|
79
docs/federation/minutes/2024-02-01.md
Normal file
79
docs/federation/minutes/2024-02-01.md
Normal 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
|
@ -1,3 +0,0 @@
|
||||
---
|
||||
title: Drafts
|
||||
---
|
@ -1,5 +1,5 @@
|
||||
---
|
||||
title: "Resolution 013: Budget 007: Operator sync - 2024-01-??"
|
||||
title: "Resolution 013"
|
||||
---
|
||||
|
||||
!!! note
|
||||
@ -8,6 +8,8 @@ title: "Resolution 013: Budget 007: Operator sync - 2024-01-??"
|
||||
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
|
||||
|
19
docs/federation/resolutions/in-progress/018.md
Normal file
19
docs/federation/resolutions/in-progress/018.md
Normal file
@ -0,0 +1,19 @@
|
||||
---
|
||||
title: "Resolution 018"
|
||||
---
|
||||
|
||||
- Topic: EOTL joins the Co-op Cloud Federation
|
||||
- Date: 12-03-24
|
||||
- Deadline: 26-03-2024
|
||||
- Size: Large
|
||||
|
||||
### Summary
|
||||
|
||||
> [EOTL](https://codeberg.org/eotl)
|
||||
|
||||
[@basebuilder](https://git.coopcloud.tech/basebuilder) has been active in contributions
|
||||
to the Co-op Cloud documentation and Abra testing.
|
||||
|
||||
### Details
|
||||
|
||||
N/A.
|
@ -1,3 +0,0 @@
|
||||
---
|
||||
title: In progress
|
||||
---
|
@ -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...
|
||||
```
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -1,7 +1,9 @@
|
||||
---
|
||||
title: "Resolution 014: Budget 008: Critical Fixes - 2023-12-06"
|
||||
title: "Resolution 014"
|
||||
---
|
||||
|
||||
- Topic: Budget 008: Critical Fixes
|
||||
- Date: 2023-12-06
|
||||
- Deadline: 2023-12-24
|
||||
- Size: Large
|
||||
|
||||
|
@ -1,7 +1,9 @@
|
||||
---
|
||||
title: "Resolution 15: Klasse & Methode joins the Co-op Cloud Federation - 25-01-2024"
|
||||
title: "Resolution 015"
|
||||
---
|
||||
|
||||
- Topic: Klasse & Methode joins the Co-op Cloud Federation
|
||||
- Date: 25-01-2024
|
||||
- Deadline: 08-02-2024
|
||||
- Size: Large
|
||||
|
||||
|
@ -1,7 +1,9 @@
|
||||
---
|
||||
title: "Resolution 016: Budget 008: Backup-bot-two Documentation and Specification - 27-01-2024"
|
||||
title: "Resolution 016"
|
||||
---
|
||||
|
||||
- Topic: Budget 008: Backup-bot-two Documentation and Specification
|
||||
- Date: 27-01-2024
|
||||
- Deadline: 10th February 2024
|
||||
- Size: Large
|
||||
|
@ -1,13 +1,15 @@
|
||||
---
|
||||
title: "Resolution 17: BeWater joins the Co-op Cloud Federation - 30-01-2024"
|
||||
title: "Resolution 017"
|
||||
---
|
||||
|
||||
- Deadline: 13-02-2024
|
||||
- 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).
|
||||
> [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
|
25
docs/get-involved/support.md
Normal file
25
docs/get-involved/support.md
Normal 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>
|
@ -24,7 +24,7 @@ We'd be happy to hear feedback about our documentation, if it was helpful, what
|
||||
|
||||
- [Organisers guide](/organisers): You run meetings, write guidelines & shape our democratic process :fist:
|
||||
|
||||
- [Recipes](/recipes/): You want to know what recipes are packaged so you can deploy them as apps :nerd:
|
||||
- [Recipes](https://recipes.coopcloud.tech): You want to know what recipes are packaged so you can deploy them as apps :nerd:
|
||||
|
||||
- [Abra](/abra): You want to install the command-line client and hack the planet :unicorn:
|
||||
|
||||
|
180
docs/intro/comparisons.md
Normal file
180
docs/intro/comparisons.md
Normal 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.
|
@ -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>
|
||||
|
@ -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 Community’s_ forecast at the start of 2024 for the future of *Docker Swarm* is positive after five years after *Mirantis’s* 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, it’s 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?
|
||||
|
||||
|
@ -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/
|
||||
|
@ -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`
|
||||
|
||||
@ -427,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.
|
||||
|
@ -1,18 +1,18 @@
|
||||
---
|
||||
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.
|
||||
|
||||
<div class="grid cards" markdown>
|
||||
|
||||
- __New maintainers tutorial__
|
||||
- __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__
|
||||
- __Packaging Handbook__
|
||||
|
||||
One-stop shop for all you need to know to package recipes :package:
|
||||
|
||||
|
@ -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`
|
||||
|
||||
|
@ -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:
|
||||
|
@ -1,5 +1,5 @@
|
||||
---
|
||||
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.
|
||||
|
@ -2,82 +2,7 @@
|
||||
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.
|
||||
|
||||
|
@ -1,12 +1,12 @@
|
||||
---
|
||||
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.
|
||||
|
||||
<div class="grid cards" markdown>
|
||||
|
||||
- __Organisers handbook__
|
||||
- __Organisers Handbook__
|
||||
|
||||
One-stop shop for all you need to know to organise in the community :sparkles:
|
||||
|
||||
|
@ -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.
|
@ -46,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;
|
||||
}
|
||||
|
66
mkdocs.yml
66
mkdocs.yml
@ -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
|
||||
|
||||
@ -45,30 +45,37 @@ markdown_extensions:
|
||||
- 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
|
||||
@ -79,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":
|
||||
@ -111,20 +120,19 @@ nav:
|
||||
- federation/resolutions/passed/012.md
|
||||
- federation/resolutions/passed/014.md
|
||||
- federation/resolutions/passed/015.md
|
||||
- "In progress":
|
||||
- federation/resolutions/in-progress/index.md
|
||||
- federation/resolutions/in-progress/016.md
|
||||
- federation/resolutions/in-progress/017.md
|
||||
- "Draft":
|
||||
- federation/resolutions/drafts/index.md
|
||||
- federation/resolutions/drafts/013.md
|
||||
- "Finance": federation/finance.md
|
||||
- "Membership": federation/membership.md
|
||||
- federation/resolutions/passed/016.md
|
||||
- federation/resolutions/passed/017.md
|
||||
- "In Progress":
|
||||
- federation/resolutions/in-progress/013.md
|
||||
- federation/resolutions/in-progress/018.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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user