# yaml-language-server: $schema=https://schema.zeabur.app/template.json
apiVersion: zeabur.com/v1
kind: Template
metadata:
    name: Directus
spec:
    description: Directus is a real-time API and App dashboard for managing SQL database content.
    icon: https://avatars.githubusercontent.com/u/15967950
    variables:
        - key: DIRECTUS_ADMIN_EMAIL
          type: STRING
          name: Directus Admin email
          description: Create an admin user for Directus
    tags:
        - API
        - CMS
        - Website
    readme: |-
        # Directus

        The Modern Data Stack — Directus is an instant REST+GraphQL API and intuitive no-code data collaboration app for any SQL database.

        - **REST & GraphQL API.** Instantly layers a blazingly fast Node.js API on top of any SQL database.
        - **Manage Pure SQL.** Works with new or existing SQL databases, no migration required.
        - **Choose your Database.** Supports PostgreSQL, MySQL, SQLite, OracleDB, CockroachDB, MariaDB, and MS-SQL.
        - **On-Prem or Cloud.** Run locally, install on-premises, or use Direcuts's [self-service Cloud service](https://directus.io/pricing).
        - **Completely Extensible.** Built to white-label, it is easy to customize our modular platform.
        - **A Modern Dashboard.** Our no-code Vue.js app is safe and intuitive for non-technical users, no training required.

        **[Learn more about Directus](https://directus.io)** • **[Documentation](https://docs.directus.io)**

        ## Deploy

        Just click the "Deploy" button and fulfill email for admin, that's all.
    services:
        - name: Directus
          icon: https://avatars.githubusercontent.com/u/15967950
          dependencies:
            - PostgreSQL
            - Redis
          template: PREBUILT
          spec:
            id: directus
            source:
                image: directus/directus:11
            ports:
                - id: web
                  port: 8055
                  type: HTTP
            volumes:
                - id: uploads
                  dir: /directus/uploads
                - id: directus
                  dir: /directus/extensions
            instructions:
                - title: Admin Email
                  content: ${ADMIN_EMAIL}
                - title: Admin Password
                  content: ${ADMIN_PASSWORD}
            env:
                ADMIN_EMAIL:
                    default: ${DIRECTUS_ADMIN_EMAIL}
                ADMIN_PASSWORD:
                    default: ${PASSWORD}
                CACHE_ENABLED:
                    default: "true"
                CACHE_STORE:
                    default: redis
                DB_CLIENT:
                    default: pg
                DB_CONNECTION_STRING:
                    default: ${POSTGRES_CONNECTION_STRING}
                KEY:
                    default: ${PASSWORD}
                PUBLIC_URL:
                    default: ${ZEABUR_WEB_URL}
                REDIS:
                    default: ${REDIS_URI}
                SECRET:
                    default: ${PASSWORD}
        - name: PostgreSQL
          icon: https://raw.githubusercontent.com/zeabur/service-icons/main/marketplace/postgresql.svg
          template: PREBUILT
          spec:
            id: postgresql
            source:
                image: postgres:16
                command:
                    - docker-entrypoint.sh
                    - -c
                    - config_file=/etc/postgresql/postgresql.conf
            ports:
                - id: database
                  port: 5432
                  type: TCP
            volumes:
                - id: data
                  dir: /var/lib/postgresql/data
            instructions:
                - title: Connection String
                  content: postgresql://${POSTGRES_USERNAME}:${POSTGRES_PASSWORD}@${PORT_FORWARDED_HOSTNAME}:${DATABASE_PORT_FORWARDED_PORT}/${POSTGRES_DATABASE}
                - title: PostgreSQL Connect Command
                  content: psql "postgresql://${POSTGRES_USERNAME}:${POSTGRES_PASSWORD}@${PORT_FORWARDED_HOSTNAME}:${DATABASE_PORT_FORWARDED_PORT}/${POSTGRES_DATABASE}"
                - title: PostgreSQL username
                  content: ${POSTGRES_USERNAME}
                - title: PostgresSQL password
                  content: ${POSTGRES_PASSWORD}
                - title: PostgresSQL database
                  content: ${POSTGRES_DATABASE}
                - title: PostgreSQL host
                  content: ${PORT_FORWARDED_HOSTNAME}
                - title: PostgreSQL port
                  content: ${DATABASE_PORT_FORWARDED_PORT}
            env:
                PGDATA:
                    default: /var/lib/postgresql/data/pgdata
                POSTGRES_CONNECTION_STRING:
                    default: postgresql://${POSTGRES_USERNAME}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DATABASE}
                    expose: true
                POSTGRES_DATABASE:
                    default: ${POSTGRES_DB}
                    expose: true
                POSTGRES_DB:
                    default: zeabur
                POSTGRES_HOST:
                    default: ${CONTAINER_HOSTNAME}
                    expose: true
                POSTGRES_PASSWORD:
                    default: ${PASSWORD}
                    expose: true
                POSTGRES_PORT:
                    default: ${DATABASE_PORT}
                    expose: true
                POSTGRES_URI:
                    default: ${POSTGRES_CONNECTION_STRING}
                    expose: true
                POSTGRES_USER:
                    default: root
                POSTGRES_USERNAME:
                    default: ${POSTGRES_USER}
                    expose: true
            configs:
                - path: /etc/postgresql/postgresql.conf
                  template: |
                    # https://github.com/postgres/postgres/blob/master/src/backend/utils/misc/postgresql.conf.sample
                    listen_addresses = '*'
                    max_connections = 100
                    shared_buffers = 128MB
                    dynamic_shared_memory_type = posix
                    max_wal_size = 1GB
                    min_wal_size = 80MB
                    log_timezone = 'Etc/UTC'
                    datestyle = 'iso, mdy'
                    timezone = 'Etc/UTC'
                    lc_messages = 'en_US.utf8'
                    lc_monetary = 'en_US.utf8'
                    lc_numeric = 'en_US.utf8'
                    lc_time = 'en_US.utf8'
                    default_text_search_config = 'pg_catalog.english'
                  permission: null
                  envsubst: null
        - name: Redis
          icon: https://raw.githubusercontent.com/zeabur/service-icons/main/marketplace/redis.svg
          template: PREBUILT
          spec:
            id: redis
            source:
                image: redis/redis-stack-server:latest
            ports:
                - id: database
                  port: 6379
                  type: TCP
            volumes:
                - id: data
                  dir: /data
            instructions:
                - title: Command to connect to your Redis
                  content: redis-cli -h ${PORT_FORWARDED_HOSTNAME} -p ${DATABASE_PORT_FORWARDED_PORT} -a ${REDIS_PASSWORD}
                - title: Redis Connection String
                  content: redis://:${REDIS_PASSWORD}@${PORT_FORWARDED_HOSTNAME}:${DATABASE_PORT_FORWARDED_PORT}
                - title: Redis password
                  content: ${REDIS_PASSWORD}
                - title: Redis host
                  content: ${PORT_FORWARDED_HOSTNAME}
                - title: Redis port
                  content: ${DATABASE_PORT_FORWARDED_PORT}
            env:
                REDIS_ARGS:
                    default: --requirepass ${REDIS_PASSWORD}
                REDIS_CONNECTION_STRING:
                    default: redis://:${REDIS_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}
                    expose: true
                REDIS_HOST:
                    default: ${CONTAINER_HOSTNAME}
                    expose: true
                REDIS_PASSWORD:
                    default: ${PASSWORD}
                    expose: true
                REDIS_PORT:
                    default: ${DATABASE_PORT}
                    expose: true
                REDIS_URI:
                    default: ${REDIS_CONNECTION_STRING}
                    expose: true
localization:
    zh-CN:
        description: Directus 是一个用于管理 SQL 数据库内容的应用程序，提供即时 API 和后台管理界面。
        variables:
            - key: DIRECTUS_ADMIN_EMAIL
              type: STRING
              name: Directus 管理员邮箱
              description: 在 Directus 中建立一个拥有管理权限的使用者
        readme: |-
            现代化的数据工程 — Directus 是一个即时 REST + GraphQL API 和直觉式的 No Code 数据协作应用程序，适用于任何 SQL 数据库。

            - **REST 和 GraphQL API** 即时在任何 SQL 数据库上层叠超快速的 Node.js API。
            - **管理纯 SQL** 适用于新建或现有的 SQL 数据库，无需迁移。
            - **选择您的数据库** 支持 PostgreSQL、MySQL、SQLite、OracleDB、CockroachDB、MariaDB 和 MS-SQL。
            - **本地部署或云端** 在本地运行、内部部署，或使用 Directus 的[自助式云端服务](https://directus.io/pricing)。
            - **可扩展性强** 专为打造个人品牌设计，轻松定制化我们的模块化平台。
            - **现代化管理后台** 我们的 No Code Vue.js 应用对非技术背景的用户可以安全且直觉地使用，无需培训。

            **[了解更多关于 Directus](https://directus.io)** • **[说明文档](https://docs.directus.io)**

            ## 部署

            只需按下 "部署" 按钮，然后输入管理者的电子邮箱，就完成了。
    zh-TW:
        description: Directus 是一個用於管理 SQL 資料庫內容的應用程式，提供即時 API 和後台管理介面。
        variables:
            - key: DIRECTUS_ADMIN_EMAIL
              type: STRING
              name: Directus 管理員信箱
              description: 在 Directus 中建立一個擁有管理權限的使用者
        readme: |-
            # Directus

            現代化的資料工程 — Directus 是一個即時 REST + GraphQL API 和直覺式的 No Code 資料協作應用程式，適用於任何 SQL 資料庫。

            - **REST 和 GraphQL API** 即時在任何 SQL 資料庫上層疊超快速的 Node.js API。
            - **管理純 SQL** 適用於新建或現有的 SQL 資料庫，無需遷移。
            - **選擇您的資料庫** 支援 PostgreSQL、MySQL、SQLite、OracleDB、CockroachDB、MariaDB 和 MS-SQL。
            - **地端部署或雲端** 在本地執行、內部部署，或使用 Directus 的[自助式雲端服務](https://directus.io/pricing)。
            - **可擴充性強** 專為打造個人品牌設計，輕鬆客製化我們的模組化平台。
            - **現代化管理後台** 我們的 No Code Vue.js 應用對非技術背景的使用者可以安全且直覺地使用，無需培訓。

            **[了解更多關於 Directus](https://directus.io)** • **[說明文件](https://docs.directus.io)**

            ## 部署

            只需按下 "部署" 按鈕，然後輸入管理者的電子信箱，就完成了。
