forked from toolshed/docs.coopcloud.tech
Compare commits
11 Commits
update-mir
...
docs/stack
| Author | SHA1 | Date | |
|---|---|---|---|
| a6bdddfff7 | |||
|
017cc9b38d
|
|||
| d99a13d4fa | |||
|
f8b5f90b39
|
|||
| eb2cf43ea1 | |||
|
835d25807f
|
|||
| b882b102fa | |||
| 31d40b8184 | |||
| dc86567e29 | |||
|
59a6f5212b
|
|||
| 1c62eb78e1 |
@ -30,8 +30,7 @@ Install [Go >= 1.16](https://golang.org/doc/install) and then:
|
|||||||
- `make build` to build. If this fails, run `go mod tidy`.
|
- `make build` to build. If this fails, run `go mod tidy`.
|
||||||
- `./abra` to run commands
|
- `./abra` to run commands
|
||||||
- `make test` will run tests
|
- `make test` will run tests
|
||||||
- `make install-abra` will install abra to `$GOPATH/bin`
|
- `make install` will install abra to `$GOPATH/bin`
|
||||||
- `make install-kadabra` will install kadabra to `$GOPATH/bin`
|
|
||||||
- `go get <package>`, `go mod tidy` and `go mod vendor` to add a new dependency
|
- `go get <package>`, `go mod tidy` and `go mod vendor` to add a new dependency
|
||||||
|
|
||||||
Our [Drone CI configuration](https://git.coopcloud.tech/toolshed/abra/src/branch/main/.drone.yml) runs a number of checks on each pushed commit. See the [Makefile](https://git.coopcloud.tech/toolshed/abra/src/branch/main/Makefile) for more handy targets.
|
Our [Drone CI configuration](https://git.coopcloud.tech/toolshed/abra/src/branch/main/.drone.yml) runs a number of checks on each pushed commit. See the [Makefile](https://git.coopcloud.tech/toolshed/abra/src/branch/main/Makefile) for more handy targets.
|
||||||
@ -127,16 +126,7 @@ Then, before running tests, set `export BATS_LIB_PATH=~/.local/share/bats/`
|
|||||||
##### Debian
|
##### Debian
|
||||||
|
|
||||||
```
|
```
|
||||||
apt install bats-file bats-assert bats-support jq make git
|
apt install bats bats-file bats-assert bats-support jq make git
|
||||||
```
|
|
||||||
|
|
||||||
Unfortunately, the latest `bats` version in Debian stable does not have the "filter tests by tags" feature, which is very handy for running a subset of the tests. For this, we need to install `bats` from source. It's easy.
|
|
||||||
|
|
||||||
```
|
|
||||||
apt purge -y bats
|
|
||||||
git clone https://github.com/bats-core/bats-core.git
|
|
||||||
cd bats-core
|
|
||||||
sudo ./install.sh /usr/local
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Setup Test Server
|
#### Setup Test Server
|
||||||
@ -330,7 +320,7 @@ func main() {
|
|||||||
|
|
||||||
Some tools that are making use of the API so far are:
|
Some tools that are making use of the API so far are:
|
||||||
|
|
||||||
* [`kadabra`](https://git.coopcloud.tech/toolshed/abra/src/branch/main/cmd/kadabra/main.go)
|
* [`kadabra`](https://git.coopcloud.tech/toolshed/kadabra)
|
||||||
|
|
||||||
## Cross-compiling
|
## Cross-compiling
|
||||||
|
|
||||||
|
|||||||
20
docs/federation/resolutions/in-progress/034.md
Normal file
20
docs/federation/resolutions/in-progress/034.md
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
title: Resolution 034
|
||||||
|
---
|
||||||
|
|
||||||
|
- Topic: Budget 015: Extra budget for recipes needed by Escuela Común
|
||||||
|
- Date: 2025-10-27
|
||||||
|
- Deadline: 2025-11-10
|
||||||
|
- Size: medium
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
Budget 015 for 20 estimated hours of work towards Escuela Común, **to be reimbursed** from next year's budget from the Sepal fund to the Co-op Cloud Federation Common Fund.
|
||||||
|
|
||||||
|
## Details
|
||||||
|
|
||||||
|
As Escuela Común 2026 planning proceeds, many `abra` bugs were closed, and we even gained the translations feature, but we've realised that we'll need at least one extra recipe to support Escuela's organizing: [`tellaweb`](https://github.com/Horizontal-org/tellaweb).
|
||||||
|
|
||||||
|
This work has been supported by the Sepal fund we're sharing with Escuela Común. The budget allocated for this year has been used in full, so we're requesting the Federation to allocate budget from its own funds to cover for 20 estimated hours, to be reimbursed from next year's budget, that will be available on April 2026.
|
||||||
|
|
||||||
|
`@3wc` will carry out this work.
|
||||||
@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
title: "Resolution 032: RIM joins"
|
title: "Resolution 032: RTM joins"
|
||||||
---
|
---
|
||||||
|
|
||||||
- Topic: RTM joins Coopcloud
|
- Topic: RTM joins Coopcloud
|
||||||
@ -11,7 +11,7 @@ title: "Resolution 032: RIM joins"
|
|||||||
|
|
||||||
Ammar's membership was approved in [Resolution 022](/federation/resolutions/passed/022).
|
Ammar's membership was approved in [Resolution 022](/federation/resolutions/passed/022).
|
||||||
|
|
||||||
Since the establishment of RTM (Resist Rech Monopolies) collective in Seattle, Ammar has been unofficially representing the collective with coopcloud and vice versa.
|
Since the establishment of RTM (Resist Tech Monopolies) collective in Seattle, Ammar has been unofficially representing the collective with coopcloud and vice versa.
|
||||||
|
|
||||||
### Details
|
### Details
|
||||||
|
|
||||||
|
|||||||
@ -175,6 +175,29 @@ handful of popular team collaboration apps.
|
|||||||
- 👎 It is not designed to be a general specification.
|
- 👎 It is not designed to be a general specification.
|
||||||
- 👎 Hard to share configurations into the commons.
|
- 👎 Hard to share configurations into the commons.
|
||||||
- 👎 Limited library of apps.
|
- 👎 Limited library of apps.
|
||||||
- 👎 Uses *OpenNebula*, *Ansible*, and *Puppet* as underlying technologies.
|
- 👎 Uses Ansible (see above)
|
||||||
- 👎 Appears to be only a team of two people.
|
- 👎 Appears to be only a team of two people.
|
||||||
- 👎 Appears to be inactive on Mastodon and limited GitLab activity.
|
- 👎 Appears to be inactive on Mastodon and limited GitLab activity.
|
||||||
|
|
||||||
|
### Dokploy
|
||||||
|
|
||||||
|
[Dokploy](https://dokploy.com/) (who have [their own comparison](https://docs.dokploy.com/docs/core/comparison)).
|
||||||
|
|
||||||
|
- 👍 Supports builds from Git repositories, Dockerfiles, Nixpacks, and Buildpacks like Heroku and Paketo.
|
||||||
|
- 👍 [~100 application templates](https://docs.dokploy.com/docs/core/templates)
|
||||||
|
|
||||||
|
- 👎 [Bespoke TOML config](https://github.com/Dokploy/templates?tab=readme-ov-file#templatetoml-structure)
|
||||||
|
- 👎 Community on Discord and Github discussions
|
||||||
|
- 👎 Freemium / open-core model
|
||||||
|
|
||||||
|
### Cosmos Cloud
|
||||||
|
|
||||||
|
[Cosmos Cloud](https://cosmos-cloud.io/), "The cloud doesn't need to be someone else's computer"
|
||||||
|
|
||||||
|
- 👍 [Native client apps](https://cosmos-cloud.io/clients/)
|
||||||
|
- 👍 Built-in VPN
|
||||||
|
|
||||||
|
- 👎 Community on Discord, Github discussions, and Reddit
|
||||||
|
- 👎 "Up to 19 users" even on paid plans
|
||||||
|
- 👎 Freemium / open-core model
|
||||||
|
- 👎 ["Commons clause"](https://github.com/azukaar/Cosmos-Server/blob/master/LICENCE)
|
||||||
|
|||||||
@ -86,6 +86,16 @@ Because configurations are maintained in-repository by maintainers, we version t
|
|||||||
export NGINX_CONFIG_VERSION=v1
|
export NGINX_CONFIG_VERSION=v1
|
||||||
```
|
```
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
|
||||||
|
It is **very important** that the naming convention of the config matches
|
||||||
|
the whole way down. In the above example, that is `nginx_config` in the
|
||||||
|
`configs:` stanza, `nginx_config` in `name:
|
||||||
|
${STACK_NAME}_nginx_config_${NGINX_CONFIG_VERSION}` and finally
|
||||||
|
`NGINX_CONFIG_VERSION` in the `abra.sh`. This is the naming convention that
|
||||||
|
`abra` will perform to carry out the lookup of all matching names/values.
|
||||||
|
See [`#693`](https://git.coopcloud.tech/toolshed/abra/issues/693) for more.
|
||||||
|
|
||||||
## Manage environment variables
|
## Manage environment variables
|
||||||
|
|
||||||
!!! warning
|
!!! warning
|
||||||
@ -124,6 +134,45 @@ You can also access it in your configs using the following syntax:
|
|||||||
{{ env "FOO" }}
|
{{ env "FOO" }}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Example: Adding environment variables to existing recipe
|
||||||
|
Here is a four step example how to add a new environment variable to a recipe without breaking existing deployments.
|
||||||
|
|
||||||
|
1. add env-var to the `compose.yml` in section `environment`:
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
# ... existing envs
|
||||||
|
- REQUIRE_AUTH_FOR_PROFILE_REQUESTS=${REQUIRE_AUTH_FOR_PROFILE_REQUESTS:-false}
|
||||||
|
# ... other existing envs
|
||||||
|
```
|
||||||
|
|
||||||
|
With `${REQUIRE_AUTH_FOR_PROFILE_REQUESTS:-false}` you set a default value (`false`), ensuring not to break existing deployments.
|
||||||
|
If you're sure that it won't cause problems, if operators of existing deployments don't set the variable, you could also just put:
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
# ... existing envs
|
||||||
|
- REQUIRE_AUTH_FOR_PROFILE_REQUESTS
|
||||||
|
# ... other exisitng envs
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: If you need to break something, make sure to add a [release note](/maintainers/handbook/#how-do-i-write-version-release-notes) explaining to operators what they should change before upgrading.
|
||||||
|
|
||||||
|
2. add env-var to the `.env.sample`
|
||||||
|
```yaml
|
||||||
|
#REQUIRE_AUTH_FOR_PROFILE_REQUESTS=true
|
||||||
|
```
|
||||||
|
|
||||||
|
3. now you can use the environment-variable in your `.tmpl` files, e.g. add to `homserver.yaml.tmpl`
|
||||||
|
```yaml
|
||||||
|
require_auth_for_profile_requests: {{ env "REQUIRE_AUTH_FOR_PROFILE_REQUESTS" }}
|
||||||
|
```
|
||||||
|
|
||||||
|
4. increase number of YAML-version in `abra.sh` (e.g. from `v30` to `v31`), only then it will be deployed.
|
||||||
|
```yaml
|
||||||
|
export HOMESERVER_YAML_VERSION=v31
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: If during development and testing you have to increase it several times, you can just "flatten" it in the end. Only make sure that you `undeploy`/`deploy` your existing instance.
|
||||||
|
|
||||||
### Global environment variables
|
### Global environment variables
|
||||||
|
|
||||||
- `TYPE`: specifies the recipe name
|
- `TYPE`: specifies the recipe name
|
||||||
@ -274,6 +323,21 @@ Sometimes the containers don't even have Bash installed on them. You had better
|
|||||||
|
|
||||||
When referencing an `app` service in a config file, you should prefix with the `STACK_NAME` to avoid namespace conflicts (because all these containers sit on the traefik overlay network). You might want to do something like this `{{ env "STACK_NAME" }}_app` (using the often obscure dark magic of the Golang templating language). You can find examples of this approach used in the [Peertube recipe](https://git.coopcloud.tech/coop-cloud/peertube/src/commit/d1b297c5a6a23a06bf97bb954104ddfd7f736568/nginx.conf.tmpl#L9).
|
When referencing an `app` service in a config file, you should prefix with the `STACK_NAME` to avoid namespace conflicts (because all these containers sit on the traefik overlay network). You might want to do something like this `{{ env "STACK_NAME" }}_app` (using the often obscure dark magic of the Golang templating language). You can find examples of this approach used in the [Peertube recipe](https://git.coopcloud.tech/coop-cloud/peertube/src/commit/d1b297c5a6a23a06bf97bb954104ddfd7f736568/nginx.conf.tmpl#L9).
|
||||||
|
|
||||||
|
!!! warning "Here be timing dragons 🐉"
|
||||||
|
|
||||||
|
Due to how `STACK_NAME` as an environment variable is initialized within `abra`, it won't be available *early enough* for use within config templates (`*.tmpl`) unless you **use it as an environment variable for one of your compose services**.
|
||||||
|
Ideally this is addressed in a newer version of `abra`, but for now, this workaround suffices ✅
|
||||||
|
|
||||||
|
E.g.
|
||||||
|
```
|
||||||
|
services:
|
||||||
|
web:
|
||||||
|
image: nginx:1.29.3
|
||||||
|
environment:
|
||||||
|
- ...
|
||||||
|
- STACK_NAME
|
||||||
|
```
|
||||||
|
|
||||||
## How are recipes versioned?
|
## How are recipes versioned?
|
||||||
|
|
||||||
We'll use an example to work through this. Let's use [Gitea](https://hub.docker.com/r/gitea/gitea).
|
We'll use an example to work through this. Let's use [Gitea](https://hub.docker.com/r/gitea/gitea).
|
||||||
@ -368,7 +432,7 @@ You'll notice that `abra` figured out how to upgrade the Co-op Cloud version lab
|
|||||||
At this point, we're all set, we can run `abra recipe release --publish wordpress`. This will do the following:
|
At this point, we're all set, we can run `abra recipe release --publish wordpress`. This will do the following:
|
||||||
|
|
||||||
1. run `git commit` the new changes
|
1. run `git commit` the new changes
|
||||||
1. run `git tag` to create a new git tag named `1.1.0+5.9.0`
|
1. run `git tag -am "chore: publish 1.1.0+5.9.0 release" 1.1.0+5.9.0` to create a new annotated git tag named `1.1.0+5.9.0` (abra only accepts annotated tags)
|
||||||
1. run `git push` to publish changes to the Wordpress repository
|
1. run `git push` to publish changes to the Wordpress repository
|
||||||
|
|
||||||
!!! warning "Here be more SSH dragons"
|
!!! warning "Here be more SSH dragons"
|
||||||
|
|||||||
@ -271,35 +271,6 @@ To upgrade an app manually to the newest available version run:
|
|||||||
abra app upgrade <nextcloud-domain>
|
abra app upgrade <nextcloud-domain>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Automatic Upgrades
|
|
||||||
|
|
||||||
`kadabra` the auto-updater is still under development, use it with care and don't use it in production environments. To setup the auto-updater copy the `kadabra` binary to the server and configure a cronjob for regular app upgrades. The following script will configure ssmtp for email notifications and setup a cronjob. This cronjob checks daily for new app versions, notifies if any kind of update is available and upgrades all apps to the latest patch/minor version.
|
|
||||||
|
|
||||||
|
|
||||||
```bash
|
|
||||||
apt install ssmtp
|
|
||||||
|
|
||||||
cat > /etc/ssmtp/ssmtp.conf << EOF
|
|
||||||
mailhub=$MAIL_SERVER:587
|
|
||||||
hostname=$MAIL_DOMAIN
|
|
||||||
AuthUser=$USER
|
|
||||||
AuthPass=$PASSWORD
|
|
||||||
FromLineOverride=yes
|
|
||||||
UseSTARTTLS=yes
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat > /etc/cron.d/abra_updater << EOF
|
|
||||||
MAILTO=admin@example.com
|
|
||||||
MAILFROM=noreply@example.com
|
|
||||||
|
|
||||||
0 6 * * * root ~/kadabra notify --major
|
|
||||||
30 4 * * * root ~/kadabra upgrade --all
|
|
||||||
EOF
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
Add `ENABLE_AUTO_UPDATE=true` to the env config (`abra app config <app name>`) to enable the auto-updater for a specific app.
|
|
||||||
|
|
||||||
## Finishing up
|
## Finishing up
|
||||||
|
|
||||||
Hopefully you got something running! Well done! The [operators handbook](/operators/handbook) would probably be the next place to go check out if you're looking for more help. Especially on topics of ongoing maintenance.
|
Hopefully you got something running! Well done! The [operators handbook](/operators/handbook) would probably be the next place to go check out if you're looking for more help. Especially on topics of ongoing maintenance.
|
||||||
|
|||||||
@ -125,12 +125,13 @@ nav:
|
|||||||
- federation/resolutions/passed/029.md
|
- federation/resolutions/passed/029.md
|
||||||
- federation/resolutions/passed/032.md
|
- federation/resolutions/passed/032.md
|
||||||
- federation/resolutions/passed/031.md
|
- federation/resolutions/passed/031.md
|
||||||
|
- federation/resolutions/passed/033.md
|
||||||
- "Stalled":
|
- "Stalled":
|
||||||
- federation/resolutions/stalled/013.md
|
- federation/resolutions/stalled/013.md
|
||||||
- federation/resolutions/stalled/030.md
|
- federation/resolutions/stalled/030.md
|
||||||
- "In Progress":
|
- "In Progress":
|
||||||
- federation/resolutions/index.md
|
- federation/resolutions/index.md
|
||||||
- federation/resolutions/in-progress/033.md
|
- federation/resolutions/in-progress/034.md
|
||||||
- "Minutes":
|
- "Minutes":
|
||||||
- federation/minutes/index.md
|
- federation/minutes/index.md
|
||||||
- "Recently":
|
- "Recently":
|
||||||
|
|||||||
Reference in New Issue
Block a user