- templateVersion: 1.0.0
  defaultVersion: "9.22"
  documentation: https://docs.directus.io/getting-started/introduction.html
  type: directus-postgresql
  name: Directus
  subname: (PostgreSQL)
  description: >-
    Directus is a free and open-source headless CMS framework for managing custom SQL-based databases.
  labels:
    - CMS
    - headless
  services:
    $$id:
      name: Directus
      depends_on:
        - $$id-postgresql
        - $$id-redis
      image: directus/directus:$$core_version
      volumes:
        - $$id-uploads:/directus/uploads
        - $$id-database:/directus/database
        - $$id-extensions:/directus/extensions
      environment:
        - KEY=$$secret_key
        - SECRET=$$secret_secret
        - DB_CLIENT=pg
        - DB_CONNECTION_STRING=$$secret_db_connection_string
        - CACHE_ENABLED=true
        - CACHE_STORE=redis
        - CACHE_REDIS=$$secret_cache_redis
        - ADMIN_EMAIL=$$config_admin_email
        - ADMIN_PASSWORD=$$secret_admin_password
        - CACHE_AUTO_PURGE=true
        - PUBLIC_URL=$$config_public_url
      ports:
        - "8055"
    $$id-postgresql:
      name: Directus PostgreSQL
      depends_on: []
      image: postgres:14-alpine
      volumes:
        - $$id-postgresql-data:/var/lib/postgresql/data
      environment:
        - POSTGRES_USER=$$config_postgres_user
        - POSTGRES_PASSWORD=$$secret_postgres_password
        - POSTGRES_DB=$$config_postgres_db
      ports: []
    $$id-redis:
      name: Directus Redis
      depends_on: []
      image: redis:7.0.4-alpine
      command: "--maxmemory 512mb --maxmemory-policy allkeys-lru --maxmemory-samples 5"
      volumes:
        - "$$id-redis:/data"
      environment: []
  variables:
    - id: $$config_public_url
      name: PUBLIC_URL
      label: Public URL
      defaultValue: $$generate_fqdn
      description: ""
    - id: $$secret_db_connection_string
      name: DB_CONNECTION_STRING
      label: Directus Database Url
      defaultValue: postgresql://$$config_postgres_user:$$secret_postgres_password@$$id-postgresql:5432/$$config_postgres_db
      description: ""
    - id: $$config_postgres_db
      main: $$id-postgresql
      name: POSTGRES_DB
      label: Database
      defaultValue: directus
      description: ""
    - id: $$config_postgres_user
      main: $$id-postgresql
      name: POSTGRES_USER
      label: User
      defaultValue: $$generate_username
      description: ""
    - id: $$secret_postgres_password
      main: $$id-postgresql
      name: POSTGRES_PASSWORD
      label: Password
      defaultValue: $$generate_password
      description: ""
      showOnConfiguration: true
    - id: $$secret_cache_redis
      name: CACHE_REDIS
      label: Redis Url
      defaultValue: redis://$$id-redis:6379
      description: ""
    - id: $$config_admin_email
      name: ADMIN_EMAIL
      label: Initial Admin Email
      defaultValue: "admin@example.com"
      description: "The email address of the first user that is automatically created. You can change it later in Directus."
    - id: $$secret_admin_password
      name: ADMIN_PASSWORD
      label: Initial Admin Password
      defaultValue: $$generate_password
      description: "The password of the first user that is automatically created."
      showOnConfiguration: true
    - id: $$secret_key
      name: KEY
      label: Key
      defaultValue: $$generate_password
      description: "Unique identifier for the project."
      showOnConfiguration: true
    - id: $$secret_secret
      name: SECRET
      label: Secret
      defaultValue: $$generate_password
      description: "Secret string for the project."
      showOnConfiguration: true

- templateVersion: 1.0.0
  defaultVersion: v1.3.8
  documentation: https://github.com/LibreTranslate/LibreTranslate
  description: Free and Open Source Machine Translation API. 100% self-hosted, offline capable and easy to setup.
  type: libretranslate
  name: Libretranslate
  labels:
    - translator
    - argos
    - python
    - libretranslate
  services:
    $$id:
      name: Libretranslate
      image: libretranslate/libretranslate:$$core_version
      environment:
        - LT_HOST=0.0.0.0
        - LT_SUGGESTIONS=true
        - LT_CHAR_LIMIT=$$config_lt_char_limit
        - LT_REQ_LIMIT=$$config_lt_req_limit
        - LT_BATCH_LIMIT=$$config_lt_batch_limit
        - LT_GA_ID=$$config_lt_ga_id
        - LT_DISABLE_WEB_UI=$$config_lt_web_ui
      volumes:
        - $$id-libretranslate:/libretranslate
      ports:
        - "5000"
  variables:
    - id: $$config_lt_char_limit
      name: LT_CHAR_LIMIT
      label: Char limit
      defaultValue: "5000"
      description: "Set character limit."
    - id: $$config_lt_req_limit
      name: LT_REQ_LIMIT
      label: Request limit
      defaultValue: "5000"
      description: "Set maximum number of requests per minute per client."
    - id: $$config_lt_batch_limit
      name: LT_BATCH_LIMIT
      label: Batch Limit
      defaultValue: "5000"
      description: "Set maximum number of texts to translate in a batch request."
    - id: $$config_lt_ga_id
      name: LT_GA_ID
      label: Google Analytics ID
      defaultValue: ""
      description: "Enable Google Analytics on the API client page by providing an ID"
    - id: $$config_lt_web_ui
      name: LT_DISABLE_WEB_UI
      label: Web UI
      defaultValue: "false"
      description: "Disable or enable web ui. True or false."
- templateVersion: 1.0.0
  defaultVersion: 0.8.0
  documentation: https://github.com/benbusby/whoogle-search
  type: whoogle
  name: Whoogle Search
  description: A self-hosted, ad-free, privacy-respecting metasearch engine
  labels:
    - search
    - google
  services:
    $$id:
      name: Whoogle Search
      documentation: https://github.com/benbusby/whoogle-search
      depends_on: []
      image: benbusby/whoogle-search:$$core_version
      cap_drop:
        - ALL
      environment:
        - WHOOGLE_USER=$$config_whoogle_username
        - WHOOGLE_PASS=$$secret_whoogle_password
        - WHOOGLE_CONFIG_PREFERENCES_KEY=$$secret_whoogle_preferences_key
      ulimits:
        nofile:
          soft: 262144
          hard: 262144
      ports:
        - "5000"
  variables:
    - id: $$config_whoogle_username
      name: WHOOGLE_USER
      label: Whoogle User
      defaultValue: $$generate_username
      description: "Username to log into Whoogle"
    - id: $$secret_whoogle_password
      name: WHOOGLE_PASSWORD
      label: Whoogle Password
      defaultValue: $$generate_password
      description: "Password to log into Whoogle"
      showOnConfiguration: true
    - id: $$secret_whoogle_preferences_key
      name: WHOOGLE_CONFIG_PREFERENCES_KEY
      label: Whoogle preferences key
      defaultValue: $$generate_password
      description: "password to encrypt preferences"
- templateVersion: 1.0.0
  defaultVersion: 1.1.5
  documentation: https://docs.openblocks.dev/
  type: openblocks
  name: Openblocks
  description: The Open Source Retool Alternative
  services:
    $$id:
      image: openblocksdev/openblocks-ce:$$core_version
      volumes:
        - $$id-stacks-data:/openblocks-stacks
      ports:
        - "3000"
- templateVersion: 1.0.0
  defaultVersion: "0.12.3"
  documentation: https://pocketbase.io/docs/
  type: pocketbase
  name: Pocketbase
  description: "Open Source realtime backend in 1 file"
  services:
    $$id:
      image: coollabsio/pocketbase:$$core_version
      volumes:
        - $$id-data:/app/pb_data
      ports:
        - "8080"
- templateVersion: 1.0.0
  defaultVersion: v1.5.1
  documentation: https://plausible.io/doc/
  type: plausibleanalytics-arm
  name: Plausible Analytics (ARM)
  description: A lightweight and open-source website analytics tool.
  labels:
    - analytics
    - statistics
    - plausible
    - gdpr
    - no-cookie
    - google analytics
  services:
    $$id:
      name: Plausible Analytics
      command: >-
        sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate
        && /entrypoint.sh db init-admin && /entrypoint.sh run"
      depends_on:
        - $$id-postgresql
        - $$id-clickhouse
      image: plausible/analytics:$$core_version
      environment:
        - ADMIN_USER_EMAIL=$$config_admin_user_email
        - ADMIN_USER_NAME=$$config_admin_user_name
        - ADMIN_USER_PWD=$$secret_admin_user_pwd
        - BASE_URL=$$config_base_url
        - SECRET_KEY_BASE=$$secret_secret_key_base
        - DISABLE_AUTH=$$config_disable_auth
        - DISABLE_REGISTRATION=$$config_disable_registration
        - DATABASE_URL=$$secret_database_url
        - CLICKHOUSE_DATABASE_URL=$$secret_clickhouse_database_url
      ports:
        - "8000"
    $$id-postgresql:
      name: PostgreSQL
      image: postgres:14-alpine
      volumes:
        - $$id-postgresql-data:/var/lib/postgresql/data
      environment:
        - POSTGRES_PASSWORD=$$secret_postgres_password
        - POSTGRES_USER=$$config_postgres_user
        - POSTGRES_DB=$$config_postgres_db
    $$id-clickhouse:
      name: Clickhouse
      volumes:
        - $$id-clickhouse-data:/var/lib/clickhouse
      image: clickhouse/clickhouse-server:22.6-alpine
      ulimits:
        nofile:
          soft: 262144
          hard: 262144
      files:
        - location: /etc/clickhouse-server/users.d/logging.xml
          content: >-
            <yandex><logger><level>warning</level><console>true</console></logger><query_thread_log
            remove="remove"/><query_log remove="remove"/><text_log
            remove="remove"/><trace_log remove="remove"/><metric_log
            remove="remove"/><asynchronous_metric_log
            remove="remove"/><session_log remove="remove"/><part_log
            remove="remove"/></yandex>
        - location: /etc/clickhouse-server/config.d/logging.xml
          content: >-
            <yandex><profiles><default><log_queries>0</log_queries><log_query_threads>0</log_query_threads></default></profiles></yandex>
        - location: /docker-entrypoint-initdb.d/init.query
          content: CREATE DATABASE IF NOT EXISTS plausible;
        - location: /docker-entrypoint-initdb.d/init-db.sh
          content: >-
            clickhouse client --queries-file
            /docker-entrypoint-initdb.d/init.query
  variables:
    - id: $$config_base_url
      name: BASE_URL
      label: Base URL
      defaultValue: $$generate_fqdn
      description: >-
        You must set this to the FQDN of the Plausible Analytics instance. This is
        used to generate the links to the Plausible Analytics instance.
    - id: $$secret_database_url
      name: DATABASE_URL
      label: Database URL for PostgreSQL
      defaultValue: >-
        postgresql://$$config_postgres_user:$$secret_postgres_password@$$id-postgresql:5432/$$config_postgres_db
      description: ""
    - id: $$secret_clickhouse_database_url
      name: CLICKHOUSE_DATABASE_URL
      label: Database URL for Clickhouse
      defaultValue: http://$$id-clickhouse:8123/plausible
      description: ""
    - id: $$config_admin_user_email
      name: ADMIN_USER_EMAIL
      label: Admin Email Address
      defaultValue: admin@example.com
      description: This is the admin email. Please change it.
    - id: $$config_admin_user_name
      name: ADMIN_USER_NAME
      label: Admin User Name
      defaultValue: $$generate_username
      description: This is the admin username. Please change it.
    - id: $$secret_admin_user_pwd
      name: ADMIN_USER_PWD
      label: Admin User Password
      defaultValue: $$generate_password
      description: This is the admin password. Please change it.
      showOnConfiguration: true
    - id: $$secret_secret_key_base
      name: SECRET_KEY_BASE
      label: Secret Key Base
      defaultValue: $$generate_hex(64)
      description: ""
    - id: $$config_disable_auth
      name: DISABLE_AUTH
      label: Authentication
      defaultValue: "false"
      description: ""
    - id: $$config_disable_registration
      name: DISABLE_REGISTRATION
      label: Registration
      defaultValue: "true"
      description: ""
    - id: $$config_postgres_user
      main: $$id-postgresql
      name: POSTGRES_USER
      label: PostgreSQL Username
      defaultValue: postgresql
      description: ""
    - id: $$secret_postgres_password
      main: $$id-postgresql
      name: POSTGRES_PASSWORD
      label: PostgreSQL Password
      defaultValue: $$generate_password
      description: ""
      showOnConfiguration: true
    - id: $$config_postgres_db
      main: $$id-postgresql
      name: POSTGRES_DB
      label: PostgreSQL Database
      defaultValue: plausible
      description: ""
    - id: $$config_scriptName
      name: SCRIPT_NAME
      label: Custom Script Name
      defaultValue: plausible.js
      description: This is the default script name.
- templateVersion: 1.0.0
  defaultVersion: "1.18"
  documentation: https://docs.gitea.io
  type: gitea
  name: Gitea
  description: Gitea is a community managed lightweight code hosting solution written in Go.
  labels:
    - storage
    - git
  services:
    $$id:
      name: Gitea
      documentation: https://docs.gitea.io
      image: gitea/gitea:$$core_version
      volumes:
        - $$id-data:/data
        - /etc/timezone:/etc/timezone:ro
        - /etc/localtime:/etc/localtime:ro
      environment:
        - USER_UID=1000
        - USER_GID=1000
        - DOMAIN=$$config_domain
        - SSH_DOMAIN=$$config_ssh_domain
        - ROOT_URL=$$config_root_url
        - SECRET_KEY=$$secret_secret_key
        - INTERNAL_TOKEN=$$secret_internal_token
        - SSH_PORT=22
        - START_SSH_SERVER=$$config_start_ssh_server
      ports:
        - "3000"
        - "22"
      proxy:
        - port: "22"
          hostPort: $$config_hostport_ssh
  variables:
    - id: $$config_hostport_ssh
      name: SSH_PORT
      label: SSH Port
      defaultValue: "8022"
      description: ""
      required: true
    - id: $$config_domain
      name: DOMAIN
      label: Domain
      defaultValue: $$generate_domain
      description: ""
    - id: $$config_ssh_domain
      name: SSH_DOMAIN
      label: SSH Domain
      defaultValue: $$generate_domain
      description: ""
    - id: $$config_start_ssh_server
      name: START_SSH_SERVER
      label: Start SSH Server
      defaultValue: "true"
      description: ""
    - id: $$config_root_url
      name: ROOT_URL
      label: Root URL of Gitea
      defaultValue: $$generate_fqdn_slash
      description: ""
    - id: $$secret_secret_key
      name: SECRET_KEY
      label: Secret Key
      defaultValue: $$generate_hex(32)
      description: ""
    - id: $$secret_internal_token
      name: INTERNAL_TOKEN
      label: Internal JWT Token
      defaultValue: $$generate_token
      description: ""
- templateVersion: 1.0.0
  defaultVersion: "20.0"
  documentation: https://www.keycloak.org/documentation
  type: keycloak
  name: Keycloak
  description: "Keycloak provides user federation, strong authentication, user management, fine-grained authorization, and more."
  labels:
    - authentication
    - authorization
    - oidconnect
    - saml2
  services:
    $$id:
      name: Keycloak
      command: start --db=postgres --features=token-exchange --import-realm
      depends_on:
        - $$id-postgresql
      image: "quay.io/keycloak/keycloak:$$core_version"
      volumes:
        - $$id-import:/opt/keycloak/data/import
      environment:
        - KC_HEALTH_ENABLED=true
        - KC_PROXY=edge
        - KC_DB=postgres
        - KC_HOSTNAME=$$config_keycloak_domain
        - KEYCLOAK_ADMIN=$$config_admin_user
        - KEYCLOAK_ADMIN_PASSWORD=$$secret_keycloak_admin_password
        - KC_DB_PASSWORD=$$secret_postgres_password
        - KC_DB_USERNAME=$$config_postgres_user
        - KC_DB_URL=$$secret_keycloak_database_url
      ports:
        - "8080"
    $$id-postgresql:
      name: PostgreSQL
      depends_on: []
      image: "postgres:14-alpine"
      volumes:
        - "$$id-postgresql-data:/var/lib/postgresql/data"
      environment:
        - POSTGRES_USER=$$config_postgres_user
        - POSTGRES_PASSWORD=$$secret_postgres_password
        - POSTGRES_DB=$$config_postgres_db
      ports: []
  variables:
    - id: $$config_keycloak_domain
      name: KEYCLOAK_DOMAIN
      label: Keycloak Domain
      defaultValue: $$generate_domain
      description: ""
    - id: $$secret_keycloak_database_url
      name: KEYCLOAK_DATABASE_URL
      label: Keycloak Database Url
      defaultValue: >-
        jdbc:postgresql://$$id-postgresql:5432/$$config_postgres_db
      description: ""
    - id: $$config_admin_user
      name: KEYCLOAK_ADMIN
      label: Keycloak Admin User
      defaultValue: $$generate_username
      description: ""
    - id: $$secret_keycloak_admin_password
      name: KEYCLOAK_ADMIN_PASSWORD
      label: Keycloak Admin Password
      defaultValue: $$generate_password
      description: ""
      showOnConfiguration: true
    - id: $$config_postgres_user
      main: $$id-postgresql
      name: POSTGRES_USER
      label: PostgreSQL User
      defaultValue: $$generate_username
      description: ""
    - id: $$secret_postgres_password
      main: $$id-postgresql
      name: POSTGRES_PASSWORD
      label: PostgreSQL Password
      defaultValue: $$generate_password
      description: ""
      showOnConfiguration: true
    - id: $$config_postgres_db
      main: $$id-postgresql
      name: POSTGRES_DB
      label: PostgreSQL Database
      defaultValue: keycloak
      description: ""
- templateVersion: 1.0.0
  defaultVersion: v3.7
  documentation: https://github.com/freyacodes/Lavalink
  description: Standalone audio sending node based on Lavaplayer.
  type: lavalink
  name: Lavalink
  labels:
    - discord
    - discord bot
    - audio
    - lavalink
    - jda
  services:
    $$id:
      name: Lavalink
      image: fredboat/lavalink:$$core_version
      environment: []
      volumes:
        - $$id-lavalink:/lavalink
      ports:
        - $$config_port
      files:
        - location: /opt/Lavalink/application.yml
          content: >-
            server:
              port: 2333
              address: 0.0.0.0
            lavalink:
              server:
                password: "$$secret_password"
                sources:
                  youtube: true
                  bandcamp: true
                  soundcloud: true
                  twitch: true
                  vimeo: true
                  http: true
                  local: false

            logging:
              file:
                path: ./logs/

              level:
                root: INFO
                lavalink: INFO

              logback:
                rollingpolicy:
                  max-file-size: 1GB
                  max-history: 30
  variables:
    - id: $$secret_password
      name: PASSWORD
      label: Password
      defaultValue: $$generate_password
      required: true
- templateVersion: 1.0.0
  defaultVersion: v1.9.6
  documentation: https://docs.appsmith.com/getting-started/setup/instance-configuration/
  type: appsmith
  name: Appsmith
  description: "Fastest way to build internal apps over any database or API."
  services:
    $$id:
      image: appsmith/appsmith-ce:$$core_version
      environment:
        - APPSMITH_MAIL_ENABLED=$$config_appsmith_mail_enabled
        - APPSMITH_DISABLE_TELEMETRY=$$config_appsmith_disable_telemetry
        - APPSMITH_DISABLE_INTERCOM=$$config_appsmith_disable_intercom
      volumes:
        - $$id-stacks-data:/appsmith-stacks
      ports:
        - "80"
  variables:
    - id: $$config_appsmith_mail_enabled
      name: APPSMITH_MAIL_ENABLED
      label: Enable Mail
      defaultValue: "false"
      description: ""
    - id: $$config_appsmith_disable_telemetry
      name: APPSMITH_DISABLE_TELEMETRY
      label: Disable Telemetry
      defaultValue: "true"
      description: ""
    - id: $$config_appsmith_disable_intercom
      name: APPSMITH_DISABLE_INTERCOM
      label: Disable Intercom
      defaultValue: "true"
      description: ""
- templateVersion: 1.0.0
  defaultVersion: 0.58.4
  documentation: https://hub.docker.com/r/zadam/trilium
  description: "A hierarchical note taking application with focus on building large personal knowledge bases."
  labels:
    - personal
    - knowledge
    - notes
    - wiki
  type: trilium
  name: Trilium Notes
  services:
    $$id:
      image: zadam/trilium:$$core_version
      environment: []
      volumes:
        - $$id-trilium:/home/node/trilium-data
      ports:
        - "8080"
  variables: []
- templateVersion: 1.0.0
  defaultVersion: 1.19.4
  documentation: https://hub.docker.com/r/louislam/uptime-kuma
  description: A free & fancy self-hosted monitoring tool.
  labels:
    - uptime
  type: uptimekuma
  name: UptimeKuma
  services:
    $$id:
      image: louislam/uptime-kuma:$$core_version
      environment: []
      volumes:
        - $$id-uptimekuma:/app/data
      ports:
        - "3001"
  variables: []
- templateVersion: 1.0.0
  defaultVersion: "6.0"
  documentation: https://hub.docker.com/r/silviof/docker-languagetool
  description: "A multilingual grammar, style and spell checker."
  type: languagetool
  name: LanguageTool
  services:
    $$id:
      image: silviof/docker-languagetool:$$core_version
      environment: []
      volumes:
        - $$id-ngrams:/ngrams
      ports:
        - "8010"
  variables: []
- templateVersion: 1.0.0
  defaultVersion: 1.27.0
  documentation: https://hub.docker.com/r/vaultwarden/server
  description: "Bitwarden compatible server written in Rust."
  type: vaultwarden
  name: VaultWarden
  labels:
    - bitwarden
    - password manager
  services:
    $$id:
      image: vaultwarden/server:$$core_version
      environment: []
      volumes:
        - $$id-data:/data
      ports:
        - "80"
  variables: []
- templateVersion: 1.0.0
  defaultVersion: 9.3.2
  documentation: https://hub.docker.com/r/grafana/grafana
  type: grafana
  name: Grafana
  description: >-
    Grafana allows you to query, visualize, alert on and understand your metrics.
  labels:
    - monitoring
    - metrics
    - dashboard
  services:
    $$id:
      image: grafana/grafana:$$core_version
      environment: []
      volumes:
        - $$id-config:/etc/grafana
        - $$id-grafana:/var/lib/grafana
      ports:
        - "3000"
  variables: []
- templateVersion: 1.0.0
  defaultVersion: 1.2.0
  documentation: https://appwrite.io/docs
  type: appwrite
  name: Appwrite
  description: Secure Backend Server for Web, Mobile & Flutter Developers.
  labels:
    - serverless
    - backend
    - storage
    - api
  services:
    "$$id":
      image: appwrite/appwrite:$$core_version
      environment:
        - _APP_ENV=$$config__app_env
        - _APP_WORKER_PER_CORE=$$config__app_worker_per_core
        - _APP_LOCALE=$$config__app_locale
        - _APP_CONSOLE_WHITELIST_ROOT=$$config__app_console_whitelist_root
        - _APP_CONSOLE_WHITELIST_EMAILS=$$config__app_console_whitelist_emails
        - _APP_CONSOLE_WHITELIST_IPS=$$config__app_console_whitelist_ips
        - _APP_SYSTEM_EMAIL_NAME=$$config__app_system_email_name
        - _APP_SYSTEM_EMAIL_ADDRESS=$$config__app_system_email_address
        - _APP_SYSTEM_SECURITY_EMAIL_ADDRESS=$$config__app_system_security_email_address
        - _APP_SYSTEM_RESPONSE_FORMAT=$$config__app_system_response_format
        - _APP_OPTIONS_ABUSE=$$config__app_options_abuse
        - _APP_OPTIONS_FORCE_HTTPS=$$config__app_options_force_https
        - _APP_OPENSSL_KEY_V1=$$secret__app_openssl_key_v1
        - _APP_DOMAIN=$$config__app_domain
        - _APP_DOMAIN_TARGET=$$config__app_domain_target
        - _APP_REDIS_HOST=$$config__app_redis_host
        - _APP_REDIS_PORT=$$config__app_redis_port
        - _APP_REDIS_USER=$$config__app_redis_user
        - _APP_REDIS_PASS=$$secret__app_redis_pass
        - _APP_DB_HOST=$$config__app_db_host
        - _APP_DB_PORT=$$config__app_db_port
        - _APP_DB_SCHEMA=$$config__app_db_schema
        - _APP_DB_USER=$$config__app_db_user
        - _APP_DB_PASS=$$secret__app_db_pass
        - _APP_SMTP_HOST=$$config__app_smtp_host
        - _APP_SMTP_PORT=$$config__app_smtp_port
        - _APP_SMTP_SECURE=$$config__app_smtp_secure
        - _APP_SMTP_USERNAME=$$config__app_smtp_username
        - _APP_SMTP_PASSWORD=$$secret__app_smtp_password
        - _APP_USAGE_STATS=$$config__app_usage_stats
        - _APP_INFLUXDB_HOST=$$config__app_influxdb_host
        - _APP_INFLUXDB_PORT=$$config__app_influxdb_port
        - _APP_STORAGE_LIMIT=$$config__app_storage_limit
        - _APP_STORAGE_PREVIEW_LIMIT=$$config__app_storage_preview_limit
        - _APP_STORAGE_ANTIVIRUS=$$config__app_storage_antivirus_enabled
        - _APP_STORAGE_ANTIVIRUS_HOST=$$config__app_storage_antivirus_host
        - _APP_STORAGE_ANTIVIRUS_PORT=$$config__app_storage_antivirus_port
        - _APP_STORAGE_DEVICE=$$config__app_storage_device
        - _APP_STORAGE_S3_ACCESS_KEY=$$secret__app_storage_s3_access_key
        - _APP_STORAGE_S3_SECRET=$$secret__app_storage_s3_secret
        - _APP_STORAGE_S3_REGION=$$config__app_storage_s3_region
        - _APP_STORAGE_S3_BUCKET=$$config__app_storage_s3_bucket
        - _APP_STORAGE_DO_SPACES_ACCESS_KEY=$$secret__app_storage_do_spaces_access_key
        - _APP_STORAGE_DO_SPACES_SECRET=$$secret__app_storage_do_spaces_secret
        - _APP_STORAGE_DO_SPACES_REGION=$$config__app_storage_do_spaces_region
        - _APP_STORAGE_DO_SPACES_BUCKET=$$config__app_storage_do_spaces_bucket
        - _APP_STORAGE_BACKBLAZE_ACCESS_KEY=$$secret__app_storage_backblaze_access_key
        - _APP_STORAGE_BACKBLAZE_SECRET=$$secret__app_storage_backblaze_secret
        - _APP_STORAGE_BACKBLAZE_REGION=$$config__app_storage_backblaze_region
        - _APP_STORAGE_BACKBLAZE_BUCKET=$$config__app_storage_backblaze_bucket
        - _APP_STORAGE_LINODE_ACCESS_KEY=$$secret__app_storage_linode_access_key
        - _APP_STORAGE_LINODE_SECRET=$$secret__app_storage_linode_secret
        - _APP_STORAGE_LINODE_REGION=$$config__app_storage_linode_region
        - _APP_STORAGE_LINODE_BUCKET=$$config__app_storage_linode_bucket
        - _APP_STORAGE_WASABI_ACCESS_KEY=$$secret__app_storage_wasabi_access_key
        - _APP_STORAGE_WASABI_SECRET=$$secret__app_storage_wasabi_secret
        - _APP_STORAGE_WASABI_REGION=$$config__app_storage_wasabi_region
        - _APP_STORAGE_WASABI_BUCKET=$$config__app_storage_wasabi_bucket
        - _APP_FUNCTIONS_SIZE_LIMIT=$$config__app_functions_size_limit
        - _APP_FUNCTIONS_TIMEOUT=$$config__app_functions_timeout
        - _APP_FUNCTIONS_BUILD_TIMEOUT=$$config__app_functions_build_timeout
        - _APP_FUNCTIONS_CONTAINERS=$$config__app_functions_containers
        - _APP_FUNCTIONS_CPUS=$$config__app_functions_cpus
        - _APP_FUNCTIONS_MEMORY=$$config__app_functions_memory_allocated
        - _APP_FUNCTIONS_MEMORY_SWAP=$$config__app_functions_memory_swap
        - _APP_FUNCTIONS_RUNTIMES=$$config__app_functions_runtimes
        - _APP_EXECUTOR_SECRET=$$secret__app_executor_secret
        - _APP_EXECUTOR_HOST=$$config__app_executor_host
        - _APP_LOGGING_PROVIDER=$$config__app_logging_provider
        - _APP_LOGGING_CONFIG=$$config__app_logging_config
        - _APP_STATSD_HOST=$$config__app_statsd_host
        - _APP_STATSD_PORT=$$config__app_statsd_port
        - _APP_MAINTENANCE_INTERVAL=$$config__app_maintenance_interval
        - _APP_MAINTENANCE_RETENTION_EXECUTION=$$config__app_maintenance_retention_execution
        - _APP_MAINTENANCE_RETENTION_CACHE=$$config__app_maintenance_retention_cache
        - _APP_MAINTENANCE_RETENTION_ABUSE=$$config__app_maintenance_retention_abuse
        - _APP_MAINTENANCE_RETENTION_AUDIT=$$config__app_maintenance_retention_audit
        - _APP_SMS_PROVIDER=$$config__app_sms_provider
        - _APP_SMS_FROM=$$config__app_sms_from
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes:
        - "$$id-uploads:/storage/uploads"
        - "$$id-cache:/storage/cache"
        - "$$id-config:/storage/config"
        - "$$id-certificates:/storage/certificates"
        - "$$id-functions:/storage/functions"
      ports:
        - "80"
      proxy:
        - port: "80"
    "$$id-executor":
      image: appwrite/appwrite:$$core_version
      environment:
        - _APP_ENV=$$config__app_env
        - _APP_FUNCTIONS_TIMEOUT=$$config__app_functions_timeout
        - _APP_FUNCTIONS_BUILD_TIMEOUT=$$config__app_functions_build_timeout
        - _APP_FUNCTIONS_CONTAINERS=$$config__app_functions_containers
        - _APP_FUNCTIONS_RUNTIMES=$$config__app_functions_runtimes
        - _APP_FUNCTIONS_CPUS=$$config__app_functions_cpus
        - _APP_FUNCTIONS_MEMORY=$$config__app_functions_memory_allocated
        - _APP_FUNCTIONS_MEMORY_SWAP=$$config__app_functions_memory_swap
        - _APP_FUNCTIONS_INACTIVE_THRESHOLD=$$config__app_functions_inactive_threshold
        - _APP_EXECUTOR_SECRET=$$secret__app_executor_secret
        - _APP_LOGGING_PROVIDER=$$config__app_logging_provider
        - _APP_LOGGING_CONFIG=$$config__app_logging_config
        - _APP_STORAGE_DEVICE=$$config__app_storage_device
        - _APP_STORAGE_S3_ACCESS_KEY=$$secret__app_storage_s3_access_key
        - _APP_STORAGE_S3_SECRET=$$secret__app_storage_s3_secret
        - _APP_STORAGE_S3_REGION=$$config__app_storage_s3_region
        - _APP_STORAGE_S3_BUCKET=$$config__app_storage_s3_bucket
        - _APP_STORAGE_DO_SPACES_ACCESS_KEY=$$secret__app_storage_do_spaces_access_key
        - _APP_STORAGE_DO_SPACES_SECRET=$$secret__app_storage_do_spaces_secret
        - _APP_STORAGE_DO_SPACES_REGION=$$config__app_storage_do_spaces_region
        - _APP_STORAGE_DO_SPACES_BUCKET=$$config__app_storage_do_spaces_bucket
        - _APP_STORAGE_BACKBLAZE_ACCESS_KEY=$$secret__app_storage_backblaze_access_key
        - _APP_STORAGE_BACKBLAZE_SECRET=$$secret__app_storage_backblaze_secret
        - _APP_STORAGE_BACKBLAZE_REGION=$$config__app_storage_backblaze_region
        - _APP_STORAGE_BACKBLAZE_BUCKET=$$config__app_storage_backblaze_bucket
        - _APP_STORAGE_LINODE_ACCESS_KEY=$$secret__app_storage_linode_access_key
        - _APP_STORAGE_LINODE_SECRET=$$secret__app_storage_linode_secret
        - _APP_STORAGE_LINODE_REGION=$$config__app_storage_linode_region
        - _APP_STORAGE_LINODE_BUCKET=$$config__app_storage_linode_bucket
        - _APP_STORAGE_WASABI_ACCESS_KEY=$$secret__app_storage_wasabi_access_key
        - _APP_STORAGE_WASABI_SECRET=$$secret__app_storage_wasabi_secret
        - _APP_STORAGE_WASABI_REGION=$$config__app_storage_wasabi_region
        - _APP_STORAGE_WASABI_BUCKET=$$config__app_storage_wasabi_bucket
        - DOCKERHUB_PULL_USERNAME=$$config_dockerhub_pull_username
        - DOCKERHUB_PULL_PASSWORD=$$secret_dockerhub_pull_password
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes:
        - "$$id-functions:/storage/functions"
        - "$$id-builds:/storage/builds"
        - "/var/run/docker.sock:/var/run/docker.sock"
        - "/tmp:/tmp:rw"
      entrypoint: executor
    "$$id-influxdb":
      image: appwrite/influxdb:1.5.0
      environment: []
      volumes:
        - "$$id-influxdb:/var/lib/influxdb"
    "$$id-maintenance":
      image: appwrite/appwrite:$$core_version
      environment:
        - _APP_ENV=$$config__app_env
        - _APP_OPENSSL_KEY_V1=$$secret__app_openssl_key_v1
        - _APP_DOMAIN=$$config__app_domain
        - _APP_DOMAIN_TARGET=$$config__app_domain_target
        - _APP_REDIS_HOST=$$config__app_redis_host
        - _APP_REDIS_PORT=$$config__app_redis_port
        - _APP_REDIS_USER=$$config__app_redis_user
        - _APP_REDIS_PASS=$$secret__app_redis_pass
        - _APP_DB_HOST=$$config__app_db_host
        - _APP_DB_PORT=$$config__app_db_port
        - _APP_DB_SCHEMA=$$config__app_db_schema
        - _APP_DB_USER=$$config__app_db_user
        - _APP_DB_PASS=$$secret__app_db_pass
        - _APP_MAINTENANCE_INTERVAL=$$config__app_maintenance_interval
        - _APP_MAINTENANCE_RETENTION_EXECUTION=$$config__app_maintenance_retention_execution
        - _APP_MAINTENANCE_RETENTION_CACHE=$$config__app_maintenance_retention_cache
        - _APP_MAINTENANCE_RETENTION_ABUSE=$$config__app_maintenance_retention_abuse
        - _APP_MAINTENANCE_RETENTION_AUDIT=$$config__app_maintenance_retention_audit
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes: []
      entrypoint: maintenance
    "$$id-mariadb":
      image: mariadb:10.7
      command: "--innodb-flush-method fsync"
      environment:
        - MARIADB_ROOT_PASSWORD=$$secret__app_db_root_pass
        - MARIADB_DATABASE=$$config__app_db_schema
        - MARIADB_USER=$$config__app_db_user
        - MARIADB_PASSWORD=$$secret__app_db_pass
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes:
        - "$$id-mariadb:/var/lib/mysql"
    "$$id-realtime":
      image: appwrite/appwrite:$$core_version
      environment:
        - _APP_ENV=$$config__app_env
        - _APP_WORKER_PER_CORE=$$config__app_worker_per_core
        - _APP_OPTIONS_ABUSE=$$config__app_options_abuse
        - _APP_OPENSSL_KEY_V1=$$secret__app_openssl_key_v1
        - _APP_REDIS_HOST=$$config__app_redis_host
        - _APP_REDIS_PORT=$$config__app_redis_port
        - _APP_DB_HOST=$$config__app_db_host
        - _APP_DB_PORT=$$config__app_db_port
        - _APP_DB_SCHEMA=$$config__app_db_schema
        - _APP_DB_USER=$$config__app_db_user
        - _APP_DB_PASS=$$secret__app_db_pass
        - _APP_USAGE_STATS=$$config__app_usage_stats
        - _APP_LOGGING_PROVIDER=$$config__app_logging_provider
        - _APP_LOGGING_CONFIG=$$config__app_logging_config
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes: []
      entrypoint: realtime
      proxy:
        - port: "80"
          pathPrefix: "/v1/realtime"
    "$$id-redis":
      image: redis:7.0.4-alpine
      command:
        "--maxmemory 512mb --maxmemory-policy allkeys-lru --maxmemory-samples
        5"
      environment: []
      volumes:
        - "$$id-redis:/data"
    "$$id-schedule":
      image: appwrite/appwrite:$$core_version
      environment:
        - _APP_ENV=$$config__app_env
        - _APP_REDIS_HOST=$$config__app_redis_host
        - _APP_REDIS_PORT=$$config__app_redis_port
        - _APP_REDIS_USER=$$config__app_redis_user
        - _APP_REDIS_PASS=$$secret__app_redis_pass
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes: []
      entrypoint: schedule
    "$$id-telegraf":
      image: appwrite/telegraf:1.4.0
      environment:
        - _APP_INFLUXDB_HOST=$$config__app_influxdb_host
        - _APP_INFLUXDB_PORT=$$config__app_influxdb_port
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes:
        - "$$id-influxdb:/var/lib/influxdb"
    "$$id-usage-database":
      image: appwrite/appwrite:$$core_version
      environment:
        - _APP_ENV=$$config__app_env
        - _APP_OPENSSL_KEY_V1=$$secret__app_openssl_key_v1
        - _APP_DB_HOST=$$config__app_db_host
        - _APP_DB_PORT=$$config__app_db_port
        - _APP_DB_SCHEMA=$$config__app_db_schema
        - _APP_DB_USER=$$config__app_db_user
        - _APP_DB_PASS=$$secret__app_db_pass
        - _APP_INFLUXDB_HOST=$$config__app_influxdb_host
        - _APP_INFLUXDB_PORT=$$config__app_influxdb_port
        - _APP_USAGE_TIMESERIES_INTERVAL=$$config__app_usage_timeseries_interval
        - _APP_USAGE_DATABASE_INTERVAL=$$config__app_usage_database_interval
        - _APP_REDIS_HOST=$$config__app_redis_host
        - _APP_REDIS_PORT=$$config__app_redis_port
        - _APP_REDIS_USER=$$config__app_redis_user
        - _APP_REDIS_PASS=$$secret__app_redis_pass
        - _APP_LOGGING_PROVIDER=$$config__app_logging_provider
        - _APP_LOGGING_CONFIG=$$config__app_logging_config
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes: []
      entrypoint: usage --type database
    "$$id-usage":
      image: appwrite/appwrite:$$core_version
      environment:
        - _APP_ENV=$$config__app_env
        - _APP_OPENSSL_KEY_V1=$$secret__app_openssl_key_v1
        - _APP_DB_HOST=$$config__app_db_host
        - _APP_DB_PORT=$$config__app_db_port
        - _APP_DB_SCHEMA=$$config__app_db_schema
        - _APP_DB_USER=$$config__app_db_user
        - _APP_DB_PASS=$$secret__app_db_pass
        - _APP_INFLUXDB_HOST=$$config__app_influxdb_host
        - _APP_INFLUXDB_PORT=$$config__app_influxdb_port
        - _APP_USAGE_TIMESERIES_INTERVAL=$$config__app_usage_timeseries_interval
        - _APP_USAGE_DATABASE_INTERVAL=$$config__app_usage_database_interval
        - _APP_REDIS_HOST=$$config__app_redis_host
        - _APP_REDIS_PORT=$$config__app_redis_port
        - _APP_REDIS_USER=$$config__app_redis_user
        - _APP_REDIS_PASS=$$secret__app_redis_pass
        - _APP_LOGGING_PROVIDER=$$config__app_logging_provider
        - _APP_LOGGING_CONFIG=$$config__app_logging_config
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes: []
      entrypoint: usage --type timeseries
    "$$id-worker-audits":
      image: appwrite/appwrite:$$core_version
      environment:
        - _APP_ENV=$$config__app_env
        - _APP_OPENSSL_KEY_V1=$$secret__app_openssl_key_v1
        - _APP_REDIS_HOST=$$config__app_redis_host
        - _APP_REDIS_PORT=$$config__app_redis_port
        - _APP_REDIS_USER=$$config__app_redis_user
        - _APP_REDIS_PASS=$$secret__app_redis_pass
        - _APP_DB_HOST=$$config__app_db_host
        - _APP_DB_PORT=$$config__app_db_port
        - _APP_DB_SCHEMA=$$config__app_db_schema
        - _APP_DB_USER=$$config__app_db_user
        - _APP_DB_PASS=$$secret__app_db_pass
        - _APP_LOGGING_PROVIDER=$$config__app_logging_provider
        - _APP_LOGGING_CONFIG=$$config__app_logging_config
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes: []
      entrypoint: worker-audits
    "$$id-worker-builds":
      image: appwrite/appwrite:$$core_version
      environment:
        - _APP_ENV=$$config__app_env
        - _APP_OPENSSL_KEY_V1=$$secret__app_openssl_key_v1
        - _APP_EXECUTOR_SECRET=$$secret__app_executor_secret
        - _APP_EXECUTOR_HOST=$$config__app_executor_host
        - _APP_REDIS_HOST=$$config__app_redis_host
        - _APP_REDIS_PORT=$$config__app_redis_port
        - _APP_REDIS_USER=$$config__app_redis_user
        - _APP_REDIS_PASS=$$secret__app_redis_pass
        - _APP_DB_HOST=$$config__app_db_host
        - _APP_DB_PORT=$$config__app_db_port
        - _APP_DB_SCHEMA=$$config__app_db_schema
        - _APP_DB_USER=$$config__app_db_user
        - _APP_DB_PASS=$$secret__app_db_pass
        - _APP_LOGGING_PROVIDER=$$config__app_logging_provider
        - _APP_LOGGING_CONFIG=$$config__app_logging_config
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes: []
      entrypoint: worker-builds
    "$$id-worker-certificates":
      image: appwrite/appwrite:$$core_version
      environment:
        - _APP_ENV=$$config__app_env
        - _APP_OPENSSL_KEY_V1=$$secret__app_openssl_key_v1
        - _APP_DOMAIN=$$config__app_domain
        - _APP_DOMAIN_TARGET=$$config__app_domain_target
        - _APP_SYSTEM_SECURITY_EMAIL_ADDRESS=$$config__app_system_security_email_address
        - _APP_REDIS_HOST=$$config__app_redis_host
        - _APP_REDIS_PORT=$$config__app_redis_port
        - _APP_REDIS_USER=$$config__app_redis_user
        - _APP_REDIS_PASS=$$secret__app_redis_pass
        - _APP_DB_HOST=$$config__app_db_host
        - _APP_DB_PORT=$$config__app_db_port
        - _APP_DB_SCHEMA=$$config__app_db_schema
        - _APP_DB_USER=$$config__app_db_user
        - _APP_DB_PASS=$$secret__app_db_pass
        - _APP_LOGGING_PROVIDER=$$config__app_logging_provider
        - _APP_LOGGING_CONFIG=$$config__app_logging_config
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes:
        - "$$id-config:/storage/config"
        - "$$id-certificates:/storage/certificates"
      entrypoint: worker-certificates
    "$$id-worker-databases":
      image: appwrite/appwrite:$$core_version
      environment:
        - _APP_ENV=$$config__app_env
        - _APP_OPENSSL_KEY_V1=$$secret__app_openssl_key_v1
        - _APP_REDIS_HOST=$$config__app_redis_host
        - _APP_REDIS_PORT=$$config__app_redis_port
        - _APP_REDIS_USER=$$config__app_redis_user
        - _APP_REDIS_PASS=$$secret__app_redis_pass
        - _APP_DB_HOST=$$config__app_db_host
        - _APP_DB_PORT=$$config__app_db_port
        - _APP_DB_SCHEMA=$$config__app_db_schema
        - _APP_DB_USER=$$config__app_db_user
        - _APP_DB_PASS=$$secret__app_db_pass
        - _APP_LOGGING_PROVIDER=$$config__app_logging_provider
        - _APP_LOGGING_CONFIG=$$config__app_logging_config
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes: []
      entrypoint: worker-databases
    "$$id-worker-deletes":
      image: appwrite/appwrite:$$core_version
      environment:
        - _APP_ENV=$$config__app_env
        - _APP_OPENSSL_KEY_V1=$$secret__app_openssl_key_v1
        - _APP_REDIS_HOST=$$config__app_redis_host
        - _APP_REDIS_PORT=$$config__app_redis_port
        - _APP_REDIS_USER=$$config__app_redis_user
        - _APP_REDIS_PASS=$$secret__app_redis_pass
        - _APP_DB_HOST=$$config__app_db_host
        - _APP_DB_PORT=$$config__app_db_port
        - _APP_DB_SCHEMA=$$config__app_db_schema
        - _APP_DB_USER=$$config__app_db_user
        - _APP_DB_PASS=$$secret__app_db_pass
        - _APP_STORAGE_DEVICE=$$config__app_storage_device
        - _APP_STORAGE_S3_ACCESS_KEY=$$secret__app_storage_s3_access_key
        - _APP_STORAGE_S3_SECRET=$$secret__app_storage_s3_secret
        - _APP_STORAGE_S3_REGION=$$config__app_storage_s3_region
        - _APP_STORAGE_S3_BUCKET=$$config__app_storage_s3_bucket
        - _APP_STORAGE_DO_SPACES_ACCESS_KEY=$$secret__app_storage_do_spaces_access_key
        - _APP_STORAGE_DO_SPACES_SECRET=$$secret__app_storage_do_spaces_secret
        - _APP_STORAGE_DO_SPACES_REGION=$$config__app_storage_do_spaces_region
        - _APP_STORAGE_DO_SPACES_BUCKET=$$config__app_storage_do_spaces_bucket
        - _APP_STORAGE_BACKBLAZE_ACCESS_KEY=$$secret__app_storage_backblaze_access_key
        - _APP_STORAGE_BACKBLAZE_SECRET=$$secret__app_storage_backblaze_secret
        - _APP_STORAGE_BACKBLAZE_REGION=$$config__app_storage_backblaze_region
        - _APP_STORAGE_BACKBLAZE_BUCKET=$$config__app_storage_backblaze_bucket
        - _APP_STORAGE_LINODE_ACCESS_KEY=$$secret__app_storage_linode_access_key
        - _APP_STORAGE_LINODE_SECRET=$$secret__app_storage_linode_secret
        - _APP_STORAGE_LINODE_REGION=$$config__app_storage_linode_region
        - _APP_STORAGE_LINODE_BUCKET=$$config__app_storage_linode_bucket
        - _APP_STORAGE_WASABI_ACCESS_KEY=$$secret__app_storage_wasabi_access_key
        - _APP_STORAGE_WASABI_SECRET=$$secret__app_storage_wasabi_secret
        - _APP_STORAGE_WASABI_REGION=$$config__app_storage_wasabi_region
        - _APP_STORAGE_WASABI_BUCKET=$$config__app_storage_wasabi_bucket
        - _APP_LOGGING_PROVIDER=$$config__app_logging_provider
        - _APP_LOGGING_CONFIG=$$config__app_logging_config
        - _APP_EXECUTOR_SECRET=$$secret__app_executor_secret
        - _APP_EXECUTOR_HOST=$$config__app_executor_host
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes:
        - "$$id-uploads:/storage/uploads"
        - "$$id-cache:/storage/cache"
        - "$$id-functions:/storage/functions"
        - "$$id-builds:/storage/builds"
        - "$$id-certificates:/storage/certificates"
      entrypoint: worker-deletes
    "$$id-worker-functions":
      image: appwrite/appwrite:$$core_version
      environment:
        - _APP_ENV=$$config__app_env
        - _APP_OPENSSL_KEY_V1=$$secret__app_openssl_key_v1
        - _APP_REDIS_HOST=$$config__app_redis_host
        - _APP_REDIS_PORT=$$config__app_redis_port
        - _APP_REDIS_USER=$$config__app_redis_user
        - _APP_REDIS_PASS=$$secret__app_redis_pass
        - _APP_DB_HOST=$$config__app_db_host
        - _APP_DB_PORT=$$config__app_db_port
        - _APP_DB_SCHEMA=$$config__app_db_schema
        - _APP_DB_USER=$$config__app_db_user
        - _APP_DB_PASS=$$secret__app_db_pass
        - _APP_FUNCTIONS_TIMEOUT=$$config__app_functions_timeout
        - _APP_EXECUTOR_SECRET=$$secret__app_executor_secret
        - _APP_EXECUTOR_HOST=$$config__app_executor_host
        - _APP_USAGE_STATS=$$config__app_usage_stats
        - DOCKERHUB_PULL_USERNAME=$$config_dockerhub_pull_username
        - DOCKERHUB_PULL_PASSWORD=$$secret_dockerhub_pull_password
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes: []
      entrypoint: worker-functions
    "$$id-worker-mails":
      image: appwrite/appwrite:$$core_version
      environment:
        - _APP_ENV=$$config__app_env
        - _APP_OPENSSL_KEY_V1=$$secret__app_openssl_key_v1
        - _APP_SYSTEM_EMAIL_NAME=$$config__app_system_email_name
        - _APP_SYSTEM_EMAIL_ADDRESS=$$config__app_system_email_address
        - _APP_REDIS_HOST=$$config__app_redis_host
        - _APP_REDIS_PORT=$$config__app_redis_port
        - _APP_REDIS_USER=$$config__app_redis_user
        - _APP_REDIS_PASS=$$secret__app_redis_pass
        - _APP_SMTP_HOST=$$config__app_smtp_host
        - _APP_SMTP_PORT=$$config__app_smtp_port
        - _APP_SMTP_SECURE=$$config__app_smtp_secure
        - _APP_SMTP_USERNAME=$$config__app_smtp_username
        - _APP_SMTP_PASSWORD=$$secret__app_smtp_password
        - _APP_LOGGING_PROVIDER=$$config__app_logging_provider
        - _APP_LOGGING_CONFIG=$$config__app_logging_config
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes: []
      entrypoint: worker-mails
    "$$id-worker-messaging":
      image: appwrite/appwrite:$$core_version
      environment:
        - _APP_ENV=$$config__app_env
        - _APP_REDIS_HOST=$$config__app_redis_host
        - _APP_REDIS_PORT=$$config__app_redis_port
        - _APP_REDIS_USER=$$config__app_redis_user
        - _APP_REDIS_PASS=$$secret__app_redis_pass
        - _APP_SMS_PROVIDER=$$config__app_sms_provider
        - _APP_SMS_FROM=$$config__app_sms_from
        - _APP_LOGGING_PROVIDER=$$config__app_logging_provider
        - _APP_LOGGING_CONFIG=$$config__app_logging_config
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes: []
      entrypoint: worker-messaging
    "$$id-worker-webhooks":
      image: appwrite/appwrite:$$core_version
      environment:
        - _APP_ENV=$$config__app_env
        - _APP_OPENSSL_KEY_V1=$$secret__app_openssl_key_v1
        - _APP_SYSTEM_SECURITY_EMAIL_ADDRESS=$$config__app_system_security_email_address
        - _APP_REDIS_HOST=$$config__app_redis_host
        - _APP_REDIS_PORT=$$config__app_redis_port
        - _APP_REDIS_USER=$$config__app_redis_user
        - _APP_REDIS_PASS=$$secret__app_redis_pass
        - _APP_LOGGING_PROVIDER=$$config__app_logging_provider
        - _APP_LOGGING_CONFIG=$$config__app_logging_config
        - OPEN_RUNTIMES_NETWORK=$$config_open_runtimes_network
      volumes: []
      entrypoint: worker-webhooks
  variables:
    - id: "$$config__app_influxdb_host"
      name: _APP_INFLUXDB_HOST
      label: InfluxDB | _APP_INFLUXDB_HOST
      defaultValue: "$$id-influxdb"
      description: ""
    - id: "$$config__app_influxdb_port"
      name: _APP_INFLUXDB_PORT
      label: InfluxDB | _APP_INFLUXDB_PORT
      defaultValue: "8086"
      description: InfluxDB server TCP port.
    - id: "$$config__app_env"
      name: _APP_ENV
      label: General | _APP_ENV
      defaultValue: production
      description: Set your server running environment.
    - id: "$$config__app_worker_per_core"
      name: _APP_WORKER_PER_CORE
      label: General | _APP_WORKER_PER_CORE
      defaultValue: "6"
      description:
        Internal Worker per core for the API, Realtime and Executor containers.
        Can be configured to optimize performance.
    - id: "$$config__app_locale"
      name: _APP_LOCALE
      label: General | _APP_LOCALE
      defaultValue: en
      description: Set your Appwrite's locale. By default, the locale is set to 'en'.
    - id: "$$config__app_console_whitelist_root"
      name: _APP_CONSOLE_WHITELIST_ROOT
      label: General | _APP_CONSOLE_WHITELIST_ROOT
      defaultValue: enabled
      description:
        This option allows you to disable the creation of new users on the
        Appwrite console. When enabled only 1 user will be able to use the registration
        form. New users can be added by inviting them to your project. By default this
        option is enabled.
    - id: "$$config__app_console_whitelist_emails"
      name: _APP_CONSOLE_WHITELIST_EMAILS
      label: General | _APP_CONSOLE_WHITELIST_EMAILS
      defaultValue: ""
      description:
        This option allows you to limit creation of new users on the Appwrite
        console. This option is very useful for small teams or sole developers. To enable
        it, pass a list of allowed email addresses separated by a comma.
    - id: "$$config__app_console_whitelist_ips"
      name: _APP_CONSOLE_WHITELIST_IPS
      label: General | _APP_CONSOLE_WHITELIST_IPS
      defaultValue: ""
      description:
        This last option allows you to limit creation of users in Appwrite
        console for users sharing the same set of IP addresses. This option is very
        useful for team working with a VPN service or a company IP.\n\nTo enable/activate
        this option, pass a list of allowed IP addresses separated by a comma.
    - id: "$$config__app_system_email_name"
      name: _APP_SYSTEM_EMAIL_NAME
      label: General | _APP_SYSTEM_EMAIL_NAME
      defaultValue: Appwrite
      description:
        This is the sender name value that will appear on email messages
        sent to developers from the Appwrite console. You can use url encoded strings
        for spaces and special chars.
    - id: "$$config__app_system_email_address"
      name: _APP_SYSTEM_EMAIL_ADDRESS
      label: General | _APP_SYSTEM_EMAIL_ADDRESS
      defaultValue: team@appwrite.io
      description:
        This is the sender email address that will appear on email messages
        sent to developers from the Appwrite console. You should choose an email address
        that is allowed to be used from your SMTP server to avoid the server email ending
        in the users' SPAM folders.
    - id: "$$config__app_system_security_email_address"
      name: _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
      label: General | _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
      defaultValue: certs@appwrite.io
      description:
        This is the email address used to issue SSL certificates for custom
        domains or the user agent in your webhooks payload.
    - id: "$$config__app_system_response_format"
      name: _APP_SYSTEM_RESPONSE_FORMAT
      label: General | _APP_SYSTEM_RESPONSE_FORMAT
      defaultValue: ""
      description:
        Use this environment variable to set the default Appwrite HTTP response
        format to support an older version of Appwrite. This option is useful to overcome
        breaking changes between versions. You can also use the X-Appwrite-Response-Format
        HTTP request header to overwrite the response for a specific request. This variable
        accepts any valid Appwrite version. To use the current version format, leave
        the value of the variable empty.
    - id: "$$config__app_options_abuse"
      name: _APP_OPTIONS_ABUSE
      label: General | _APP_OPTIONS_ABUSE
      defaultValue: enabled
      description:
        Allows you to disable abuse checks and API rate limiting. By default,
        set to 'enabled'. To cancel the abuse checking, set to 'disabled'. It is not
        recommended to disable this check-in a production environment.
    - id: "$$config__app_options_force_https"
      name: _APP_OPTIONS_FORCE_HTTPS
      label: General | _APP_OPTIONS_FORCE_HTTPS
      defaultValue: disabled
      description:
        Allows you to force HTTPS connection to your API. This feature redirects
        any HTTP call to HTTPS and adds the 'Strict-Transport-Security' header to all
        HTTP responses.
    - id: "$$secret__app_openssl_key_v1"
      name: _APP_OPENSSL_KEY_V1
      label: General | _APP_OPENSSL_KEY_V1
      defaultValue: "$$generate_hex(256)"
      description:
        This is your server private secret key that is used to encrypt all
        sensitive data on your server. Appwrite server encrypts all secret data on your
        server like webhooks, HTTP passwords, user sessions, and storage files. Keep
        it a secret and have a backup for it.
    - id: "$$config__app_domain"
      name: _APP_DOMAIN
      label: General | _APP_DOMAIN
      defaultValue: $$generate_domain
      description:
        Your Appwrite domain address. When setting a public suffix domain,
        Appwrite will attempt to issue a valid SSL certificate automatically. When used
        with a dev domain, Appwrite will assign a self-signed SSL certificate. The default
        value is 'localhost'.
    - id: "$$config__app_domain_target"
      name: _APP_DOMAIN_TARGET
      label: General | _APP_DOMAIN_TARGET
      defaultValue: $$generate_fqdn
      description:
        A DNS A record hostname to serve as a CNAME target for your Appwrite
        custom domains. You can use the same value as used for the Appwrite '_APP_DOMAIN'
        variable. The default value is 'localhost'.
    - id: "$$config__app_redis_host"
      name: _APP_REDIS_HOST
      label: Redis | _APP_REDIS_HOST
      defaultValue: "$$id-redis"
      description: ""
    - id: "$$config__app_redis_port"
      name: _APP_REDIS_PORT
      label: Redis | _APP_REDIS_PORT
      defaultValue: "6379"
      description: Redis server TCP port.
    - id: "$$config__app_redis_user"
      name: _APP_REDIS_USER
      label: Redis | _APP_REDIS_USER
      defaultValue: ""
      description:
        Redis server user. This is an optional variable. Default value is
        an empty string.
    - id: "$$secret__app_redis_pass"
      name: _APP_REDIS_PASS
      label: Redis | _APP_REDIS_PASS
      defaultValue: ""
      description:
        Redis server password. This is an optional variable. Default value
        is an empty string.
    - id: "$$config__app_db_host"
      name: _APP_DB_HOST
      label: MariaDB | _APP_DB_HOST
      defaultValue: "$$id-mariadb"
      description: ""
    - id: "$$config__app_db_port"
      name: _APP_DB_PORT
      label: MariaDB | _APP_DB_PORT
      defaultValue: "3306"
      description: MariaDB server TCP port.
    - id: "$$config__app_db_schema"
      name: _APP_DB_SCHEMA
      label: MariaDB | _APP_DB_SCHEMA
      defaultValue: appwrite
      description: MariaDB server database schema.
    - id: "$$config__app_db_user"
      name: _APP_DB_USER
      label: MariaDB | _APP_DB_USER
      defaultValue: user
      description: MariaDB server user name.
    - id: "$$secret__app_db_root_pass"
      name: MARIADB_ROOT_PASSWORD
      label: MariaDB | MARIADB_ROOT_PASSWORD
      defaultValue: "$$generate_hex(16)"
      description: MariaDB server root user password.
    - id: "$$secret__app_db_pass"
      name: _APP_DB_PASS
      label: MariaDB | _APP_DB_PASS
      defaultValue: "$$generate_hex(16)"
      description: MariaDB server user password.
    - id: "$$config__app_smtp_host"
      name: _APP_SMTP_HOST
      label: SMTP | _APP_SMTP_HOST
      defaultValue: ""
      description:
        SMTP server host name address. Use an empty string to disable all
        mail sending from the server. The default value for this variable is an empty
        string.
    - id: "$$config__app_smtp_port"
      name: _APP_SMTP_PORT
      label: SMTP | _APP_SMTP_PORT
      defaultValue: ""
      description: SMTP server TCP port. Empty by default.
    - id: "$$config__app_smtp_secure"
      name: _APP_SMTP_SECURE
      label: SMTP | _APP_SMTP_SECURE
      defaultValue: ""
      description:
        SMTP secure connection protocol. Empty by default, change to 'tls'
        if running on a secure connection.
    - id: "$$config__app_smtp_username"
      name: _APP_SMTP_USERNAME
      label: SMTP | _APP_SMTP_USERNAME
      defaultValue: ""
      description: SMTP server user name. Empty by default.
    - id: "$$secret__app_smtp_password"
      name: _APP_SMTP_PASSWORD
      label: SMTP | _APP_SMTP_PASSWORD
      defaultValue: ""
      description: SMTP server user password. Empty by default.
    - id: "$$config__app_usage_stats"
      name: _APP_USAGE_STATS
      label: General | _APP_USAGE_STATS
      defaultValue: enabled
      description:
        This variable allows you to disable the collection and displaying
        of usage stats. This value is set to 'enabled' by default, to disable the usage
        stats set the value to 'disabled'. When disabled, it's recommended to turn off
        the Worker Usage, Influxdb and Telegraf containers for better resource usage.
    - id: "$$config__app_storage_limit"
      name: _APP_STORAGE_LIMIT
      label: Storage | _APP_STORAGE_LIMIT
      defaultValue: "30000000"
      description:
        Maximum file size allowed for file upload. The default value is 30MB.
        You should pass your size limit value in bytes.
    - id: "$$config__app_storage_preview_limit"
      name: _APP_STORAGE_PREVIEW_LIMIT
      label: Storage | _APP_STORAGE_PREVIEW_LIMIT
      defaultValue: "20000000"
      description:
        Maximum file size allowed for file image preview. The default value
        is 20MB. You should pass your size limit value in bytes.
    - id: "$$config__app_storage_antivirus_enabled"
      name: _APP_STORAGE_ANTIVIRUS
      label: Storage | _APP_STORAGE_ANTIVIRUS
      defaultValue: disabled
      description:
        This variable allows you to disable the internal anti-virus scans.
        This value is set to 'disabled' by default, to enable the scans set the value
        to 'enabled'. Before enabling, you must add the ClamAV service and depend on
        it on main Appwrite service.
    - id: "$$config__app_storage_antivirus_host"
      name: _APP_STORAGE_ANTIVIRUS_HOST
      label: Storage | _APP_STORAGE_ANTIVIRUS_HOST
      defaultValue: clamav
      description: ClamAV server host name address.
    - id: "$$config__app_storage_antivirus_port"
      name: _APP_STORAGE_ANTIVIRUS_PORT
      label: Storage | _APP_STORAGE_ANTIVIRUS_PORT
      defaultValue: "3310"
      description: ClamAV server TCP port.
    - id: "$$config__app_storage_device"
      name: _APP_STORAGE_DEVICE
      label: Storage | _APP_STORAGE_DEVICE
      defaultValue: Local
      description:
        Select default storage device. The default value is 'Local'. List
        of supported adapters are 'Local', 'S3', 'DOSpaces', 'Backblaze', 'Linode' and
        'Wasabi'.
    - id: "$$secret__app_storage_s3_access_key"
      name: _APP_STORAGE_S3_ACCESS_KEY
      label: Storage | _APP_STORAGE_S3_ACCESS_KEY
      defaultValue: ""
      description:
        AWS S3 storage access key. Required when the storage adapter is set
        to S3. You can get your access key from your AWS console.
    - id: "$$secret__app_storage_s3_secret"
      name: _APP_STORAGE_S3_SECRET
      label: Storage | _APP_STORAGE_S3_SECRET
      defaultValue: ""
      description:
        AWS S3 storage secret key. Required when the storage adapter is set
        to S3. You can get your secret key from your AWS console.
    - id: "$$config__app_storage_s3_region"
      name: _APP_STORAGE_S3_REGION
      label: Storage | _APP_STORAGE_S3_REGION
      defaultValue: us-east-1
      description:
        AWS S3 storage region. Required when storage adapter is set to S3.
        You can find your region info for your bucket from AWS console.
    - id: "$$config__app_storage_s3_bucket"
      name: _APP_STORAGE_S3_BUCKET
      label: Storage | _APP_STORAGE_S3_BUCKET
      defaultValue: ""
      description:
        AWS S3 storage bucket. Required when storage adapter is set to S3.
        You can create buckets in your AWS console.
    - id: "$$secret__app_storage_do_spaces_access_key"
      name: _APP_STORAGE_DO_SPACES_ACCESS_KEY
      label: Storage | _APP_STORAGE_DO_SPACES_ACCESS_KEY
      defaultValue: ""
      description:
        DigitalOcean spaces access key. Required when the storage adapter
        is set to DOSpaces. You can get your access key from your DigitalOcean console.
    - id: "$$secret__app_storage_do_spaces_secret"
      name: _APP_STORAGE_DO_SPACES_SECRET
      label: Storage | _APP_STORAGE_DO_SPACES_SECRET
      defaultValue: ""
      description:
        DigitalOcean spaces secret key. Required when the storage adapter
        is set to DOSpaces. You can get your secret key from your DigitalOcean console.
    - id: "$$config__app_storage_do_spaces_region"
      name: _APP_STORAGE_DO_SPACES_REGION
      label: Storage | _APP_STORAGE_DO_SPACES_REGION
      defaultValue: us-east-1
      description:
        DigitalOcean spaces region. Required when storage adapter is set
        to DOSpaces. You can find your region info for your space from DigitalOcean
        console.
    - id: "$$config__app_storage_do_spaces_bucket"
      name: _APP_STORAGE_DO_SPACES_BUCKET
      label: Storage | _APP_STORAGE_DO_SPACES_BUCKET
      defaultValue: ""
      description:
        DigitalOcean spaces bucket. Required when storage adapter is set
        to DOSpaces. You can create spaces in your DigitalOcean console.
    - id: "$$secret__app_storage_backblaze_access_key"
      name: _APP_STORAGE_BACKBLAZE_ACCESS_KEY
      label: Storage | _APP_STORAGE_BACKBLAZE_ACCESS_KEY
      defaultValue: ""
      description:
        Backblaze access key. Required when the storage adapter is set to
        Backblaze. Your Backblaze keyID will be your access key. You can get your keyID
        from your Backblaze console.
    - id: "$$secret__app_storage_backblaze_secret"
      name: _APP_STORAGE_BACKBLAZE_SECRET
      label: Storage | _APP_STORAGE_BACKBLAZE_SECRET
      defaultValue: ""
      description:
        Backblaze secret key. Required when the storage adapter is set to
        Backblaze. Your Backblaze applicationKey will be your secret key. You can get
        your applicationKey from your Backblaze console.
    - id: "$$config__app_storage_backblaze_region"
      name: _APP_STORAGE_BACKBLAZE_REGION
      label: Storage | _APP_STORAGE_BACKBLAZE_REGION
      defaultValue: us-west-004
      description:
        Backblaze region. Required when storage adapter is set to Backblaze.
        You can find your region info from your Backblaze console.
    - id: "$$config__app_storage_backblaze_bucket"
      name: _APP_STORAGE_BACKBLAZE_BUCKET
      label: Storage | _APP_STORAGE_BACKBLAZE_BUCKET
      defaultValue: ""
      description:
        Backblaze bucket. Required when storage adapter is set to Backblaze.
        You can create your bucket from your Backblaze console.
    - id: "$$secret__app_storage_linode_access_key"
      name: _APP_STORAGE_LINODE_ACCESS_KEY
      label: Storage | _APP_STORAGE_LINODE_ACCESS_KEY
      defaultValue: ""
      description:
        Linode object storage access key. Required when the storage adapter
        is set to Linode. You can get your access key from your Linode console.
    - id: "$$secret__app_storage_linode_secret"
      name: _APP_STORAGE_LINODE_SECRET
      label: Storage | _APP_STORAGE_LINODE_SECRET
      defaultValue: ""
      description:
        Linode object storage secret key. Required when the storage adapter
        is set to Linode. You can get your secret key from your Linode console.
    - id: "$$config__app_storage_linode_region"
      name: _APP_STORAGE_LINODE_REGION
      label: Storage | _APP_STORAGE_LINODE_REGION
      defaultValue: eu-central-1
      description:
        Linode object storage region. Required when storage adapter is set
        to Linode. You can find your region info from your Linode console.
    - id: "$$config__app_storage_linode_bucket"
      name: _APP_STORAGE_LINODE_BUCKET
      label: Storage | _APP_STORAGE_LINODE_BUCKET
      defaultValue: ""
      description:
        Linode object storage bucket. Required when storage adapter is set
        to Linode. You can create buckets in your Linode console.
    - id: "$$secret__app_storage_wasabi_access_key"
      name: _APP_STORAGE_WASABI_ACCESS_KEY
      label: Storage | _APP_STORAGE_WASABI_ACCESS_KEY
      defaultValue: ""
      description:
        Wasabi access key. Required when the storage adapter is set to Wasabi.
        You can get your access key from your Wasabi console.
    - id: "$$secret__app_storage_wasabi_secret"
      name: _APP_STORAGE_WASABI_SECRET
      label: Storage | _APP_STORAGE_WASABI_SECRET
      defaultValue: ""
      description:
        Wasabi secret key. Required when the storage adapter is set to Wasabi.
        You can get your secret key from your Wasabi console.
    - id: "$$config__app_storage_wasabi_region"
      name: _APP_STORAGE_WASABI_REGION
      label: Storage | _APP_STORAGE_WASABI_REGION
      defaultValue: eu-central-1
      description:
        Wasabi region. Required when storage adapter is set to Wasabi. You
        can find your region info from your Wasabi console.
    - id: "$$config__app_storage_wasabi_bucket"
      name: _APP_STORAGE_WASABI_BUCKET
      label: Storage | _APP_STORAGE_WASABI_BUCKET
      defaultValue: ""
      description:
        Wasabi bucket. Required when storage adapter is set to Wasabi. You
        can create buckets in your Wasabi console.
    - id: "$$config__app_functions_size_limit"
      name: _APP_FUNCTIONS_SIZE_LIMIT
      label: Functions | _APP_FUNCTIONS_SIZE_LIMIT
      defaultValue: "30000000"
      description: The maximum size deployment in bytes. The default value is 30MB.
    - id: "$$config__app_functions_timeout"
      name: _APP_FUNCTIONS_TIMEOUT
      label: Functions | _APP_FUNCTIONS_TIMEOUT
      defaultValue: "900"
      description:
        The maximum number of seconds allowed as a timeout value when creating
        a new function. The default value is 900 seconds.
    - id: "$$config__app_functions_build_timeout"
      name: _APP_FUNCTIONS_BUILD_TIMEOUT
      label: Functions | _APP_FUNCTIONS_BUILD_TIMEOUT
      defaultValue: "900"
      description:
        The maximum number of seconds allowed as a timeout value when building
        a new function. The default value is 900 seconds.
    - id: "$$config__app_functions_containers"
      name: _APP_FUNCTIONS_CONTAINERS
      label: Functions | _APP_FUNCTIONS_CONTAINERS
      defaultValue: "10"
      description:
        The maximum number of containers Appwrite is allowed to keep alive
        in the background for function environments. Running containers allow faster
        execution time as there is no need to recreate each container every time a function
        gets executed. The default value is 10.
    - id: "$$config__app_functions_cpus"
      name: _APP_FUNCTIONS_CPUS
      label: Functions | _APP_FUNCTIONS_CPUS
      defaultValue: ""
      description:
        The maximum number of CPU core a single cloud function is allowed
        to use. Please note that setting a value higher than available cores will result
        in a function error, which might result in an error. The default value is empty.
        When it's empty, CPU limit will be disabled.
    - id: "$$config__app_functions_memory_allocated"
      name: _APP_FUNCTIONS_MEMORY
      label: Functions | _APP_FUNCTIONS_MEMORY
      defaultValue: ""
      description:
        The maximum amount of memory a single cloud function is allowed to
        use in megabytes. The default value is empty. When it's empty, memory limit
        will be disabled.
    - id: "$$config__app_functions_memory_swap"
      name: _APP_FUNCTIONS_MEMORY_SWAP
      label: Functions | _APP_FUNCTIONS_MEMORY_SWAP
      defaultValue: ""
      description:
        The maximum amount of swap memory a single cloud function is allowed
        to use in megabytes. The default value is empty. When it's empty, swap memory
        limit will be disabled.
    - id: "$$config__app_functions_runtimes"
      name: _APP_FUNCTIONS_RUNTIMES
      label: Functions | _APP_FUNCTIONS_RUNTIMES
      defaultValue: node-18.0
      description: |-
        This option allows you to limit the available environments for cloud functions. This option is very useful for low-cost servers to safe disk space.
        To enable/activate this option, pass a list of allowed environments separated by a comma.
        Currently, supported environments are: node-14.5, node-16.0, node-18.0, php-8.0, php-8.1, ruby-3.0, ruby-3.1, python-3.8, python-3.9, python-3.10, deno-1.21, deno-1.24, dart-2.15, dart-2.16, dart-2.17, dotnet-3.1, dotnet-6.0, java-8.0, java-11.0, java-17.0, java-18.0, swift-5.5, kotlin-1.6, cpp-17.0
    - id: "$$secret__app_executor_secret"
      name: _APP_EXECUTOR_SECRET
      label: Functions | _APP_EXECUTOR_SECRET
      defaultValue: "$$generate_hex(16)"
      description:
        The secret key used by Appwrite to communicate with the function
        executor.
    - id: "$$config__app_executor_host"
      name: _APP_EXECUTOR_HOST
      label: ""
      defaultValue: http://$$id-executor/v1
      description: ""
    - id: "$$config__app_logging_provider"
      name: _APP_LOGGING_PROVIDER
      label: General | _APP_LOGGING_PROVIDER
      defaultValue: ""
      description:
        This variable allows you to enable logging errors to 3rd party providers.
        This value is empty by default, to enable the logger set the value to one of
        'sentry', 'raygun', 'appsignal', 'logowl'
    - id: "$$config__app_logging_config"
      name: _APP_LOGGING_CONFIG
      label: General | _APP_LOGGING_CONFIG
      defaultValue: ""
      description:
        This variable configures authentication to 3rd party error logging
        providers. If using Sentry, this should be 'SENTRY_API_KEY;SENTRY_APP_ID'. If
        using Raygun, this should be Raygun API key. If using AppSignal, this should
        be AppSignal API key. If using LogOwl, this should be LogOwl Service Ticket.
    - id: "$$config__app_statsd_host"
      name: _APP_STATSD_HOST
      label: ""
      defaultValue: "$$id-telegraf"
      description: ""
    - id: "$$config__app_statsd_port"
      name: _APP_STATSD_PORT
      label: StatsD | _APP_STATSD_PORT
      defaultValue: "8125"
      description: StatsD server TCP port.
    - id: "$$config__app_maintenance_interval"
      name: _APP_MAINTENANCE_INTERVAL
      label: Functions | _APP_MAINTENANCE_INTERVAL
      defaultValue: "86400"
      description:
        Interval value containing the number of seconds that the Appwrite
        maintenance process should wait before executing system cleanups and optimizations.
        The default value is 86400 seconds (1 day).
    - id: "$$config__app_maintenance_retention_execution"
      name: _APP_MAINTENANCE_RETENTION_EXECUTION
      label: Functions | _APP_MAINTENANCE_RETENTION_EXECUTION
      defaultValue: "1209600"
      description:
        The maximum duration (in seconds) upto which to retain execution
        logs. The default value is 1209600 seconds (14 days).
    - id: "$$config__app_maintenance_retention_cache"
      name: _APP_MAINTENANCE_RETENTION_CACHE
      label: Functions | _APP_MAINTENANCE_RETENTION_CACHE
      defaultValue: "2592000"
      description:
        The maximum duration (in seconds) upto which to retain cached files.
        The default value is 2592000 seconds (30 days).
    - id: "$$config__app_maintenance_retention_abuse"
      name: _APP_MAINTENANCE_RETENTION_ABUSE
      label: Functions | _APP_MAINTENANCE_RETENTION_ABUSE
      defaultValue: "86400"
      description:
        The maximum duration (in seconds) upto which to retain abuse logs.
        The default value is 86400 seconds (1 day).
    - id: "$$config__app_maintenance_retention_audit"
      name: _APP_MAINTENANCE_RETENTION_AUDIT
      label: Functions | _APP_MAINTENANCE_RETENTION_AUDIT
      defaultValue: "1209600"
      description:
        The maximum duration (in seconds) upto which to retain audit logs.
        The default value is 1209600 seconds (14 days).
    - id: "$$config__app_sms_provider"
      name: _APP_SMS_PROVIDER
      label: Phone | _APP_SMS_PROVIDER
      defaultValue: ""
      description:
        "Provider used for delivering SMS for Phone authentication. Use the
        following format: 'sms://[USER]:[SECRET]@[PROVIDER]'. Available providers
        are twilio, text-magic, telesign, msg91, and vonage."
    - id: "$$config__app_sms_from"
      name: _APP_SMS_FROM
      label: Phone | _APP_SMS_FROM
      defaultValue: ""
      description:
        Phone number used for sending out messages. Must start with a leading
        '+' and maximum of 15 digits without spaces (+123456789).
    - id: "$$config__app_functions_inactive_threshold"
      name: _APP_FUNCTIONS_INACTIVE_THRESHOLD
      label: Functions | _APP_FUNCTIONS_INACTIVE_THRESHOLD
      defaultValue: "60"
      description:
        The minimum time a function can be inactive before it's container
        is shutdown and put to sleep. The default value is 60 seconds
    - id: "$$config_open_runtimes_network"
      name: OPEN_RUNTIMES_NETWORK
      label: ""
      defaultValue: "$$generate_network"
      description: ""
    - id: "$$config_dockerhub_pull_username"
      name: DOCKERHUB_PULL_USERNAME
      label: Functions | DOCKERHUB_PULL_USERNAME
      defaultValue: ""
      description:
        The username for hub.docker.com. This variable is used to pull images
        from hub.docker.com.
    - id: "$$secret_dockerhub_pull_password"
      name: DOCKERHUB_PULL_PASSWORD
      label: Functions | DOCKERHUB_PULL_PASSWORD
      defaultValue: ""
      description:
        The password for hub.docker.com. This variable is used to pull images
        from hub.docker.com.
    - id: "$$config__app_usage_timeseries_interval"
      name: _APP_USAGE_TIMESERIES_INTERVAL
      label: General | _APP_USAGE_TIMESERIES_INTERVAL
      defaultValue: "30"
      description:
        Interval value containing the number of seconds that the Appwrite
        usage process should wait before aggregating stats and syncing it to mariadb
        from InfluxDB. The default value is 30 seconds.
    - id: "$$config__app_usage_database_interval"
      name: _APP_USAGE_DATABASE_INTERVAL
      label: General | _APP_USAGE_DATABASE_INTERVAL
      defaultValue: "900"
      description:
        Interval value containing the number of seconds that the Appwrite
        usage process should wait before aggregating stats from data in Appwrite Database.
        The default value is 15 minutes.
- templateVersion: 1.0.0
  defaultVersion: latest
  documentation: https://docs.weblate.org/en/latest/admin/install/docker.html
  description: "A copylefted libre software web-based continuous localization system."
  type: weblate
  name: Weblate
  labels:
    - translate
    - localization
  services:
    $$id:
      name: Weblate
      depends_on:
        - $$id-postgresql
        - $$id-redis
      image: "weblate/weblate:$$core_version"
      volumes:
        - "$$id-data:/app/data"
      environment:
        - WEBLATE_SITE_DOMAIN=$$config_weblate_site_domain
        - WEBLATE_ADMIN_PASSWORD=$$secret_weblate_admin_password
        - POSTGRES_PASSWORD=$$secret_postgres_password
        - POSTGRES_USER=$$config_postgres_user
        - POSTGRES_DATABASE=$$config_postgres_db
        - POSTGRES_HOST=$$id-postgresql
        - POSTGRES_PORT=5432
        - REDIS_HOST=$$id-redis
      ports:
        - "8080"
    $$id-postgresql:
      name: PostgreSQL
      depends_on: []
      image: "postgres:14-alpine"
      volumes:
        - "$$id-postgresql-data:/var/lib/postgresql/data"
      environment:
        - POSTGRES_USER=$$config_postgres_user
        - POSTGRES_PASSWORD=$$secret_postgres_password
        - POSTGRES_DB=$$config_postgres_db
      ports: []
    $$id-redis:
      name: Redis
      depends_on: []
      image: "redis:7-alpine"
      volumes:
        - "$$id-redis-data:/data"
      environment: []
      ports: []
  variables:
    - id: $$config_weblate_site_domain
      name: WEBLATE_SITE_DOMAIN
      label: Weblate Domain
      defaultValue: $$generate_domain
      description: ""
    - id: $$secret_weblate_admin_password
      name: WEBLATE_ADMIN_PASSWORD
      label: Weblate Admin Password
      defaultValue: $$generate_password
      description: ""
      showOnConfiguration: true
    - id: $$config_postgres_user
      main: $$id-postgresql
      name: POSTGRES_USER
      label: PostgreSQL User
      defaultValue: $$generate_username
      description: ""
    - id: $$secret_postgres_password
      main: $$id-postgresql
      name: POSTGRES_PASSWORD
      label: PostgreSQL Password
      defaultValue: $$generate_password
      description: ""
      showOnConfiguration: true
    - id: $$config_postgres_db
      main: $$id-postgresql
      name: POSTGRES_DB
      label: PostgreSQL Database
      defaultValue: weblate
      description: ""
- templateVersion: 1.0.0
  defaultVersion: 2023.01.15-52d41559
  documentation: https://docs.searxng.org/
  type: searxng
  name: SearXNG
  description: "Free internet metasearch engine which aggregates results from more than 70 search services."
  services:
    $$id:
      name: SearXNG
      depends_on:
        - $$id-redis
      image: "searxng/searxng:$$core_version"
      volumes:
        - "$$id-searxng:/etc/searxng"
      environment:
        - SEARXNG_BASE_URL=$$config_searxng_base_url
      ports:
        - "8080"
      cap_drop:
        - ALL
      cap_add:
        - CHOWN
        - SETGID
        - SETUID
        - DAC_OVERRIDE
      files:
        - location: /etc/searxng/settings.yml
          content: |2-

                                          # see https://docs.searxng.org/admin/engines/settings.html#use-default-settings
                                          use_default_settings: true
                                          server:
                                            secret_key: $$secret_secret_key
                                            limiter: true
                                            image_proxy: true
                                          ui:
                                            static_use_hash: true
                                          redis:
                                            url: redis://:$$secret_redis_password@$$id-redis:6379/0
    $$id-redis:
      name: Redis
      command: >-
        redis-server --requirepass $$secret_redis_password --save ""
        --appendonly "no"
      depends_on: []
      image: "redis:7-alpine"
      volumes:
        - "$$id-redis-data:/data"
      environment:
        - REDIS_PASSWORD=$$secret_redis_password
      ports: []
      cap_drop:
        - ALL
      cap_add:
        - SETGID
        - SETUID
        - DAC_OVERRIDE
  variables:
    - id: $$config_searxng_base_url
      name: SEARXNG_BASE_URL
      label: SearXNG Base URL
      defaultValue: $$generate_fqdn
      description: ""
    - id: $$secret_secret_key
      name: SECRET_KEY
      label: Secret Key
      defaultValue: $$generate_hex(64)
      description: ""
    - id: $$secret_redis_password
      name: REDIS_PASSWORD
      label: Redis Password
      defaultValue: $$generate_password
      description: ""
- templateVersion: 1.0.0
  defaultVersion: v3.0.2
  documentation: https://glitchtip.com/documentation
  type: glitchtip
  name: GlitchTip
  description: "Simple, open source error tracking."
  labels:
    - sentry
    - bugsnag
  services:
    $$id:
      name: GlitchTip
      depends_on:
        - $$id-postgresql
        - $$id-redis
      image: "glitchtip/glitchtip:$$core_version"
      volumes: []
      environment:
        - PORT=$$config_port
        - GLITCHTIP_DOMAIN=$$config_glitchtip_domain
        - SECRET_KEY=$$secret_secret_key
        - DATABASE_URL=$$secret_database_url
        - REDIS_URL=$$secret_redis_url
        - DEFAULT_FROM_EMAIL=$$config_default_from_email
        - EMAIL_URL=$$secret_email_url
        - EMAIL_HOST=$$config_email_host
        - EMAIL_PORT=$$config_email_port
        - EMAIL_HOST_USER=$$config_email_host_user
        - EMAIL_HOST_PASSWORD=$$secret_email_host_password
        - EMAIL_USE_TLS=$$config_email_use_tls
        - EMAIL_USE_SSL=$$config_email_use_ssl
        - EMAIL_BACKEND=$$config_email_backend
        - MAILGUN_API_KEY=$$secret_mailgun_api_key
        - SENDGRID_API_KEY=$$secret_sendgrid_api_key
        - ENABLE_OPEN_USER_REGISTRATION=$$config_enable_open_user_registration
        - DJANGO_SUPERUSER_EMAIL=$$config_django_superuser_email
        - DJANGO_SUPERUSER_PASSWORD=$$secret_django_superuser_password
        - DJANGO_SUPERUSER_USERNAME=$$config_django_superuser_username
        - CELERY_WORKER_CONCURRENCY=$$config_celery_worker_concurrency
      ports:
        - "8000"
    $$id-worker:
      name: Celery Worker
      command: ./bin/run-celery-with-beat.sh
      depends_on:
        - $$id-postgresql
        - $$id-redis
      image: "glitchtip/glitchtip:$$core_version"
      environment:
        - GLITCHTIP_DOMAIN=$$config_glitchtip_domain
        - SECRET_KEY=$$secret_secret_key
        - DATABASE_URL=$$secret_database_url
        - REDIS_URL=$$secret_redis_url
        - DEFAULT_FROM_EMAIL=$$config_default_from_email
        - EMAIL_URL=$$secret_email_url
        - CELERY_WORKER_CONCURRENCY=$$config_celery_worker_concurrency
      ports: []
    $$id-migrate:
      exclude: true
      name: Migrate
      command: ./manage.py migrate
      depends_on:
        - $$id-postgresql
        - $$id-redis
      image: "glitchtip/glitchtip:$$core_version"
      environment:
        - GLITCHTIP_DOMAIN=$$config_glitchtip_domain
        - SECRET_KEY=$$secret_secret_key
        - DATABASE_URL=$$secret_database_url
        - REDIS_URL=$$secret_redis_url
        - DEFAULT_FROM_EMAIL=$$config_default_from_email
        - EMAIL_URL=$$secret_email_url
      ports: []
    $$id-postgresql:
      name: PostgreSQL
      depends_on: []
      image: "postgres:14-alpine"
      volumes:
        - "$$id-postgresql-data:/var/lib/postgresql/data"
      environment:
        - POSTGRES_USER=$$config_postgres_user
        - POSTGRES_PASSWORD=$$secret_postgres_password
        - POSTGRES_DB=$$config_postgres_db
      ports: []
    $$id-redis:
      name: Redis
      depends_on: []
      image: "redis:7-alpine"
      volumes:
        - "$$id-postgresql-redis-data:/data"
      environment: []
      ports: []
  variables:
    - id: $$config_django_superuser_username
      name: DJANGO_SUPERUSER_USERNAME
      label: Django Superuser Username
      defaultValue: $$generate_username
      description: ""
    - id: $$secret_django_superuser_password
      name: DJANGO_SUPERUSER_PASSWORD
      label: Django Superuser Password
      defaultValue: $$generate_password
      description: ""
      showOnConfiguration: true
    - id: $$config_port
      name: PORT
      label: GlitchTip Port
      defaultValue: "8000"
      description: ""
    - id: $$config_celery_worker_concurrency
      main: $$id-worker
      name: CELERY_WORKER_CONCURRENCY
      label: Celery Worker Concurrency
      defaultValue: "2"
      description: ""
    - id: $$config_glitchtip_domain
      name: GLITCHTIP_DOMAIN
      label: GlitchTip Domain
      defaultValue: $$generate_fqdn
      description: ""
    - id: $$secret_email_url
      name: EMAIL_URL
      label: SMTP Email URL
      defaultValue: >-
        smtp://$$config_email_host_user:$$secret_email_host_password@$$config_email_host:$$config_email_port
      description: ""
    - id: $$secret_database_url
      name: DATABASE_URL
      label: Database URL for PostgreSQL
      defaultValue: >-
        postgresql://$$config_postgres_user:$$secret_postgres_password@$$id-postgresql:5432/$$config_postgres_db
      description: ""
    - id: $$secret_redis_url
      name: REDIS_URL
      label: Redis URL
      defaultValue: "redis://$$id-redis:6379/0"
      description: ""
    - id: $$config_default_from_email
      name: DEFAULT_FROM_EMAIL
      label: Default Email Address
      defaultValue: noreply@example.com
      description: ""
    - id: $$config_email_host
      name: EMAIL_HOST
      label: Email SMTP Host
      defaultValue: ""
      description: ""
    - id: $$config_email_port
      name: EMAIL_PORT
      label: Email SMTP Port
      defaultValue: "25"
      description: ""
    - id: $$config_email_host_user
      name: EMAIL_HOST_USER
      label: Email SMTP User
      defaultValue: ""
      description: ""
    - id: $$secret_email_host_password
      name: EMAIL_HOST_PASSWORD
      label: Email SMTP Password
      defaultValue: ""
      description: ""
    - id: $$config_email_use_tls
      name: EMAIL_USE_TLS
      label: Email Use TLS
      defaultValue: "false"
      description: ""
    - id: $$config_email_use_ssl
      name: EMAIL_USE_SSL
      label: Email Use SSL
      defaultValue: "false"
      description: ""
    - id: $$secret_email_smtp_password
      name: EMAIL_SMTP_PASSWORD
      label: SMTP Password
      defaultValue: ""
      description: ""
    - id: $$config_email_backend
      name: EMAIL_BACKEND
      label: Email Backend
      defaultValue: ""
      description: ""
    - id: $$secret_mailgun_api_key
      name: MAILGUN_API_KEY
      label: Mailgun API Key
      defaultValue: ""
      description: ""
      showOnConfiguration: true
    - id: $$secret_sendgrid_api_key
      name: SENDGRID_API_KEY
      label: Sendgrid API Key
      defaultValue: ""
      description: ""
      showOnConfiguration: true
    - id: $$config_enable_open_user_registration
      name: ENABLE_OPEN_USER_REGISTRATION
      label: Enable Open User Registration
      defaultValue: "true"
      description: ""
    - id: $$config_django_superuser_email
      name: DJANGO_SUPERUSER_EMAIL
      label: Django Superuser Email
      defaultValue: noreply@example.com
      description: ""
    - id: $$config_postgres_user
      main: $$id-postgresql
      name: POSTGRES_USER
      label: PostgreSQL User
      defaultValue: $$generate_username
      description: ""
    - id: $$secret_postgres_password
      main: $$id-postgresql
      name: POSTGRES_PASSWORD
      label: PostgreSQL Password
      defaultValue: $$generate_password
      description: ""
    - id: $$config_postgres_db
      main: $$id-postgresql
      name: POSTGRES_DB
      label: PostgreSQL Database
      defaultValue: glitchtip
      description: ""
- templateVersion: 1.0.0
  defaultVersion: v2.16.1
  documentation: https://hasura.io/docs/latest/index/
  type: hasura
  name: Hasura
  description: "Instant realtime GraphQL APIs on any Postgres application, existing or new."
  labels:
    - graphql
    - database
  services:
    $$id:
      name: Hasura
      depends_on:
        - $$id-postgresql
      image: "hasura/graphql-engine:$$core_version"
      volumes: []
      environment:
        - HASURA_GRAPHQL_ENABLE_CONSOLE=$$config_hasura_graphql_enable_console
        - >-
          HASURA_GRAPHQL_METADATA_DATABASE_URL=$$secret_hasura_graphql_metadata_database_url
        - HASURA_GRAPHQL_ADMIN_SECRET=$$secret_hasura_graphql_admin_secret
      ports:
        - "8080"
    $$id-postgresql:
      name: PostgreSQL
      depends_on: []
      image: "postgres:12-alpine"
      volumes:
        - "$$id-postgresql-data:/var/lib/postgresql/data"
      environment:
        - POSTGRES_USER=$$config_postgres_user
        - POSTGRES_PASSWORD=$$secret_postgres_password
        - POSTGRES_DB=$$config_postgres_db
      ports: []
  variables:
    - id: $$config_hasura_graphql_enable_console
      name: HASURA_GRAPHQL_ENABLE_CONSOLE
      label: Enable Hasura Console
      defaultValue: "true"
      description: ""
    - id: $$secret_hasura_graphql_metadata_database_url
      name: HASURA_GRAPHQL_METADATA_DATABASE_URL
      label: Hasura Metadata Database URL
      defaultValue: >-
        postgresql://$$config_postgres_user:$$secret_postgres_password@$$id-postgresql:5432/$$config_postgres_db
      description: ""
    - id: $$secret_hasura_graphql_admin_secret
      name: HASURA_GRAPHQL_ADMIN_SECRET
      label: Hasura Admin Password
      defaultValue: $$generate_password
      description: ""
      showOnConfiguration: true
    - id: $$config_postgres_user
      name: POSTGRES_USER
      label: PostgreSQL User
      defaultValue: $$generate_username
      description: ""
    - id: $$secret_postgres_password
      name: POSTGRES_PASSWORD
      label: PostgreSQL Password
      defaultValue: $$generate_password
      description: ""
    - id: $$config_postgres_db
      name: POSTGRES_DB
      label: PostgreSQL Database
      defaultValue: hasura
      description: ""
- templateVersion: 1.0.0
  defaultVersion: postgresql-v1.39.5
  documentation: https://umami.is/docs/getting-started
  type: umami-postgresql
  name: Umami
  subname: (PostgreSQL)
  description: >-
    A simple, easy to use, self-hosted web analytics solution.
  services:
    $$id:
      name: Umami
      depends_on:
        - $$id-postgresql
      image: "ghcr.io/umami-software/umami:$$core_version"
      volumes: []
      environment:
        - ADMIN_PASSWORD=$$secret_admin_password
        - DATABASE_URL=$$secret_database_url
        - DATABASE_TYPE=$$config_database_type
        - HASH_SALT=$$secret_hash_salt
      ports:
        - "3000"
    $$id-postgresql:
      name: PostgreSQL
      depends_on: []
      image: "postgres:12-alpine"
      volumes:
        - "$$id-postgresql-data:/var/lib/postgresql/data"
      environment:
        - POSTGRES_USER=$$config_postgres_user
        - POSTGRES_PASSWORD=$$secret_postgres_password
        - POSTGRES_DB=$$config_postgres_db
      ports: []
      files:
        - location: /docker-entrypoint-initdb.d/schema.postgresql.sql
          content: |2-

                                          -- CreateTable
                                  CREATE TABLE "account" (
                                      "user_id" SERIAL NOT NULL,
                                      "username" VARCHAR(255) NOT NULL,
                                      "password" VARCHAR(60) NOT NULL,
                                      "is_admin" BOOLEAN NOT NULL DEFAULT false,
                                      "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
                                      "updated_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,

                                      PRIMARY KEY ("user_id")
                                  );

                                  -- CreateTable
                                  CREATE TABLE "event" (
                                      "event_id" SERIAL NOT NULL,
                                      "website_id" INTEGER NOT NULL,
                                      "session_id" INTEGER NOT NULL,
                                      "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
                                      "url" VARCHAR(500) NOT NULL,
                                      "event_type" VARCHAR(50) NOT NULL,
                                      "event_value" VARCHAR(50) NOT NULL,

                                      PRIMARY KEY ("event_id")
                                  );

                                  -- CreateTable
                                  CREATE TABLE "pageview" (
                                      "view_id" SERIAL NOT NULL,
                                      "website_id" INTEGER NOT NULL,
                                      "session_id" INTEGER NOT NULL,
                                      "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
                                      "url" VARCHAR(500) NOT NULL,
                                      "referrer" VARCHAR(500),

                                      PRIMARY KEY ("view_id")
                                  );

                                  -- CreateTable
                                  CREATE TABLE "session" (
                                      "session_id" SERIAL NOT NULL,
                                      "session_uuid" UUID NOT NULL,
                                      "website_id" INTEGER NOT NULL,
                                      "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
                                      "hostname" VARCHAR(100),
                                      "browser" VARCHAR(20),
                                      "os" VARCHAR(20),
                                      "device" VARCHAR(20),
                                      "screen" VARCHAR(11),
                                      "language" VARCHAR(35),
                                      "country" CHAR(2),

                                      PRIMARY KEY ("session_id")
                                  );

                                  -- CreateTable
                                  CREATE TABLE "website" (
                                      "website_id" SERIAL NOT NULL,
                                      "website_uuid" UUID NOT NULL,
                                      "user_id" INTEGER NOT NULL,
                                      "name" VARCHAR(100) NOT NULL,
                                      "domain" VARCHAR(500),
                                      "share_id" VARCHAR(64),
                                      "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,

                                      PRIMARY KEY ("website_id")
                                  );

                                  -- CreateIndex
                                  CREATE UNIQUE INDEX "account.username_unique" ON "account"("username");

                                  -- CreateIndex
                                  CREATE INDEX "event_created_at_idx" ON "event"("created_at");

                                  -- CreateIndex
                                  CREATE INDEX "event_session_id_idx" ON "event"("session_id");

                                  -- CreateIndex
                                  CREATE INDEX "event_website_id_idx" ON "event"("website_id");

                                  -- CreateIndex
                                  CREATE INDEX "pageview_created_at_idx" ON "pageview"("created_at");

                                  -- CreateIndex
                                  CREATE INDEX "pageview_session_id_idx" ON "pageview"("session_id");

                                  -- CreateIndex
                                  CREATE INDEX "pageview_website_id_created_at_idx" ON "pageview"("website_id", "created_at");

                                  -- CreateIndex
                                  CREATE INDEX "pageview_website_id_idx" ON "pageview"("website_id");

                                  -- CreateIndex
                                  CREATE INDEX "pageview_website_id_session_id_created_at_idx" ON "pageview"("website_id", "session_id", "created_at");

                                  -- CreateIndex
                                  CREATE UNIQUE INDEX "session.session_uuid_unique" ON "session"("session_uuid");

                                  -- CreateIndex
                                  CREATE INDEX "session_created_at_idx" ON "session"("created_at");

                                  -- CreateIndex
                                  CREATE INDEX "session_website_id_idx" ON "session"("website_id");

                                  -- CreateIndex
                                  CREATE UNIQUE INDEX "website.website_uuid_unique" ON "website"("website_uuid");

                                  -- CreateIndex
                                  CREATE UNIQUE INDEX "website.share_id_unique" ON "website"("share_id");

                                  -- CreateIndex
                                  CREATE INDEX "website_user_id_idx" ON "website"("user_id");

                                  -- AddForeignKey
                                  ALTER TABLE "event" ADD FOREIGN KEY ("session_id") REFERENCES "session"("session_id") ON DELETE CASCADE ON UPDATE CASCADE;

                                  -- AddForeignKey
                                  ALTER TABLE "event" ADD FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE CASCADE ON UPDATE CASCADE;

                                  -- AddForeignKey
                                  ALTER TABLE "pageview" ADD FOREIGN KEY ("session_id") REFERENCES "session"("session_id") ON DELETE CASCADE ON UPDATE CASCADE;

                                  -- AddForeignKey
                                  ALTER TABLE "pageview" ADD FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE CASCADE ON UPDATE CASCADE;

                                  -- AddForeignKey
                                  ALTER TABLE "session" ADD FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE CASCADE ON UPDATE CASCADE;

                                  -- AddForeignKey
                                  ALTER TABLE "website" ADD FOREIGN KEY ("user_id") REFERENCES "account"("user_id") ON DELETE CASCADE ON UPDATE CASCADE;

                                          insert into account (username, password, is_admin) values ('admin', '$$hashed$$secret_admin_password', true);
  variables:
    - id: $$secret_database_url
      name: DATABASE_URL
      label: Database URL for PostgreSQL
      defaultValue: >-
        postgresql://$$config_postgres_user:$$secret_postgres_password@$$id-postgresql:5432/$$config_postgres_db
      description: ""
    - id: $$secret_hash_salt
      name: HASH_SALT
      label: Hash Salt
      defaultValue: $$generate_hex(64)
      description: ""
    - id: $$config_database_type
      name: DATABASE_TYPE
      label: Database Type
      defaultValue: "postgresql"
      description: ""
    - id: $$config_postgres_user
      name: POSTGRES_USER
      label: PostgreSQL User
      defaultValue: $$generate_username
      description: ""
    - id: $$secret_postgres_password
      name: POSTGRES_PASSWORD
      label: PostgreSQL Password
      defaultValue: $$generate_password
      description: ""
    - id: $$config_postgres_db
      name: POSTGRES_DB
      label: PostgreSQL Database
      defaultValue: umami
      description: ""
    - id: $$secret_admin_password
      name: ADMIN_PASSWORD
      label: Initial Admin Password
      defaultValue: $$generate_password
      description: ""
      showOnConfiguration: true
- templateVersion: 1.0.0
  ignore: true
  defaultVersion: postgresql-v1.39.5
  documentation: https://umami.is/docs/getting-started
  type: umami
  name: Umami
  subname: (PostgreSQL)
  description: >-
    A simple, easy to use, self-hosted web analytics solution.
  services:
    $$id:
      name: Umami
      depends_on:
        - $$id-postgresql
      image: "ghcr.io/umami-software/umami:$$core_version"
      volumes: []
      environment:
        - ADMIN_PASSWORD=$$secret_admin_password
        - DATABASE_URL=$$secret_database_url
        - DATABASE_TYPE=$$config_database_type
        - HASH_SALT=$$secret_hash_salt
      ports:
        - "3000"
    $$id-postgresql:
      name: PostgreSQL
      depends_on: []
      image: "postgres:12-alpine"
      volumes:
        - "$$id-postgresql-data:/var/lib/postgresql/data"
      environment:
        - POSTGRES_USER=$$config_postgres_user
        - POSTGRES_PASSWORD=$$secret_postgres_password
        - POSTGRES_DB=$$config_postgres_db
      ports: []
      files:
        - location: /docker-entrypoint-initdb.d/schema.postgresql.sql
          content: |2-

                                          -- CreateTable
                                  CREATE TABLE "account" (
                                      "user_id" SERIAL NOT NULL,
                                      "username" VARCHAR(255) NOT NULL,
                                      "password" VARCHAR(60) NOT NULL,
                                      "is_admin" BOOLEAN NOT NULL DEFAULT false,
                                      "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
                                      "updated_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,

                                      PRIMARY KEY ("user_id")
                                  );

                                  -- CreateTable
                                  CREATE TABLE "event" (
                                      "event_id" SERIAL NOT NULL,
                                      "website_id" INTEGER NOT NULL,
                                      "session_id" INTEGER NOT NULL,
                                      "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
                                      "url" VARCHAR(500) NOT NULL,
                                      "event_type" VARCHAR(50) NOT NULL,
                                      "event_value" VARCHAR(50) NOT NULL,

                                      PRIMARY KEY ("event_id")
                                  );

                                  -- CreateTable
                                  CREATE TABLE "pageview" (
                                      "view_id" SERIAL NOT NULL,
                                      "website_id" INTEGER NOT NULL,
                                      "session_id" INTEGER NOT NULL,
                                      "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
                                      "url" VARCHAR(500) NOT NULL,
                                      "referrer" VARCHAR(500),

                                      PRIMARY KEY ("view_id")
                                  );

                                  -- CreateTable
                                  CREATE TABLE "session" (
                                      "session_id" SERIAL NOT NULL,
                                      "session_uuid" UUID NOT NULL,
                                      "website_id" INTEGER NOT NULL,
                                      "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,
                                      "hostname" VARCHAR(100),
                                      "browser" VARCHAR(20),
                                      "os" VARCHAR(20),
                                      "device" VARCHAR(20),
                                      "screen" VARCHAR(11),
                                      "language" VARCHAR(35),
                                      "country" CHAR(2),

                                      PRIMARY KEY ("session_id")
                                  );

                                  -- CreateTable
                                  CREATE TABLE "website" (
                                      "website_id" SERIAL NOT NULL,
                                      "website_uuid" UUID NOT NULL,
                                      "user_id" INTEGER NOT NULL,
                                      "name" VARCHAR(100) NOT NULL,
                                      "domain" VARCHAR(500),
                                      "share_id" VARCHAR(64),
                                      "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP,

                                      PRIMARY KEY ("website_id")
                                  );

                                  -- CreateIndex
                                  CREATE UNIQUE INDEX "account.username_unique" ON "account"("username");

                                  -- CreateIndex
                                  CREATE INDEX "event_created_at_idx" ON "event"("created_at");

                                  -- CreateIndex
                                  CREATE INDEX "event_session_id_idx" ON "event"("session_id");

                                  -- CreateIndex
                                  CREATE INDEX "event_website_id_idx" ON "event"("website_id");

                                  -- CreateIndex
                                  CREATE INDEX "pageview_created_at_idx" ON "pageview"("created_at");

                                  -- CreateIndex
                                  CREATE INDEX "pageview_session_id_idx" ON "pageview"("session_id");

                                  -- CreateIndex
                                  CREATE INDEX "pageview_website_id_created_at_idx" ON "pageview"("website_id", "created_at");

                                  -- CreateIndex
                                  CREATE INDEX "pageview_website_id_idx" ON "pageview"("website_id");

                                  -- CreateIndex
                                  CREATE INDEX "pageview_website_id_session_id_created_at_idx" ON "pageview"("website_id", "session_id", "created_at");

                                  -- CreateIndex
                                  CREATE UNIQUE INDEX "session.session_uuid_unique" ON "session"("session_uuid");

                                  -- CreateIndex
                                  CREATE INDEX "session_created_at_idx" ON "session"("created_at");

                                  -- CreateIndex
                                  CREATE INDEX "session_website_id_idx" ON "session"("website_id");

                                  -- CreateIndex
                                  CREATE UNIQUE INDEX "website.website_uuid_unique" ON "website"("website_uuid");

                                  -- CreateIndex
                                  CREATE UNIQUE INDEX "website.share_id_unique" ON "website"("share_id");

                                  -- CreateIndex
                                  CREATE INDEX "website_user_id_idx" ON "website"("user_id");

                                  -- AddForeignKey
                                  ALTER TABLE "event" ADD FOREIGN KEY ("session_id") REFERENCES "session"("session_id") ON DELETE CASCADE ON UPDATE CASCADE;

                                  -- AddForeignKey
                                  ALTER TABLE "event" ADD FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE CASCADE ON UPDATE CASCADE;

                                  -- AddForeignKey
                                  ALTER TABLE "pageview" ADD FOREIGN KEY ("session_id") REFERENCES "session"("session_id") ON DELETE CASCADE ON UPDATE CASCADE;

                                  -- AddForeignKey
                                  ALTER TABLE "pageview" ADD FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE CASCADE ON UPDATE CASCADE;

                                  -- AddForeignKey
                                  ALTER TABLE "session" ADD FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE CASCADE ON UPDATE CASCADE;

                                  -- AddForeignKey
                                  ALTER TABLE "website" ADD FOREIGN KEY ("user_id") REFERENCES "account"("user_id") ON DELETE CASCADE ON UPDATE CASCADE;

                                          insert into account (username, password, is_admin) values ('admin', '$$hashed$$secret_admin_password', true);
  variables:
    - id: $$secret_database_url
      name: DATABASE_URL
      label: Database URL for PostgreSQL
      defaultValue: >-
        postgresql://$$config_postgres_user:$$secret_postgres_password@$$id-postgresql:5432/$$config_postgres_db
      description: ""
    - id: $$secret_hash_salt
      name: HASH_SALT
      label: Hash Salt
      defaultValue: $$generate_hex(64)
      description: ""
    - id: $$config_database_type
      name: DATABASE_TYPE
      label: Database Type
      defaultValue: "postgresql"
      description: ""
    - id: $$config_postgres_user
      name: POSTGRES_USER
      label: PostgreSQL User
      defaultValue: $$generate_username
      description: ""
    - id: $$secret_postgres_password
      name: POSTGRES_PASSWORD
      label: PostgreSQL Password
      defaultValue: $$generate_password
      description: ""
    - id: $$config_postgres_db
      name: POSTGRES_DB
      label: PostgreSQL Database
      defaultValue: umami
      description: ""
    - id: $$secret_admin_password
      name: ADMIN_PASSWORD
      label: Initial Admin Password
      defaultValue: $$generate_password
      description: ""
      showOnConfiguration: true
- templateVersion: 1.0.0
  defaultVersion: v0.30.5
  documentation: https://docs.meilisearch.com/learn/getting_started/quick_start.html
  type: meilisearch
  name: MeiliSearch
  description: >-
    A lightning Fast, Ultra Relevant, and Typo-Tolerant Search Engine.
  services:
    $$id:
      name: MeiliSearch
      documentation: https://docs.meilisearch.com/
      depends_on: []
      image: "getmeili/meilisearch:$$core_version"
      volumes:
        - "$$id-datams:/meili_data/data.ms"
        - "$$id-data:/meili_data"
        - "$$id-snapshot:/snapshot"
        - "$$id-dump:/dumps"
      environment:
        - MEILI_MASTER_KEY=$$secret_meili_master_key
      ports:
        - "7700"
  variables:
    - id: $$secret_meili_master_key
      name: MEILI_MASTER_KEY
      label: Master Key
      defaultValue: $$generate_hex(64)
      description: ""
      showOnConfiguration: true
- templateVersion: 1.0.0
  ignore: true
  defaultVersion: 5.30.0
  documentation: https://docs.ghost.org
  arch: amd64
  type: ghost-mariadb
  name: Ghost
  subname: (MariaDB)
  description: >-
    Free and open source blogging platform.
  labels:
    - cms
    - blog
  services:
    $$id:
      name: Ghost
      depends_on:
        - $$id-mariadb
      image: "bitnami/ghost:$$core_version"
      volumes:
        - "$$id-ghost:/bitnami/ghost"
      environment:
        - url=$$config_url
        - GHOST_HOST=$$config_ghost_host
        - GHOST_ENABLE_HTTPS=$$config_ghost_enable_https
        - GHOST_EMAIL=$$config_ghost_email
        - GHOST_PASSWORD=$$secret_ghost_password
        - GHOST_DATABASE_HOST=$$config_ghost_database_host
        - GHOST_DATABASE_USER=$$config_mariadb_user
        - GHOST_DATABASE_PASSWORD=$$secret_ghost_database_password
        - GHOST_DATABASE_NAME=$$config_mariadb_database
        - GHOST_DATABASE_PORT_NUMBER=3306
      ports:
        - "2368"
    $$id-mariadb:
      name: MariaDB
      depends_on: []
      image: "bitnami/mariadb:latest"
      volumes:
        - "$$id-mariadb:/bitnami/mariadb"
      environment:
        - MARIADB_USER=$$config_mariadb_user
        - MARIADB_PASSWORD=$$secret_mariadb_password
        - MARIADB_DATABASE=$$config_mariadb_database
        - MARIADB_ROOT_USER=$$config_mariadb_root_user
        - MARIADB_ROOT_PASSWORD=$$secret_mariadb_root_password
      ports: []
  variables:
    - id: $$config_url
      name: url
      label: URL
      defaultValue: $$generate_fqdn
      description: ""
    - id: $$config_ghost_host
      name: GHOST_HOST
      label: Ghost Host
      defaultValue: $$generate_domain
      description: ""
    - id: $$config_ghost_enable_https
      name: GHOST_ENABLE_HTTPS
      label: Ghost Enable HTTPS
      defaultValue: "no"
      description: ""
    - id: $$config_ghost_email
      name: GHOST_EMAIL
      label: Ghost Default Email
      defaultValue: admin@example.com
      description: ""
    - id: $$secret_ghost_password
      name: GHOST_PASSWORD
      label: Ghost Default Password
      defaultValue: $$generate_password
      description: ""
      showOnConfiguration: true
    - id: $$config_ghost_database_host
      name: GHOST_DATABASE_HOST
      label: Ghost Database Host
      defaultValue: $$id-mariadb
      description: ""
    - id: $$config_ghost_database_user
      name: GHOST_DATABASE_USER
      label: MariaDB User
      defaultValue: $$config_mariadb_user
      description: ""
    - id: $$secret_ghost_database_password
      name: GHOST_DATABASE_PASSWORD
      label: MariaDB Password
      defaultValue: $$secret_mariadb_password
      description: ""
    - id: $$config_ghost_database_name
      name: GHOST_DATABASE_NAME
      label: MariaDB Database
      defaultValue: $$config_mariadb_database
      description: ""
    - id: $$config_mariadb_user
      name: MARIADB_USER
      label: MariaDB User
      defaultValue: $$generate_username
      description: ""
    - id: $$secret_mariadb_password
      name: MARIADB_PASSWORD
      label: MariaDB Password
      defaultValue: $$generate_password
      description: ""
    - id: $$config_mariadb_database
      name: MARIADB_DATABASE
      label: MariaDB Database
      defaultValue: ghost
      description: ""
    - id: $$config_mariadb_root_user
      name: MARIADB_ROOT_USER
      label: MariaDB Root User
      defaultValue: $$generate_username
      description: ""
    - id: $$secret_mariadb_root_password
      name: MARIADB_ROOT_PASSWORD
      label: MariaDB Root Password
      defaultValue: $$generate_password
      description: ""
- templateVersion: 1.0.0
  defaultVersion: 5.30.0
  documentation: https://docs.ghost.org
  type: ghost-only
  name: Ghost
  subname: (without Database)
  description: >-
    Free and open source blogging platform.
  services:
    $$id:
      name: Ghost
      image: "ghost:$$core_version"
      volumes:
        - "$$id-ghost:/var/lib/ghost/content"
      environment:
        - url=$$config_url
        - database__client=$$config_database__client
        - database__connection__host=$$config_database__connection__host
        - database__connection__user=$$config_database__connection__user
        - database__connection__password=$$secret_database__connection__password
        - database__connection__database=$$config_database__connection__database
      ports:
        - "2368"
  variables:
    - id: $$config_url
      name: url
      label: URL
      defaultValue: $$generate_fqdn
      description: ""
    - id: $$config_database__client
      name: database__client
      label: Database Client
      defaultValue: mysql
      description: ""
      required: true
    - id: $$config_database__connection__host
      name: database__connection__host
      label: Database Host
      defaultValue: ""
      description: ""
      required: true
      placeholder: "db.coolify.io"
    - id: $$config_database__connection__user
      name: database__connection__user
      label: Database User
      defaultValue: ""
      description: ""
      placeholder: "ghost"
      required: true
    - id: $$secret_database__connection__password
      name: database__connection__password
      label: Database Password
      defaultValue: ""
      description: ""
      placeholder: "superSecretP4ssword"
      showOnConfiguration: true
      required: true
    - id: $$config_database__connection__database
      name: database__connection__database
      label: Database Name
      defaultValue: ""
      description: ""
      placeholder: "ghost_db"
      required: true
- templateVersion: 1.0.0
  defaultVersion: 5.30.0
  documentation: https://docs.ghost.org
  type: ghost-mysql
  name: Ghost
  subname: (MySQL)
  description: >-
    Ghost is a free and open source blogging platform.
  services:
    $$id:
      name: Ghost
      depends_on:
        - $$id-mysql
      image: "ghost:$$core_version"
      volumes:
        - "$$id-ghost:/var/lib/ghost/content"
      environment:
        - url=$$config_url
        - database__client=$$config_database__client
        - database__connection__host=$$config_database__connection__host
        - database__connection__user=$$config_mysql_user
        - database__connection__password=$$secret_mysql_password
        - database__connection__database=$$config_mysql_database
      ports:
        - "2368"
    $$id-mysql:
      name: MySQL
      depends_on: []
      image: "mysql:8.0"
      volumes:
        - "$$id-mysql:/var/lib/mysql"
      environment:
        - MYSQL_USER=$$config_mysql_user
        - MYSQL_PASSWORD=$$secret_mysql_password
        - MYSQL_DATABASE=$$config_mysql_database
        - MYSQL_ROOT_PASSWORD=$$secret_mysql_root_password
      ports: []
  variables:
    - id: $$config_url
      name: url
      label: URL
      defaultValue: $$generate_fqdn
      description: ""
    - id: $$config_database__client
      name: database__client
      label: Database Client
      defaultValue: mysql
      description: ""
      readOnly: true
    - id: $$config_database__connection__host
      name: database__connection__host
      label: Database Host
      defaultValue: $$id-mysql
      description: ""
    - id: $$config_mysql_user
      main: $$id-mysql
      name: MYSQL_USER
      label: MySQL User
      defaultValue: $$generate_username
      description: ""
    - id: $$secret_mysql_password
      main: $$id-mysql
      name: MYSQL_PASSWORD
      label: MySQL Password
      defaultValue: $$generate_password
      description: ""
    - id: $$config_mysql_database
      main: $$id-mysql
      name: MYSQL_DATABASE
      label: MySQL Database
      defaultValue: ghost
      description: ""
    - id: $$secret_mysql_root_password
      name: MYSQL_ROOT_PASSWORD
      label: MySQL Root Password
      defaultValue: $$generate_password
      description: ""
- templateVersion: 1.0.0
  defaultVersion: php8.2
  documentation: https://wordpress.org/
  type: wordpress
  name: WordPress
  subname: (MySQL)
  description: A content management system based on PHP.
  labels:
    - "wordpress"
    - "php"
    - "cms"
  services:
    $$id:
      name: WordPress
      depends_on:
        - $$id-mysql
      image: "wordpress:$$core_version"
      volumes:
        - "$$id-wordpress-data:/var/www/html"
      environment:
        - WORDPRESS_DB_HOST=$$config_wordpress_db_host
        - WORDPRESS_DB_USER=$$config_mysql_user
        - WORDPRESS_DB_PASSWORD=$$secret_mysql_password
        - WORDPRESS_DB_NAME=$$config_mysql_database
        - WORDPRESS_CONFIG_EXTRA=$$config_wordpress_config_extra
      ports:
        - "80"
    $$id-mysql:
      name: MySQL
      depends_on: []
      image: "bitnami/mysql:5.7"
      imageArm: "mysql:8.0"
      volumes:
        - "$$id-mysql-data:/bitnami/mysql/data"
      volumesArm:
        - "$$id-mysql-data:/var/lib/mysql"
      environment:
        - MYSQL_ROOT_PASSWORD=$$secret_mysql_root_password
        - MYSQL_ROOT_USER=$$config_mysql_root_user
        - MYSQL_DATABASE=$$config_mysql_database
        - MYSQL_USER=$$config_mysql_user
        - MYSQL_PASSWORD=$$secret_mysql_password
  variables:
    - id: $$config_wordpress_db_host
      name: WORDPRESS_DB_HOST
      label: Database Host
      defaultValue: $$id-mysql
      description: ""
      readOnly: true
    - id: $$config_wordpress_config_extra
      name: WORDPRESS_CONFIG_EXTRA
      label: WordPress Config Extra
      defaultValue: ""
      description: ""
      type: "textarea"
      placeholder: |
        define('WP_DEBUG', true);
        define('WP_DEBUG_LOG', true);
        define('WP_DEBUG_DISPLAY', false);
        @ini_set('display_errors', 0);
    - id: $$secret_mysql_root_password
      name: MYSQL_ROOT_PASSWORD
      label: MySQL Root Password
      defaultValue: $$generate_password
      description: ""
      readOnly: true
    - id: $$config_mysql_root_user
      name: MYSQL_ROOT_USER
      label: MySQL Root User
      defaultValue: $$generate_username
      description: ""
      readOnly: true
    - id: $$config_mysql_database
      name: MYSQL_DATABASE
      label: MySQL Database
      defaultValue: wordpress
      description: ""
      readOnly: true
    - id: $$config_mysql_user
      name: MYSQL_USER
      label: MySQL User
      defaultValue: $$generate_username
      description: ""
      readOnly: true
    - id: $$secret_mysql_password
      name: MYSQL_PASSWORD
      label: MySQL Password
      defaultValue: $$generate_password
      description: ""
      readOnly: true
- templateVersion: 1.0.0
  defaultVersion: php8.2
  documentation: https://wordpress.org/
  type: wordpress-only
  name: WordPress
  subname: (without DB)
  description: A content management system based on PHP.
  labels:
    - "wordpress"
    - "php"
    - "cms"
  services:
    $$id:
      name: WordPress
      image: "wordpress:$$core_version"
      volumes:
        - "$$id-wordpress-data:/var/www/html"
      environment:
        - WORDPRESS_DB_HOST=$$config_wordpress_db_host
        - WORDPRESS_DB_PORT=$$config_wordpress_db_port
        - WORDPRESS_DB_USER=$$config_wordpress_db_user
        - WORDPRESS_DB_PASSWORD=$$secret_wordpress_db_password
        - WORDPRESS_DB_NAME=$$config_wordpress_db_name
        - WORDPRESS_CONFIG_EXTRA=$$config_wordpress_config_extra
      ports:
        - "80"
  variables:
    - id: $$config_wordpress_db_host
      name: WORDPRESS_DB_HOST
      label: Database Host
      defaultValue: ""
      description: ""
      placeholder: "db.coollabs.io"
      required: true
    - id: $$config_wordpress_db_port
      name: WORDPRESS_DB_PORT
      label: Database Port
      defaultValue: ""
      description: ""
      placeholder: "3306"
      required: true
    - id: $$config_wordpress_db_user
      name: WORDPRESS_DB_USER
      label: Database User
      defaultValue: ""
      description: ""
      placeholder: "wordpress"
      required: true
    - id: $$secret_wordpress_db_password
      name: WORDPRESS_DB_PASSWORD
      label: Database Password
      defaultValue: ""
      description: ""
      placeholder: "supers3cr3tpassw0rd!"
      required: true
      showOnConfiguration: true
    - id: $$config_wordpress_db_name
      name: WORDPRESS_DB_NAME
      label: Database Name
      defaultValue: ""
      description: ""
      placeholder: "wordpress"
      required: true
    - id: $$config_wordpress_config_extra
      name: WORDPRESS_CONFIG_EXTRA
      label: Extra Config
      defaultValue: ""
      description: ""
      type: "textarea"
      placeholder: |
        define('WP_DEBUG', true);
        define('WP_DEBUG_LOG', true);
        define('WP_DEBUG_DISPLAY', false);
        @ini_set('display_errors', 0);
- templateVersion: 1.0.0
  defaultVersion: 4.9.1
  documentation: https://coder.com/docs/coder-oss/latest
  type: vscodeserver
  name: VSCode Server
  description: >-
    Visual Studio Code on a remote server, accessible through the browser.
  labels:
    - vscode
    - ide
  services:
    $$id:
      name: VSCode Server
      depends_on: []
      image: "codercom/code-server:$$core_version"
      volumes:
        - "$$id-vscodeserver-data:/home/coder"
        - "$$id-keys-directory:/root/.ssh"
        - "$$id-theme-and-plugin-directory:/root/.local/share/code-server"
      environment:
        - PASSWORD=$$secret_password
      ports:
        - "8080"
  variables:
    - id: $$secret_password
      name: PASSWORD
      label: Password
      defaultValue: $$generate_password
      description: ""
      showOnConfiguration: true
- templateVersion: 1.0.0
  defaultVersion: RELEASE.2023-01-12T02-06-16Z
  documentation: https://min.io/docs/minio
  type: minio
  name: MinIO
  description: "A cloud storage server compatible with Amazon S3."
  labels:
    - storage
    - s3
  services:
    $$id:
      name: MinIO
      command: "server /data --console-address :9001"
      depends_on: []
      image: "minio/minio:$$core_version"
      volumes:
        - "$$id-minio-data:/data"
        - "$$id-data-write:/files"
      environment:
        - MINIO_SERVER_URL=$$config_coolify_fqdn_minio_console
        - MINIO_BROWSER_REDIRECT_URL=$$config_minio_browser_redirect_url
        - MINIO_DOMAIN=$$config_minio_domain
        - MINIO_ROOT_USER=$$config_minio_root_user
        - MINIO_ROOT_PASSWORD=$$secret_minio_root_password
      ports:
        - "9000"
        - "9001"
      proxy:
        - port: "9000"
          domain: $$config_coolify_fqdn_minio_console
        - port: "9001"
  variables:
    - id: $$config_coolify_fqdn_minio_console
      name: MINIO_SERVER_URL
      label: MinIO Server URL
      defaultValue: ""
      description: "Specify the URL hostname the MinIO Console should use for connecting to the MinIO Server."
      required: true
    - id: $$config_minio_browser_redirect_url
      name: MINIO_BROWSER_REDIRECT_URL
      label: Browser Redirect URL
      defaultValue: $$generate_fqdn
      description: ""
    - id: $$config_minio_domain
      name: MINIO_DOMAIN
      label: Domain
      defaultValue: $$generate_domain
      description: ""
    - id: $$config_minio_root_user
      name: MINIO_ROOT_USER
      label: Root User
      defaultValue: $$generate_username
      description: ""
    - id: $$secret_minio_root_password
      name: MINIO_ROOT_PASSWORD
      label: Root User Password
      defaultValue: $$generate_password
      description: ""
      showOnConfiguration: true
- templateVersion: 1.0.0
  defaultVersion: stable
  documentation: https://fider.io/docs
  type: fider
  name: Fider
  description: A platform to collect and organize customer feedback.
  labels:
    - suggestion
    - feedback
  services:
    $$id:
      name: Fider
      image: "getfider/fider:$$core_version"
      depends_on:
        - $$id-postgresql
      environment:
        - BASE_URL=$$config_base_url
        - DATABASE_URL=$$secret_database_url
        - JWT_SECRET=$$secret_jwt_secret
        - EMAIL_NOREPLY=$$config_email_noreply
        - EMAIL_MAILGUN_API=$$secret_email_mailgun_api
        - EMAIL_MAILGUN_REGION=$$config_email_mailgun_region
        - EMAIL_MAILGUN_DOMAIN=$$config_email_mailgun_domain
        - EMAIL_SMTP_HOST=$$config_email_smtp_host
        - EMAIL_SMTP_PORT=$$config_email_smtp_port
        - EMAIL_SMTP_USER=$$config_email_smtp_user
        - EMAIL_SMTP_PASSWORD=$$secret_email_smtp_password
        - EMAIL_SMTP_ENABLE_STARTTLS=$$config_email_smtp_enable_starttls
      ports:
        - "3000"
    $$id-postgresql:
      name: PostgreSQL
      depends_on: []
      image: "postgres:12-alpine"
      volumes:
        - "$$id-postgresql-data:/var/lib/postgresql/data"
      environment:
        - POSTGRES_USER=$$config_postgres_user
        - POSTGRES_PASSWORD=$$secret_postgres_password
        - POSTGRES_DB=$$config_postgres_db
  variables:
    - id: $$config_base_url
      name: BASE_URL
      label: Base URL
      defaultValue: $$generate_fqdn
      description: ""
    - id: $$secret_database_url
      name: DATABASE_URL
      label: Database URL for PostgreSQL
      defaultValue: >-
        postgresql://$$config_postgres_user:$$secret_postgres_password@$$id-postgresql:5432/$$config_postgres_db?sslmode=disable
      description: ""
    - id: $$secret_jwt_secret
      name: JWT_SECRET
      label: JWT Secret
      defaultValue: $$generate_hex(64)
      description: ""
    - id: $$config_email_noreply
      name: EMAIL_NOREPLY
      label: No Reply Email Address
      defaultValue: noreply@example.com
      description: ""
    - id: $$secret_email_mailgun_api
      name: EMAIL_MAILGUN_API
      label: Mailgun API Key
      defaultValue: ""
      description: ""
      showOnConfiguration: true
    - id: $$config_email_mailgun_region
      name: EMAIL_MAILGUN_REGION
      label: Mailgun Region
      defaultValue: EU
      description: ""
    - id: $$config_email_mailgun_domain
      name: EMAIL_MAILGUN_DOMAIN
      label: Mailgun Domain
      defaultValue: ""
      description: ""
    - id: $$config_email_smtp_host
      name: EMAIL_SMTP_HOST
      label: SMTP Host
      defaultValue: ""
      description: ""
    - id: $$config_email_smtp_port
      name: EMAIL_SMTP_PORT
      label: SMTP Port
      defaultValue: "587"
      description: ""
    - id: $$config_email_smtp_user
      name: EMAIL_SMTP_USER
      label: SMTP User
      defaultValue: ""
      description: ""
    - id: $$secret_email_smtp_password
      name: EMAIL_SMTP_PASSWORD
      label: SMTP Password
      defaultValue: ""
      description: ""
      showOnConfiguration: true
    - id: $$config_email_smtp_enable_starttls
      name: EMAIL_SMTP_ENABLE_STARTTLS
      label: SMTP Enable StartTLS
      defaultValue: "false"
      description: ""
    - id: $$config_postgres_user
      name: POSTGRES_USER
      label: PostgreSQL User
      defaultValue: $$generate_username
      description: ""
    - id: $$secret_postgres_password
      name: POSTGRES_PASSWORD
      label: PostgreSQL Password
      defaultValue: $$generate_password
      description: ""
    - id: $$config_postgres_db
      name: POSTGRES_DB
      label: PostgreSQL Database
      defaultValue: $$generate_username
      description: ""
- templateVersion: 1.0.0
  defaultVersion: 0.215.1
  documentation: https://docs.n8n.io
  type: n8n
  name: n8n.io
  description: A free and open node based Workflow Automation Tool.
  labels:
    - workflow
    - automation
    - ifttt
    - zapier
    - nodered
  services:
    $$id:
      name: N8n
      depends_on: []
      image: "n8nio/n8n:$$core_version"
      volumes:
        - "$$id-data:/root/.n8n"
        - "$$id-data-write:/files"
        - "/var/run/docker.sock:/var/run/docker.sock"
      environment:
        - WEBHOOK_URL=$$config_webhook_url
      ports:
        - "5678"
  variables:
    - id: $$config_webhook_url
      name: WEBHOOK_URL
      label: Webhook URL
      defaultValue: $$generate_fqdn
      description: ""
- templateVersion: 1.0.0
  defaultVersion: v1.5.1
  documentation: https://plausible.io/doc/
  arch: amd64
  type: plausibleanalytics
  name: Plausible Analytics
  description: A lightweight and open-source website analytics tool.
  labels:
    - analytics
    - statistics
    - plausible
    - gdpr
    - no-cookie
    - google analytics
  services:
    $$id:
      name: Plausible Analytics
      command: >-
        sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db
        migrate && /entrypoint.sh db init-admin && /entrypoint.sh run"
      depends_on:
        - $$id-postgresql
        - $$id-clickhouse
      image: "plausible/analytics:$$core_version"
      environment:
        - ADMIN_USER_EMAIL=$$config_admin_user_email
        - ADMIN_USER_NAME=$$config_admin_user_name
        - ADMIN_USER_PWD=$$secret_admin_user_pwd
        - BASE_URL=$$config_base_url
        - SECRET_KEY_BASE=$$secret_secret_key_base
        - DISABLE_AUTH=$$config_disable_auth
        - DISABLE_REGISTRATION=$$config_disable_registration
        - DATABASE_URL=$$secret_database_url
        - CLICKHOUSE_DATABASE_URL=$$secret_clickhouse_database_url
      ports:
        - "8000"
    $$id-postgresql:
      name: PostgreSQL
      image: "bitnami/postgresql:13"
      volumes:
        - "$$id-postgresql-data:/bitnami/postgresql"
      environment:
        - POSTGRESQL_PASSWORD=$$secret_postgresql_password
        - POSTGRESQL_USERNAME=$$config_postgresql_username
        - POSTGRESQL_DATABASE=$$config_postgresql_database
    $$id-clickhouse:
      name: Clickhouse
      volumes:
        - "$$id-clickhouse-data:/var/lib/clickhouse"
      image: "clickhouse/clickhouse-server:22.6-alpine"
      ulimits:
        nofile:
          soft: 262144
          hard: 262144
      files:
        - location: /etc/clickhouse-server/users.d/logging.xml
          content: >-
            <yandex><logger><level>warning</level><console>true</console></logger><query_thread_log
            remove="remove"/><query_log remove="remove"/><text_log
            remove="remove"/><trace_log remove="remove"/><metric_log
            remove="remove"/><asynchronous_metric_log
            remove="remove"/><session_log remove="remove"/><part_log
            remove="remove"/></yandex>
        - location: /etc/clickhouse-server/config.d/logging.xml
          content: >-
            <yandex><profiles><default><log_queries>0</log_queries><log_query_threads>0</log_query_threads></default></profiles></yandex>
        - location: /docker-entrypoint-initdb.d/init.query
          content: CREATE DATABASE IF NOT EXISTS plausible;
        - location: /docker-entrypoint-initdb.d/init-db.sh
          content: >-
            clickhouse client --queries-file
            /docker-entrypoint-initdb.d/init.query
  variables:
    - id: $$config_base_url
      name: BASE_URL
      label: Base URL
      defaultValue: $$generate_fqdn
      description: >-
        You must set this to the FQDN of the Plausible Analytics instance. This
        is used to generate the links to the Plausible Analytics instance.
    - id: $$secret_database_url
      name: DATABASE_URL
      label: Database URL for PostgreSQL
      defaultValue: >-
        postgresql://$$config_postgresql_username:$$secret_postgresql_password@$$id-postgresql:5432/$$config_postgresql_database
      description: ""
    - id: $$secret_clickhouse_database_url
      name: CLICKHOUSE_DATABASE_URL
      label: Database URL for Clickhouse
      defaultValue: "http://$$id-clickhouse:8123/plausible"
      description: ""
    - id: $$config_admin_user_email
      name: ADMIN_USER_EMAIL
      label: Admin Email Address
      defaultValue: admin@example.com
      description: This is the admin email. Please change it.
    - id: $$config_admin_user_name
      name: ADMIN_USER_NAME
      label: Admin User Name
      defaultValue: $$generate_username
      description: This is the admin username. Please change it.
    - id: $$secret_admin_user_pwd
      name: ADMIN_USER_PWD
      label: Admin User Password
      defaultValue: $$generate_password
      description: This is the admin password. Please change it.
      showOnConfiguration: true
    - id: $$secret_secret_key_base
      name: SECRET_KEY_BASE
      label: Secret Key Base
      defaultValue: $$generate_hex(64)
      description: ""
    - id: $$config_disable_auth
      name: DISABLE_AUTH
      label: Authentication
      defaultValue: "false"
      description: ""
    - id: $$config_disable_registration
      name: DISABLE_REGISTRATION
      label: Registration
      defaultValue: "true"
      description: ""
    - id: $$config_postgresql_username
      main: $$id-postgresql
      name: POSTGRESQL_USERNAME
      label: PostgreSQL Username
      defaultValue: postgresql
      description: ""
    - id: $$secret_postgresql_password
      main: $$id-postgresql
      name: POSTGRESQL_PASSWORD
      label: PostgreSQL Password
      defaultValue: $$generate_password
      description: ""
      showOnConfiguration: true
    - id: $$config_postgresql_database
      main: $$id-postgresql
      name: POSTGRESQL_DATABASE
      label: PostgreSQL Database
      defaultValue: plausible
      description: ""
    - id: $$config_scriptName
      name: SCRIPT_NAME
      label: Custom Script Name
      defaultValue: plausible.js
      description: This is the default script name.
- templateVersion: 1.0.0
  defaultVersion: 0.104.2
  documentation: https://docs.nocodb.com
  type: nocodb
  name: NocoDB
  description: >-
    Turns any MySQL, PostgreSQL, SQL Server, SQLite & MariaDB into a smart-spreadsheet.
  labels:
    - database
    - airtable
    - spreadsheet
  services:
    $$id:
      name: NocoDB
      image: nocodb/nocodb:$$core_version
      environment:
        - PORT=$$config_port
        - NC_DB=$$config_nc_db
        - DATABASE_URL=$$secret_database_url
        - NC_PUBLIC_URL=$$config_public_url
        - NC_AUTH_JWT_SECRET=$$secret_auth_jwt_secret
        - NC_SENTRY_DSN=$$secret_sentry_dsn
        - >-
          NC_CONNECT_TO_EXTERNAL_DB_DISABLED=$$config_connect_to_external_db_disabled
        - NC_DISABLE_TELE=$$config_disable_tele
      volumes:
        - $$id-data:/usr/app/data
      ports:
        - "8080"
  variables:
    - id: $$config_nc_db
      name: NC_DB
      label: Database
      defaultValue: ""
      description: >-
        MySQL, PostgreSQL and MSSQL connection urls supported. If absent: A
        local SQLite will be created in root folder.
    - id: $$config_port
      name: PORT
      label: Port
      defaultValue: "8080"
      description: >-

    - id: $$secret_database_url
      name: DATABASE_URL
      label: Database URL
      defaultValue: ""
      description: >-
        JDBC URL Format. Can be used instead of NC_DB. Used in 1-Click Heroku
        deployment.
    - id: $$config_public_url
      name: NC_PUBLIC_URL
      label: Public URL
      defaultValue: ""
      description: >-
        Used for sending Email invitations. If absent: Best guess from http
        request params.
    - id: $$secret_auth_jwt_secret
      name: NC_AUTH_JWT_SECRET
      label: Auth JWT Secret
      defaultValue: $$generate_hex(64)
      description: >-
        JWT secret used for auth and storing other secrets. If absent: A Random
        secret will be generated.
    - id: $$secret_sentry_dsn
      name: NC_SENTRY_DSN
      label: Sentry DSN
      defaultValue: ""
      description: For Sentry monitoring.
    - id: $$config_connect_to_external_db_disabled
      name: NC_CONNECT_TO_EXTERNAL_DB_DISABLED
      label: Disable External Database
      defaultValue: "0"
      description: Disable Project creation with external database. (Enter "1" to disable).
    - id: $$config_disable_tele
      name: NC_DISABLE_TELE
      label: NocoDB Disable Telemetry
      defaultValue: "1"
      description: Disable telemetry (Enter "1" to disable).
