24 Commits

Author SHA1 Message Date
f
7cd5a6f5dc doc: monitoring-ng sets its own token
Some checks failed
continuous-integration/drone/pr Build is failing
2026-06-16 22:50:16 -03:00
f
c3334ab580 feat: support scrape discovery
Some checks failed
continuous-integration/drone/pr Build is failing
2026-06-16 20:03:56 -03:00
796ee6c2d4 Merge pull request 'monitoring' (#15) from monitoring into main
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #15
2026-05-21 18:12:45 +00:00
b484236fea Merge branch 'main' into monitoring
Some checks failed
continuous-integration/drone/pr Build is failing
2026-05-21 18:12:08 +00:00
680e3850c5 Update README.md
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-15 23:39:29 +00:00
dfb679b1c0 Merge branch 'main' into monitoring
Some checks failed
continuous-integration/drone/pr Build is failing
2026-05-15 20:32:10 +00:00
6e94e67109 Merge pull request 'Healthcheck & CI' (#17) from healthcheck into main
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #17
2026-05-15 20:29:49 +00:00
2717590054 update drone-ci
Some checks failed
continuous-integration/drone/pr Build is failing
2026-05-15 16:28:18 -04:00
d7637a6e6e basic healthcheck
Some checks failed
continuous-integration/drone/pr Build is failing
2026-05-15 16:23:06 -04:00
37dbb6caa8 update readme for clarity
Some checks failed
continuous-integration/drone/pr Build is failing
2026-05-15 16:11:39 -04:00
04463dffe8 scrap monitoring domain as it was too much of a headache to configure, use /metrics endpoint which seems fairly standard(?) 2026-05-15 16:09:13 -04:00
97e96ed1d3 move monitoring_enabled to .env file 2026-05-15 15:09:28 -04:00
88d46b767e set unique stack name
Some checks failed
continuous-integration/drone/pr Build is failing
2026-05-08 20:54:02 -04:00
baa4167a89 no idea if this actually works, pushing so that I can test later
Some checks failed
continuous-integration/drone/pr Build is failing
2026-05-08 16:58:37 -04:00
3741560b13 move secrets to compose.monitoring.yml
Some checks failed
continuous-integration/drone/pr Build is failing
2026-05-08 16:54:30 -04:00
46ba380e45 use compose_file env instead of a conditional in the .env file.
Some checks failed
continuous-integration/drone/pr Build is failing
2026-05-08 16:10:15 -04:00
ff778eab62 update readme with basic configuration
Some checks failed
continuous-integration/drone/pr Build is failing
2026-05-08 15:59:40 -04:00
aeb6675be4 setup conditional for garage.toml, set require metrics token to true 2026-05-08 15:59:27 -04:00
7d1b4ddc77 add monitoring conditional and secrets to .env 2026-05-08 15:59:09 -04:00
7e8571306a add secrets 2026-05-08 15:58:33 -04:00
16633d97e1 Merge pull request 'rpc_secret from file' (#13) from rpc_secret into main
Reviewed-on: #13
2026-05-08 19:06:04 +00:00
10be86624f bump config version 2026-05-08 15:00:42 -04:00
49b4a117c2 set rpc secret file and quote wrap 2026-05-08 15:00:33 -04:00
3101458354 set secret permissions to be non-world readable 2026-05-08 15:00:16 -04:00
7 changed files with 118 additions and 30 deletions

View File

@ -2,37 +2,39 @@
kind: pipeline
name: deploy to swarm-test.autonomic.zone
steps:
- name: deployment
image: git.coopcloud.tech/coop-cloud/stack-ssh-deploy:latest
settings:
host: swarm-test.autonomic.zone
stack: example_com # UPDATE ME
generate_secrets: true
purge: true
deploy_key:
from_secret: drone_ssh_swarm_test
networks:
- proxy
environment:
DOMAIN: example.swarm-test.autonomic.zone # UPDATE ME
STACK_NAME: example_com # UPDATE ME
LETS_ENCRYPT_ENV: production
- name: deployment
image: git.coopcloud.tech/coop-cloud/stack-ssh-deploy:latest
settings:
host: swarm-test.autonomic.zone
stack: garage
generate_secrets: true
purge: true
deploy_key:
from_secret: drone_ssh_swarm_test
networks:
- proxy
compose: "compose.yml"
environment:
DOMAIN: garage.swarm-test.autonomic.zone
STACK_NAME: garage
LETS_ENCRYPT_ENV: production
SECRET_RPC_SECRET_VERSION: v1
trigger:
branch:
- main
- main
---
kind: pipeline
name: generate recipe catalogue
steps:
- name: release a new version
image: plugins/downstream
settings:
server: https://build.coopcloud.tech
token:
from_secret: drone_abra-bot_token
fork: true
repositories:
- coop-cloud/auto-recipes-catalogue-json
- name: release a new version
image: plugins/downstream
settings:
server: https://build.coopcloud.tech
token:
from_secret: drone_abra-bot_token
fork: true
repositories:
- toolshed/auto-recipes-catalogue-json
trigger:
event: tag

View File

@ -6,6 +6,11 @@ LETS_ENCRYPT_ENV=production
COMPOSE_FILE="compose.yml"
SECRET_RPC_SECRET_VERSION=v1 # length=64 charset=hex
SECRET_ADMIN_TOKEN_SECRET_VERSION=v1 # length=64 charset=hex
SECRET_METRICS_TOKEN_SECRET_VERSION=v1 # length=64 charset=hex
#COMPOSE_FILE="$COMPOSE_FILE:compose.monitoring.yml"
#MONITORING_ENABLED=true
# Changing the replication factor after initial deployment is not
# supported and requires deleting the existing cluster layout metadata.

View File

@ -1,4 +1,4 @@
# garage
# Garage
> An open-source distributed object storage service tailored for selfhosting at a small-to-medium scale.
@ -10,7 +10,7 @@
* **Healthcheck**: No
* **Backups**: No
* **Email**: N/A
* **Tests**: No
* **Tests**: Yes
* **SSO**: N/A
<!-- endmetadata -->
@ -52,7 +52,43 @@ You can optionally add this alias to your `.bashrc` (or similar) file to avoid h
### Garage Quick Start Guide
Once `garage status` works, you can follow the guide here: https://garagehq.deuxfleurs.fr/documentation/quick-start/#checking-that-garage-runs-correctly
## Monitoring
### Enabling
By default monitoring is disabled and must be enabled in your config.
To enable, set `MONITORING` to `true` and uncomment the line `#COMPOSE_FILE="$COMPOSE_FILE:compose.monitoring.yml"`.
> If you've deployed garage before ver `0.0.2+v2.3.0` then you will need to add the following lines to your config:
> ```
> MONITORING_DOMAIN=monitoring.garage.example.com
> SECRET_ADMIN_TOKEN_SECRET_VERSION=v1 # length=64 charset=hex
> SECRET_METRICS_TOKEN_SECRET_VERSION=v1 # length=64 charset=hex
>
> #COMPOSE_FILE="$COMPOSE_FILE:compose.monitoring.yml"
> MONITORING="true"
> ```
If you're using the
[monitoring-ng](https://recipes.coopcloud.tech/monitoring-ng) recipe,
insert the `metrics_token` with the value of `basic_auth`:
```sh
abra app secret insert garage.example.coop v1 metrics_token BASIC_AUTH
```
### Deploying
Now, undeploy the service, generate the new secrets, and finally re-deploy:
```
abra app undeploy <app-domain>
abra app secret generate --all <app-domain>
abra app deploy <app-domain>
```
### Utilizing metrics
Within your chosen monitoring software (ie. Telegraf, Prometheus, etc.), you'll need to make sure it interprets the correct scheme (https), and point it at <app-domain>/metrics as the monitoring endpoint. The secret you copied earlier called metrics_token will be used to authenticate the request.
## Backups

View File

@ -1 +1 @@
export GARAGE_CONF_VERSION=v5
export GARAGE_CONF_VERSION=v7

29
compose.monitoring.yml Normal file
View File

@ -0,0 +1,29 @@
---
version: "3.8"
services:
app:
secrets:
- source: metrics_token
mode: 0600
- source: admin_token
mode: 0600
deploy:
labels:
- "traefik.http.routers.${STACK_NAME}-metrics.rule=Host(`${DOMAIN}`) && Path(`/metrics`)"
- "traefik.http.routers.${STACK_NAME}-metrics.entrypoints=web-secure"
- "traefik.http.routers.${STACK_NAME}-metrics.tls.certresolver=${LETS_ENCRYPT_ENV}"
- "traefik.http.routers.${STACK_NAME}-metrics.service=${STACK_NAME}-metrics"
- "traefik.http.services.${STACK_NAME}-metrics.loadbalancer.server.port=3903"
- "prometheus.io/scrape=true"
- "prometheus.io/port=3903"
- "prometheus.io/path=/metrics"
- "prometheus.io/auth=bearer"
secrets:
admin_token:
name: ${STACK_NAME}_admin_token_${SECRET_ADMIN_TOKEN_SECRET_VERSION}
external: true
metrics_token:
name: ${STACK_NAME}_metrics_token_${SECRET_METRICS_TOKEN_SECRET_VERSION}
external: true

View File

@ -9,7 +9,8 @@ services:
- source: garage_conf
target: /etc/garage.toml
secrets:
- rpc_secret
- source: rpc_secret
mode: 0600
networks:
- proxy
- internal
@ -22,6 +23,7 @@ services:
- "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`)"
- "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure"
- "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}"
- "traefik.http.routers.${STACK_NAME}.service=${STACK_NAME}"
- "traefik.tcp.routers.${STACK_NAME}-rpc.rule=HostSNI(`*`)"
- "traefik.tcp.routers.${STACK_NAME}-rpc.entrypoints=garage-rpc"
- "traefik.tcp.services.${STACK_NAME}-rpc.loadbalancer.server.port=3901"
@ -32,6 +34,12 @@ services:
volumes:
- "${LOCAL_FOLDER_META:-meta}:/var/lib/garage/meta"
- "${LOCAL_FOLDER_DATA:-data}:/var/lib/garage/data"
healthcheck:
test: ["CMD", "/garage", "status"]
interval: 30s
timeout: 10s
retries: 10
start_period: 10s
networks:
proxy:

View File

@ -15,7 +15,7 @@ compression_level = 2
rpc_bind_addr = "[::]:3901"
rpc_public_addr = "{{ env "DOMAIN" }}:3901"
rpc_addr = "[::]:3901"
rpc_secret = "{{ secret "rpc_secret" }}"
rpc_secret_file = "/run/secrets/rpc_secret"
{{ if ne (env "BOOTSTRAP_ID") "" }}
bootstrap_peers = [
@ -27,3 +27,11 @@ bootstrap_peers = [
s3_region = "garage"
api_bind_addr = "[::]:3900"
root_domain = ".s3.garage"
{{ if eq (env "MONITORING_ENABLED") "true" }}
[admin]
api_bind_addr = "[::]:3903"
admin_token_file = "/run/secrets/admin_token"
metrics_require_token = true
metrics_token_file = "/run/secrets/metrics_token"
{{ end }}