loomio/compose.yml
stevensting 014deacc0f
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
chore: publish 4.0.0+v2.25.3 release
2025-03-03 16:39:56 +01:00

199 lines
5.3 KiB
YAML

---
version: "3.8"
x-db-env: &db-env
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
POSTGRES_DB: loomio_production
POSTGRES_USER: postgres
x-redis-env: &redis-env
REDIS_URL: redis://redis:6379
x-environment: &default-env
<<: *db-env
<<: *redis-env
CANONICAL_HOST: ${DOMAIN}
VIRTUAL_HOST: ${DOMAIN}
CHANNELS_URI: wss://channels.${DOMAIN}
SUPPORT_EMAIL: ${SUPPORT_EMAIL}
NOTIFICATIONS_EMAIL_ADDRESS: ${NOTIFICATIONS_EMAIL_ADDRESS}
REPLY_HOSTNAME: ${REPLY_HOSTNAME}
RAILS_ENV: ${RAILS_ENV}
PUMA_WORKERS: ${PUMA_WORKERS}
MIN_THREADS: ${MIN_THREADS}
MAX_THREADS: ${MAX_THREADS}
FORCE_SSL: ${FORCE_SSL}
USE_RACK_ATTACK: ${USE_RACK_ATTACK}
DEVISE_SECRET_FILE: /run/secrets/devise_secret
SECRET_COOKIE_TOKEN_FILE: /run/secrets/secret_cookie_token
SAML_APP_KEY:
SAML_IDP_METADATA_URL:
SAML_ISSUER:
FEATURES_DISABLE_EMAIL_LOGIN:
services:
app:
image: loomio/loomio:v2.25.3
configs:
- source: entrypoint
target: /entrypoint.sh
mode: 0555
entrypoint: /entrypoint.sh
secrets:
- devise_secret
- secret_cookie_token
- db_password
volumes:
- loomio_uploads:/loomio/public/system
- loomio_storage:/loomio/storage
- loomio_files:/loomio/public/files
- loomio_plugins:/loomio/plugins/docker
- loomio_import:/import
networks:
- proxy
- backend
depends_on:
- db
- redis
environment: *default-env
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000"]
interval: 30s
timeout: 10s
retries: 10
start_period: 2m
deploy:
restart_policy:
condition: on-failure
labels:
- "traefik.enable=true"
- "traefik.http.services.${STACK_NAME}.loadbalancer.server.port=3000"
- "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`${EXTRA_DOMAINS})"
- "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure"
- "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}"
- "coop-cloud.${STACK_NAME}.version=4.0.0+v2.25.3"
- "backupbot.backup:=${ENABLE_BACKUPS:-true}"
worker:
image: loomio/loomio:v2.25.3
configs:
- source: entrypoint
target: /entrypoint.sh
mode: 0555
entrypoint: /entrypoint.sh
secrets:
- devise_secret
- secret_cookie_token
- db_password
networks:
- backend
environment:
!!merge <<: *default-env
TASK: worker
depends_on:
- app
volumes:
- loomio_uploads:/loomio/public/system
- loomio_storage:/loomio/storage
- loomio_files:/loomio/public/files
- loomio_plugins:/loomio/plugins/docker
db:
# loomio version upgrades and postgres version upgrade should not be performed at the same time.
image: pgautoupgrade/pgautoupgrade:17-debian
networks:
- backend
volumes:
- pgdata:/pgdata
secrets:
- db_password
environment:
<<: *db-env
PGDATA: /pgdata
deploy:
labels:
backupbot.backup: "${ENABLE_BACKUPS:-true}"
backupbot.backup.pre-hook: sh -c 'pg_dump -U "$$POSTGRES_USER" -Fc "$$POSTGRES_DB" | gzip > "/postgres.dump.gz"'
backupbot.backup.path: "/postgres.dump.gz"
backupbot.backup.post-hook: "rm -f /postgres.dump.gz"
backupbot.restore: "true"
backupbot.restore.post-hook: sh -c 'gzip -d /postgres.dump.gz && pg_restore --clean -U "$$POSTGRES_USER" --dbname="$$POSTGRES_DB" < /postgres.dump && rm -f /postgres.dump'
redis:
image: redis:5.0
networks:
- backend
healthcheck:
test: ["CMD", "redis-cli", "ping"]
#mailin:
# image: loomio/mailin-docker:latest
# networks:
# - proxy
# ports:
# - "25:25"
# environment:
# - WEBHOOK_URL=http://app:3000/email_processor/
channels:
image: loomio/loomio_channel_server
networks:
- backend
depends_on:
- redis
environment:
<<: *redis-env
cron:
image: loomio/loomio:v2.25.3
configs:
- source: entrypoint
target: /entrypoint.sh
mode: 0555
entrypoint: [ "/entrypoint.sh", "rake loomio:hourly_tasks" ]
environment: *default-env
secrets:
- devise_secret
- secret_cookie_token
- db_password
volumes:
- loomio_uploads:/loomio/public/system
- loomio_storage:/loomio/storage
- loomio_files:/loomio/public/files
- loomio_plugins:/loomio/plugins/docker
- loomio_import:/import
networks:
- backend
depends_on:
- db
- redis
deploy:
mode: replicated
replicas: 0
labels:
- "swarm.cronjob.enable=true"
- "swarm.cronjob.schedule=0 * * * *"
restart_policy:
condition: none
networks:
backend:
proxy:
external: true
volumes:
loomio_uploads:
loomio_storage:
loomio_files:
loomio_plugins:
loomio_import:
pgdata:
configs:
entrypoint:
name: ${STACK_NAME}_entrypoint_${LOOMIO_ENTRYPOINT_VERSION}
file: entrypoint.sh
secrets:
devise_secret:
external: true
name: ${STACK_NAME}_devise_secret_${SECRET_DEVISE_SECRET_VERSION}
secret_cookie_token:
external: true
name: ${STACK_NAME}_secret_cookie_token_${SECRET_SECRET_COOKIE_TOKEN_VERSION}
db_password:
external: true
name: ${STACK_NAME}_db_password_${SECRET_DB_PASSWORD_VERSION}