From a3e371311210b97fe324be6829c4318fea32e66c Mon Sep 17 00:00:00 2001 From: Philipp Rothmann Date: Thu, 7 Apr 2022 14:34:53 +0200 Subject: [PATCH 1/5] add nick, locale env ; fix email sender --- .env.sample | 4 +++- abra.sh | 2 +- app_config.yml.tmpl | 6 +++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.env.sample b/.env.sample index e4cc10a..7e20467 100644 --- a/.env.sample +++ b/.env.sample @@ -17,7 +17,9 @@ FOODCOOP_ZIP_CODE=XXX FOODCOOP_HOMEPAGE=https://order.example.org FOODCOOP_HELP_URL=https://order.example.org FOODCOOP_TIME_ZONE=Amsterdam -FOODCOOP_FOOTER="example hosted by Your Tech Co-op." +FOODCOOP_FOOTER="" +FOODCOOP_USE_NICK=true +FOODCOOP_LANGUAGE=en # database settings MYSQL_DB=foodsoft diff --git a/abra.sh b/abra.sh index d0cdcaa..7007d7c 100644 --- a/abra.sh +++ b/abra.sh @@ -1,4 +1,4 @@ -export APP_CONFIG_VERSION=v1 +export APP_CONFIG_VERSION=v2 export DB_CONFIG_VERSION=v1 export ENTRYPOINT_VERSION=v1 export PRODUCTION_ENV_VERSION=v1 diff --git a/app_config.yml.tmpl b/app_config.yml.tmpl index bed97f4..6606b40 100644 --- a/app_config.yml.tmpl +++ b/app_config.yml.tmpl @@ -33,7 +33,7 @@ default: &defaults foodsoft_url: https://foodcoops.github.io # Default language - default_locale: en + default_locale: {{ env "FOODCOOP_LANGUAGE" }} # By default, foodsoft takes the language from the webbrowser/operating system. # In case you really want foodsoft in a certain language by default, set this to true. @@ -86,7 +86,7 @@ default: &defaults # When use_nick is enabled, there will be a nickname field in the user form, # and the option to show a nickname instead of full name to foodcoop members. # Members of a user's groups and administrators can still see full names. - use_nick: true + use_nick: {{ env "FOODCOOP_USE_NICK" }} # Most plugins can be enabled/disabled here as well. Messages and wiki are enabled # by default and need to be set to false to disable. Most other plugins needs to @@ -129,7 +129,7 @@ default: &defaults email_from: "{{ env "EMAIL_SENDER" }}" # domain to be used for reply emails - reply_email_domain: "{{ env "EMAIL_REPLY_DOMAIN" }}" + reply_email_domain: {{ env "EMAIL_REPLY_DOMAIN" }} # If your foodcoop uses a mailing list instead of internal messaging system #mailing_list: list@example.org From 9b20538e7bdbccd923547aa06a153a0001a0e522 Mon Sep 17 00:00:00 2001 From: Philipp Rothmann Date: Thu, 7 Apr 2022 14:37:14 +0200 Subject: [PATCH 2/5] replace yml templating stuff afaik yml templating is no longer supported by abra? not sure if there is a better way to reduce so much redundancy --- compose.yml | 241 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 155 insertions(+), 86 deletions(-) diff --git a/compose.yml b/compose.yml index 6752e41..07f5b06 100644 --- a/compose.yml +++ b/compose.yml @@ -1,61 +1,60 @@ version: "3.8" -x-env: &env - DOMAIN: - EMAIL_ERROR: - EMAIL_REPLY_DOMAIN: - EMAIL_SENDER: - FOODCOOP_CITY: - FOODCOOP_COUNTRY: - FOODCOOP_EMAIL: - FOODCOOP_FOOTER: - FOODCOOP_HELP_URL: - FOODCOOP_HOMEPAGE: - FOODCOOP_MULTI_INSTALL: - FOODCOOP_NAME: - FOODCOOP_PHONE: - FOODCOOP_STREET: - FOODCOOP_TIME_ZONE: - FOODCOOP_ZIP_CODE: - LOG_LEVEL: - MYSQL_DB: foodsoft - MYSQL_HOST: db - MYSQL_PORT: 3306 - MYSQL_USER: foodsoft - QUEUE: foodsoft_notifier - REDIS_URL: redis://cache:6379 - SECRET_KEY_BASE_FILE: /run/secrets/secret_key_base - SMTP_ADDRESS: - SMTP_AUTHENTICATION: - SMTP_DOMAIN: - SMTP_ENABLE_STARTTLS_AUTO: - SMTP_PASSWORD_FILE: /run/secrets/smtp_password - SMTP_PORT: - SMTP_USER_NAME: -x-configs: &configs - - source: app_config - target: /usr/src/app/config/app_config.yml - - source: db_config - target: /usr/src/app/config/database.yml - - source: production_env - target: /usr/src/app/config/environments/production.rb - - source: entrypoint - target: /usr/src/app/docker-entrypoint.sh - mode: 0555 -x-secrets: &secrets - - db_password - - secret_key_base - - smtp_password services: app: image: foodcoops/foodsoft:4.7.1 networks: - internal - proxy - secrets: *secrets - configs: *configs - entrypoint: &entrypoint /usr/src/app/docker-entrypoint.sh + secrets: + - db_password + - secret_key_base + - smtp_password + configs: + - source: app_config + target: /usr/src/app/config/app_config.yml + - source: db_config + target: /usr/src/app/config/database.yml + - source: production_env + target: /usr/src/app/config/environments/production.rb + - source: entrypoint + target: /usr/src/app/docker-entrypoint.sh + mode: 0555 + entrypoint: /usr/src/app/docker-entrypoint.sh environment: - !%21merge <<: *env + CERTBOT_DISABLED: 1 + DOMAIN: + EMAIL_ERROR: + EMAIL_REPLY_DOMAIN: + EMAIL_SENDER: + FOODCOOP_CITY: + FOODCOOP_COUNTRY: + FOODCOOP_EMAIL: + FOODCOOP_FOOTER: + FOODCOOP_HELP_URL: + FOODCOOP_HOMEPAGE: + FOODCOOP_MULTI_INSTALL: + FOODCOOP_NAME: + FOODCOOP_PHONE: + FOODCOOP_STREET: + FOODCOOP_TIME_ZONE: + FOODCOOP_ZIP_CODE: + FOODCOOP_USE_NICK: + FOODCOOP_LANGUAGE: + LOG_LEVEL: + MYSQL_DB: + MYSQL_HOST: + MYSQL_PORT: + MYSQL_USER: + QUEUE: foodsoft_notifier + REDIS_URL: redis://cache:6379 + SECRET_KEY_BASE_FILE: /run/secrets/secret_key_base + SMTP_ADDRESS: + SMTP_AUTHENTICATION: + SMTP_DOMAIN: + SMTP_ENABLE_STARTTLS_AUTO: + SMTP_PASSWORD_FILE: /run/secrets/smtp_password + SMTP_PORT: + SMTP_USER_NAME: FOODSOFT_SERVICE: app healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000"] @@ -76,54 +75,122 @@ services: - coop-cloud.${STACK_NAME}.app.version=4.7.1- cron: image: foodcoops/foodsoft:4.7.1 + secrets: + - db_password + - secret_key_base + - smtp_password + configs: + - source: app_config + target: /usr/src/app/config/app_config.yml + - source: db_config + target: /usr/src/app/config/database.yml + - source: production_env + target: /usr/src/app/config/environments/production.rb + - source: entrypoint + target: /usr/src/app/docker-entrypoint.sh + mode: 0555 + entrypoint: /usr/src/app/docker-entrypoint.sh environment: - !%21merge <<: *env + CERTBOT_DISABLED: 1 + DOMAIN: + EMAIL_ERROR: + EMAIL_REPLY_DOMAIN: + EMAIL_SENDER: + FOODCOOP_CITY: + FOODCOOP_COUNTRY: + FOODCOOP_EMAIL: + FOODCOOP_FOOTER: + FOODCOOP_HELP_URL: + FOODCOOP_HOMEPAGE: + FOODCOOP_MULTI_INSTALL: + FOODCOOP_NAME: + FOODCOOP_PHONE: + FOODCOOP_STREET: + FOODCOOP_TIME_ZONE: + FOODCOOP_ZIP_CODE: + FOODCOOP_USE_NICK: + FOODCOOP_LANGUAGE: + LOG_LEVEL: + MYSQL_DB: + MYSQL_HOST: + MYSQL_PORT: + MYSQL_USER: + QUEUE: foodsoft_notifier + REDIS_URL: redis://cache:6379 + SECRET_KEY_BASE_FILE: /run/secrets/secret_key_base + SMTP_ADDRESS: + SMTP_AUTHENTICATION: + SMTP_DOMAIN: + SMTP_ENABLE_STARTTLS_AUTO: + SMTP_PASSWORD_FILE: /run/secrets/smtp_password + SMTP_PORT: + SMTP_USER_NAME: FOODSOFT_SERVICE: cron - configs: *configs - entrypoint: *entrypoint - secrets: *secrets networks: - internal - deploy: - labels: ['coop-cloud.${STACK_NAME}.cron.version=4.7.1-'] + worker: image: foodcoops/foodsoft:4.7.1 + secrets: + - db_password + - secret_key_base + - smtp_password + configs: + - source: app_config + target: /usr/src/app/config/app_config.yml + - source: db_config + target: /usr/src/app/config/database.yml + - source: production_env + target: /usr/src/app/config/environments/production.rb + - source: entrypoint + target: /usr/src/app/docker-entrypoint.sh + mode: 0555 + entrypoint: /usr/src/app/docker-entrypoint.sh environment: - !%21merge <<: *env + CERTBOT_DISABLED: 1 + DOMAIN: + EMAIL_ERROR: + EMAIL_REPLY_DOMAIN: + EMAIL_SENDER: + FOODCOOP_CITY: + FOODCOOP_COUNTRY: + FOODCOOP_EMAIL: + FOODCOOP_FOOTER: + FOODCOOP_HELP_URL: + FOODCOOP_HOMEPAGE: + FOODCOOP_MULTI_INSTALL: + FOODCOOP_NAME: + FOODCOOP_PHONE: + FOODCOOP_STREET: + FOODCOOP_TIME_ZONE: + FOODCOOP_ZIP_CODE: + FOODCOOP_USE_NICK: + FOODCOOP_LANGUAGE: + LOG_LEVEL: + MYSQL_DB: + MYSQL_HOST: + MYSQL_PORT: + MYSQL_USER: + QUEUE: foodsoft_notifier + REDIS_URL: redis://cache:6379 + SECRET_KEY_BASE_FILE: /run/secrets/secret_key_base + SMTP_ADDRESS: + SMTP_AUTHENTICATION: + SMTP_DOMAIN: + SMTP_ENABLE_STARTTLS_AUTO: + SMTP_PASSWORD_FILE: /run/secrets/smtp_password + SMTP_PORT: + SMTP_USER_NAME: FOODSOFT_SERVICE: worker - configs: *configs - entrypoint: *entrypoint - secrets: *secrets networks: - internal - deploy: - labels: ['coop-cloud.${STACK_NAME}.worker.version=4.7.1-'] - smtp: - image: foodcoops/foodsoft:4.7.1 - configs: *configs - entrypoint: *entrypoint - secrets: *secrets - environment: - !%21merge <<: *env - FOODSOFT_SERVICE: smtp - SMTP_SERVER_HOST: - SMTP_SERVER_PORT: - networks: - - proxy - - internal - deploy: - labels: - - "traefik.enable=true" - - "traefik.tcp.routers.foodsoft-smtp.rule=HostSNI(`*`)" - - "traefik.tcp.routers.foodsoft-smtp.entrypoints=foodsoft-smtp" - - "traefik.tcp.services.foodsoft-smtp.loadbalancer.server.port=${SMTP_SERVER_PORT}" - - coop-cloud.${STACK_NAME}.smtp.version=4.7.1- + db: image: "mariadb:10.6" command: "mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_520_ci" environment: - MYSQL_USER: foodsoft - MYSQL_DATABASE: foodsoft + MYSQL_USER: ${MYSQL_USER} + MYSQL_DATABASE: ${MYSQL_DB} MYSQL_PASSWORD_FILE: /run/secrets/db_password MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password secrets: @@ -139,14 +206,15 @@ services: image: "redis:6" networks: - internal - deploy: - labels: ['coop-cloud.${STACK_NAME}.cache.version=6-'] + networks: internal: proxy: external: true + volumes: db: + configs: app_config: name: ${STACK_NAME}_app_config_${APP_CONFIG_VERSION} @@ -164,6 +232,7 @@ configs: name: ${STACK_NAME}_production_env_${PRODUCTION_ENV_VERSION} file: production.rb.tmpl template_driver: golang + secrets: db_password: name: ${STACK_NAME}_db_password_${SECRET_DB_PASSWORD_VERSION} From c1bd006c62b5e2d5408ba7deb0ed2f535f2bba91 Mon Sep 17 00:00:00 2001 From: Philipp Rothmann Date: Thu, 7 Apr 2022 15:03:09 +0200 Subject: [PATCH 3/5] add backupbot --- compose.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/compose.yml b/compose.yml index 07f5b06..94fa713 100644 --- a/compose.yml +++ b/compose.yml @@ -201,7 +201,11 @@ services: networks: - internal deploy: - labels: ['coop-cloud.${STACK_NAME}.db.version=10.6-'] + labels: + backupbot.backup: "true" + backupbot.backup.pre-hook: 'mkdir -p /tmp/backup/ && mysqldump --single-transaction -u root -p"$$(cat /run/secrets/db_root_password)" $${MYSQL_DATABASE} > /tmp/backup/backup.sql' + backupbot.backup.post-hook: "rm -rf /tmp/backup" + backupbot.backup.path: "/tmp/backup/" cache: image: "redis:6" networks: From 42bdf49ba5728214ab9ff28f0a685f59dd38aa73 Mon Sep 17 00:00:00 2001 From: Philipp Rothmann Date: Thu, 7 Apr 2022 16:17:10 +0200 Subject: [PATCH 4/5] long live yml templates --- compose.yml | 206 ++++++++++++++++------------------------------------ 1 file changed, 62 insertions(+), 144 deletions(-) diff --git a/compose.yml b/compose.yml index 94fa713..f50404e 100644 --- a/compose.yml +++ b/compose.yml @@ -1,60 +1,68 @@ version: "3.8" + +x-env: &env + CERTBOT_DISABLED: 1 + DOMAIN: + EMAIL_ERROR: + EMAIL_REPLY_DOMAIN: + EMAIL_SENDER: + FOODCOOP_CITY: + FOODCOOP_COUNTRY: + FOODCOOP_EMAIL: + FOODCOOP_FOOTER: + FOODCOOP_HELP_URL: + FOODCOOP_HOMEPAGE: + FOODCOOP_MULTI_INSTALL: + FOODCOOP_NAME: + FOODCOOP_PHONE: + FOODCOOP_STREET: + FOODCOOP_TIME_ZONE: + FOODCOOP_ZIP_CODE: + FOODCOOP_USE_NICK: + FOODCOOP_LANGUAGE: + LOG_LEVEL: + MYSQL_DB: + MYSQL_HOST: + MYSQL_PORT: + MYSQL_USER: + QUEUE: foodsoft_notifier + REDIS_URL: redis://cache:6379 + SECRET_KEY_BASE_FILE: /run/secrets/secret_key_base + SMTP_ADDRESS: + SMTP_AUTHENTICATION: + SMTP_DOMAIN: + SMTP_ENABLE_STARTTLS_AUTO: + SMTP_PASSWORD_FILE: /run/secrets/smtp_password + SMTP_PORT: + SMTP_USER_NAME: + +x-configs: &configs + - source: app_config + target: /usr/src/app/config/app_config.yml + - source: db_config + target: /usr/src/app/config/database.yml + - source: production_env + target: /usr/src/app/config/environments/production.rb + - source: entrypoint + target: /usr/src/app/docker-entrypoint.sh + mode: 0555 + +x-secrets: &secrets + - db_password + - secret_key_base + - smtp_password + services: app: image: foodcoops/foodsoft:4.7.1 networks: - internal - proxy - secrets: - - db_password - - secret_key_base - - smtp_password - configs: - - source: app_config - target: /usr/src/app/config/app_config.yml - - source: db_config - target: /usr/src/app/config/database.yml - - source: production_env - target: /usr/src/app/config/environments/production.rb - - source: entrypoint - target: /usr/src/app/docker-entrypoint.sh - mode: 0555 + secrets: *secrets + configs: *configs entrypoint: /usr/src/app/docker-entrypoint.sh environment: - CERTBOT_DISABLED: 1 - DOMAIN: - EMAIL_ERROR: - EMAIL_REPLY_DOMAIN: - EMAIL_SENDER: - FOODCOOP_CITY: - FOODCOOP_COUNTRY: - FOODCOOP_EMAIL: - FOODCOOP_FOOTER: - FOODCOOP_HELP_URL: - FOODCOOP_HOMEPAGE: - FOODCOOP_MULTI_INSTALL: - FOODCOOP_NAME: - FOODCOOP_PHONE: - FOODCOOP_STREET: - FOODCOOP_TIME_ZONE: - FOODCOOP_ZIP_CODE: - FOODCOOP_USE_NICK: - FOODCOOP_LANGUAGE: - LOG_LEVEL: - MYSQL_DB: - MYSQL_HOST: - MYSQL_PORT: - MYSQL_USER: - QUEUE: foodsoft_notifier - REDIS_URL: redis://cache:6379 - SECRET_KEY_BASE_FILE: /run/secrets/secret_key_base - SMTP_ADDRESS: - SMTP_AUTHENTICATION: - SMTP_DOMAIN: - SMTP_ENABLE_STARTTLS_AUTO: - SMTP_PASSWORD_FILE: /run/secrets/smtp_password - SMTP_PORT: - SMTP_USER_NAME: + <<: *env FOODSOFT_SERVICE: app healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000"] @@ -75,112 +83,22 @@ services: - coop-cloud.${STACK_NAME}.app.version=4.7.1- cron: image: foodcoops/foodsoft:4.7.1 - secrets: - - db_password - - secret_key_base - - smtp_password - configs: - - source: app_config - target: /usr/src/app/config/app_config.yml - - source: db_config - target: /usr/src/app/config/database.yml - - source: production_env - target: /usr/src/app/config/environments/production.rb - - source: entrypoint - target: /usr/src/app/docker-entrypoint.sh - mode: 0555 + secrets: *secrets + configs: *configs entrypoint: /usr/src/app/docker-entrypoint.sh environment: - CERTBOT_DISABLED: 1 - DOMAIN: - EMAIL_ERROR: - EMAIL_REPLY_DOMAIN: - EMAIL_SENDER: - FOODCOOP_CITY: - FOODCOOP_COUNTRY: - FOODCOOP_EMAIL: - FOODCOOP_FOOTER: - FOODCOOP_HELP_URL: - FOODCOOP_HOMEPAGE: - FOODCOOP_MULTI_INSTALL: - FOODCOOP_NAME: - FOODCOOP_PHONE: - FOODCOOP_STREET: - FOODCOOP_TIME_ZONE: - FOODCOOP_ZIP_CODE: - FOODCOOP_USE_NICK: - FOODCOOP_LANGUAGE: - LOG_LEVEL: - MYSQL_DB: - MYSQL_HOST: - MYSQL_PORT: - MYSQL_USER: - QUEUE: foodsoft_notifier - REDIS_URL: redis://cache:6379 - SECRET_KEY_BASE_FILE: /run/secrets/secret_key_base - SMTP_ADDRESS: - SMTP_AUTHENTICATION: - SMTP_DOMAIN: - SMTP_ENABLE_STARTTLS_AUTO: - SMTP_PASSWORD_FILE: /run/secrets/smtp_password - SMTP_PORT: - SMTP_USER_NAME: + <<: *env FOODSOFT_SERVICE: cron networks: - internal worker: image: foodcoops/foodsoft:4.7.1 - secrets: - - db_password - - secret_key_base - - smtp_password - configs: - - source: app_config - target: /usr/src/app/config/app_config.yml - - source: db_config - target: /usr/src/app/config/database.yml - - source: production_env - target: /usr/src/app/config/environments/production.rb - - source: entrypoint - target: /usr/src/app/docker-entrypoint.sh - mode: 0555 + secrets: *secrets + configs: *configs entrypoint: /usr/src/app/docker-entrypoint.sh environment: - CERTBOT_DISABLED: 1 - DOMAIN: - EMAIL_ERROR: - EMAIL_REPLY_DOMAIN: - EMAIL_SENDER: - FOODCOOP_CITY: - FOODCOOP_COUNTRY: - FOODCOOP_EMAIL: - FOODCOOP_FOOTER: - FOODCOOP_HELP_URL: - FOODCOOP_HOMEPAGE: - FOODCOOP_MULTI_INSTALL: - FOODCOOP_NAME: - FOODCOOP_PHONE: - FOODCOOP_STREET: - FOODCOOP_TIME_ZONE: - FOODCOOP_ZIP_CODE: - FOODCOOP_USE_NICK: - FOODCOOP_LANGUAGE: - LOG_LEVEL: - MYSQL_DB: - MYSQL_HOST: - MYSQL_PORT: - MYSQL_USER: - QUEUE: foodsoft_notifier - REDIS_URL: redis://cache:6379 - SECRET_KEY_BASE_FILE: /run/secrets/secret_key_base - SMTP_ADDRESS: - SMTP_AUTHENTICATION: - SMTP_DOMAIN: - SMTP_ENABLE_STARTTLS_AUTO: - SMTP_PASSWORD_FILE: /run/secrets/smtp_password - SMTP_PORT: - SMTP_USER_NAME: + <<: *env FOODSOFT_SERVICE: worker networks: - internal From 964610022b7aa8266bd38d7bfec028a8e01649ae Mon Sep 17 00:00:00 2001 From: Philipp Rothmann Date: Thu, 7 Apr 2022 17:18:19 +0200 Subject: [PATCH 5/5] add group order invoice override --- .env.sample | 7 ++++++- compose.groupOrderInvoice.yml | 11 +++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 compose.groupOrderInvoice.yml diff --git a/.env.sample b/.env.sample index 7e20467..2827c6c 100644 --- a/.env.sample +++ b/.env.sample @@ -2,6 +2,7 @@ TYPE=foodsoft DOMAIN=order.example.org LETS_ENCRYPT_ENV=production +COMPOSE_FILE="compose.yml" LOG_LEVEL=":info" @@ -28,13 +29,17 @@ MYSQL_PORT=3306 MYSQL_USER=foodsoft # shared supplier list settings -# COMPOSE_FILE="compose.yml:compose.sharedlists.yml" +# COMPOSE_FILE="$COMPOSE_FILE:compose.sharedlists.yml" # ENABLE_SHARED_LISTS=0 # SHARED_LISTS_DB_TYPE=mysql2 # SHARED_LISTS_HOST=order.otherfoodcoop.org # SHARED_LISTS_DB_NAME=sharedlists # SHARED_LISTS_USER=example +# Group order invoices generation pull request +# https://github.com/foodcoops/foodsoft/pull/907 +# COMPOSE_FILE="$COMPOSE_FILE:compose.groupOrderInvoice.yml" + # outgoing mail settings EMAIL_SENDER=noreply@example.org EMAIL_ERROR=systems@example.org diff --git a/compose.groupOrderInvoice.yml b/compose.groupOrderInvoice.yml new file mode 100644 index 0000000..38dee3d --- /dev/null +++ b/compose.groupOrderInvoice.yml @@ -0,0 +1,11 @@ +--- +version: "3.8" + +services: + app: + image: viehlieb/foodsoft:2022-04-07_2 + cron: + image: viehlieb/foodsoft:2022-04-07_2 + worker: + image: viehlieb/foodsoft:2022-04-07_2 +