# yaml-language-server: $schema=https://schema.zeabur.app/template.json
apiVersion: zeabur.com/v1
kind: Template
metadata:
    name: Xingrin
spec:
    description: |
        Xingrin (星刃) asset & scan platform: Django API + Next frontend + Redis + Postgres + Agent + Nginx.
        Previously deployed on DigitalOcean with domain git-1.00900.vip.
    coverImage: https://avatars.githubusercontent.com/u/0?v=4
    icon: https://cdn.zeabur.com/prebuilt.svg
    variables:
        - key: PUBLIC_DOMAIN
          type: DOMAIN
          name: Domain
          description: Public domain (e.g. xingrin.z88.dev or git-1.00900.vip)
        - key: DB_PASSWORD
          type: PASSWORD
          name: PostgreSQL Password
          description: Database password
        - key: DJANGO_SECRET_KEY
          type: PASSWORD
          name: Django Secret Key
          description: Django SECRET_KEY (random 32+ chars)
        - key: WORKER_API_KEY
          type: PASSWORD
          name: Worker API Key
          description: Worker/agent auth key
    tags:
        - Security
        - Scanner
        - AI
    readme: |
        # Xingrin (星刃)

        Production stack using Docker Hub images `yyhuni/xingrin-*:v1.5.8`.

        ## Services

        | Service | Image | Port |
        |---------|-------|------|
        | postgres | yyhuni/xingrin-postgres | 5432 |
        | redis | redis:7-alpine | 6379 |
        | server | yyhuni/xingrin-server | 8888 |
        | frontend | yyhuni/xingrin-frontend | 3000 |
        | agent | yyhuni/xingrin-agent | — |
        | nginx | yyhuni/xingrin-nginx | **8083** (public) |

        ## After deploy

        1. Open **PUBLIC_DOMAIN** (bound to nginx:8083).
        2. Complete first-time setup / admin in UI.
        3. Optional host tools for full scan capability.

        ## Legacy mapping

        - Was: `git-1.00900.vip` → DO `157.230.36.236` host nginx → `:8083`
        - Compose path (old): `/opt/xingrin/docker/docker-compose.yml`
    resourceRequirement:
        minConfig:
            cpu: 2
            ram: 4
        recommendedConfig:
            cpu: 4
            ram: 8
    services:
        - name: postgres
          icon: https://cdn.zeabur.com/marketplace/postgresql.svg
          template: PREBUILT_V2
          spec:
            id: postgres
            source:
                image: yyhuni/xingrin-postgres:v1.5.8
                command:
                    - postgres
                    - -c
                    - shared_preload_libraries=pg_ivm
            ports:
                - id: database
                  port: 5432
                  type: TCP
            volumes:
                - id: data
                  dir: /var/lib/postgresql/data
            env:
                POSTGRES_DB:
                    default: xingrin
                    expose: true
                POSTGRES_HOST:
                    default: ${CONTAINER_HOSTNAME}
                    expose: true
                POSTGRES_PASSWORD:
                    default: ${DB_PASSWORD}
                    expose: true
                POSTGRES_PORT:
                    default: ${DATABASE_PORT}
                    expose: true
                POSTGRES_USER:
                    default: postgres
                    expose: true
        - name: redis
          icon: https://cdn.zeabur.com/prebuilt.svg
          template: PREBUILT_V2
          spec:
            id: redis
            source:
                image: redis:7-alpine
            ports:
                - id: redis
                  port: 6379
                  type: TCP
            env:
                REDIS_HOST:
                    default: ${CONTAINER_HOSTNAME}
                    expose: true
                REDIS_PORT:
                    default: ${REDIS_PORT}
                    expose: true
        - name: server
          icon: https://cdn.zeabur.com/prebuilt.svg
          template: PREBUILT_V2
          spec:
            id: server
            source:
                image: yyhuni/xingrin-server:v1.5.8
            ports:
                - id: api
                  port: 8888
                  type: HTTP
            volumes:
                - id: xingrin-data
                  dir: /opt/xingrin
            env:
                CORS_ALLOWED_ORIGINS:
                    default: https://${PUBLIC_DOMAIN}
                DB_HOST:
                    default: ${POSTGRES_HOST}
                DB_NAME:
                    default: ${POSTGRES_DB}
                DB_PASSWORD:
                    default: ${POSTGRES_PASSWORD}
                DB_PORT:
                    default: ${POSTGRES_PORT}
                DB_USER:
                    default: ${POSTGRES_USER}
                DEBUG:
                    default: "False"
                DJANGO_SECRET_KEY:
                    default: ${DJANGO_SECRET_KEY}
                DOCKER_USER:
                    default: yyhuni
                ENABLE_COMMAND_LOGGING:
                    default: "true"
                IMAGE_TAG:
                    default: v1.5.8
                LOG_DIR:
                    default: /opt/xingrin/logs
                LOG_LEVEL:
                    default: INFO
                PUBLIC_HOST:
                    default: ${PUBLIC_DOMAIN}
                PUBLIC_PORT:
                    default: "443"
                REDIS_DB:
                    default: "0"
                REDIS_HOST:
                    default: ${REDIS_HOST}
                SCAN_RESULTS_DIR:
                    default: /opt/xingrin/results
                SERVER_HOST:
                    default: ${CONTAINER_HOSTNAME}
                    expose: true
                SERVER_PORT:
                    default: "8888"
                    expose: true
                WORKER_API_KEY:
                    default: ${WORKER_API_KEY}
            healthCheck:
                type: HTTP
                port: api
                http:
                    path: /api/health/
        - name: frontend
          icon: https://cdn.zeabur.com/prebuilt.svg
          template: PREBUILT_V2
          spec:
            id: frontend
            source:
                image: yyhuni/xingrin-frontend:v1.5.8
            ports:
                - id: web
                  port: 3000
                  type: HTTP
            env:
                NODE_ENV:
                    default: production
                PORT:
                    default: "3000"
        - name: agent
          icon: https://cdn.zeabur.com/prebuilt.svg
          template: PREBUILT_V2
          spec:
            id: agent
            source:
                image: yyhuni/xingrin-agent:v1.5.8
            env:
                IMAGE_TAG:
                    default: v1.5.8
                IS_LOCAL:
                    default: "true"
                SERVER_URL:
                    default: http://${SERVER_HOST}:${SERVER_PORT}
                WORKER_API_KEY:
                    default: ${WORKER_API_KEY}
                WORKER_NAME:
                    default: Local-Worker
        - name: nginx
          icon: https://cdn.zeabur.com/prebuilt.svg
          template: PREBUILT_V2
          spec:
            id: nginx
            source:
                image: yyhuni/xingrin-nginx:v1.5.8
            ports:
                - id: web
                  port: 8083
                  type: HTTP
            healthCheck:
                type: HTTP
                port: web
                http:
                    path: /
          domainKey: PUBLIC_DOMAIN
localization:
    zh-CN:
        description: |
            星刃 Xingrin 资产扫描平台（Django API + 前端 + Redis + Postgres + Agent + Nginx）。
            原部署：DigitalOcean，域名 git-1.00900.vip。
        variables:
            - key: PUBLIC_DOMAIN
              type: DOMAIN
              name: 域名
              description: 公网域名（如 xingrin.z88.dev）
            - key: DB_PASSWORD
              type: PASSWORD
              name: 数据库密码
              description: PostgreSQL 密码
            - key: DJANGO_SECRET_KEY
              type: PASSWORD
              name: Django 密钥
              description: Django SECRET_KEY
            - key: WORKER_API_KEY
              type: PASSWORD
              name: Worker 密钥
              description: Agent/Worker API 认证密钥
        readme: |
            # 星刃 Xingrin

            使用 Docker Hub 预构建镜像 `yyhuni/xingrin-*:v1.5.8`。

            ## 历史位置

            - 机器：安全 Digital Singapore `157.230.36.236`
            - 域名：`git-1.00900.vip` → nginx → `:8083`
            - 目录：`/opt/xingrin/docker/`

            ## 部署后

            打开 PUBLIC_DOMAIN，完成初始化；在 Zeabur 变量中确认密钥已更换。
