Document how to make a compose stack out of an existing docker-compose.yml
#5
Labels
No Label
automation
bug
community organising
democracy
design
documentation
duplicate
enhancement
finance
funding
help wanted
invalid
publishing
question
security
wontfix
No Milestone
No project
No Assignees
1 Participants
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: coop-cloud/organising#5
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Off top:
deploy: labels:
section for Traefiknetworks: proxy
to whichever service(s) will be internet-facingvolumes:
and (probably)secrets:
definition from an existing app.envrc
file and (probably)helpers.sh
to generate secrets(Probably lots more)
entrypoint.sh
to do any initial set-up that relies ondocker-compose run
(e.g. formatrix-synapse
)build:
in stacksIf an image supports loading secrets from environment variables, but not yet from files, e.g. you want
CONFIG_AUTHADMINPASSWORD_FILE=/run/secrets/saml_admin_password
but the image only supportsCONFIG_AUTHADMINPASSWORD=foo
, use a simple custom entrypoint: https://git.autonomic.zone/compose-stacks/mediawiki/src/branch/simplesaml/entrypoint.simplesaml.sh.tmplAdding custom
abra
commands, see e.g. Nextcloud'sabra occ
commandCoöpCloud-ising an app
Example: Matomo web analytics
Tired: Write your own image and compose file
Wired: Use someone else's image (& maybe compose file)
Inspired: Upstream image, someone else's compose file
On fire: Upstream compose file
I'm feeling lazy so, luckily for me, Matomo already has an example compose file in their repository! Let's download and edit it:
Open
compose.yml
in your favourite editor and have a gander 🦢 . There are a few things we're looking for -- full list to come -- but a few things we can immediately see are:3.8
, to make sure we can use all the latest swarm coolnessabra
, so we'll strip outenv_file
./var/www/html
volume definition on L21 is a bit overzealous; it means a copy of Matomo will be stored separately per app instance, which is a waste of space in most cases. We'll narrow it down according to the documentation -- here, the developers have been nice enough to suggestlogs
andconfig
volumes instead, which is a decent startinternal
network for it to communicate with Matomo.deploy.labels
and remove theports:
definition, to tell Traefik to forward requests to Matomo based on hostname and generate an SSL certificate.(I'll also rename the
db
andapp
services tomariadb
andmatomo
respectively, for consistency with our othercompose-stacks
apps.)The resulting
compose.yml
is here: https://git.autonomic.zone/compose-stacks/matomo/src/branch/main/compose.ymlNow, create an
.envrc
file (or call it anything else, but remember to specify the-e
option forabra
):(and, if you're using
.envrc
, remember tosource .envrc
ordirenv allow
)You can create the secrets:
And deploy the app:
abra deploy
Then, open the
DOMAIN
you configured (you might need to wait a while for Traefik to generate SSL certificates) to finish the set-up.Luckily, this container is (mostly) configurable via environment variables -- if we want to auto-generate the configuration we can use a
config
and / or a customentrypoint
(seecompose-stacks/mediawiki
for examples of both).