diff --git a/public/svgs/grist.svg b/public/svgs/grist.svg new file mode 100644 index 000000000..82975b768 --- /dev/null +++ b/public/svgs/grist.svg @@ -0,0 +1,18 @@ + + + + grist-logo-icon-transparent + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/svgs/orangehrm.svg b/public/svgs/orangehrm.svg new file mode 100644 index 000000000..b976d57ec --- /dev/null +++ b/public/svgs/orangehrm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/compose/grist.yaml b/templates/compose/grist.yaml new file mode 100644 index 000000000..272b4fb5d --- /dev/null +++ b/templates/compose/grist.yaml @@ -0,0 +1,90 @@ +# documentation: https://support.getgrist.com/ +# slogan: Grist is a modern relational spreadsheet. It combines the flexibility of a spreadsheet with the robustness of a database. * Requires an OIDC provider set up. +# tags: lowcode, nocode, spreadsheet, database, relational +# logo: svgs/grist.svg +# port: 443 + +services: + grist: + image: gristlabs/grist + environment: + - TZ=${TZ:-UTC} + - GRIST_SUPPORT_ANON=${SUPPORT_ANON:-false} + - GRIST_FORCE_LOGIN=${FORCE_LOGIN:-true} + - COOKIE_MAX_AGE=${COOKIE_MAX_AGE:-86400000} + - GRIST_PAGE_TITLE_SUFFIX=${PAGE_TITLE_SUFFIX:- - Suffix} + - GRIST_HIDE_UI_ELEMENTS=${HIDE_UI_ELEMENTS:-billing,sendToDrive,supportGrist,multiAccounts,tutorials} + - GRIST_UI_FEATURES=${UI_FEATURES:-helpCenter,billing,templates,createSite,multiSite,sendToDrive,tutorials,supportGrist} + - SERVICE_FQDN_GRIST=${SERVICE_FQDN_GRIST} + - GRIST_DOMAIN=${DOMAIN:-domain.com} + - APP_HOME_URL=${SERVICE_FQDN_GRIST} + - APP_DOC_URL=${SERVICE_FQDN_GRIST} + - GRIST_DEFAULT_EMAIL=${DEFAULT_EMAIL:-super.user@email.com} + - GRIST_ORG_IN_PATH=${ORG_IN_PATH:-true} + - GRIST_OIDC_SP_HOST=${SERVICE_FQDN_GRIST} + - GRIST_OIDC_IDP_SCOPES=${OIDC_IDP_SCOPES:-openid profile email} + - GRIST_OIDC_IDP_SKIP_END_SESSION_ENDPOINT=${OIDC_IDP_SKIP_END_SESSION_ENDPOINT:-false} + - GRIST_OIDC_IDP_ISSUER=${OIDC_IDP_ISSUER:-https://auth.domain.com/application/o/grist/} + - GRIST_OIDC_IDP_CLIENT_ID=${OIDC_IDP_CLIENT_ID:-your-client-id} + - GRIST_OIDC_IDP_CLIENT_SECRET=${OIDC_IDP_CLIENT_SECRET:-your-client-secret} + - GRIST_SESSION_SECRET=${SESSION_SECRET:-$SERVICE_REALBASE64_128} + - GRIST_HOME_INCLUDE_STATIC=${HOME_INCLUDE_STATIC:-true} + - GRIST_SANDBOX_FLAVOR=${SANDBOX_FLAVOR:-gvisor} + - ALLOWED_WEBHOOK_DOMAINS=${ALLOWED_WEBHOOK_DOMAINS:-n8n.domain.com} + - COMMENTS=${COMMENTS:-true} + - TYPEORM_TYPE=${TYPEORM_TYPE:-postgres} + - TYPEORM_DATABASE=${POSTGRES_DATABASE:-postgres} + - TYPEORM_USERNAME=${POSTGRES_USERNAME:-postgres} + - TYPEORM_PASSWORD=${POSTGRES_PASSWORD:-$SERVICE_PASSWORD_POSTGRES} + - TYPEORM_HOST=${TYPEORM_HOST:-postgres} + - TYPEORM_PORT=${TYPEORM_PORT:-5432} + - TYPEORM_LOGGING=${TYPEORM_LOGGING:-false} + - REDIS_URL=${REDIS_URL:-redis://redis:6379} + - GRIST_HELP_CENTER=${HELP_CENTER:-$SERVICE_FQDN_GRIST/help} + - GRIST_TERMS_OF_SERVICE_URL=${TERMS_OF_SERVICE_URL:-$SERVICE_FQDN_GRIST/terms} + - FREE_COACHING_CALL_URL=${FREE_COACHING_CALL_URL:-super.user@email.com} + - GRIST_CONTACT_SUPPORT_URL=${CONTACT_SUPPORT_URL:-super.user@email.com} + volumes: + - 'grist-data:/persist' + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_healthy + healthcheck: + test: + - CMD + - node + - '-e' + - "require('http').get('http://localhost:8484/status', res => process.exit(res.statusCode === 200 ? 0 : 1))" + - '> /dev/null 2>&1' + interval: 5s + timeout: 20s + retries: 10 + postgres: + image: 'postgres:16' + environment: + - POSTGRES_DB=${POSTGRES_DATABASE:-postgres} + - POSTGRES_USER=${POSTGRES_USERNAME:-postgres} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-$SERVICE_PASSWORD_POSTGRES} + volumes: + - 'postgres-data:/var/lib/postgresql/data' + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}' + interval: 5s + timeout: 10s + retries: 20 + redis: + image: 'redis:7' + volumes: + - 'redis-data:/data' + healthcheck: + test: + - CMD + - redis-cli + - PING + interval: 5s + timeout: 10s + retries: 20 diff --git a/templates/compose/orangehrm.yaml b/templates/compose/orangehrm.yaml new file mode 100644 index 000000000..f93f229d1 --- /dev/null +++ b/templates/compose/orangehrm.yaml @@ -0,0 +1,49 @@ +# documentation: https://starterhelp.orangehrm.com/hc/en-us +# slogan: Host OrangeHRM on your own infrastructure. This deployment option provides the greatest level of flexibility and control. +# tags: HR, HRIS, HRMS, human resource management, OrangeHRM, HR management +# logo: svgs/orangehrm.svg +# port: 80 + +services: + orangehrm: + image: 'orangehrm/orangehrm:latest' + platform: linux/amd64 + environment: + - SERVICE_FQDN_ORANGEHRM_80 + - ORANGEHRM_DATABASE_HOST=mariadb + - ORANGEHRM_DATABASE_USER=${SERVICE_USER_ORANGEHRM} + - ORANGEHRM_DATABASE_PASSWORD=${SERVICE_PASSWORD_ORANGEHRM} + - ORANGEHRM_DATABASE_NAME=${MARIADB_DATABASE:-orangehrm} + volumes: + - 'orangehrm-data:/orangehrm' + depends_on: + - mariadb + links: + - 'mariadb:mariadb' + healthcheck: + test: + - CMD + - curl + - '-f' + - 'http://127.0.0.1' + interval: 2s + timeout: 10s + retries: 10 + mariadb: + image: 'mariadb:10.11' + volumes: + - 'mariadb-data:/var/lib/mysql' + environment: + - MARIADB_ROOT_PASSWORD=${SERVICE_PASSWORD_ROOT} + - MARIADB_DATABASE=${MARIADB_DATABASE:-orangehrm} + - MARIADB_USER=${SERVICE_USER_ORANGEHRM} + - MARIADB_PASSWORD=${SERVICE_PASSWORD_ORANGEHRM} + healthcheck: + test: + - CMD + - healthcheck.sh + - '--connect' + - '--innodb_initialized' + interval: 5s + timeout: 20s + retries: 10