# yaml-language-server: $schema=https://schema.zeabur.app/template.json
apiVersion: zeabur.com/v1
kind: Template
metadata:
    name: Readur
spec:
    description: |
        Self-hosted Readur OCR document processing service with PostgreSQL. Features include automatic file watching, OCR processing, and document management with JWT authentication.
    icon: https://avatars.githubusercontent.com/u/216796041?s=200&v=4
    variables:
        - key: PUBLIC_DOMAIN
          type: DOMAIN
          name: Domain
          description: The domain you want to bind for your Readur instance.
    tags:
        - Tool
        - OCR
        - Document
    readme: |
        # Readur

        This template deploys a self-hosted **Readur** document processing service with **PostgreSQL** on Zeabur.

        Readur is an OCR-powered document processing service that supports automatic file watching and document management.

        ## Features

        - OCR document processing with Tesseract
        - Automatic file watching and processing
        - JWT-based authentication
        - Support for multiple file types (PDF, TXT, DOC, DOCX, PNG, JPG, JPEG)
        - PostgreSQL database for document storage

        ## Settings

        To change language or system settings, click the top-right user icon, then click Settings.

        ## Admin Account

        On first startup, Readur generates a secure admin password and displays it in the logs:

        ```
        ==============================================
          READUR ADMIN USER CREATED
        ==============================================

        Username: admin
        Password: [your-generated-password]

        ⚠️   SAVE THESE CREDENTIALS IMMEDIATELY!
        ⚠️   This password will not be shown again.
        ==============================================
        ```

        Please check your project logs to retrieve the password.

        ### Supported File Types

        PDF, TXT, DOC, DOCX, PNG, JPG, JPEG
    services:
        - name: PostgreSQL
          icon: https://raw.githubusercontent.com/zeabur/service-icons/main/marketplace/postgresql.svg
          template: PREBUILT
          spec:
            source:
                image: postgres:18
                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: postgres://${POSTGRES_USERNAME}:${POSTGRES_PASSWORD}@${PORT_FORWARDED_HOSTNAME}:${DATABASE_PORT_FORWARDED_PORT}/${POSTGRES_DATABASE}
                - title: PostgreSQL Connect Command
                  content: psql "postgres://${POSTGRES_USERNAME}:${POSTGRES_PASSWORD}@${PORT_FORWARDED_HOSTNAME}:${DATABASE_PORT_FORWARDED_PORT}/${POSTGRES_DATABASE}"
                - title: PostgreSQL username
                  content: ${POSTGRES_USERNAME}
                - title: PostgreSQL password
                  content: ${POSTGRES_PASSWORD}
                - title: PostgreSQL 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: postgres://${POSTGRES_USERNAME}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DATABASE}
                    expose: true
                POSTGRES_DATABASE:
                    default: ${POSTGRES_DB}
                    expose: true
                POSTGRES_DB:
                    default: readur
                POSTGRES_HOST:
                    default: ${CONTAINER_HOSTNAME}
                    expose: true
                POSTGRES_PASSWORD:
                    default: ${PASSWORD}
                    expose: true
                POSTGRES_PORT:
                    default: "5432"
                    expose: true
                POSTGRES_URI:
                    default: ${POSTGRES_CONNECTION_STRING}
                    expose: true
                POSTGRES_USER:
                    default: readur
                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: Readur
          icon: https://avatars.githubusercontent.com/u/216796041?s=200&v=4
          template: GIT
          spec:
            source:
                source: GITHUB
                repo: 1003828909
                branch: main
            ports:
                - id: web
                  port: 8000
                  type: HTTP
            volumes:
                - id: uploads
                  dir: /app/uploads
                - id: watch
                  dir: /app/watch
            env:
                ALLOWED_FILE_TYPES:
                    default: pdf,txt,doc,docx,png,jpg,jpeg
                CONCURRENT_OCR_JOBS:
                    default: "4"
                CPU_PRIORITY:
                    default: normal
                DATABASE_URL:
                    default: postgresql://${POSTGRES_USERNAME}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DATABASE}
                FILE_STABILITY_CHECK_MS:
                    default: "1000"
                JWT_SECRET:
                    default: ${PASSWORD}
                MAX_FILE_AGE_HOURS:
                    default: "24"
                MAX_FILE_SIZE_MB:
                    default: "50"
                MEMORY_LIMIT_MB:
                    default: "512"
                OCR_LANGUAGE:
                    default: eng
                OCR_TIMEOUT_SECONDS:
                    default: "300"
                SERVER_HOST:
                    default: 0.0.0.0
                SERVER_PORT:
                    default: "8000"
                UPLOAD_PATH:
                    default: /app/uploads
                WATCH_FOLDER:
                    default: /app/watch
                WATCH_INTERVAL_SECONDS:
                    default: "30"
          domainKey: PUBLIC_DOMAIN
localization:
    zh-CN:
        description: |
            自架版 Readur OCR 文档处理服务，搭配 PostgreSQL，一键部署到 Zeabur。支持自动文件监控、OCR 处理和文档管理，并提供 JWT 认证。
        variables:
            - key: PUBLIC_DOMAIN
              type: DOMAIN
              name: 域名
              description: 想要绑定到 Readur 的域名。
        readme: |
            # Readur

            这个模板会在 Zeabur 上部署一个自架的 **Readur** 文档处理服务，并搭配 **PostgreSQL** 数据库。

            Readur 是一个 OCR 驱动的文档处理服务，支持自动文件监控和文档管理。

            ## 功能特色

            - 使用 Tesseract 进行 OCR 文档处理
            - 自动文件监控和处理
            - JWT 认证机制
            - 支持多种文件格式（PDF、TXT、DOC、DOCX、PNG、JPG、JPEG）
            - PostgreSQL 数据库存储文档

            ## 设置方式

            修改语言或系统相关设置可以点击右上角的人形按钮，再点击 Settings 即可设置。

            ## 管理员账号

            第一次部署时会自动建立 admin 账号和密码，密码请到项目中记录的地方查看。

            Readur 会在首次启动时在日志中输出管理员密码：

            ```
            ==============================================
              READUR ADMIN USER CREATED
            ==============================================

            Username: admin
            Password: [your-generated-password]

            ⚠️   SAVE THESE CREDENTIALS IMMEDIATELY!
            ⚠️   This password will not be shown again.
            ==============================================
            ```

            ### 支持的文件类型

            PDF、TXT、DOC、DOCX、PNG、JPG、JPEG
    zh-TW:
        description: |
            自架版 Readur OCR 文件處理服務，搭配 PostgreSQL，一鍵部署到 Zeabur。支援自動檔案監控、OCR 處理和文件管理，並提供 JWT 認證。
        variables:
            - key: PUBLIC_DOMAIN
              type: DOMAIN
              name: 網域
              description: 想要綁定在 Readur 上的網域。
        readme: |
            # Readur

            這個模板會在 Zeabur 上部署一個自架的 **Readur** 文件處理服務，並搭配 **PostgreSQL** 資料庫。

            Readur 是一個 OCR 驅動的文件處理服務，支援自動檔案監控和文件管理。

            ## 功能特色

            - 使用 Tesseract 進行 OCR 文件處理
            - 自動檔案監控和處理
            - JWT 認證機制
            - 支援多種檔案格式（PDF、TXT、DOC、DOCX、PNG、JPG、JPEG）
            - PostgreSQL 資料庫儲存文件

            ## 設定方式

            修改語言或是系統相關設定可以點擊右上角的人形按鈕，再點擊 Settings 即可設定。

            ## 管理員帳號

            第一次部署時會自動建立 admin 帳號和密碼，密碼請到專案中記錄的地方查看。

            Readur 會在首次啟動時於記錄中輸出管理員密碼：

            ```
            ==============================================
              READUR ADMIN USER CREATED
            ==============================================

            Username: admin
            Password: [your-generated-password]

            ⚠️   SAVE THESE CREDENTIALS IMMEDIATELY!
            ⚠️   This password will not be shown again.
            ==============================================
            ```

            ### 支援的檔案類型

            PDF、TXT、DOC、DOCX、PNG、JPG、JPEG
