Перейти к содержанию

Установка сервиса

OSA Proxy Go использует конфигурационный файл osa-proxy.yml. По умолчанию сервис ищет его в рабочей директории, но путь можно передать первым аргументом запуска или через переменную окружения OSA_PROXY_CONFIG_PATH.

Docker

Пример запуска контейнера с внешним конфигурационным файлом:

docker run -d \
  --name osa-proxy \
  -p 8080:8080 \
  -e OSA_PROXY_CONFIG_PATH=/etc/osa-proxy/osa-proxy.yml \
  -v /path/to/osa-proxy.yml:/etc/osa-proxy/osa-proxy.yml:ro \
  <registry-url>/osa-proxy:<tag>

Проверка доступности:

curl http://localhost:8080/healthz

Docker Compose

services:
  osa-proxy:
    image: <registry-url>/osa-proxy:<tag>
    container_name: osa-proxy
    ports:
      - "8080:8080"
    env_file:
      - .env
    environment:
      OSA_PROXY_CONFIG_PATH: /etc/osa-proxy/osa-proxy.yml
    volumes:
      - ./osa-proxy.yml:/etc/osa-proxy/osa-proxy.yml:ro
    healthcheck:
      test: ["CMD", "/app/osa-proxy", "healthcheck"]
      interval: 30s
      timeout: 3s
      retries: 3
      start_period: 5s

Если включен Redis-кэш вердиктов, добавьте Redis в Compose-файл и укажите его адрес в cache.redis.address.

.env файл

При запуске через Docker Compose файл .env передается в контейнер только если он указан в env_file. Эти переменные можно использовать:

  • напрямую как переменные окружения процесса;
  • в osa-proxy.yml через плейсхолдеры вида ${VAR_NAME:default_value}.

В примере Compose путь к конфигурации задается отдельно через environment.OSA_PROXY_CONFIG_PATH, поэтому не дублируйте его в .env.

Пример .env:

CODESCORING_URL=https://codescoring.example.com
CODESCORING_TOKEN=
WORK_MODE=strict_wait
OSA_PROXY_URL=https://osa-proxy.example.com
LOG_LEVEL=info

CACHE_ENABLED=false
REDIS_ADDRESS=redis:6379
REDIS_PASSWORD=
REDIS_DB=0

Пример использования переменных в osa-proxy.yml:

codescoring:
  url: ${CODESCORING_URL:https://codescoring.example.com}
  token: ${CODESCORING_TOKEN:}
  work-mode: ${WORK_MODE:strict_wait}
  osa-proxy-url: ${OSA_PROXY_URL:http://localhost:8080}

cache:
  judge:
    enabled: ${CACHE_ENABLED:false}
  redis:
    address: ${REDIS_ADDRESS:redis:6379}
    password: ${REDIS_PASSWORD:}
    db: ${REDIS_DB:0}

logging:
  level: ${LOG_LEVEL:info}

Для секретов используйте .env, а не literal-значения в osa-proxy.yml.

Прокси для исходящих HTTP-запросов

OSA Proxy Go использует стандартные HTTP-клиенты Go. Они автоматически учитывают переменные окружения HTTP_PROXY, HTTPS_PROXY и NO_PROXY; также можно задавать lowercase-варианты http_proxy, https_proxy, no_proxy.

Пример .env для корпоративного proxy:

HTTP_PROXY=http://proxy.company.example:3128
HTTPS_PROXY=http://proxy.company.example:3128
NO_PROXY=localhost,127.0.0.1,::1,redis,codescoring.example.com,.svc,.cluster.local

NO_PROXY должен включать адреса, к которым сервис должен ходить напрямую: локальные адреса, Redis, внутренние Kubernetes/Docker DNS-имена, внутренние домены CodeScoring или package registry, если они не должны проходить через корпоративный proxy.

Helm

Минимальный пример values.yaml:

image:
  repository: <registry-url>/osa-proxy
  tag: "<tag>"

service:
  type: ClusterIP
  port: 8080

probes:
  enabled: true
  path: /healthz

ingress:
  enabled: true
  className: nginx
  hosts:
    - host: osa-proxy.example.com
      paths:
        - path: /
          pathType: Prefix

config:
  create: true
  key: osa-proxy.yml
  mountPath: /etc/osa-proxy/osa-proxy.yml
  content: |
    codescoring:
      url: https://codescoring.example.com
      token: "<token>"
      work-mode: strict_wait
      osa-proxy-url: https://osa-proxy.example.com
      block-on-codescoring-errors: true
      remove-blocked-versions: true
      block-status-code: 403

    npm:
      enabled: true
      repository:
        - name: npm
          registry: https://registry.npmjs.org
          scan-manifest: true
          scan-package: true
          work-mode: strict_wait
          url-encoded-config: true

    logging:
      level: info

После установки проверьте endpoints:

curl https://osa-proxy.example.com/healthz
curl https://osa-proxy.example.com/metrics
Страница была полезна?