# yaml-language-server: $schema=https://schema.zeabur.app/template.json
apiVersion: zeabur.com/v1
kind: Template
metadata:
    name: VoAPI
spec:
    description: 全新的高颜值/高性能的AI模型接口管理与分发系统
    icon: https://i.imgur.com/3pRJ59s.png
    variables:
        - key: PUBLIC_DOMAIN
          type: DOMAIN
          name: Domain
          description: What is the domain of your VoAPI?
    tags:
        - Tool
        - API
    readme: |-
        # VoAPI

        全新的高颜值/高性能的AI模型接口管理与分发系统，仅供个人学习使用，请勿用于任何商业用途，本项目基于NewAPI开发。

        ## 差异说明

        本系统与NewAPI的差异主要在于：

        - 整体界面风格的差异
        - 增加开发文档独立页支持
        - 增加服务监控页配置支持
        - 增加LinuxDO的第三方登录支持
        - 优化部分界面元素的边距避免挤在一起
        - 优化第三方登录部分逻辑
        - 用户注册时间支持
        - 优化数据操作按钮位置避免在页面底部
        - 在线充值关闭时不显示对应模块
        - 新版本在线检测支持
        - 清空本地缓存支持
        - 重构移动端菜单为弹出侧边栏展示
        - 增加C#的trueai-org/midjourney-proxy支持
        - 增加用户管理列表邮箱显示
        - 增加登录/对话/绘画IP记录
        - 增加签到功能支持
        - 增加易支付自定义渠道支持
        - 增加MJ渠道模型的relax/fast/turbo区分
        - 增加全站模型汇率配置
        - 增加模型价格页计量单位与货币单位切换显示
        - 增加模型价格页倍率切换显示
        - 增加模型价格页模型信息（模型图标、介绍、标签、归属厂商、归属厂商图标）展示支持
        - 增加模型厂商滚动选项栏分组
        - 增加模型价格页厂商切换时显示对应的介绍与公告
        - 屏蔽敏感词触发响应错误包含具体敏感字词信息
        - 增加敏感词触发风控记录支持
        - 增加全局转发API调用速率限制支持，环境变量：GLOBAL_RELAY_RATE_LIMIT_ENABLE=false、GLOBAL_RELAY_RATE_LIMIT=180、GLOBAL_RELAY_RATE_LIMIT_DURATION=180
        - 增加用户余额每日清空支持，环境变量：USER_DAILY_QUOTA_CLEAR=false
        - 增加钱包页公告支持
        - 增加余额清零日期单位：USER_DAILY_QUOTA_CLEAR_UNIT=DAY/WEEK/MONTH，默认为DAY
        - 增加Claude原生API格式请求支持
        - 增加动态聊天页面无上限配置+路径参数魔法变量支持
        - 增加每日最大风控次数限制及封禁：USER_DAILY_SENSITIVE_MAX_BAN=0（必须启用redis）
        - 增加FluxAPI的支持
        - 增加StabilityAI API的支持
        - 增加可灵API的支持
        - 增加对话模型请求字段过滤支持
    services:
        - name: mysql
          icon: https://raw.githubusercontent.com/zeabur/service-icons/main/marketplace/mysql.svg
          template: PREBUILT
          spec:
            source:
                image: mysql:8.0.33
            ports:
                - id: database
                  port: 3306
                  type: TCP
            volumes:
                - id: data
                  dir: /var/lib/mysql
            instructions:
                - title: Command to connect to your MySQL
                  content: mysqlsh --sql --host=${PORT_FORWARDED_HOSTNAME} --port=${DATABASE_PORT_FORWARDED_PORT} --user=${MYSQL_USERNAME} --password=${MYSQL_PASSWORD} --schema=${MYSQL_DATABASE}
                - title: MySQL username
                  content: ${MYSQL_USERNAME}
                - title: MySQL password
                  content: ${MYSQL_PASSWORD}
                - title: MySQL database
                  content: ${MYSQL_DATABASE}
                - title: MySQL host
                  content: ${PORT_FORWARDED_HOSTNAME}
                - title: MySQL port
                  content: ${DATABASE_PORT_FORWARDED_PORT}
            env:
                MYSQL_DATABASE:
                    default: zeabur
                    expose: true
                MYSQL_HOST:
                    default: ${CONTAINER_HOSTNAME}
                    expose: true
                MYSQL_PASSWORD:
                    default: ${MYSQL_ROOT_PASSWORD}
                    expose: true
                MYSQL_PORT:
                    default: ${DATABASE_PORT}
                    expose: true
                MYSQL_ROOT_PASSWORD:
                    default: ${PASSWORD}
                MYSQL_USERNAME:
                    default: root
                    expose: true
            configs:
                - path: /etc/my.cnf
                  template: |
                    [mysqld]
                    default-authentication-plugin=mysql_native_password
                    skip-host-cache
                    skip-name-resolve
                    datadir=/var/lib/mysql
                    socket=/var/run/mysqld/mysqld.sock
                    secure-file-priv=/var/lib/mysql-files
                    user=mysql
                    max_allowed_packet=10M

                    pid-file=/var/run/mysqld/mysqld.pid
                    [client]
                    socket=/var/run/mysqld/mysqld.sock

                    !includedir /etc/mysql/conf.d/
                  permission: null
                  envsubst: null
        - name: redis
          icon: https://raw.githubusercontent.com/zeabur/service-icons/main/marketplace/redis.svg
          template: PREBUILT
          spec:
            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
        - name: voapi
          icon: https://i.imgur.com/3pRJ59s.png
          dependencies:
            - mysql
            - redis
          template: PREBUILT
          spec:
            source:
                image: voapi/voapi:v1.2.0
            ports:
                - id: web
                  port: 6800
                  type: HTTP
            env:
                REDIS_CONN_STRING:
                    default: ${REDIS_URI}
                SESSION_SECRET:
                    default: ${PASSWORD}
                SQL_DSN:
                    default: ${MYSQL_USERNAME}:${MYSQL_PASSWORD}@tcp(${MYSQL_HOST}:${MYSQL_PORT})/${MYSQL_DATABASE}
                TZ:
                    default: Asia/Shanghai
            configs:
                - path: /config.yml
                  template: |
                    app:
                      port: 6800 # 应用监听端口
                    mysql:
                      dsn: ${MYSQL_USERNAME}:${MYSQL_PASSWORD}@tcp(${MYSQL_HOST}:${MYSQL_PORT})/${MYSQL_DATABASE} # 主数据据库
                      log-dsn: ${MYSQL_USERNAME}:${MYSQL_PASSWORD}@tcp(${MYSQL_HOST}:${MYSQL_PORT})/${MYSQL_DATABASE} # 日志分离数据库
                      log-body-dsn: ${MYSQL_USERNAME}:${MYSQL_PASSWORD}@tcp(${MYSQL_HOST}:${MYSQL_PORT})/${MYSQL_DATABASE} # 请求体日志分离数据库
                      log-sharding: # 日志分表方式，支持 day/week/month/year 四种方式
                        enable: false
                        mode: y # d = day, w = week, m = month, y = year
                    redis:
                      dsn: ${REDIS_CONNECTION_STRING}
                      pool-size: 0 #redis连接池大小，等于0时使用默认值，默认值为CPU数量*100
                  permission: null
                  envsubst: true
          domainKey: PUBLIC_DOMAIN
