# yaml-language-server: $schema=https://schema.zeabur.app/template.json
apiVersion: zeabur.com/v1
kind: Template
metadata:
    name: n8n（含Task Runners / Python）
spec:
    description: n8n allows you to build flexible workflows focused on deep data integration.
    coverImage: https://img.5xcamp.us/i/eacda81d-496e-4d9c-ac0c-242081ce79d9.png
    icon: https://img.5xcamp.us/i/2732381b-be89-478f-9f82-7d63beed4d81.png
    variables:
        - key: PUBLIC_DOMAIN
          type: DOMAIN
          name: n8n Domain
          description: The domain for accessing your n8n application.
    tags:
        - Tool
        - Automation
        - n8n
    readme: |
        # n8n

        n8n allows you to build flexible workflows, enabling less technically savvy team members to collaborate through shareable templates and a user-friendly interface.
        You can build anything you want without worrying about budget.

        ## Template Features

        - Includes Task Runners support
        - Includes a native Python execution environment

        Faster task processing capabilities, supporting more diverse workflow designs.
        An independent execution environment for more secure code execution.

        ## How to Use

        The template supports **one-click deployment**. After binding your domain, you can start using n8n to automate your workflows.
    services:
        - name: postgresql
          icon: https://raw.githubusercontent.com/zeabur/service-icons/main/marketplace/postgresql.svg
          template: PREBUILT
          spec:
            id: postgresql
            source:
                image: postgres:17
                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
            healthCheck:
                type: TCP
                port: database
        - name: n8n
          icon: https://img.5xcamp.us/i/2732381b-be89-478f-9f82-7d63beed4d81.png
          dependencies:
            - postgresql
          template: PREBUILT
          spec:
            id: n8n
            source:
                image: n8nio/n8n:latest
            ports:
                - id: web
                  port: 5678
                  type: HTTP
                - id: broker
                  port: 5679
                  type: TCP
            volumes:
                - id: data
                  dir: /root/.n8n
            env:
                DB_POSTGRESDB_DATABASE:
                    default: ${POSTGRES_DATABASE}
                DB_POSTGRESDB_HOST:
                    default: ${POSTGRES_HOST}
                DB_POSTGRESDB_PASSWORD:
                    default: ${POSTGRES_PASSWORD}
                DB_POSTGRESDB_PORT:
                    default: ${POSTGRES_PORT}
                DB_POSTGRESDB_USER:
                    default: ${POSTGRES_USERNAME}
                DB_TYPE:
                    default: postgresdb
                GENERIC_TIMEZONE:
                    default: Asia/Taipei
                N8N_BLOCK_ENV_ACCESS_IN_NODE:
                    default: "false"
                N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE:
                    default: "true"
                N8N_DEFAULT_BINARY_DATA_MODE:
                    default: filesystem
                N8N_DIAGNOSTICS_ENABLED:
                    default: "false"
                N8N_ENCRYPTION_KEY:
                    default: ${PASSWORD}
                N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS:
                    default: "false"
                N8N_HOST:
                    default: ${ZEABUR_WEB_DOMAIN}
                N8N_NATIVE_PYTHON_RUNNER:
                    default: "true"
                N8N_RUNNERS_BROKER_LISTEN_ADDRESS:
                    default: 0.0.0.0
                N8N_RUNNERS_ENABLED:
                    default: "true"
                N8N_RUNNERS_MODE:
                    default: external
                N8N_RUNNERS_TASK_BROKER_URI:
                    default: http://${CONTAINER_HOSTNAME}:${BROKER_PORT}
                    expose: true
                N8N_RUNNERS_TASK_REQUEST_TIMEOU:
                    default: "60"
                NODE_ENV:
                    default: production
                WEBHOOK_URL:
                    default: ${ZEABUR_WEB_URL}
            healthCheck:
                type: HTTP
                port: web
                http:
                    path: /healthz
          domainKey: PUBLIC_DOMAIN
        - name: runners
          icon: https://www.gravatar.com/avatar/6047307717425ea70aa4e8cb39f9959b?s=120&r=g&d=404
          template: PREBUILT_V2
          spec:
            id: runners
            source:
                image: n8nio/runners:latest
            ports:
                - id: runners
                  port: 5680
                  type: HTTP
            env:
                N8N_RUNNERS_AUTH_TOKEN:
                    default: ${PASSWORD}
                    expose: true
            configs: []
            portForwarding:
                enabled: false
localization:
    ja-JP:
        description: n8n は柔軟なワークフローを構築し、深いデータ統合に焦点を当てることができます。
        readme: |
            # n8n

            n8n を使用すると、柔軟なワークフローを構築できます。共有可能なテンプレートとユーザーフレンドリーなインターフェースにより、技術に詳しくないチームメンバーでも共同作業が可能になります。
            予算を気にすることなく、必要なものをすべて構築できます。

            ## テンプレートの機能

            - タスクランナーをサポート
            - ネイティブ Python 実行環境をサポート

            より高速なタスク処理機能により、より多様なワークフロー設計に対応します。
            より安全なコード実行のための独立した実行環境を提供します。

            ## 使用方法

            このテンプレートは**ワンクリックデプロイ**をサポートしています。ドメインをバインドすれば、n8n を使用してワークフローを自動化できます。
    zh-CN:
        description: n8n 让你构建专注于数据集成的灵活工作流。
        readme: "# n8n\n\nn8n 让你能够建立灵活的工作流程，透过可分享的范本和友善的使用者介面，团队中比较不懂技术的成员也能一起协作。 \n你可以随心所欲地建立任何东西，不用担心预算问题。 \n\n## 此模板特色\n- 含 Task Runners 支援\n- 含 Python 原生执行环境\n\n更快的任务处理能力，支援更多元的工作流程设计。 \n独立的执行环境，更安全的程式码运行。 \n\n## 使用方式\n\n模版支援**一键部署**，绑定网域后就能开始使用 n8n 来自动化你的工作流程。\n"
    zh-TW:
        description: n8n 讓你建立專注於資料整合的靈活工作流。
        readme: |
            # n8n

            n8n 讓你能夠建立靈活的工作流程，透過可分享的範本和友善的使用者介面，團隊中比較不懂技術的成員也能一起協作。
            你可以隨心所欲地建立任何東西，不用擔心預算問題。

            ## 此模板特色
            - 含 Task Runners 支援
            - 含 Python 原生執行環境

            更快的任務處理能力，支援更多元的工作流程設計。
            獨立的執行環境，更安全的程式碼運行。

            ## 使用方式

            模版支援**一鍵部署**，綁定網域後就能開始使用 n8n 來自動化你的工作流程。
