diff --git a/.env.sample b/.env.sample
index 2827c6c..a0d398c 100644
--- a/.env.sample
+++ b/.env.sample
@@ -1,11 +1,10 @@
TYPE=foodsoft
DOMAIN=order.example.org
+#EXTRA_DOMAINS=', `www.order.example.com`'
LETS_ENCRYPT_ENV=production
COMPOSE_FILE="compose.yml"
-LOG_LEVEL=":info"
-
# app settings
FOODCOOP_MULTI_INSTALL=true # Best for now, see https://github.com/foodcoops/foodsoft/pull/841
FOODCOOP_NAME=example
@@ -18,9 +17,12 @@ FOODCOOP_ZIP_CODE=XXX
FOODCOOP_HOMEPAGE=https://order.example.org
FOODCOOP_HELP_URL=https://order.example.org
FOODCOOP_TIME_ZONE=Amsterdam
-FOODCOOP_FOOTER=""
FOODCOOP_USE_NICK=true
FOODCOOP_LANGUAGE=en
+FOODCOOP_FOOTER='example hosted by Your Tech Co-op.'
+USE_APPLE_POINTS=false
+STOP_ORDERING_UNDER=75
+MINIMUM_BALANCE=0
# database settings
MYSQL_DB=foodsoft
diff --git a/README.md b/README.md
index c7d26ea..bee0474 100644
--- a/README.md
+++ b/README.md
@@ -6,4 +6,17 @@
Configuration based on the good work of [foodcoops.net](https://github.com/foodcoops/foodcoops.net).
- New instances automatically set the initial administrator login to username: `admin` / password: `secret`.
+New instances automatically set the initial administrator login to username: `admin` / password: `secret`.
+
+
+
+* **Category**: Apps
+* **Status**:
+* **Image**: [`foodcoops/foodsoft`](https://hub.docker.com/r/foodcoops/foodsoft), 4, upstream
+* **Healthcheck**:
+* **Backups**:
+* **Email**:
+* **Tests**:
+* **SSO**:
+
+
diff --git a/abra.sh b/abra.sh
index 7007d7c..cf304e2 100644
--- a/abra.sh
+++ b/abra.sh
@@ -1,4 +1,4 @@
-export APP_CONFIG_VERSION=v2
+export APP_CONFIG_VERSION=v5
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 6606b40..f1e1a58 100644
--- a/app_config.yml.tmpl
+++ b/app_config.yml.tmpl
@@ -59,14 +59,14 @@ default: &defaults
# Ordergroups, which have less than 75 apples should not be allowed to make new orders
# Comment out this option to activate this restriction
- #stop_ordering_under: 75
+ stop_ordering_under: {{ env "STOP_ORDERING_UNDER" }}
# Comment out to completely hide apple points (be sure to comment stop_ordering_under)
- #use_apple_points: false
+ use_apple_points: {{ env "USE_APPLE_POINTS" }}
# ordergroups can only order when their balance is higher than or equal to this
# not fully enforced right now, since the check is only client-side
- #minimum_balance: 0
+ minimum_balance: {{ env "MINIMUM_BALANCE" }}
# how many days there are between two periodic tasks
#tasks_period_days: 7
@@ -112,7 +112,7 @@ default: &defaults
# order_by_articles: true
# Page footer (html allowed). Default is a Foodsoft footer. Set to `blank` for no footer.
- page_footer: "{{ env "FOODCOOP_FOOTER" }}"
+ page_footer: {{ env "FOODCOOP_FOOTER" }}
# Custom CSS for the foodcoop
#custom_css: 'body { background-color: #fcffba; }'
diff --git a/compose.groupOrderInvoice.yml b/compose.groupOrderInvoice.yml
index 38dee3d..3e2bdd8 100644
--- a/compose.groupOrderInvoice.yml
+++ b/compose.groupOrderInvoice.yml
@@ -8,4 +8,5 @@ services:
image: viehlieb/foodsoft:2022-04-07_2
worker:
image: viehlieb/foodsoft:2022-04-07_2
-
+ smtp:
+ image: viehlieb/foodsoft:2022-04-07_2
diff --git a/compose.yml b/compose.yml
index f50404e..07afaba 100644
--- a/compose.yml
+++ b/compose.yml
@@ -1,3 +1,4 @@
+---
version: "3.8"
x-env: &env
@@ -35,14 +36,14 @@ x-env: &env
SMTP_PASSWORD_FILE: /run/secrets/smtp_password
SMTP_PORT:
SMTP_USER_NAME:
+ STOP_ORDERING_UNDER:
+ USE_APPLE_POINTS:
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
@@ -60,7 +61,7 @@ services:
- proxy
secrets: *secrets
configs: *configs
- entrypoint: /usr/src/app/docker-entrypoint.sh
+ entrypoint: &entrypoint /usr/src/app/docker-entrypoint.sh
environment:
<<: *env
FOODSOFT_SERVICE: app
@@ -76,16 +77,17 @@ services:
order: start-first
labels:
- "traefik.enable=true"
- - "traefik.http.routers.foodsoft.rule=Host(`${DOMAIN}`)"
- - "traefik.http.routers.foodsoft.entrypoints=web-secure"
- - "traefik.http.services.foodsoft.loadbalancer.server.port=3000"
- - "traefik.http.routers.foodsoft.tls.certresolver=${LETS_ENCRYPT_ENV}"
- - coop-cloud.${STACK_NAME}.app.version=4.7.1-
+ - "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}"
+ - "traefik.http.services.${STACK_NAME}.loadbalancer.server.port=3000"
+ - "coop-cloud.${STACK_NAME}.version=1.0.0+4.7.1"
+
cron:
image: foodcoops/foodsoft:4.7.1
secrets: *secrets
configs: *configs
- entrypoint: /usr/src/app/docker-entrypoint.sh
+ entrypoint: *entrypoint
environment:
<<: *env
FOODSOFT_SERVICE: cron
@@ -96,13 +98,33 @@ services:
image: foodcoops/foodsoft:4.7.1
secrets: *secrets
configs: *configs
- entrypoint: /usr/src/app/docker-entrypoint.sh
+ entrypoint: *entrypoint
environment:
<<: *env
FOODSOFT_SERVICE: worker
networks:
- internal
+ smtp:
+ image: foodcoops/foodsoft:4.7.1
+ configs: *configs
+ entrypoint: *entrypoint
+ secrets: *secrets
+ environment:
+ <<: *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}"
+
db:
image: "mariadb:10.6"
command: "mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_520_ci"
@@ -150,10 +172,6 @@ configs:
name: ${STACK_NAME}_entrypoint_${ENTRYPOINT_VERSION}
file: entrypoint.sh.tmpl
template_driver: golang
- production_env:
- name: ${STACK_NAME}_production_env_${PRODUCTION_ENV_VERSION}
- file: production.rb.tmpl
- template_driver: golang
secrets:
db_password:
diff --git a/production.rb.tmpl b/production.rb.tmpl
deleted file mode 100644
index 5e40aab..0000000
--- a/production.rb.tmpl
+++ /dev/null
@@ -1,112 +0,0 @@
-# Foodsoft production configuration.
-#
-# This file is in the public domain.
-
-Rails.application.configure do
- # Settings specified here will take precedence over those in config/application.rb.
-
- # Code is not reloaded between requests.
- config.cache_classes = true
-
- # Eager load code on boot. This eager loads most of Rails and
- # your application in memory, allowing both threaded web servers
- # and those relying on copy on write to perform better.
- # Rake tasks automatically ignore this option for performance.
- config.eager_load = true
-
- # Full error reports are disabled and caching is turned on.
- config.consider_all_requests_local = false
- config.action_controller.perform_caching = true
-
- # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"]
- # or in config/master.key. This key is used to decrypt credentials (and other encrypted files).
- # config.require_master_key = true
-
- # Disable serving static files from the `/public` folder by default since
- # Apache or NGINX already handles this.
- config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
-
- # Compress JavaScripts and CSS.
- config.assets.js_compressor = :uglifier
- config.assets.css_compressor = :sass
-
- # Do not fallback to assets pipeline if a precompiled asset is missed.
- config.assets.compile = false
-
- # Enable serving of images, stylesheets, and JavaScripts from an asset server.
- # config.action_controller.asset_host = 'http://assets.example.com'
-
- # Specifies the header that your server uses for sending files.
- # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
- # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
-
- # Mount Action Cable outside main process or domain
- # config.action_cable.mount_path = nil
- # config.action_cable.url = 'wss://example.com/cable'
- # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
-
- # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
- config.force_ssl = ENV["RAILS_FORCE_SSL"] != "false"
-
- # Set to :debug to see everything in the log.
- config.log_level = {{ env "LOG_LEVEL" }}
-
- # Prepend all log lines with the following tags.
- config.log_tags = [:request_id]
-
- # Don't dump schema in production (especially useful for Docker)
- config.active_record.dump_schema_after_migration = false
-
- # Use a different cache store in production.
- # config.cache_store = :mem_cache_store
-
- config.action_mailer.perform_caching = false
-
- # Ignore bad email addresses and do not raise email delivery errors.
- # Set this to true and configure the email server for immediate delivery to raise delivery errors.
- # config.action_mailer.raise_delivery_errors = false
-
- # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
- # the I18n.default_locale when a translation cannot be found).
- config.i18n.fallbacks = true
-
- # Send deprecation notices to registered listeners.
- config.active_support.deprecation = :notify
-
- # Disable automatic flushing of the log to improve performance.
- # config.autoflush_log = false
-
- # Configure hostname for action mailer (can be overridden in foodcoop config)
- config.action_mailer.default_url_options = { host: `hostname -f`, protocol: 'https' }
-
- if ENV['SMTP_ADDRESS'].present?
- config.action_mailer.delivery_method = :smtp
- config.action_mailer.smtp_settings = { address: ENV['SMTP_ADDRESS'] }
- config.action_mailer.smtp_settings[:port] = ENV['SMTP_PORT'] if ENV['SMTP_PORT'].present?
- config.action_mailer.smtp_settings[:domain] = ENV['SMTP_DOMAIN'] if ENV['SMTP_DOMAIN'].present?
- config.action_mailer.smtp_settings[:user_name] = ENV['SMTP_USER_NAME'] if ENV['SMTP_USER_NAME'].present?
- config.action_mailer.smtp_settings[:password] = ENV['SMTP_PASSWORD'] if ENV['SMTP_PASSWORD'].present?
- config.action_mailer.smtp_settings[:authentication] = ENV['SMTP_AUTHENTICATION'] if ENV['SMTP_AUTHENTICATION'].present?
- config.action_mailer.smtp_settings[:enable_starttls_auto] = ENV['SMTP_ENABLE_STARTTLS_AUTO'] == 'true' if ENV['SMTP_ENABLE_STARTTLS_AUTO'].present?
- config.action_mailer.smtp_settings[:openssl_verify_mode] = ENV['SMTP_OPENSSL_VERIFY_MODE'] if ENV['SMTP_OPENSSL_VERIFY_MODE'].present?
- else
- # Use sendmail as default to avoid ssl cert problems
- config.action_mailer.delivery_method = :sendmail
- end
-
- # Use default logging formatter so that PID and timestamp are not suppressed.
- config.log_formatter = ::Logger::Formatter.new
-
- # Use a different logger for distributed setups.
- # require 'syslog/logger'
- # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
-
- if ENV["RAILS_LOG_TO_STDOUT"].present?
- logger = ActiveSupport::Logger.new(STDOUT)
- logger.formatter = config.log_formatter
- config.logger = ActiveSupport::TaggedLogging.new(logger)
- end
-
- # Do not dump schema after migrations.
- config.active_record.dump_schema_after_migration = false
-end
diff --git a/renovate.json b/renovate.json
deleted file mode 100644
index 7190a60..0000000
--- a/renovate.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "$schema": "https://docs.renovatebot.com/renovate-schema.json"
-}