Результаты поиска для

    Show / Hide Table of Contents

    Установка МоиОтчеты Корпоративный Сервер

    Продукты: МоиОтчеты Корпоративный Сервер

    Минимальная конфигурация корпоративного сервера отчётов состоит из девяти компонентов, описанных ниже. Перед установкой необходимо определить переменные, например, в файле config.sh. Во избежание конфликтов имён лучше иметь глобальный файл конфигурации для всех скриптов отчёта. Ниже показан пример инициализации переменных, используемых скриптами установки сервера отчётов:

    IMAGE_STORAGE=xn--80akiaokt3b4b.xn--90aia9aifhdb2cxbdg.xn--p1ai/repository/docker-registry
    IMAGE_TAG=debian-2025.1.10
    NAMESPACE=fr-corporate-server
    SECRET_VOLUME_NAME=corporate-volume-secret
    IMAGE_REGISTRY_SECRET_NAME=storage_secret
    SECRET_VOLUME_NAME=corporate-volume-secret
    PULL_POLICY=Never
    

    Описание переменных:
    IMAGE_STORAGE - адрес хранилища образов сервисов сервера отчётов, Корпоративный Сервер использует локальное хранилище, наполнение образами которого описано в разделе Подготовка образов.
    IMAGE_TAG - версия сервера отчётов.
    NAMESPACE - пространство имён Kubernetes, в котором будет выполняться сервер отчётов. SECRET_VOLUME_NAME - имя тома, на котором будет храниться конфигурация и информация для авторизации.
    IMAGE_REGISTRY_SECRET_NAME - имя записи, сохраняющей информацию для авторизации на сервере, хранящем образы сервисов сервере отчётов. PULL_POLICY - определяет как Kubernetes будет скачивать образы сервисов. Возможные значения:

    • Always - всегда скачивать образы при старте сервиса;
    • IfNotPresent - скачивать образ только если он не присутствует локально;
    • Never - использовать заранее импортированные образы, никогда не скачивать их с внешнего сервера.

    Обратите внимание: описанная конфигурация не скачивает образы из внешнего хранилища (PULL_POLICY=Never), эти переменные должны быть заданы во избежание ошибок при применении конфигурации. Перед установкой значения PULL_POLICY обратитесь к секции fr-images для ознакомления с настройками.

    Настройка параметров сервера отчётов описана в документе Конфигурация сервера отчётов. В этом документе описаны базовые параметры, определяющие режимы работы сервера отчётов.

    Gateway - сервис обработки входящих запросов

    Gateway это сервис, обрабатывающий все соединения к серверу отчётов. Он анализирует запросы и распределяет их между другими сервисами. Если сервис Gateway не работает или работает неправильно, то ни один из компонентов сервера отчётов работать не будет. Ingress конфигурация по умолчанию отправляет все внешние запросы именно этому сервису. В случае каких-либо проблем с сервисом начните анализ проблемы с просмотров логов сервиса fr-gateway.

    #!/bin/sh
    
    HTTPS_NODE_PORT=32222
    IMAGE="${IMAGE_STORAGE}/moiotchety-corporate-server-gateway:${IMAGE_TAG}"
    
    cat <<EOF | kubectl apply -n $NAMESPACE -f -
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: fr-gateway
      namespace: $NAMESPACE
      labels:
        app.kubernetes.io/name: fr-gateway
    rules:
      - apiGroups: [""]
        resources:
          - services
          - endpoints
          - pods
        verbs: ["get", "list", "watch"]
    
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: fr-gateway
      namespace: $NAMESPACE
      labels:
        app.kubernetes.io/name: fr-gateway
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: fr-gateway
      namespace: $NAMESPACE
      labels:
        app.kubernetes.io/name: fr-gateway
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: fr-gateway
    subjects:
    - kind: ServiceAccount
      name: fr-gateway
      namespace: $NAMESPACE
    
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: fr-gateway
      namespace: $NAMESPACE
    spec:
      type: NodePort
      selector:
        app: fr-gateway
      ports:
        - name: http
          protocol: TCP
          port: 80
          nodePort: 32223
        - name: https
          protocol: TCP
          port: 5005
          nodePort: $HTTPS_NODE_PORT
    
    ---
    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: fr-gateway
      namespace: $NAMESPACE
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: fr-gateway
      strategy:
        type: Recreate
      template:
        metadata:
          namespace: $NAMESPACE
          labels:
            app: fr-gateway
        spec:
          serviceAccountName: fr-gateway
          containers:
          - image: $IMAGE
            imagePullPolicy: $PULL_POLICY
            name: fr-gateway
            #env:
            #  # Use secret in real usage
            #- name: MYSQL_ROOT_PASSWORD
            #  value: password
            ports:
            - containerPort: 80
              name: fr-gateway
            volumeMounts:
            - name: config-volume
              mountPath: /app/appsettings.Production.json
              subPath: appsettings.Production.json
            - name: secret-volume
              mountPath: /etc/cert
          imagePullSecrets:
            - name: $IMAGE_REGISTRY_SECRET_NAME
          volumes: 
          - name: config-volume
            configMap:
              name: fast-report-config
              items:
              - key: appsettings.Production.json
                path: appsettings.Production.json
          - name: secret-volume
            secret:
              secretName: $SECRET_VOLUME_NAME
    EOF
    

    Установка планировщика сервера отчётов

    IMAGE="${IMAGE_STORAGE}/moiotchety-corporate-server-scheduler:${IMAGE_TAG}"
    
    cat <<EOF | kubectl apply -n $NAMESPACE -f -
    apiVersion: v1
    kind: Service
    metadata:
      name: fr-scheduler
      namespace: $NAMESPACE
    spec:
      type: ClusterIP
      ports:
      - port: 80
      selector:
        app: fr-scheduler
    EOF
    
    cat <<EOF | kubectl apply -n $NAMESPACE -f -
    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: fr-scheduler
      namespace: $NAMESPACE
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: fr-scheduler
      strategy:
        type: Recreate
      template:
        metadata:
          namespace: $NAMESPACE
          labels:
            app: fr-scheduler
        spec:
          containers:
          - image: $IMAGE
            imagePullPolicy: $PULL_POLICY
            name: fr-scheduler
            #env:
            #  # Use secret in real usage
            #- name: MYSQL_ROOT_PASSWORD
            #  value: password
            ports:
            - containerPort: 80
              name: fr-scheduler
            volumeMounts:
            - name: config-volume
              mountPath: /app/appsettings.Production.json
            - name: secret-volume
              mountPath: /etc/cert
          imagePullSecrets:
            - name: $IMAGE_REGISTRY_SECRET_NAME
          volumes:
          - name: config-volume
            configMap:
              name: fast-report-config
          - name: secret-volume
            secret:
              secretName: $SECRET_VOLUME_NAME
    EOF
    

    Static Preview - сервис просмотра отчётов

    #!/bin/sh
    
    IMAGE="${IMAGE_STORAGE}/moiotchety-corporate-server-static-preview:${IMAGE_TAG}"
    
    cat <<EOF | kubectl apply -n $NAMESPACE -f -
    apiVersion: v1
    kind: Service
    metadata:
      name: fr-s-preview
      namespace: $NAMESPACE
    spec:
      type: ClusterIP
      ports:
      - port: 80
      selector:
        app: fr-s-preview
    ---
    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: fr-s-preview
      namespace: $NAMESPACE
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: fr-s-preview
      strategy:
        type: Recreate
      template:
        metadata:
          namespace: $NAMESPACE
          labels:
            app: fr-s-preview
        spec:
          containers:
          - image: $IMAGE
            resources:
              limits:
                memory: 200Mi
              requests:
                memory: 200Mi
            imagePullPolicy: $PULL_POLICY
            name: fr-s-preview
            #env:
            #  # Use secret in real usage
            #- name: MYSQL_ROOT_PASSWORD
            #  value: password
            ports:
            - containerPort: 80
              name: fr-s-preview
          imagePullSecrets:
            - name: $IMAGE_REGISTRY_SECRET_NAME
    EOF
    

    Сервис Homer

    #!/bin/sh
    
    IMAGE="${IMAGE_STORAGE}/moiotchety-corporate-server-homer:${IMAGE_TAG}"
    
    SECRET_VOLUME_NAME=corporate-volume-secret
    
    cat <<EOF | kubectl apply -n $NAMESPACE -f -
    apiVersion: v1
    kind: Service
    metadata:
      name: fr-homer
      namespace: $NAMESPACE
    spec:
      type: ClusterIP
      ports:
      - port: 80
      selector:
        app: fr-homer
    ---
    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: fr-homer
      namespace: $NAMESPACE
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: fr-homer
      strategy:
        type: Recreate
      template:
        metadata:
          namespace: $NAMESPACE
          labels:
            app: fr-homer
        spec:
          containers:
          - image: $IMAGE
            imagePullPolicy: $PULL_POLICY
            name: fr-homer
            #env:
            #  # Use secret in real usage
            #- name: MYSQL_ROOT_PASSWORD
            #  value: password
            ports:
            - containerPort: 80
              name: fr-homer
          imagePullSecrets:
            - name: $IMAGE_REGISTRY_SECRET_NAME
    EOF
    

    Сервис Backend

    #!/bin/sh
    
    
    IMAGE="${IMAGE_STORAGE}/moiotchety-corporate-server-backend:${IMAGE_TAG}"
    
    cat <<EOF | kubectl apply -n $NAMESPACE -f -
    apiVersion: v1
    kind: Service
    metadata:
      name: fr-backend
      namespace: $NAMESPACE
    spec:
      type: ClusterIP
      ports:
      - port: 80
      selector:
        app: fr-backend
    ---
    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: fr-backend
      namespace: $NAMESPACE
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: fr-backend
      strategy:
        type: Recreate
      template:
        metadata:
          namespace: $NAMESPACE
          labels:
            app: fr-backend
        spec:
          containers:
          - image: $IMAGE
            resources:
              limits:
                memory: 400Mi
              requests:
                memory: 400Mi
            imagePullPolicy: $PULL_POLICY
            name: fr-backend
            env:
            - name: Serilog__Using__0
              value: FastReport.Cloud.Base.Mvc
            ports:
            - containerPort: 80
              name: fr-backend
            volumeMounts:
            - name: config-volume
              mountPath: /app/appsettings.Production.json
              subPath: appsettings.Production.json
          imagePullSecrets:
            - name: $IMAGE_REGISTRY_SECRET_NAME
          volumes: 
          - name: config-volume
            configMap:
              name: fast-report-config
              items:
              - key: appsettings.Production.json
                path: appsettings.Production.json
    EOF
    

    Сервис Designer - онлайн дизайнер отчётов

    #!/bin/sh
    
    IMAGE="${IMAGE_STORAGE}/moiotchety-corporate-server-designer:${IMAGE_TAG}"
    
    cat <<EOF | kubectl apply -n $NAMESPACE -f -
    apiVersion: v1
    kind: Service
    metadata:
      name: fr-designer
      namespace: $NAMESPACE
    spec:
      type: ClusterIP
      ports:
      - port: 80
      selector:
        app: fr-designer
    ---
    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: fr-designer
      namespace: $NAMESPACE
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: fr-designer
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: fr-designer
          namespace: $NAMESPACE
        spec:
          containers:
          - image: $IMAGE
            imagePullPolicy: $PULL_POLICY
            name: fr-designer
            #env:
            #  # Use secret in real usage
            #- name: MYSQL_ROOT_PASSWORD
            #  value: password
            ports:
            - containerPort: 80
              name: fr-designer
            volumeMounts:
            - name: config-volume
              mountPath: /app/appsettings.Production.json
              subPath: appsettings.Production.json
            - name: secret-volume
              mountPath: /etc/cert
          imagePullSecrets:
            - name: $IMAGE_REGISTRY_SECRET_NAME
          volumes: 
          - name: config-volume
            configMap:
              name: fast-report-config
              items:
              - key: appsettings.Production.json
                path: appsettings.Production.json
          - name: secret-volume
            secret:
              secretName: $SECRET_VOLUME_NAME
    EOF
    

    Сервис шрифтов

    #!/bin/sh
    
    IMAGE="${IMAGE_STORAGE}/moiotchety-corporate-server-fonts:${IMAGE_TAG}"
    
    
    cat <<EOF | kubectl apply -n $NAMESPACE -f -
    apiVersion: v1
    kind: Service
    metadata:
      name: fr-fonts
      namespace: $NAMESPACE
    spec:
      type: ClusterIP
      ports:
      - port: 80
      selector:
        app: fr-fonts
    ---
    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: fr-fonts
      namespace: $NAMESPACE
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: fr-fonts
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: fr-fonts
          namespace: $NAMESPACE
        spec:
          containers:
          - image: $IMAGE
            resources:
              limits:
                memory: 200Mi
              requests:
                memory: 200Mi
            imagePullPolicy: $PULL_POLICY
            name: fr-fonts
            env:
            - name: Serilog__Using__0
              value: FastReport.Cloud.MvcExtentions
            ports:
            - containerPort: 80
              name: fr-fonts
            volumeMounts:
            - name: config-volume
              mountPath: /app/appsettings.Production.json
              subPath: appsettings.Production.json
          imagePullSecrets:
            - name: $IMAGE_REGISTRY_SECRET_NAME
          volumes: 
          - name: config-volume
            configMap:
              name: fast-report-config
              items:
              - key: appsettings.Production.json
                path: appsettings.Production.json
    EOF
    

    Сервис облачного приложения

    #!/bin/sh
    
    IMAGE="${IMAGE_STORAGE}/moiotchety-corporate-server-app:${IMAGE_TAG}"
    
    cat <<EOF | kubectl apply -n $NAMESPACE -f -
    apiVersion: v1
    kind: Service
    metadata:
      name: fr-app
      namespace: $NAMESPACE
    spec:
      type: ClusterIP
      ports:
      - port: 80
      selector:
        app: fr-app
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: fr-app
      namespace: $NAMESPACE
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: fr-app
      strategy:
        type: Recreate
      template:
        metadata:
          namespace: $NAMESPACE
          labels:
            app: fr-app
        spec:
          containers:
          - image: $IMAGE
            imagePullPolicy: $PULL_POLICY
            name: fr-app
            #env:
            #  # Use secret in real usage
            #- name: MYSQL_ROOT_PASSWORD
            #  value: password
            ports:
            - containerPort: 80
              name: fr-app
          imagePullSecrets:
            - name: $IMAGE_REGISTRY_SECRET_NAME
    EOF
    

    Сервис построения отчётов

    #!/bin/sh
    
    IMAGE="${IMAGE_STORAGE}/moiotchety-corporate-server-workercore:${IMAGE_TAG}"
    
    cat <<EOF | kubectl apply -n $NAMESPACE -f -
    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: fr-workercore
      namespace: $NAMESPACE
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: fr-workercore
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: fr-workercore
          namespace: $NAMESPACE
        spec:
          containers:
          - image: $IMAGE
            imagePullPolicy: $PULL_POLICY
            name: fr-workercore
            volumeMounts:
            - name: config-volume
              mountPath: /app/appsettings.Production.json
              subPath: appsettings.Production.json
            - name: secret-volume
              mountPath: /etc/cert
          imagePullSecrets:
            - name: $IMAGE_REGISTRY_SECRET_NAME
          volumes: 
          - name: config-volume
            configMap:
              name: fast-report-config
              items:
              - key: appsettings.Production.json
                path: appsettings.Production.json
          - name: secret-volume
            secret:
              secretName: $SECRET_VOLUME_NAME
    EOF
    

    После выполнения всех вышеописанных скриптов установка сервера отчётов закончена. Для того чтобы проверить успешность установки и начать работу, зайдите с помощью браузера на сервер отчётов, используя доменное имя, указанное в переменной HOST при настройке nginx-ingress и в появившемся окне введите следующие данные:

    Имя пользователя: admin@example.com
    Пароль: admin

    Приятной работы!

    Вверх 2026.1.0 © 1998-2025 ООО «Быстрые отчеты»